2.3 训练机制:损失函数、优化器与反向传播


2.3 训练机制:损失函数、优化器与反向传播

本节摘要:训练一个神经网络靠三件套协同:损失函数把"好坏"变成一个可优化的数字,反向传播用链式法则高效算出每个参数的梯度,优化器决定沿梯度走多大步。本节讲清三者的机制与配合,并覆盖 Adam/AdamW、学习率调度、混合精度这些大模型训练的标准配置。读完你就拥有了解读第 5、6 章预训练与微调所需的全部训练学概念。

学习目标

阅读完本节,你应当能够:

  1. 解释交叉熵损失在语言模型训练中的含义
  2. 描述反向传播的"前向存结果、反向用链式法则"机制
  3. 说明 SGD 到 Adam/AdamW 的演化逻辑(动量与自适应学习率)
  4. 理解学习率调度(warmup + 衰减)为什么是大模型刚需
  5. 手写出完整训练循环的伪代码

一、损失函数:把"好坏"变成一个数字

优化的前提是可量化。损失函数把模型输出与真实答案的差距压缩成一个标量,训练的全部目标就是让这个数字下降。

不同任务用不同损失:

  • 交叉熵(Cross-Entropy):分类与语言模型的主力。直觉:真实答案拿到的概率越高,损失越低。语言模型在每个位置预测下一个词的分布,交叉熵逐位置衡量"真实词的概率被压到多低",再对全语料求平均。第 5 章预训练、第 6 章微调的损失都是它的变体。
  • 均方误差(MSE):回归任务,预测值与真实值差的平方。
  • 其他:对比学习用 InfoNCE(第 5 章),RLHF 用基于奖励的强化学习目标(第 6 章)——形状不同,"把目标变成一个可导数字"的思路相同。

一个值得建立的直觉:损失函数的设计,就是对"什么是好"的编程。预训练用交叉熵,等于告诉模型"好 = 会接着写";RLHF 换成奖励最大化,等于告诉模型"好 = 人类喜欢"。第 6 章你会看到,ChatGPT 与 GPT-3 的差距,本质上就是换了一次"好的定义"。

二、反向传播:梯度的批量计算法

前向传播算出输出和损失后,训练需要知道每一个参数对损失的偏导——参数有几十亿个,逐个数值求导(扰动一个参数看损失变化)在计算上完全不可行。

反向传播(backpropagation)解决了这个问题,核心是微积分的链式法则:复合函数的导数可以逐级相乘。前向时每层把中间结果存下来;反向时从损失出发,用链式法则从输出层往输入层逐层回传,一趟反向就能同时算出所有参数的梯度——因为每层的梯度计算都复用了下游已算好的结果。

用一个小例子看本质。设 L = f(g(x)),中间量 u = g(x)。链式法则:dL/dx = dL/du × du/dx。多层网络就是这条式子的级联:dL/dw1 = dL/da1 × da1/da0 × ... × da0/dw1。反向传播只是把这个连乘组织成从后往前的复用顺序,把每层的"局部导数"乘上传回来的"上游梯度"。

这也解释了 2.2 节的伏笔:链式法则是连乘,每项小于 1 则连乘趋零(梯度消失),大于 1 则爆炸。深网络的训练难点从数学上看就是这串连乘的数值稳定性问题。

三、优化器:从 SGD 到 AdamW

拿到梯度后,优化器决定怎么走。演化线索清晰:

**SGD(随机梯度下降)**是最朴素的:参数 = 参数 − 学习率 × 梯度。缺点有二:一是像球在山谷里乱滚,方向抖(不同批数据的梯度噪声大);二是所有参数用同一个步长,而有的参数需要大步、有的需要小步。

**动量(Momentum)**针对抖动:把历史梯度做指数平均,相当于给球加上惯性,震荡抵消、趋势保留,下坡更快更稳。

Adam 把两件事一起做:动量(一阶矩估计)平滑方向,自适应学习率(二阶矩估计)让每个参数有自己的步长——梯度一直很大的参数走小步,梯度稀疏的参数走大步。收敛快、对初始学习率不敏感,成为大模型训练的事实标准。

AdamW 修正了 Adam 中权重衰减的实现错误(正则项与自适应学习率耦合),在现代架构上是默认选择。你以后在任何大模型训练配置里看到的 optimizer: AdamW,就是它。

优化器 关键机制 适用
SGD 纯梯度下降 小模型、精调后期
SGD+Momentum 惯性平滑 卷积网络时代主力
Adam 动量 + 自适应步长 快速收敛的通用选择
AdamW Adam + 正确的权重衰减 大模型标准配置

四、学习率与调度:大模型训练的命门

学习率决定每步走多大,是大模型训练中最敏感的超参数:

  • 太大:步子跨过谷底,损失震荡甚至发散成 NaN——大模型训练一旦发散,几天算力付诸东流。
  • 太小:收敛极慢,或在半山腰停滞。

大模型训练几乎都配学习率调度,经典形状是三段:

  1. Warmup 预热:从接近 0 的学习率线性升到峰值(通常几百到几千步)。初期参数是随机的,梯度方向不可靠,大步长极易把训练推入不可恢复的区域;先小步试探再加速。
  2. 峰值保持或余弦衰减:到达峰值后按余弦曲线缓慢下降。
  3. 末段微调:接近结束时降到峰值的十分之一左右,做精细收敛。

