核心思想:链式法则
反向传播(Backpropagation) 的本质是微积分中的链式法则(Chain Rule) 的递归应用。它的目标是:计算损失函数(Loss Function)关于神经网络中每一个参数(权重和偏置)的梯度。这些梯度指明了如何调整参数才能使损失下降。
一个简化的神经网络示例
为了讲解,我们使用一个极其简单的三层网络:
- 输入层(Input Layer): 一个神经元,输入 ,偏置
- 隐藏层(Hidden Layer): 一个神经元,权重 ,偏置 ,激活函数为
- 输出层(Output Layer): 一个神经元,权重 ,激活函数为
- 真实值(True Value):
- 损失函数(Loss Function): (例如均方误差)
其前向传播(Forward Pass)过程如下:
- (隐藏层的输出)
- (网络的预测输出)
我们的目标是计算损失 关于所有四个参数 的梯度: 。
反向传播的四个关键步骤
反向传播从输出层开始,反向计算每一层的梯度。
1. 计算输出层参数的梯度 ()
应用链式法则:
-
- 所以:
-
- 所以:
定义输出层的误差信号:
梯度可简写为:
2. 将误差反向传播到隐藏层
计算隐藏层参数的梯度 ()。误差需要通过输出层传回隐藏层。
-
- 所以:
观察发现,前面部分就是 !
所以上式可改写为:
定义隐藏层的误差信号:
梯度可简写为:
- (因为 )
3. 总结模式与递归公式
通过计算,可以总结出一个清晰的模式:
-
从输出层开始:计算输出层的误差信号 。
-
反向传播误差:对于任意层 (非输入层),其误差信号 可以由后一层的误差信号 计算得到:
- 其中 是连接层 和层 的权重矩阵, 表示逐元素相乘(Hadamard product)。这就是误差的反向传播。
-
计算梯度:一旦有了某层的误差信号 ,计算该层参数的梯度就非常简单:
- (权重梯度)
- (偏置梯度)
- 其中 是前一层(第 层)的输出。
4. 更新参数(梯度下降)
在得到所有参数的梯度后,使用梯度下降算法来更新参数:
其中 是学习率(Learning Rate)。
核心概念:为什么叫“反向”传播?
- 前向传播(Forward Pass):数据从输入层流向输出层,计算预测值和损失。计算并存储所有中间变量(),这些是反向传播计算梯度所必需的。
- 反向传播(Backward Pass):误差信号 从输出层开始,利用链式法则,逐层反向流动,依次计算出每一层参数的梯度。
总结
反向传播计算梯度的过程可以概括为:
- 进行前向传播,计算并保存每一层的线性输出()和激活输出()。
- 从输出层开始,计算其误差信号 。
- 递归地将误差信号反向传播到前面的每一层,计算每一层的 。
- 利用本层的 和前一层保存的激活输出 ,计算本层参数的梯度。
- 使用计算出的梯度更新所有参数。
这个过程高效地利用了一次前向传播存储的结果,通过链式法则避免了重复计算,使得训练非常深的神经网络成为可能。它是现代深度学习得以发展的基石算法。