反向传播,清晰理解

一、反向传播的核心步骤

1. 前向传播与损失计算

前向传播 :输入数据逐层通过神经网络,每层执行线性变换( z = W x + b z = Wx + b z=Wx+b)和非线性激活(如ReLU、Sigmoid),最终得到预测输出。

损失函数计算 :根据预测值与真实值的差异,计算损失(如交叉熵损失或均方误差)。例如,交叉熵损失为 L = − ∑ y i log ⁡ p i L = -\sum y_i \log p_i L=−∑yilogpi,其中 y i y_i yi 是真实标签, p i p_i pi 是预测概率。

2. 反向梯度传播

输出层梯度计算 :从输出层开始,计算损失对输出的梯度。例如,在Softmax+交叉熵损失中,梯度为预测概率与真实标签的差值( ∂ L ∂ z = p − y \frac{\partial L}{\partial z} = p - y ∂z∂L=p−y)。

链式法则逐层回传

  1. 激活层梯度 :计算当前层激活函数的导数。例如,Sigmoid的导数为 σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma'(z) = \sigma(z)(1-\sigma(z)) σ′(z)=σ(z)(1−σ(z)),ReLU的导数为0(输入<0)或1(输入>0)。
  2. 权重梯度计算 :将上层梯度与当前层输入相乘,得到权重梯度。例如, ∂ L ∂ W = δ ⋅ x T \frac{\partial L}{\partial W} = \delta \cdot x^T ∂W∂L=δ⋅xT,其中 δ \delta δ 是上层梯度, x x x 是当前层输入。
  3. 偏置梯度 :直接传递上层梯度( ∂ L ∂ b = δ \frac{\partial L}{\partial b} = \delta ∂b∂L=δ)。
3. 参数更新

梯度下降优化 :根据梯度更新权重和偏置。公式为 W new = W − η ⋅ ∂ L ∂ W W_{\text{new}} = W - \eta \cdot \frac{\partial L}{\partial W} Wnew=W−η⋅∂W∂L,其中 η \eta η 是学习率。

正则化与学习率调整 :引入L2正则化防止过拟合( ∂ L ∂ W ← ∂ L ∂ W + λ W \frac{\partial L}{\partial W} \leftarrow \frac{\partial L}{\partial W} + \lambda W ∂W∂L←∂W∂L+λW),并通过动态调整学习率加速收敛。


二、关键数学原理与节点类型

1. 链式法则的分解

反向传播的本质是将复杂梯度分解为局部导数的连乘积。例如,损失对某权重 W i j W_{ij} Wij 的梯度可分解为:
∂ L ∂ W i j = ∂ L ∂ z ⋅ ∂ z ∂ W i j = δ ⋅ x j \frac{\partial L}{\partial W_{ij}} = \frac{\partial L}{\partial z} \cdot \frac{\partial z}{\partial W_{ij}} = \delta \cdot x_j ∂Wij∂L=∂z∂L⋅∂Wij∂z=δ⋅xj

其中 z z z 是当前层的加权和, x j x_j xj 是前一层第 j j j 个神经元的输出。

2. 典型节点的梯度计算

加法节点 :梯度原样传递(如 ∂ L ∂ x = δ \frac{\partial L}{\partial x} = \delta ∂x∂L=δ)。

乘法节点 :梯度交叉相乘(如 x ⋅ ∂ L ∂ z x \cdot \frac{\partial L}{\partial z} x⋅∂z∂L 和 y ⋅ ∂ L ∂ z y \cdot \frac{\partial L}{\partial z} y⋅∂z∂L)。

仿射变换(全连接层) :梯度由输入和权重共同决定,例如 ∂ L ∂ W = δ ⋅ x T \frac{\partial L}{\partial W} = \delta \cdot x^T ∂W∂L=δ⋅xT。


三、反向传播的挑战与解决方案

1. 梯度消失与爆炸

问题 :深层网络中梯度可能指数级衰减(如Sigmoid激活)或膨胀(权重初始化过大)。

解决方案

• 使用ReLU等非饱和激活函数。

• 权重初始化(如He初始化)。

• 批量归一化(BatchNorm)稳定输入分布。

2. 计算效率优化

小批量训练 :将数据分批次计算梯度,减少内存占用并加速收敛。

自动微分框架:如PyTorch和TensorFlow,自动构建计算图并高效求导。


四、实际应用示例

以三层神经网络为例:

  1. 输入层到隐藏层 :计算 z 1 = W 1 x + b 1 z_1 = W_1x + b_1 z1=W1x+b1,激活输出 a 1 = σ ( z 1 ) a_1 = \sigma(z_1) a1=σ(z1)。
  2. 隐藏层到输出层 :计算 z 2 = W 2 a 1 + b 2 z_2 = W_2a_1 + b_2 z2=W2a1+b2,输出 p = Softmax ( z 2 ) p = \text{Softmax}(z_2) p=Softmax(z2)。
  3. 反向传播 :从输出层梯度 δ 2 = p − y \delta_2 = p - y δ2=p−y 开始,逐层计算 δ 1 = ( W 2 T δ 2 ) ⊙ σ ′ ( z 1 ) \delta_1 = (W_2^T \delta_2) \odot \sigma'(z_1) δ1=(W2Tδ2)⊙σ′(z1),最终更新 W 1 W_1 W1 和 W 2 W_2 W2。

总结

反向传播通过链式法则将误差信号从输出层回传至输入层,并结合优化算法调整参数。其核心在于高效计算梯度并解决深层网络的稳定性问题。

相关推荐
zhanghongbin0115 小时前
成本追踪:AI API 成本计算与预算管理
人工智能
YBAdvanceFu15 小时前
从零构建智能体:深入理解 ReAct Plan Solve Reflection 三大经典范式
人工智能·python·机器学习·数据挖掘·多智能体·智能体
啦啦啦在冲冲冲15 小时前
多头注意力机制的优势是啥,遇到长文本的情况,可以从哪些情况优化呢
人工智能·深度学习
xrgs_shz15 小时前
直方图法、最大类间方差法、迭代法和自适应阈值法的图像分割的基本原理和MATLAB实现
人工智能·计算机视觉·matlab
向上的车轮15 小时前
如何定制大模型——工业场景下大模型定制与私有化部署选型
人工智能
让学习成为一种生活方式16 小时前
海洋类胡萝卜素生物合成的乙酰转移酶--文献精读217
人工智能
QQ6765800816 小时前
服装计算机视觉数据集 连衣裙数据集 衣服类别识别 毛衣数据集 夹克衫AI识别 衬衫识别 裤子 数据集 yolo格式数据集
人工智能·yolo·计算机视觉·连衣裙·衣服类别·毛衣数据集·夹克衫ai
冰糖葫芦三剑客16 小时前
人工智能生成合成内容文件元数据隐式标识说明函要怎么填写
人工智能
CV-杨帆16 小时前
ICLR 2026 LLM安全相关论文整理
人工智能·深度学习·安全
田八16 小时前
聊聊AI的发展史,AI的爆发并不是偶然
前端·人工智能·程序员