从0训练LLM · 现代大模型体系 岔路 阅读 + 实验 ≈ 25 分钟 页内实验 ×2
D 深度学习地基:机器怎么从例子里学会规律 岔路课

深度学习为什么是经验性的?

深度学习为什么是经验性的
把本章六课的结论逐条归档:链式法则、交叉熵的性质、线性不可分是证明出来的;学习率取多少、第几步停、ReLU 好不好是跑出来的。两个现场实验说明为什么:解明明存在,10 个种子只有 4 个找到;只换随机种子,验证 loss 的波动和一个设计选择的效果一样大。
🔀

这是一堂岔路课,来自一次真实的学习对话。学完 RoPE、还没进 Q/K/V 之前,提问的后半句是:

「是不是 llm 训练很多方法都实际是实验证明,没有绝对的论证」

前半句问的是 RoPE,C2 的岔路课已经在位置编码上答过。这一课在本章的地基上再答一次:从例子里学的这一整圈,哪些是证明出来的,哪些是试出来的,为什么会这样。

本课一问:深度学习为什么是经验性的?
这一课先不碰:规模定律能不能提前预测(C6);benchmark 分数该信几分(C14)。

训练一个网络要的东西,是一件一件被真数字逼出来的(点名字去那一课;完整版在章首页)
  1. 手写规则 / 把例子背成一张表
  2. 带参数的模型:用例子调数字
  3. 交叉熵:正确答案概率的负对数
  4. 梯度下降
  5. 反向传播(反向模式自动微分)
  6. 非线性多层网络
  7. 验证集、早停与正则化
  8. 深度学习为什么是经验性的
  9. 词向量:按编号查表
岔路深度学习为什么是经验性的证据三层你在这里
解决了「能表示」「梯度算得对」是证明出来的。
卡在「训得出来」要试:四句组合题 2 个 ReLU 单元的解存在,10 个种子里只有 4 个找到它。
数字口径:one-hot 维数与乘加次数由锚点 Qwen3.8 的 config 构建时现算;迷你模型(种子 3)、四句组合题(种子 3)、真语料小网络(种子 1)的数字来自本章各课组件的默认设置,浏览器里现场复算;4.771 / 6.906 来自项目真实日志 d00-foundations.json。年份按原始文献核对(2026-09-26)。

先给本章的结论归档

把前六课的关键结论按三层证据分开(和 C2 岔路课同一把尺子):

课数学可证明 有理论动机 实验验证
第 1 课 学习查表答不了没见过的输入参数被许多例子共享,可能把共性带到新输入迷你模型「小猫 想 吃」→ 鱼 82.7%;真语料验证 loss 5.550 → 3.606
第 2 课 loss交叉熵 = 负对数似然;在真实分布处最小;梯度是 p − y—交叉熵训练得比平方差好
第 3 课 梯度下降负梯度是一阶最速下降;光滑函数上步子足够小必降—η 取多少:0.001 太慢、1 最好、10 发散
第 4 课 反向传播链式法则精确;代价是前向的常数倍—实测前向 + 反向 ≈ 3 倍前向(与设备有关)
第 5 课 非线性线性叠多少层还是线性;异或线性不可分;万能近似(只保证存在)ReLU 在正数区导数恒为 1,梯度不易衰减ReLU 比 sigmoid / tanh 训练快;加宽更容易找到解
第 6 课 过拟合L2 正则 = 高斯先验下的最大后验参数小 → 函数平滑 → 不易贴着噪声走第 300 步最好;λ = 0.003 管用;数据越多越晚过拟合

规律很清楚:「能表示什么」「梯度算得对不对」「目标函数有什么性质」大多是证明出来的;「训练能不能找到好参数」「在没见过的数据上好不好」「超参数取多少」几乎全靠实验。后一类恰恰是实际训练里最关心的。

为什么后一类证明不了:两个现场实验

实验一:解存在,不等于找得到。 第 5 课的四句组合题,2 个 ReLU 单元的精确解一定存在(种子 3 就找到了)。可梯度下降从哪里出发,是随机初始化决定的:

解一定存在,训练一定找得到吗?四句话 · 教学构造 · 浏览器现算

数字来源:浏览器实时计算(全批量梯度下降,η = 0.5)。四句话、初始化与种子写在组件说明里;这里的两个数只是「能画在平面上」的教学尺寸,真实模型每个 token 有几千维。

