反向传播是一种高效计算神经网络中损失函数对所有权重参数梯度的算法。它的核心目的是回答一个问题,为了减小模型的预测误差,我应该如何微调网络中的每一个权重?

星博讯 AI基础认知 1
  • 反向:计算梯度的方向是从网络的输出层向输入层逐层回溯
  • 传播:将最终的预测误差沿着网络连接分配(传播) 给每一个贡献了该误差的权重。

为什么需要反向传播?

想象一个拥有百万个权重的深度网络,如果使用最笨的“有限差分法”(给每个权重加一个微小扰动,看损失变化),计算一次梯度就需要进行百万+1次前向传播,这在计算上是不可行的。

反向传播是一种高效计算神经网络中损失函数对所有权重参数梯度的算法。它的核心目的是回答一个问题,为了减小模型的预测误差,我应该如何微调网络中的每一个权重?-第1张图片-星博讯网络科技知识-SEO优化技巧|AI知识科普|互联网行业干货大全

反向传播利用链式法则,通过一次前向传播和一次反向传播,就能高效地计算出损失函数对所有权重的梯度,计算复杂度大致仅为两次前向传播。


基本原理分解(三步走)

我们结合一个简单的三层网络(输入层、隐藏层、输出层)来看。

前向传播

这是基础,输入数据通过网络层层传递,得到最终预测。

  1. 输入 x,乘以权重 W1,加上偏置 b1,得到隐藏层输入 z1 = W1*x + b1
  2. z1 应用激活函数(如Sigmoid、ReLU),得到隐藏层激活值 a1 = σ(z1)
  3. a1 作为下一层输入,乘以权重 W2,加上偏置 b2,得到输出层输入 z2 = W2*a1 + b2
  4. z2 应用输出层激活函数(如Softmax用于分类),得到最终预测 y_pred = f(z2)
  5. 计算损失函数 L,比较 y_pred 和真实标签 y_true(如交叉熵损失、均方误差)。

至此,我们知道了网络的“表现”有多差(损失值L)。

反向传播(误差反向流动)

这是关键,我们利用链式法则,从后往前计算损失对每个参数的梯度。

核心思想:从损失函数开始,向后逐层询问“谁影响了你的结果?你该为它的误差负多少责任?”。

计算输出层梯度:

  • 首先计算损失 L 对网络最终输出 y_pred 的梯度:∂L/∂y_pred,这取决于损失函数。
  • 然后计算 y_pred 对其输入 z2 的梯度:∂y_pred/∂z2,这取决于输出层激活函数。
  • 根据链式法则,损失对 z2 的梯度为: δ2 = ∂L/∂z2 = (∂L/∂y_pred) * (∂y_pred/∂z2) 这个 δ2 通常被称为输出层的“误差项”或“δ项”。

计算隐藏层参数 W2b2 的梯度:

  • z2 = W2 * a1 + b2
    • ∂L/∂W2 = δ2 * ∂z2/∂W2 = δ2 * a1.T (注意维度,a1.Ta1 的转置)
    • ∂L/∂b2 = δ2 * ∂z2/∂b2 = δ2 (因为 ∂z2/∂b2 = 1现在我们已经知道如何更新输出层的权重和偏置了。

将误差继续反向传播到隐藏层:

  • 我们需要计算损失对隐藏层激活值 a1 的梯度∂L/∂a1 = δ2 * ∂z2/∂a1 = W2.T * δ2
  • 然后计算 a1 对其输入 z1 的梯度:∂a1/∂z1 = σ'(z1),即激活函数的导数。
  • 再次使用链式法则,得到损失对 z1 的梯度(隐藏层的误差项)δ1 = ∂L/∂z1 = (∂L/∂a1) * (∂a1/∂z1) = (W2.T * δ2) ⊙ σ'(z1) 表示逐元素相乘(Hadamard积)。

计算输入层参数 W1b1 的梯度:

  • z1 = W1 * x + b1
    • ∂L/∂W1 = δ1 * ∂z1/∂W1 = δ1 * x.T
    • ∂L/∂b1 = δ1 * ∂z1/∂b1 = δ1

至此,我们得到了损失函数 L 对网络中所有权重 (W1, b1, W2, b2) 的梯度 (∂L/∂W1, ∂L/∂b1, ∂L/∂W2, ∂L/∂b2)

参数更新(梯度下降)

利用计算出的梯度,使用优化算法(如随机梯度下降SGD)更新参数: W = W - η * ∂L/∂W b = b - η * ∂L/∂b η 是学习率,控制每次更新的步长。

更新后,网络在新的参数下,预测误差(损失)有望减小。


关键点总结与图示

graph LR
    A[输入 x] --> B[前向传播<br>计算预测 y_pred 和 损失 L]
    B --> C{反向传播<br>核心:链式法则}
    C --> D[1. 计算输出层梯度 δ2]
    D --> E[2. 计算 W2/b2 的梯度]
    D --> F[3. 误差传至隐藏层, 计算 δ1]
    F --> G[4. 计算 W1/b1 的梯度]
    E & G --> H[参数更新<br>W = W - η * ∂L/∂W]
    H --> I[重复迭代<br>直到模型收敛]
  1. 计算图与链式法则:反向传播可以看作在由计算操作(加法、乘法、激活函数)构成的图上,应用链式法则进行求导。
  2. 本地性:每个神经元或层在反向传播时,只需要来自后一层(更靠近输出层)的“误差项” δ 和其在前向传播时自己存储的中间变量(如 a1, z1),就能计算自己的梯度并向前传递误差,这使得算法非常模块化和高效。
  3. 重用前向传播结果:反向传播中大量使用前向传播计算并保存的中间值(如 a1, z1),避免了重复计算。
  4. 梯度下降的引擎:反向传播本身只计算梯度,不更新参数,它是梯度下降优化算法的“引擎”,为其提供方向指导。

一个生动的比喻

把神经网络想象成一个复杂的多层流水线,最终产品(预测)有一个质量检测得分(损失函数值)。

  • 前向传播:是生产流程,原材料(输入数据)经过每一道工序(网络层)的处理,最终产出产品。
  • 反向传播:是质量问题溯源,质检员(损失函数)发现产品不合格(误差大),他并不直接知道第一道工序哪里出了问题,而是:
    1. 先检查最后一道工序(输出层)的问题和责任(δ2)。
    2. 然后问最后一道工序:“你的问题,有多少是上一道工序(隐藏层)送给你的半成品造成的?”(计算 ∂L/∂a1)。
    3. 接着去问责上一道工序,根据它接收的原料和加工记录,确定它的责任(δ1)。
    4. 如此层层回溯,直到找到第一道工序(输入层)的责任。
  • 参数更新:根据每道工序的责任大小(梯度),调整该工序的机器设置(权重),使下次生产时质量更好。

希望这个解释能帮助你透彻地理解反向传播的精髓!

标签: 反向传播 梯度

抱歉,评论功能暂时关闭!

微信咨询Xboxun188
QQ:1320815949
在线时间
10:00 ~ 2:00