把网络训起来:损失、批次、优化器与稳定训练的全套手法
串起一次真实训练的全部旋钮:损失怎么选、批大小与轮次是什么意思、学习率怎么定、SGD 到 Adam 的演进,以及初始化、批归一化、Dropout、早停这些让网络「训得动、不过拟合」的工程手法
- 理解 Epoch / Batch / Iteration 的区别与 mini-batch 的意义
- 能按任务选损失函数,理解学习率对训练的决定性影响
- 说清 SGD、Momentum、Adam 的演进逻辑
- 掌握初始化、批归一化、Dropout、早停各自解决什么问题
训练循环里的三个基本量
一次完整遍历全部训练数据叫一个 Epoch;为了兼顾稳定和效率,不会一次喂全部样本,而是把数据分成小批 mini-batch,每批做一次前向—反向—更新,一批的大小叫 batch size,处理一批叫一次 iteration。用小批而非单样本,梯度更稳、硬件并行效率更高;比全量数据又更灵活。
为什么不用单样本,也不用全量,偏偏卡在「小批」这个中间地带?只用一个样本算梯度,方向噪声极大、东一下西一下,收敛路径歪歪扭扭;用全量数据算梯度,方向最准但每走一步都要把几万样本全过一遍,慢得离谱,而且显存也装不下。小批是折中:一批几十到几千个样本平均下来,梯度方向已经相当稳,又能把矩阵整块塞进 GPU 并行计算。更微妙的是,小批带来的那点噪声其实是免费的正则化——它让训练不会太死板地卡在某个狭窄的坑里。批大小还影响最终泛化:实践里偏大的批往往收敛快但容易过拟合,偏小的批训练更慢却有时泛化更好,这又是一个要在验证集上权衡的旋钮。
取样
取一小批样本与标签
前向
算预测与该批平均损失
反向
backward 算梯度
更新
优化器走一步,清空梯度
损失函数:训练的「指挥棒」
学习率:最重要的单个超参数
学习率决定每一步迈多大。太大,损失在谷底来回震荡甚至发散(loss 变成 NaN);太小,收敛极慢、还可能卡在局部洼地。常见做法是从一个较小值开始试,配合学习率调度:前期稍快、后期逐步衰减以精细收敛。调模型时,学习率几乎总是第一个该排查的旋钮。
优化器的演进:从 SGD 到 Adam
SGD
沿当前批梯度反方向走一步,简单可靠但会在峡谷震荡、慢
+ Momentum
累积历史方向,像小球带惯性冲过震荡、越过小坑
Adam
同时为每个参数自适应调整步长(一阶矩+二阶矩),默认省心、收敛快
现代变体
AdamW 把权重衰减做对,是训练大模型/Transformer 的常用选择
没有「绝对最强」的优化器:Adam 类省心、前期快,精调的 SGD+Momentum 在某些视觉任务上最终泛化更好;训练 Transformer 普遍用 AdamW。理解它们是在「怎么利用梯度历史」上做文章,比死记参数更重要。
这些优化器到底在和什么困难较劲?想象你蒙着眼下山:有的坡段是狭长山谷,你沿着谷底直走,左右两侧的壁很陡,固定步长会让你在两壁间反复横跳却前进缓慢。Momentum 的思路是像滚下山的球一样带上惯性——历史方向持续同向就加速,遇到横跳就让左右分量互相抵消,于是能穿过山谷直往前。Adam 更进一步:它给每个参数单独配一把「自适应的步长」——一直被频繁更新、梯度大的参数走小步,长期不动、梯度小的参数相对走大步,相当于每个参数都有自己的学习率。这就是为什么 Adam 拿上来就能用、很少需要逐参数调;而代价是它引入了额外的超参数和状态,有时最终收敛点的泛化不如精心调过的 SGD。工程上的现实是:大模型基本都从 AdamW 起步,它把权重衰减和梯度更新解耦,避免了 Adam 里权重衰减被梯度缩放扭曲的老问题。
让网络训得稳、不背题的四件套
合理初始化
权重不能全0、不能过大过小;Xavier/He 初始化让每层信号方差稳定,否则一开始就梯度消失/爆炸
批归一化 BN
对每层输入做标准化,稳定数值分布、允许更大学习率、加速收敛
Dropout
训练时随机「关掉」一部分神经元,逼网络不依赖个别通路,降低过拟合
早停 Early Stop
盯着验证集损失,一旦它不再下降反而回升就停,防止越训越背题
这四件套背后是两条主线。BN 解决的是「每一层输入分布一直在漂」:前一层参数一变,下一层看到的数据分布就跟着变,网络永远在追移动的目标;BN 把每层输入标准化到均值 0、方差 1,让训练像在平地上走,于是敢用更大的学习率、收敛也快。Dropout 解决的是「神经元串通作弊」:训练时随机关掉一半神经元,任何两个神经元就不能总是结伴出现,被迫各自学到有用特征、而不是互相依赖——这等价于一次训练了大量共享参数的子网络,测试时再合并。早停则最朴素:盯着验证集,它一回升就刹车,是防止「越训越背题」最简单有效的一招。
训练出问题先看两条曲线:训练损失降不降(不降=欠拟合/学习率/初始化/优化器问题),验证损失跟不跟(跟不住=过拟合,加数据/正则/早停/降复杂度)。这两条曲线贯穿从玩具网络到千亿模型的所有调试。
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
从线性回归到神经网络,本质都一样:定义一个带参数的函数 fθ(x),用损失函数衡量它和真实答案的差距,再沿梯度方向更新参数。监督、无监督、强化学习的区别,只在「训练信号从哪里来」。先把这套统一视角立住,后面遇到的任何模型都是它的具体实例,就不会被层出不穷的名词淹没。