跳到主要内容

2.2 ReLU 积木:折角拼出万物

一根铁丝和一把折角钳​

给你一根笔直的铁丝,让你弯出一条波浪线的轮廓——弯不出来,直的就是直的。

现在给你一把钳子:每夹一下,铁丝上多一个折角。夹 1 下,你能弯出一个「V」;夹 3 下,能弯出一个「W」;夹得足够多、位置选得足够好,你能弯出任何轮廓的近似——波浪、山峰、城市天际线,都行。

上一节说了,一个 ReLU 神经元恰好就是「夹一下」:贡献一个折角。那么把一堆神经元并排放进一个隐藏层,每个各自负责一个折角,再让输出层给它们分配权重、加总起来——能弯出什么?

自己试试。灰色虚线是目标曲线,你的任务是用折线贴住它:

🎮 动手实验
ReLU 积木:折角多了,直线就成了曲线
灰色虚线是我们想逼近的目标曲线。每个 ReLU 神经元贡献一个折角,输出层负责给它们分配权重再加总。拖动滑块增加神经元数量,看折线一步步贴上曲线。
-4-2024
折角数量
2
平均误差(MSE)
0.3260
🧱 只有 2 个折角,折线怎么摆都贴不住波浪——模型「容量」不够,这叫欠拟合。往右拖,给它更多积木。
💡 要点:一个神经元 = 一个折角;神经元够多,折线可以贴合任何连续曲线——这就是「万能逼近」的直觉。大模型拟合的不是这条 1 维小曲线,而是「上文 → 下一个词概率」这个高维大函数,用的是同一套积木。

按这个顺序玩​

实验 ①:看折角一个个加进来。 把「ReLU 神经元数」从 1 慢慢拖到 16,盯着两个东西:橙色折线的形状,和「平均误差(MSE)」的数字。1~2 个折角时折线怎么摆都贴不住(组件会提示你这叫欠拟合——「容量」不够);到 12 个以上,误差掉到千分之几,橙线几乎压在灰线上。

实验 ②:拆开看每个神经元。 勾选「显示每个神经元的单独贡献」。每根浅绿细线就是一个 ReLU 神经元的输出:一条在自己折角处起跳的斜坡,有的向上、有的向下(输出权重有正有负)。橙色折线就是这些斜坡的总和——毫不神秘,纯粹是加法。

这就是万能逼近(universal approximation)的直觉:

折角够多、摆放得当,分段直线可以贴合任何连续曲线,误差要多小有多小。

「深」为什么比「宽」划算​

上面的实验只有一层。既然一层就万能了,为什么大家都在说「深度」学习?

打个比方:一层宽网络像是只用一种零件拼东西——想拼复杂形状就得堆海量零件;深网络则是流水线——第一层用折角拼出「笔画」,第二层把笔画拼成「偏旁」,第三层把偏旁组成「字」。下层的成品被上层反复复用,同样的表达能力,深网络需要的神经元数量少得多。

这个「特征复用」的直觉在真实模型里看得见:图像网络浅层学边缘、深层学物体;语言模型浅层管词法、深层管语义和推理。

这个类比在哪里不准确?

万能逼近定理只保证这样的网络存在,它不保证三件更重要的事:① 梯度下降找得到这组参数(可训练性);② 网络在没见过的数据上也表现好(泛化);③ 参数量在工程上可接受(效率)。「能表达」「能训出」「能泛化」是三件独立的事,后面几节和第 4 章会分别碰到它们。另外,本实验为了让你看清原理,把折角位置固定、只学输出权重;真实网络里连折角的位置都是训练出来的。

小结​

本节要点
  • 一个 ReLU 神经元 = 一个折角;一层神经元的输出 = 一堆斜坡的加权和。
  • 折角够多,分段直线能贴合任何连续曲线——这就是万能逼近的全部直觉。
  • 「深」比「宽」划算:下层特征被上层复用,同样能力所需参数少得多。
  • 能表达 ≠ 能训出 ≠ 能泛化,三件事要分开看。
📝 动手自测0/3
1. 实验里勾选「显示每个神经元的单独贡献」后,每根浅绿细线代表什么?
2. 万能逼近定理保证了下面哪件事?
3. 为什么说「深」比「宽」划算?

延伸阅读​