反向传播,清晰理解

一、反向传播的核心步骤

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。

总结

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

相关推荐
zhz521426 分钟前
深度剖析 RuoYi - AI:打造专属智能助手的全栈解决方案
人工智能·ai·ai编程·ai-native·ai agent
FL16238631291 小时前
医学图像分割数据集肺分割数据labelme格式6299张2类别
人工智能·深度学习·计算机视觉
ice_junjun7 小时前
OpenCV Video 模块使用指南(Python 版)
人工智能·python·opencv
景联文科技8 小时前
景联文科技:以高质量数据标注推动人工智能领域创新与发展
人工智能·科技·数据标注
仙人掌_lz8 小时前
RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”
人工智能·深度学习·ai·pdf·rag
赛卡8 小时前
自动驾驶背后的数学:ReLU,Sigmoid, Leaky ReLU, PReLU,Swish等激活函数解析
人工智能·pytorch·python·神经网络·机器学习·数学建模·自动驾驶
訾博ZiBo8 小时前
AI日报 - 2025年3月25日
人工智能
小白的高手之路8 小时前
Pytorch中的数据加载
开发语言·人工智能·pytorch·python·深度学习·机器学习
Fansv5878 小时前
深度学习框架PyTorch——从入门到精通(6.2)自动微分机制
人工智能·pytorch·经验分享·python·深度学习·机器学习
墨绿色的摆渡人8 小时前
用 pytorch 从零开始创建大语言模型(六):对分类进行微调
人工智能·pytorch·python·深度学习·语言模型·embedding