前向传播,反向传播和神经网络初始化

1.向前传播

前向传播(forward propagation或forward pass) 指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。

假设输入样本是 x∈Rd, 并且我们的隐藏层不包括偏置项。 这里的中间变量是:
z=W(1)x, \mathbf{z}= \mathbf{W}^{(1)} \mathbf{x}, z=W(1)x,
其中W(1)∈Rh×d 是隐藏层的权重参数。 将中间变量z∈Rh通过激活函数ϕ后, 我们得到长度为h的隐藏激活向量:
h=ϕ(z). \mathbf{h}= \phi (\mathbf{z}). h=ϕ(z).
隐藏变量h也是一个中间变量。 假设输出层的参数只有权重W(2)∈Rq×h, 我们可以得到输出层变量,它是一个长度为q的向量
o=W(2)h. \mathbf{o}= \mathbf{W}^{(2)} \mathbf{h}. o=W(2)h.
假设损失函数为l,样本标签为y,我们可以计算单个数据样本的损失项,
L=l(o,y). L = l(\mathbf{o}, y). L=l(o,y).
根据L2正则化的定义,给定超参数λ,正则化项为
s=λ2(∥W(1)∥F2+∥W(2)∥F2), s = \frac{\lambda}{2} \left(\|\mathbf{W}^{(1)}\|_F^2 + \|\mathbf{W}^{(2)}\|_F^2\right), s=2λ(W(1)F2+W(2)F2),
其中矩阵的Frobenius范数是将矩阵展平为向量后应用的L2范数。 最后,模型在给定数据样本上的正则化损失为:
J=L+s. J = L + s. J=L+s.
将J称为目标函数(objective function)。
在这里插入图片描述

2.反向传播

简单网络的参数是 W(1)和W(2)。 反向传播的目的是计算梯度∂J/∂W(1)和 ∂J/∂W(2)。 为此,我们应用链式法则,依次计算每个中间变量和参数的梯度。 计算的顺序与前向传播中执行的顺序相反,因为我们需要从计算图的结果开始,并朝着参数的方向努力。第一步是计算目标函数J=L+s相对于损失项L和正则项s的梯度。

J 是目标函数,由损失函数 L 和正则化项 s 组成。因为 s 不直接依赖于 o,所以 Jo 的梯度就是 Lo 的梯度。
∂J∂o=prod(∂J∂L,∂L∂o)=∂L∂o∈Rq. \frac{\partial J}{\partial \mathbf{o}} = \text{prod}\left(\frac{\partial J}{\partial L}, \frac{\partial L}{\partial \mathbf{o}}\right) = \frac{\partial L}{\partial \mathbf{o}} \in \mathbb{R}^q. oJ=prod(LJ,oL)=oLRq.
计算正则化项对参数的梯度:
∂s∂W(1)=λW(1)  and  ∂s∂W(2)=λW(2). \frac{\partial s}{\partial \mathbf{W}^{(1)}} = \lambda \mathbf{W}^{(1)} \; \text{and} \; \frac{\partial s}{\partial \mathbf{W}^{(2)}} = \lambda \mathbf{W}^{(2)}. W(1)s=λW(1)andW(2)s=λW(2).

计算 J 对输出层参数 w(2) 的梯度:
∂J∂W(2)=prod(∂J∂o,∂o∂W(2))+prod(∂J∂s,∂s∂W(2))=∂J∂oh⊤+λW(2). \frac{\partial J}{\partial \mathbf{W}^{(2)}}= \text{prod}\left(\frac{\partial J}{\partial \mathbf{o}}, \frac{\partial \mathbf{o}}{\partial \mathbf{W}^{(2)}}\right) + \text{prod}\left(\frac{\partial J}{\partial s}, \frac{\partial s}{\partial \mathbf{W}^{(2)}}\right)= \frac{\partial J}{\partial \mathbf{o}} \mathbf{h}^\top + \lambda \mathbf{W}^{(2)}. W(2)J=prod(oJ,W(2)o)+prod(sJ,W(2)s)=oJh+λW(2).
计算j 对隐藏层激活 h的梯度:
∂J∂h=prod(∂J∂o,∂o∂h)=W(2)⊤∂J∂o. \frac{\partial J}{\partial \mathbf{h}} = \text{prod}\left(\frac{\partial J}{\partial \mathbf{o}}, \frac{\partial \mathbf{o}}{\partial \mathbf{h}}\right) = {\mathbf{W}^{(2)}}^\top \frac{\partial J}{\partial \mathbf{o}}. hJ=prod(oJ,ho)=W(2)oJ.
计算J对隐藏层变量z 的梯度,h=ϕ(z),激活函数 ϕ 是逐元素应用的,所以 ∂zh=ϕ′(z)。因此,Jz 的梯度是 ∂hJϕ′(z)。
∂J∂z=prod(∂J∂h,∂h∂z)=∂J∂h⊙ϕ′(z). \frac{\partial J}{\partial \mathbf{z}} = \text{prod}\left(\frac{\partial J}{\partial \mathbf{h}}, \frac{\partial \mathbf{h}}{\partial \mathbf{z}}\right) = \frac{\partial J}{\partial \mathbf{h}} \odot \phi'\left(\mathbf{z}\right). zJ=prod(hJ,zh)=hJϕ(z).
计算 \J对隐藏层参数W(1) 的梯度:
∂J∂W(1)=prod(∂J∂z,∂z∂W(1))+prod(∂J∂s,∂s∂W(1))=∂J∂zx⊤+λW(1). \frac{\partial J}{\partial \mathbf{W}^{(1)}} = \text{prod}\left(\frac{\partial J}{\partial \mathbf{z}}, \frac{\partial \mathbf{z}}{\partial \mathbf{W}^{(1)}}\right) + \text{prod}\left(\frac{\partial J}{\partial s}, \frac{\partial s}{\partial \mathbf{W}^{(1)}}\right) = \frac{\partial J}{\partial \mathbf{z}} \mathbf{x}^\top + \lambda \mathbf{W}^{(1)}. W(1)J=prod(zJ,W(1)z)+prod(sJ,W(1)s)=zJx+λW(1).

更多推荐