深度学习为什么是经验性的?
这是一堂岔路课,来自一次真实的学习对话。学完 RoPE、还没进 Q/K/V 之前,提问的后半句是:
「是不是 llm 训练很多方法都实际是实验证明,没有绝对的论证」
前半句问的是 RoPE,C2 的岔路课已经在位置编码上答过。这一课在本章的地基上再答一次:从例子里学的这一整圈,哪些是证明出来的,哪些是试出来的,为什么会这样。
本课一问:深度学习为什么是经验性的?
这一课先不碰:规模定律能不能提前预测(C6);benchmark 分数该信几分(C14)。
- 手写规则 / 把例子背成一张表
- 带参数的模型:用例子调数字
- 交叉熵:正确答案概率的负对数
- 梯度下降
- 反向传播(反向模式自动微分)
- 非线性多层网络
- 验证集、早停与正则化
- 深度学习为什么是经验性的
- 词向量:按编号查表
先给本章的结论归档
把前六课的关键结论按三层证据分开(和 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,它就不再是碗,有很多坑、很多平台。对一般的非凸函数,「梯度下降能找到全局最优」没有定理可证,甚至在最坏情况下是计算上很难的问题。实践中发现的规律——网络越宽,越少卡住——是跑出来的 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条本课 30 个网络的实测;更大网络上的类似现象是大量实验的经验总结,有部分理论解释(过参数化),但没有覆盖实际训练的定理。 出处待补 。
实验二:随机性本身就是一个实验变量。 同一个配置,只换随机种子(初始化和取批顺序):
数字来源:浏览器实时训练(纯 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 比实测的重跑波动还小)。
经典理论在哪里失灵
不是没有理论,是经典理论经常和实践对不上:
- 「参数比数据多就一定过拟合」:Zhang 等(ICLR 2017)发现,常用的卷积网络能把随机打乱的标签也拟合到训练误差接近 0——它的容量足以背下任何东西;可同样的网络在真实标签上泛化得很好。经典的容量理论解释不了这两件事同时成立 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条图像分类上的实验;摘要原文:用 SGD 训练的先进卷积网络能轻易拟合训练数据的随机标注。 出处Zhang et al. 2016(ICLR 2017) ↗需联网 。
- 「模型越大,测试误差越差」:经典的偏差-方差权衡说,容量超过某个点,测试误差会上升。实际上继续加大到「刚好能背下训练集」之后,测试误差往往会再次下降,这叫双下降 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条Belkin 等在多种模型上观察到并命名;Nakkiran 等(arXiv 1912.02292)在深度网络上显示它随模型大小、训练轮数、样本数都会出现。 出处Belkin et al. 2019(PNAS) ↗需联网 。第 6 课的结论(模型背书就要早停)是在一个规模上成立的;换个规模,图景可能不同。
- 我们自己的项目:3.7M 参数的模型在 50 万 token 上第 5 个 epoch 就过拟合;大模型预训练通常每条数据只看一遍左右,几乎碰不到这个问题。同一个「过拟合」,在两种规模下是两件事。
常见误解一:「既然是经验性的,深度学习就是在瞎试。」
不是。数学先排除明显不可能的设计(线性叠多少层也学不会组合,这不用试);理论告诉你什么值得试(交叉熵、梯度下降、非线性);实验告诉你在这个规模上成不成;规模化再验证放大之后还成不成立。第 3 课的学习率就是这样定的:下降引理说「要小」,实验说「这里取 1 最好」。
常见误解二:「有定理保证,就一定训得出来。」
万能近似定理保证解存在,链式法则保证梯度算得对,可它们都不保证梯度下降能走到那个解。上面 2 个单元的实验里,解存在、梯度也对,10 个起点仍有 6 个卡住。
🔍 那为什么还说理论有用?
理论最有用的地方,常常是告诉你哪里不必试和试出来的东西意味着什么。第 2 课的 Gibbs 不等式告诉你 loss 的下限是数据本身的熵,所以验证 loss 降到某处就不动,不一定是模型不行;第 4 课的有限差分误差分析告诉你梯度检查该用多大的 h。反过来,实验发现的规律(比如 C6 的规模定律)又会推动新的理论去解释它。
带走一个学习习惯
C2 岔路课留下的三问,在这一章同样适用:
① 它解决什么问题?
② 数学上为什么可能有效?
③ 实验上为什么最后选了它?——在什么规模、跑了几个种子?
本章每一课末尾的「证据三问」就是这三问的答卷。第 ③ 问多了半句,是这一课的新东西:实验结论要连同种子与规模一起记。
一句话
深度学习里「能表示」「梯度算得对」是证明出来的;「训得出来」「在新数据上好」主要靠实验——所以结论要连同种子、规模、数据一起报告。
回到主线
离散的词怎么进网络? → 第 7 课
你可能会问
- 「那 LLM 的那些设计(注意力、RoPE、SwiGLU)呢?」 同样是三层叠出来的,每一章的证据徽章都会标出来;C2 岔路课拿 RoPE 做了完整示范。
- 「种子不同,结果就不同,那论文里的数字能信吗?」 看它报告了几个种子、波动多大;只报一个数、比对手好 0.01 的结论要打折扣。C14 岔路课专门讲评测数字该信几分。