反向传播(Backpropagation)是大模型(如GPT、BERT等)训练过程中的核心算法,用于高效计算损失函数对神经网络中所有参数的梯度。这些梯度随后被用于优化器(如Adam)更新参数,使模型逐渐减小预测误差。

1. 大模型微调的核心目标:学习如何调整参数

  • 大模型有数十亿甚至数万亿参数(权重和偏置)。
  • 训练时,模型通过输入数据生成预测结果,并与真实标签比较产生损失值(衡量预测有多差)。
  • 目标:找到一组参数,使损失值最小化 → 即模型预测更准确。
  • 关键问题: 如何知道每个参数应该增大还是减小?改变多少?
    反向传播就是解决这个问题的算法。

2. 工作流程:分两步走

步骤1:前向传播(Forward Pass)
  • 输入数据从网络底层(输入层)逐层向上计算,最终得到预测输出。
  • 计算过程中记录所有中间结果(每一层的输出值)。
  • 结果: 得到预测值,并计算出损失函数值(如交叉熵损失)。
步骤2:反向传播(Backward Pass)
  • 核心: 从输出层开始,逆向逐层计算损失函数对每个参数的梯度
  • 原理: 利用链式法则(Chain Rule)(微积分中的复合函数求导规则):
    • 先计算损失函数对输出层输出的梯度。
    • 将这个梯度传递给前一层的参数和输入,计算该层的梯度。
    • 重复此过程,直到传播回输入层。
  • 结果: 得到损失函数对所有参数(权重 W、偏置 b)的梯度 ∂Loss/∂W∂Loss/∂b

3. 梯度下降:使用梯度更新参数

  • 得到梯度后,优化器执行梯度下降
    新参数 = 旧参数 - 学习率 × 梯度
    
  • 梯度方向:指示参数应如何调整以减小损失(负梯度方向是下降最快的方向)。
  • 学习率:控制每次更新的步长。

4. 为什么要“反向”?

  • 高效性
    反向传播利用链式法则,只需一次前向传播 + 一次反向传播,即可计算网络中所有参数的梯度。如果手动为每个参数单独计算梯度,计算量将爆炸式增长(对大模型完全不可行)。
  • 复用中间结果
    反向传播重复使用前向传播中计算的中间值(如激活值),避免重复计算,极大提升效率。

5. 在大模型中的特殊意义

  • 规模挑战:模型参数达千亿级别,反向传播的分布式实现至关重要(如数据并行、模型并行)。
  • 显存优化:反向传播需存储前向传播的中间结果,催生了梯度检查点(Gradient Checkpointing)等技术,用时间换显存。
  • 自动微分框架:PyTorch/TensorFlow 等框架自动实现反向传播,开发者只需定义前向计算。

总结

步骤 输入 → 输出 核心作用
前向传播 原始数据 → 预测值 + 损失值 计算当前预测效果
反向传播 损失值 → 所有参数的梯度 计算每个参数该如何调整
参数更新 梯度 → 新的参数值 沿梯度方向优化模型
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