Backpropagation

分类: 深度学习基础

Backpropagation

定义

反向传播是用于计算神经网络中损失函数对各层参数梯度的核心算法,通过链式法则从输出层向输入层逐层反向传递误差信号,使得梯度下降优化成为可能。

数学形式

对于网络中第 ll 层的参数 W(l)W^{(l)},损失函数 LL 对其梯度通过链式法则计算:

LW(l)=Lz(l)z(l)W(l)=δ(l)(a(l1))\frac{\partial L}{\partial W^{(l)}} = \frac{\partial L}{\partial z^{(l)}} \cdot \frac{\partial z^{(l)}}{\partial W^{(l)}} = \delta^{(l)} \cdot (a^{(l-1)})^\top

其中误差信号 δ(l)\delta^{(l)} 从后一层反向传播:

δ(l)=((W(l+1))δ(l+1))σ(z(l))\delta^{(l)} = \left( (W^{(l+1)})^\top \delta^{(l+1)} \right) \odot \sigma'(z^{(l)})

z(l)=W(l)a(l1)+b(l)z^{(l)} = W^{(l)} a^{(l-1)} + b^{(l)}: 第 ll 层的预激活值

a(l)=σ(z(l))a^{(l)} = \sigma(z^{(l)}): 第 ll 层的激活值

σ\sigma': 激活函数的导数

δ(l)\delta^{(l)}: 第 ll 层的误差项(loss 对 z(l)z^{(l)} 的梯度)

核心要点

本质是链式法则在计算图上的系统化应用,时间复杂度与前向传播同阶 O(N)O(N)NN 为参数量)

前向传播计算各层激活值并缓存中间结果,反向传播利用缓存计算梯度——以空间换时间

梯度消失问题:深层网络中梯度经过多次乘法后趋近于零,LSTM 和 残差连接(ResNet)分别在序列和深度维度缓解此问题

梯度爆炸问题:通过梯度裁剪(gradient clipping)控制梯度范数上界

现代深度学习框架(PyTorch、TensorFlow)通过自动微分(autograd)自动实现反向传播,无需手动推导

反向传播通过时间(BPTT)是其在 RNN 上的扩展,将循环展开为计算图后应用标准 BP

代表工作

Rumelhart, Hinton & Williams (1986): “Learning representations by back-propagating errors” (Nature),使 BP 算法广为人知

Werbos (1974): 博士论文中最早提出将链式法则用于神经网络训练

Baydin et al. (2018): “Automatic Differentiation in Machine Learning: a Survey”,全面综述自动微分

相关概念

RNN

LSTM

Softmax

Pretraining

Fine-tuning