⚠️ 最大坑:学习率与调度设错。预训练发散、微调把模型"训傻"(输出重复、丢失能力),八成源头在此。微调场景还有个经典翻车:学习率照抄预训练的量级——微调要用小一到两个数量级的学习率,否则几步就把预训练学到的东西冲掉了。第 6 章 PEFT 一节会回到这个话题。

另一个现代标配是混合精度训练:前向与反向用 16 位浮点(省一半显存与算力),权重更新与敏感计算用 32 位兜底,配合损失缩放防止小数值下溢。没有混合精度,千亿模型训练的成本要翻倍——第 7 章量化推理用的也是同一套"精度换成本"的思路,只是场景从训练换到了推理。

五、完整训练循环

把三件套组装起来,一次完整训练的骨架如下(概念伪代码):

初始化参数(随机小值) for 每个训练步: batch = 采样一小批数据 logits = 前向传播(模型参数, batch) # 线性代数 loss = 交叉熵(logits, 真实标签) # 概率目标 grads = 反向传播(loss, 模型参数) # 链式法则 优化器.更新(模型参数, grads, 当前学习率) # AdamW 按调度器推进学习率 定期在验证集上评估,保存检查点

大模型预训练就是把这个循环跑上万亿 token、数万步,中间还要处理分布式并行、故障恢复(第 5 章)。微调是同一循环换个更小的数据集与学习率(第 6 章)。循环本身从头到尾没有变过——这是本节最想留下的印象。

常见问题

问题:训练中 loss 突然变成 NaN 怎么办?

标准排查顺序:学习率是否过大(最常见)、是否有脏数据(超长序列、异常字符)、混合精度的损失缩放是否失效、某个批次是否含极端数值。工程上靠梯度裁剪(把梯度的范数限制在阈值内)作为保底防线。

问题:为什么不用全局最优解的算法?

几十亿维的非凸优化不存在可行的全局最优算法。实践中"足够好的局部解 + 大规模数据"已经产生了惊人的能力,研究重心在"更快更稳地到达足够好",而非理论最优。

问题:batch size 多大合适?

与算力和任务相关。大 batch 吞吐高但泛化有时变差;小 batch 噪声大但正则效果好。大模型预训练常用百万 token 级别的等效批量,并配合学习率的等比调整——批量翻倍,学习率大致也翻倍,这套经验配比来自规模定律研究(第 4 章)。

六、一次"训傻了"的解剖

把本节知识串成一个真实故障案例。某团队微调一个开源模型做客服话术,三千条数据、学习率照抄预训练配置、跑了十轮。结果:训练损失一路降到很低,模型却废了——只会复读训练集里的模板句,常识问题一概答非所问。

逐项诊断:第一,学习率过大,预训练量级的学习率对小数据微调是重锤,几步就把预训练分布砸歪;第二,轮数过多,三千条数据十轮等于让模型把每句话背三十遍,过拟合到只会背诵;第三,没有验证与哨兵,全程只看训练损失,没人发现通用能力在第三轮后就开始流失。

修复方案对应本节知识点:学习率降两个数量级、改为一到两轮、加验证集与通用问题哨兵(每轮测十个常识问题)、改用 LoRA 冻结主干保底。重训后话术合格,通用能力完好。

这个案例的每个坑都能在正文找到对应原理——这也是为什么本教程坚持先讲训练机制再讲微调:微调的失败几乎从不在微调本身,而在对训练动力学的理解不足。第 6 章展开微调时,这些诊断手法会再次出现,到时你已经有了完整的理论武装。

常见追问:训练完的模型里,梯度还有用吗?

没有。梯度只在训练时存在,推理时模型只做前向传播,权重完全固定。这个事实有个实用推论:模型文件里只有权重没有梯度,所以推理部署不需要优化器,显存占用远低于训练(第 6.3 节显存账的原理)。另一个推论:模型"不会再学习"——它不会从你的对话中变聪明,所谓"越用越好"的产品,靠的是服务端的数据回流与再训练,不是模型自己进化。

再追问:训练一个模型到底要多少步?

给一个可心算的框架:总训练量约等于"数据量乘轮数",步数等于总训练量除以批大小。例如三千条数据、两轮、每批三十条,约两百步——微调的量级;万亿 token 预训练、每批百万 token,约数万到十万步——预训练的量级。两个数字相差七个数量级,这个悬殊本身就说明:微调与预训练是两种工程,微调经验直接套用到预训练(或反过来)都会出错。

本节要点回顾

  • 损失函数把目标变成数字;语言模型用交叉熵——"好的定义"决定了模型学成什么样。
  • 反向传播 = 链式法则 + 结果复用,一趟反向算出全部梯度;连乘结构是梯度消失的根源。
  • 优化器:SGD → 动量 → Adam → AdamW(大模型标配)。
  • 学习率是命门,warmup + 余弦衰减是大模型刚需;微调学习率要比预训练小一到两个数量级。
  • 训练循环:前向 → 损失 → 反向 → 更新,预训练与微调共用这个骨架。

地基完工。第 3 章把这套机制第一次应用到语言上:词怎么变成向量,序列模型如何演化到注意力门口。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U