直线拟合不了怎么办?
本课一问:前四课的迷你模型把上下文里几个词的向量加起来,再给每个候选词线性打分。有一类规律它原理上就学不会:答案不取决于哪个词,而取决于词的组合。怎么办?
这一课先不碰:深网络怎么训得动(初始化、残差、归一化:C4、C8);Transformer 里这一层叫 FFN、为什么用 SwiGLU(C4 第 1、4 课)。
从已有出发
「小猫 喜欢 吃 ___」这句话,迷你模型已经学会了:上下文里有「小猫」,就往「鱼」加分;有「小狗」,就往「肉」「骨头」加分。每个词各自给每个候选词加一笔分,加起来比大小——这就是「线性」:整体的分数等于各部分的分数之和。
这一课换一组句子,原因是:要让「一条直线分不开」能画在平面上。只留两个决定答案的词(动物、食物),每个词两个数,它们的和正好是平面上的一个点。
- 手写规则 / 把例子背成一张表
- 带参数的模型:用例子调数字
- 交叉熵:正确答案概率的负对数
- 梯度下降
- 反向传播(反向模式自动微分)
- 非线性多层网络
- 验证集、早停与正则化
- 深度学习为什么是经验性的
- 词向量:按编号查表
四句话(教学构造):
| 句子 | 答案 |
|---|---|
| 小猫 吃了 鱼,它很 ___ | 开心 |
| 小狗 吃了 骨头,它很 ___ | 开心 |
| 小猫 吃了 骨头,它很 ___ | 失望 |
| 小狗 吃了 鱼,它很 ___ | 失望 |
只看「小猫」猜不出(两句一开心一失望),只看「鱼」也猜不出;要看两者配不配。「吃了」「它」「很」四句都一样,只给 h 加同一个常数向量,组件里省掉了。
先自己设计:还用线性模型
和前四课一样:h = e动物 + e食物,再线性打分。训练 2,000 步,看它能不能学会:
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
数字来源:浏览器实时计算(全批量梯度下降,η = 0.5)。四句话、初始化与种子写在组件说明里;这里的两个数只是「能画在平面上」的教学尺寸,真实模型每个 token 有几千维。
线性不行,是因为「加起来再打分」对组合无能为力。在两次线性变换之间插一个非线性函数,最常用的是 ReLU:负数变 0,正数不变。下面的组件:同样四句、2 个 ReLU 隐藏单元、同样 2,000 步。
数字来源:浏览器实时计算(全批量梯度下降,η = 0.5)。四句话、初始化与种子写在组件说明里;这里的两个数只是「能画在平面上」的教学尺寸,真实模型每个 token 有几千维。
为什么线性模型一定失败:平行四边形
看左图的四个点。不管词向量训练成什么样,都有:
h(猫 + 鱼) + h(狗 + 骨头) = (e猫 + e鱼) + (e狗 + e骨头) = h(猫 + 骨头) + h(狗 + 鱼)
两个「开心」点的中点,恰好等于两个「失望」点的中点——四个点是一个平行四边形,「开心」和「失望」各占一条对角线。线性模型的判断边界是一条直线,直线把平面分成两半;要把一条对角线的两端都放进「开心」那一半,中点也在那一半,可这个中点同时是另一条对角线的中点,那两端里至少有一个也会落进「开心」那一半。所以没有直线能分开 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条凸性论证:半平面是凸集,两点在内则中点在内;两条对角线共用中点,所以不可能一条对角线全在半平面内、另一条全在外。对任何词向量、任何线性打分成立。 出处待补 。训练能做的最好的事,是四句都给五五开:loss = ln 2 = 0.6931。
这和第 4 课的「相加」节点是同一件事:相加之后,「谁和谁一起出现」的信息只剩一个和。
叠两层线性层也没用。 W2(W1h + b1) + b2 = (W2W1)h + (W2b1 + b2):两个矩阵乘起来还是一个矩阵。上面切到「加一层线性隐藏层」,读数里有一项「两层乘成一层后,四句的分数最大差」:10−17 量级,就是浮点误差。叠一百层也一样。
改进:ReLU 把平面折起来
试三件事:① 在 ReLU 那个组件里点「播放训练」:右图的细网格一开始只是被拉歪,几十步之后开始对折;训练完,两句「失望」被压到同一点(隐藏层输出 (0, 0)),两句「开心」被推到两条坐标轴上,一条直线就分开了——种子 3 第 2,000 步 loss 0.0006;② 把「隐藏层的激活」切成「去掉(线性)」:右图的网格重新变成平行线,loss 回到 0.6931;③ 换种子:1、2、4、6、7、10 会卡住(停在 0.3466、0.4774 或 0.6931),3、5、8、9 能找到解。解明明存在,为什么有的起点走不到?见岔路课。
真语料上呢?同一个小网络,只改「隐藏层加不加 ReLU」:
数字来源:浏览器实时训练(纯 JS,Float64)。模型、语料、种子写在上方;同一组对照里所有 run 共用初始化和取批顺序,只改被比较的那一项。换种子重跑能看到噪声多大——差异小于种子间波动时不下结论。
差距是真的:同一种子成对比较,种子 1 低 0.055;切到「种子 1–4 各一对」,四对都是 ReLU 更低,差 0.032–0.079,平均约 0.05。但它远不如四句组合题那样「非黑即白」。这个规模的模型,大部分本事来自「前面几个字各自是什么」,线性模型也学得到;需要组合才能判断的规律,在 24,000 字里帮它多赢这么多。只测了这一个规模,不往外推。
常见误解一:「多叠几层线性层,模型就更强。」
不会。没有非线性,叠多少层都等于一层:上面乘出来的误差是 10−17。深度网络的「深」,前提是每层之间有非线性。
常见误解二:「有了万能近似定理,两层网络什么都学得会。」
定理说的是:隐藏单元足够多时,一个隐藏层的网络能以任意精度逼近任意连续函数 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条Cybenko 1989(sigmoid 型激活)、Hornik 等 1989;Leshno 等 1993 推广到任何非多项式激活,包括 ReLU。 出处待补 。它只保证解存在,不说要多少单元,更不说梯度下降找得到。四句组合题:2 个单元的精确解存在(种子 3 就找到了),换个种子却会卡住。
常见误解三:「非线性是为了模仿大脑神经元。」
这里的理由是数学上的:没有它,整个网络塌缩成一次线性变换。ReLU 取代早年的 sigmoid、tanh,主要是训练实践上的原因(它在正数区导数恒为 1,不容易让梯度变小),不是因为更像神经元 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条深度整流网络在不预训练的情况下达到或超过 tanh 网络;AlexNet 2012 报告同一个四层卷积网络用 ReLU 在 CIFAR-10 上达到 25% 训练误差比 tanh 快约 6 倍。都是特定任务上的实验。 出处Glorot、Bordes、Bengio 2011 ↗需联网 。
🔍 「一个神经元只能切一刀」:单层感知机的历史
Rosenblatt 1958 年的感知机就是一个「线性打分 + 阈值」的单元,它能从例子里学(第 1 课的思想),但判断边界只能是一条直线(高维里是一个平面)。Minsky 与 Papert 1969 年的书《Perceptrons》严格分析了单层感知机的局限,异或是其中最简单的一个例子——本课的四句话就是一个异或。这本书常被认为促成了此后十多年神经网络研究的低潮;多层网络加上反向传播(第 4 课)才绕过了这个限制。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 线性模型只能「各部分加起来」,答案取决于组合时一定失败:四句组合题停在 ln 2 |
| ② 数学上为什么可能有效? | 线性∘线性 = 线性、异或线性不可分 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条矩阵乘法结合律;凸性论证。 出处待补 ;加了非线性的一个隐藏层就能逼近任意连续函数 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条万能近似定理,只保证存在。 出处待补 |
| ③ 实验上为什么选 ReLU、选这个宽度? | 训练得快、梯度不衰减是实验结论;四句组合题 2 个单元 10 个种子 4 个找到解,加宽到 8 个单元 10 个都找到 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条浏览器实训;岔路课里现场重跑。 出处待补 |
一句话
线性模型只能按「各部分加起来」打分,判断不了「组合」;在线性层之间插一个非线性,空间被折叠,组合才分得开——少了它,叠多少层都还是一层。
先停在这里:记住「线性 → ReLU → 线性」,以及为什么不能省掉中间那个 ReLU。
再深一层:展开感知机的 Dig;在组件里换 10 个种子,记下哪些卡住了,带着这个问题去岔路课。
下一个缺口
模型能力够了,训练 loss 能一路压到 0——这就是学好了吗? → 第 6 课:训练越来越好,新数据却越来越差?
回扣:这个「线性 → 非线性 → 线性」的结构,在 Transformer 里叫 FFN,每一层都有一个。C4 第 1 课会在一个 token 的内部再遇到「组合」问题(「好吃 / 不好吃 / 难吃 / 不难吃」),那时它就是这一课的原理。
你可能会问
- 「为什么 ReLU 这么简单也行?sigmoid、tanh、GELU 有什么区别?」 只要是非线性、不是多项式,理论上都行(万能近似定理的条件);实践上的差别在训练速度与稳定性。现代大模型的 FFN 多用 SiLU 加门控(SwiGLU),C4 第 4 课讲。
- 「隐藏单元越多越好吗?」 能力越强,但也越容易把训练例子背下来——这正是下一课。
- 「解存在却找不到,这种事多吗?」 多,而且没有定理能提前告诉你会不会发生。岔路课:深度学习为什么是经验性的?