2.2 ReLU 积木:折角拼出万物
一根铁丝和一把折角钳
给你一根笔直的铁丝,让你弯出一条波浪线的轮廓——弯不出来,直的就是直的。
现在给你一把钳子:每夹一下,铁丝上多一个折角。夹 1 下,你能弯出一个「V」;夹 3 下,能弯出一个「W」;夹得足够多、位置选得足够好,你能弯出任何轮廓的近似——波浪、山峰、城市天际线,都行。
上一节说了,一个 ReLU 神经元恰好就是「夹一下」:贡献一个折角。那么把一堆神经元并排放进一个隐藏层,每个各自负责一个折角,再让输出层给它们分配权重、加总起来——能弯出什么?
自己试试。灰色虚线是目标曲线,你的任务是用折线贴住它:
按这个顺序玩
实验 ①:看折角一个个加进来。 把「ReLU 神经元数」从 1 慢慢拖到 16,盯着两个东西:橙色折线的形状,和「平均误差(MSE)」的数字。1~2 个折角时折线怎么摆都贴不住(组件会提示你这叫欠拟合——「容量」不够);到 12 个以上,误差掉到千分之几,橙线几乎压在灰线上。
实验 ②:拆开看每个神经元。 勾选「显示每个神经元的单独贡献」。每根浅绿细线就是一个 ReLU 神经元的输出:一条在自己折角处起跳的斜坡,有的向上、有的向下(输出权重有正有负)。橙色折线就是这些斜坡的总和——毫不神秘,纯粹是加法。
这就是万能逼近(universal approximation)的直觉:
折角够多、摆放得当,分段直线可以贴合任何连续曲线,误差要多小有多小。
「深」为什么比「宽」划算
上面的实验只有一层。既然一层就万能了,为什么大家都在说「深度」学习?
打个比方:一层宽网络像是只用一种零件拼东西——想拼复杂形状就得堆海量零件;深网络则是流水线——第一层用折角拼出「笔画」,第二层把笔画拼成「偏旁」,第三层把偏旁组成「字」。下层的成品被上层反复复用,同样的表达能力,深网络需要的神经元数量少得多。
这个「特征复用」的直觉在真实模型里看得见:图像网络浅层学边缘、深层学物体;语言模型浅层管词法、深层管语义和推理。
万能逼近定理只保证这样的网络存在,它不保证三件更重要的事:① 梯度下降找得到这组参数(可训练性);② 网络在没见过的数据上也表现好(泛化);③ 参数量在工程上可接受(效率)。「能表达」「能训出」「能泛化」是三件独立的事,后面几节和第 4 章会分别碰到它们。另外,本实验为了让你看清原理,把折角位置固定、只学输出权重;真实网络里连折角的位置都是训练出来的。
小结
- 一个 ReLU 神经元 = 一个折角;一层神经元的输出 = 一堆斜坡的加权和。
- 折角够多,分段直线能贴合任何连续曲线——这就是万能逼近的全部直觉。
- 「深」比「宽」划算:下层特征被上层复用,同样能力所需参数少得多。
- 能表达 ≠ 能训出 ≠ 能泛化,三件事要分开看。
延伸阅读
- TensorFlow Playground——在浏览器里搭多层网络做 2D 分类,亲眼看「深」与「宽」的差别。
- Michael Nielsen:神经网络能计算任何函数的可视化证明(英文)——用可拖动的小部件把万能逼近「证」给你看。
- 下一节 2.3 损失函数:模型有了,怎么给「错」定价?