反向传播算法原理与计算步骤
字数 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)=ŷ。

  • 计算步骤:
    1. 输入层:a^(0) = x
    2. 隐藏层:对l=1到L-1,计算z^(l)=W^(l)a^(l-1)+b^(l),a^(l)=σ(z^(l))
    3. 输出层: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. 算法步骤总结

  1. 前向传播:计算各层z^(l)和a^(l)
  2. 计算输出误差:δ^(L) = ŷ - y(以分类任务为例)
  3. 反向传播误差:对l=L-1到1,计算δ^(l) = (W^(l+1))^T δ^(l+1) ⊙ σ'(z^(l))
  4. 计算梯度:∂J/∂W^(l) = δ^(l)(a^(l-1))^T,∂J/∂b^(l) = δ^(l)
  5. 更新参数:使用梯度下降法调整W和b

关键点

  • 链式法则实现梯度的高效计算,避免重复计算
  • 需保存前向传播的中间结果(z^(l)和a^(l))用于反向传播
  • 激活函数导数σ'需易计算(如ReLU的导数为0或1)
反向传播算法原理与计算步骤 问题描述 反向传播是训练神经网络的核心算法,用于高效计算损失函数对网络参数的梯度。通过链式法则,算法从输出层向输入层逐层传播误差信号,计算每个权重和偏置的梯度,为梯度下降优化提供基础。 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)