反向传播 梯度消失
反向传播 backpropagation
反向传播(Backpropagation) 是神经网络训练中的一种核心算法,用于通过计算误差并将其传播回网络,从而更新神经网络的参数。通过反向传播,网络能够在每次迭代中逐步调整其参数(例如权重和偏置),以最小化预测误差,从而学习到合适的特征表示。
基本原理
反向传播算法基于链式法则(链式求导法则),这意味着它通过计算误差梯度逐层传播回网络,并逐步更新每一层的权重和偏置。具体来说,反向传播的目标是通过最小化网络的损失函数(例如平方误差,交叉熵等)来优化网络的参数。
反向传播的步骤
-
前向传播 (Forward Pass):
- 输入数据通过神经网络的每一层传递,直到输出层。
- 在每一层,数据通过加权和、激活函数等操作,最终得出网络的预测结果。
-
计算损失函数的误差:
- 损失函数(如均方误差、交叉熵等)是网络输出与实际标签之间的差异度量。目标是最小化损失函数。
- 损失函数的梯度表示损失函数相对于网络每个参数(例如权重和偏置)的变化率。
-
反向传播过程:
-
从输出层开始,通过链式法则将损失函数的误差逐层传播回网络。
-
使用链式法则(链式求导法则)计算每一层的梯度。链式法则帮助我们理解误差是如何通过各层的权重传播的。
-
具体来说,反向传播通过逐层计算每个节点(神经元)对损失的贡献,将误差梯度从输出层传递到输入层。
-
-
参数更新:
- 得到每个参数的梯度后,通过梯度下降或其他优化算法(如Adam优化器)来更新参数。
- 权重的更新公式为:
w = w − η ⋅ ∂ L ∂ w w = w - \eta \cdot \frac{\partial L}{\partial w} w=w−η⋅∂w∂L
其中: - w w w 是权重。
- η \eta η 是学习率,决定了每次更新的步长。
- ∂ L ∂ w \frac{\partial L}{\partial w} ∂w∂L 是损失函数相对于权重 w w w 的梯度。
-
重循环步骤:
- 反向传播和参数更新是通过多次迭代(或称训练周期)进行的。每次迭代后,网络的权重都会得到更新,网络的预测结果会更准确。
举例说明
假设我们有一个简单的三层神经网络,输入为 x x x,通过隐藏层进行处理,最终输出为 y ^ \hat{y} y^(网络的预测值)。目标是通过反向传播最小化损失函数 L ( y ^ , y ) L(\hat{y}, y) L(y^,y),其中 y y y 是实际标签。
-
前向传播:计算输出 y ^ \hat{y} y^。
-
损失计算:计算 L ( y ^ , y ) L(\hat{y}, y) L(y^,y)。
-
反向传播:
- 计算输出层损失相对于输出层参数的梯度 ∂ L ∂ w 3 \frac{\partial L}{\partial w_3} ∂w3∂L 和 ∂ L ∂ b 3 \frac{\partial L}{\partial b_3} ∂b3∂L。
- 利用链式法则,将梯度传播到前一层(隐藏层),计算隐藏层的梯度 ∂ L ∂ w 2 \frac{\partial L}{\partial w_2} ∂w2∂L 和 ∂ L ∂ b 2 \frac{\partial L}{\partial b_2} ∂b2∂L。
- 继续反向传播,直到输入层。
-
参数更新:利用计算得到的梯度更新所有层的权重和偏置。
梯度消失 vanishing gradient
梯度消失问题通常出现在训练深层神经网络时,尤其是当使用反向传播算法时。在训练神经网络时,我们通过反向传播计算每个参数的梯度,并使用梯度下降法更新这些参数。但是,随着网络层数的增加,梯度值可能会逐渐变得非常小,甚至接近零。这个问题通常出现在深层网络和使用某些激活函数(如sigmoid或tanh)时。
原因:在反向传播过程中,梯度需要通过每一层逐层传递。如果激活函数的导数很小(如sigmoid的导数最大为0.25),那么梯度在每一层都会被缩小,导致靠近网络输入的层几乎无法接收到有效的梯度信号。这样,网络的前几层更新速度非常慢,甚至停止更新,从而导致网络训练不充分,无法学习有效的特征。