跳转至

3 Backpropagation and Neural Network

文本统计:约 895 个字

3.1 Backpropagation

关于 Backpropagation,这块内容比较简单,就是利用计算图和链式法则,快速地求出函数对于每个变量的偏导,下面讲解一个例子,首先我们向前传播,将每个部分得到的值算出来

然后我们逐步往前求每个部分关于 f 的梯度,每一次 backpropagation,先求出上游的梯度,然后乘上本地梯度,就可以得到相应部分的梯度。

最后得到的结果如下图所示

同时我们可以对其做一定的简化,可以将计算图进行缩减,也就是说计算图并不是唯一的

Patterns in gradient flow

上述部分讨论的是向量到标量的梯度求解,接下来我们要讨论向量到向量的梯度求解,相应的梯度就是一个雅可比矩阵

雅可比矩阵

对于一个从 \(\mathbb{R}^n\) 映射到 \(\mathbb{R}^m\) 的向量值函数 \(\mathbf{f}: \mathbb{R}^n \to \mathbb{R}^m\),定义为:

\[ \mathbf{f}(\mathbf{x}) = \begin{bmatrix} f_1(x_1, ..., x_n) \\ f_2(x_1, ..., x_n) \\ \vdots \\ f_m(x_1, ..., x_n) \end{bmatrix} \]

如果 \(\mathbf{f}\) 在点 \(\mathbf{x}\) 处所有偏导数都存在,则其雅可比矩阵 \(\mathbf{J_f}\) 是一个 \(m \times n\) 的矩阵,其元素是函数分量对输入变量的偏导数:

\[ \mathbf{J_f}(\mathbf{x}) = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_2}{\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \frac{\partial f_m}{\partial x_2} & \cdots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} \]

简记为 \(\mathbf{J_f} = \left[ \frac{\partial f_i}{\partial x_j} \right]_{m \times n}\)

直观理解:雅可比矩阵是多元函数 \(\mathbf{f}\) 在点 \(\mathbf{x}\) 处的最佳线性近似(导数的推广)。它描述了输入空间的小变化 \(\Delta \mathbf{x}\) 如何被映射到输出空间的小变化 \(\Delta \mathbf{y} \approx \mathbf{J_f} \Delta \mathbf{x}\)

Example

由于这里每个y只与相应的x有关,所以这里的雅可比矩阵是对角矩阵

接着我们讨论一下矩阵到矩阵的情况(这里的算子是矩阵乘法),如果我们把矩阵看成一个向量去得到雅可比矩阵来做的话,相应的雅可比矩阵会非常巨大,存储非常困难。考虑到矩阵乘法中,结果的每一项并没有用到所有输入项的元素,所以相应的雅可比矩阵其实是非常稀疏的,所以我们可以重新考虑这个问题

对于 x 中的每一行,都会影响 y 中的每一行,

\[ \frac{\partial L}{\partial x_{n,d}} = \sum_{m} \frac{\partial L}{\partial y_{n,m}} \frac{\partial y_{n,m}}{\partial x_{n,d}} = \sum_{m} \frac{\partial L}{\partial y_{n,m}} w_{d,m} \]

于是相应的公式即为

\[ \frac{\partial L}{\partial x} = \left( \frac{\partial L}{\partial y} \right) w^T \]
\[ \frac{\partial L}{\partial w} = x^T \left( \frac{\partial L}{\partial y} \right) \]

这个公式也比较好记,只要形状对上了就可以了

3.2 Neural Network

我们之前使用的仅仅只是使用线性得分函数来将输入映射到输出分数,神经网络加入了非线性激活函数,进而构建出更复杂的决策边界。

常用的一些激活函数

一个简单的神经网络结构像下图所示

这被称为全连接层,与后面学习的卷积神经网络形成区别

评论区

对你有帮助的话请给我个赞和 star => GitHub stars
欢迎跟我探讨!!!