🎯

点按钮训练 30 个网络:2 个单元时 10 个种子里 4 个找到解,4 个单元 8 个,8 个单元 10 个全找到;去掉激活则一个都找不到(那是第 5 课证明过的)。卡住的种子停在 0.3466(两句分对、两句五五开)、0.4774 或 0.6931(全五五开)这样的值上:梯度下降走到了一个「每个方向都不再下坡」的地方,但那里不是最好的解。

loss 作为参数的函数,对线性模型是一个碗(凸的),碗里往下走一定走到底;加了 ReLU,它就不再是碗,有很多坑、很多平台。对一般的非凸函数,「梯度下降能找到全局最优」没有定理可证,甚至在最坏情况下是计算上很难的问题。实践中发现的规律——网络越宽,越少卡住——是跑出来的 。

实验二:随机性本身就是一个实验变量。 同一个配置,只换随机种子(初始化和取批顺序):

同一个配置,只换随机种子 字级 MLP · 24,896 参数 · 《三國志演義》24,000 字 · 浏览器内真训练
等待开始(滚动到这里会自动开始)

数字来源:浏览器实时训练(纯 JS,Float64)。模型、语料、种子写在上方;同一组对照里所有 run 共用初始化和取批顺序,只改被比较的那一项。换种子重跑能看到噪声多大——差异小于种子间波动时不下结论。

🎯

点「重新运行」(和第 5 课同一设置,1,200 步,约半分钟):5 个种子的 ReLU 网络,验证 loss 最大最小相差约 0.05;而第 5 课「加不加 ReLU」这个设计选择,同一种子成对比较的效果平均也是 0.05 左右,单看一对在 0.03–0.08 之间。各跑一次、恰好拿 ReLU 的坏种子去比无激活的好种子,结论就会反过来。

所以实验结论要这样报告:只改一项、同一种子成对比较、多跑几个种子、给出波动。我们项目的实验约定就是这么写的:两个 run 相差小于噪声底线时不下结论,要换 3 个种子取均值——底线以 C14 实验课为准:同配置 5 次重跑极差 0.016,3σ ≈ 0.020(约定里原写的 0.01 比实测的重跑波动还小)。

经典理论在哪里失灵

不是没有理论,是经典理论经常和实践对不上:

⚠

常见误解一:「既然是经验性的,深度学习就是在瞎试。」

不是。数学先排除明显不可能的设计(线性叠多少层也学不会组合,这不用试);理论告诉你什么值得试(交叉熵、梯度下降、非线性);实验告诉你在这个规模上成不成;规模化再验证放大之后还成不成立。第 3 课的学习率就是这样定的:下降引理说「要小」,实验说「这里取 1 最好」。

常见误解二:「有定理保证,就一定训得出来。」

万能近似定理保证解存在,链式法则保证梯度算得对,可它们都不保证梯度下降能走到那个解。上面 2 个单元的实验里,解存在、梯度也对,10 个起点仍有 6 个卡住。

🔍 那为什么还说理论有用?

理论最有用的地方,常常是告诉你哪里不必试和试出来的东西意味着什么。第 2 课的 Gibbs 不等式告诉你 loss 的下限是数据本身的熵,所以验证 loss 降到某处就不动,不一定是模型不行;第 4 课的有限差分误差分析告诉你梯度检查该用多大的 h。反过来,实验发现的规律(比如 C6 的规模定律)又会推动新的理论去解释它。UDL 教材第 20 章「Why does deep learning work?」专门梳理了哪些已经有解释、哪些还没有。

带走一个学习习惯

C2 岔路课留下的三问,在这一章同样适用:

🧭

① 它解决什么问题?
② 数学上为什么可能有效?
③ 实验上为什么最后选了它?——在什么规模、跑了几个种子?

本章每一课末尾的「证据三问」就是这三问的答卷。第 ③ 问多了半句,是这一课的新东西:实验结论要连同种子与规模一起记。

一句话

📌

深度学习里「能表示」「梯度算得对」是证明出来的;「训得出来」「在新数据上好」主要靠实验——所以结论要连同种子、规模、数据一起报告。

回到主线

离散的词怎么进网络? → 第 7 课

你可能会问