博客: blog.shinelee.me | 博客园 | CSDN
前向传播与反向传播回顾
神经网络的训练过程可以简化成以下步骤,
- 输入预处理(feature scaling等)
- 初始化网络weight和bias
- 前向传播,得到网络输出
- 计算损失函数,得到当前损失
- 反向传播,根据链式法则,逐层回传得到损失函数对当前参数的偏导,根据梯度下降算法对当前参数进行更新
- 重复步骤3 4 5,直到损失不再减小,即收敛
一个简单的前向传播和反向传播的示意图如下,线性组合和非线性激活交替进行,线性组合层可以为全连接层或卷积层等,图片来自链接,
梯度下降算法的参数更新公式为,
W ( t + 1 ) = W ( t ) − η d C d W W(t+1)=W(t)-\eta \frac{d C}{d W} W(t+1)=W(t)−ηdWdC
其中 C = J ( W ) C=J(W) C=J(W)为损失函数,即通过参数的偏导对参数进行更新。反向传播时,由链式法则,偏导反向回传,逐层计算损失函数对当前参数的偏导。对某个参数的偏导为一串因子的乘积,因子依次为损失函数对网络输出的偏导、激活函数的偏导、线性组合的偏导、激活函数的偏导、线性组合的偏导……如下面所示(来自链接),这里,损失为二分之LMS,用 C C C表示, z z z为线性组合的输出(激活层的输入), a a a为激活层的输出(线性组合的输入),
仔细观察上式,偏导为一串因子的乘积,因子中的每一项对乘积结果都有影响,有几点需要注意,回传时,
- 每个权重的偏导中含有一个共同的因子项,为损失函数对网络输出的偏导
- 每经过一个激活层,就有一个激活函数偏导作为因子项,如 σ ′ ( z L ) = ∂ a L ∂ z L \sigma'(z^L)=\frac{\partial a^L}{\partial z^L} σ′(zL)