2.6 训练实验室:亲眼看损失掉下来
万事俱备,点火
盘点一下这一章攒下的家当:
- 模型(2.1、2.2):神经元拼成的、想多弯就多弯的函数;
- 损失(2.3):给「错得多离谱」定价的评分标准;
- 引擎(2.4、2.5):梯度下降负责调参,反向传播负责供应梯度。
三件套合体,就是所有神经网络训练的完整流程——一个四步循环:
前向算预测 → 损失打分 → 反向传播算梯度 → 更新参数,然后回 到第一步,循环成千上万次。
下面这个实验室里跑的就是这个循环,一个字都不多:一个 25 个参数的小网络,学 40 个带噪声的数据点。它每秒能循环几千次——GPT 的训练循环与它完全同构,只是每一步都放大了十亿倍。
请按顺序做四个实验:
实验 ①:看一次完整的训练。 保持默认(8 个神经元、η = 0.1),点「▶ 开始训练」。眼睛别盯着上图的橙色曲线,盯下图的损失曲线:先是一段陡降(模型快速抓住大形状),然后越来越平缓(在细节上精雕细琢)。这条曲线是每个炼丹师的心电图——真实训练里工程师整天整夜盯的就是它。
实验 ②:把它训炸。 「↺ 重置」,把 η 拉到 0.5 以上再训。多数情况下损失不降反升、一路飙到 💥 爆炸提示;就算侥幸没炸,损失曲线也是剧烈的锯齿。0.4 节的小球飞出山谷、2.4 节的沟壑发散,现在你在一次「真训练」里再次见到了同一件事。
实验 ③:容量不够,神仙难救。 重置后选「2 个神经元」(只剩 7 个参数),训上 1000 步。损失卡在半空再也下不去,橙色曲线怎么都贴不住波浪——两个折角画不出三道弯。这不是训练方法的错,是模型隐藏层太小、容量不足:欠拟合(2.2 节的积木不够用了)。
实验 ④:容量太大,学过头。 换「32 个神经元」(97 个参数,比数据点还多两倍)继续训。损失能压得非常低,但注意橙色曲线开始追着每一个噪声点拐弯——它在背题,不是在学规律 。组件会在损失逼近噪声水平时提醒你「见好就收」:再训下去,降的是训练损失,坏的是真本事。这叫过拟合。
心电图的读法
损失曲线为什么前陡后缓?开局参数是随机的,随便一步都是大坡,损失自然掉得快;越接近谷底坡度越平(0.4 节:谷底梯度趋近零),每步的收益递减。所以有经验的炼丹师看曲线形状就能诊断:一路平——学习率太小或模型太小;锯齿狂跳——学习率太大;陡降后稳稳走平——一切正常。
量级和细节都差得远,值得逐条说清:这里 40 个数据点全批量训练,真实训练是十几万亿 token 里随机抽 mini-batch(2.4 节);这里几秒收敛,GPT 级预训练要几千张 GPU 跑数月,中途还要定期存检查点防崩溃(第 4 章细讲);这里只盯一条训练损失,真实训练还要同时盯验证集损失来抓过拟合(见深入层);这里的学习率恒定,真实训练有 warmup 和衰减日程。但四步循环本身,一字不差。
小结
- 训练 = 四步循环:前向 → 损失 → 反向传播 → 更新,从 25 参数的玩具到千亿参数的 GPT 完全同构。
- 损失曲线是训练的心电图:陡降后平缓为正常,锯齿为学习率过大,平躺为容量或学习率不足。
- 容量太小学不会(欠拟合),容量太大背噪声(过拟合);靠验证集损失判断何时「见好就收」。
- 真实大模型训练的差异在规模与工程(mini-batch、数月、checkpoint、验证集监控),不在原理。
延伸阅读
- TensorFlow Playground——本实验室的豪华版:2 维数据、多层网络、特征工程全可调。
- Karpathy: A Recipe for Training Neural Networks——老司机的炼丹清单,讲的全是「心电图读法」的实战版。
- 第 2 章 · 小结与自测:三件套一次串联。