反向传播算法原理与计算步骤
字数 1388 2025-11-03 08:33:38
反向传播算法原理与计算步骤
问题描述
反向传播是训练神经网络的核心算法,用于高效计算损失函数对网络参数的梯度。通过链式法则,算法从输出层向输入层逐层传播误差信号,计算每个权重和偏置的梯度,为梯度下降优化提供基础。
1. 前向传播过程
假设神经网络有L层,第l层的加权输入为z^(l) = W^(l)a^(l-1) + b^(l),激活输出为a^(l) = σ(z^(l))(σ为激活函数)。输入a^(0)=x,输出a^(L)=ŷ。
- 计算步骤:
- 输入层:a^(0) = x
- 隐藏层:对l=1到L-1,计算z^(l)=W^(l)a^(l-1)+b^(l),a^(l)=σ(z^(l))
- 输出层:z^(L)=W^(L)a^(L-1)+b^(L),a^(L)=ŷ(如Softmax输出)
- 损失函数:例如交叉熵损失J(ŷ, y) = -Σy_i log(ŷ_i)
2. 误差项的定义与输出层计算
定义第l层的误差项δ^(l) = ∂J/∂z^(l),表示损失对加权输入的灵敏度。
- 输出层误差(链式法则):
δ^(L) = ∂J/∂z^(L) = (∂J/∂a^(L)) ⊙ (∂a^(L)/∂z^(L))
以Softmax+交叉熵为例:∂J/∂a^(L) = (ŷ - y)(推导略),∂a^(L)/∂z^(L)为Softmax雅可比矩阵,但可直接简化为δ^(L) = ŷ - y。
3. 反向传播误差
通过链式法则将误差从l+1层传递到l层:
δ^(l) = ( (W^(l+1))^T δ^(l+1) ) ⊙ σ'(z^(l))
- 推导过程:
z^(l+1) = W^(l+1)a^(l) + b^(l+1),且a^(l)=σ(z^(l))
→ ∂J/∂z^(l) = (∂J/∂z^(l+1)) · (∂z^(l+1)/∂a^(l)) · (∂a^(l)/∂z^(l))
→ ∂z^(l+1)/∂a^(l) = W^(l+1),∂a^(l)/∂z^(l) = diag(σ'(z^(l)))
→ δ^(l) = (W^(l+1))^T δ^(l+1) ⊙ σ'(z^(l))
4. 参数梯度计算
利用误差项δ^(l)计算权重和偏置的梯度:
- 权重梯度:∂J/∂W^(l) = δ^(l) (a^(l-1))^T
推导:z^(l) = W^(l)a^(l-1) + b^(l) → ∂J/∂W^(l) = ∂J/∂z^(l) · ∂z^(l)/∂W^(l) = δ^(l) (a^(l-1))^T - 偏置梯度:∂J/∂b^(l) = δ^(l)
推导:∂z^(l)/∂b^(l) = I → ∂J/∂b^(l) = δ^(l)
5. 算法步骤总结
- 前向传播:计算各层z^(l)和a^(l)
- 计算输出误差:δ^(L) = ŷ - y(以分类任务为例)
- 反向传播误差:对l=L-1到1,计算δ^(l) = (W^(l+1))^T δ^(l+1) ⊙ σ'(z^(l))
- 计算梯度:∂J/∂W^(l) = δ^(l)(a^(l-1))^T,∂J/∂b^(l) = δ^(l)
- 更新参数:使用梯度下降法调整W和b
关键点
- 链式法则实现梯度的高效计算,避免重复计算
- 需保存前向传播的中间结果(z^(l)和a^(l))用于反向传播
- 激活函数导数σ'需易计算(如ReLU的导数为0或1)