再深的山,也要有一条直通中央的路

从京城到最远的那座山村,要翻一百座山。

朝廷想让圣旨传到那座最远的村子。中间没有大路——只有一条由一百座村子串起来的信路。京城把信交给第一村,第一村抄一份传给第二村,第二村抄一份传给第三村……依此到第一百村。每村都有一个抄信的文书。

开始的几年,这条信路还能用。圣旨到第一百村时内容大致还对,只是字迹有点潦草、语气有点偏差

后来村子一个个添上去——一百二,一百五,两百座。到第两百村的时候,朝廷派人去查一查原信的传达情况。查的人回来报告:第二百村收到的圣旨,里面一半的字已经不是原字了。每一村抄信的时候,都会不小心漏掉一个字、写错一个字、润色一个字——每个错误本身微不足道,但二百次抄写累积下来,原信已经面目全非

这是一件大事。朝廷要的是治理,不是耳语游戏。

更糟的还在反方向。每过一段时间,朝廷要听村里的回报——"圣旨执行得怎样了、百姓过得怎样了"。这份回报也要一村一村倒着传回来。从第二百村出发,传到京城时,里面真正关于那个村子的信息已经几乎为零——路上二百次转述,每一次都稀释一点,传到京城时,京城听到的是一片嗡嗡的远处低语

于是朝廷再也无法改善任何事情。因为朝廷改圣旨,是要根据最远那村的回报来改。回报听不清,圣旨就没法改。圣旨没法改,治理就停滞。路越长,国家越聋

有一位工匠提了一个看起来极其笨的主意:

为什么不在每一村,再修一条直接通向京城的驿道?

朝廷里有人反对——那要修多少条路?一百条、两百条——工程太大。

工匠说:这些驿道不用宽,不用好,只要通。不是每封信都走驿道;只是在每一村,保留一条"如果需要,可以直接把原信再取来一遍"的路

这事办下来之后,整条信路变了样

现在,每一村收到上一村传来的信时,它旁边就有一份从京城驿道直接送来的原件。第十村的文书,可以把上一村的改版和原件两个放在一起,决定"这一版改得合理的地方保留,改得偏差太多的地方,用原件修正回来"。信的失真被逐层补偿了——中间村的任何误差都是暂时的,因为原件永远伸手可及。

反方向的回报也一样。第两百村的回报,不再需要一村一村地传回京城——它可以顺着驿道直接发到京城。京城不再是一片嗡嗡的低语,京城能清清楚楚地听到每一座村庄的声音

于是朝廷可以改圣旨,圣旨能真正传到位,村子的反馈能真实回流。这个国家忽然能治理两百村以外的地方了再添一百村、再添一千村,都不怕

那个工匠后来一直被朝廷养着。他死的那天,他的徒弟问:"师父,你那条驿道,是不是一个最聪明的发明?"

他摇头:

它不聪明。它很简单。它只是承认了一件事——不管中间的路有多长,每一村都应该有一条不用转述的、通往源头的路

从古至今,所有复杂系统都死在"传话链太长"这件事上。我只是给了每一村一个绕过传话的方法。这个方法救了这个国家

寓言之外

这就是 Residual Connection(残差连接)——深度学习里改变一切的一个极其简单的结构,让神经网络从"几十层"的上限突破到"几百、上千层"

把每一座村子想象成神经网络的一层。输入从第一层开始,一层层向前传递:每一层做一点变换(就像每村的文书改一改字),输出从最后一层出来。这是传统的深度神经网络。

这种结构有一个致命问题:层数一深,问题就多

前向的信号衰减——输入穿过几十个非线性层之后,可能已经面目全非。即便每层只引入一点点失真,几十层累积下来就是灾难。 反向的梯度消失(Vanishing Gradient)——这是更致命的。训练时,损失的梯度需要从最后一层反向传到第一层,告诉每一层该怎么调整参数。但反向传播每经过一层都要乘一次该层的 Jacobian,很多情况下这个值小于 1——几十层乘下来,传到第一层的梯度几乎为零。那一层学不到任何东西,它再也改不了自己。 训练不稳定——深度变大后,连简单的恒等变换(identity)模型都难以学会。2014-2015 年之前,大家发现把网络从 20 层加深到 50 层,准确率不升反降——不是过拟合,就是训练不出来

2015 年,微软亚洲研究院的 Kaiming He 等人提出了一个极其简单的想法——在每一层的输入和输出之间,加一条直接相连的线。这一层做的不再是"学 y = F(x)",而是"学 y = F(x) + x"——x 从输入被直接加到输出上

这条线有几个名字:residual connection、skip connection、shortcut connection。它就是寓言里的那条驿道。

这个改动看起来微不足道——就是加法。但它解决了所有问题:

前向——即便 F(x) 学成了乱七八糟的东西,x 仍然原样通过。每一层都拿到了原始信号,模型在深层依然能访问浅层信息。 反向——梯度反向传播时,shortcut 提供了一条"直接回传的通路",不用经过非线性层,不会被 Jacobian 反复缩小。即便经过 100 层,梯度也能几乎无损地传到第一层。 学习的重新定义——原来每层是在学"完整的输出应该是什么",现在每层只需要学"相对输入我应该改多少"——学修正,而不是学整体。这件事本质上更简单,模型更容易收敛。

Kaiming He 他们在论文里展示的结果震动了整个领域——他们训练出了一个 152 层的网络(ResNet-152),它在 ImageNet 上的错误率打败了所有之前的模型。甚至他们训了一个 1000 层的版本,仍然能训练,仍然能收敛——在此之前这是想都不敢想的事

这个结构有多重要?今天几乎所有深度网络都用 residual connection。Transformer 每一个 attention 层和 feedforward 层后面都有一个 residual;ViT、BERT、GPT、LLaMA、Stable Diffusion 的 UNet——没有一个能摆脱这条小小的驿道。你要训练一个超过 20 层的网络而不用残差连接,今天是工程上近乎不可能的事

更深一层——residual connection 揭示了一件关于"复杂性"的真相:复杂系统不应该强迫每一层都做"完整的事"。一个好的深度模型,是每一层只在前一层的基础上做一点微调。整个模型是"修正的修正的修正……",而不是"从无到有地构造"。每一层的工作都很轻,但叠加起来能表达极复杂的函数

这种"以小改大"的哲学,不只是神经网络的事。科学的进步是站在前人肩膀上的小改动;软件的演化是一次次的 patch;人的成长是在昨天的自己基础上改一点点。没有哪个伟大的东西是从零开始每一步都做完整的工作——都是一层一层修正的累积

寓言里那位工匠的话,也许是整篇文章最该被记住的:

不管中间的路有多长,每一村都应该有一条不用转述的、通往源头的路

深度学习花了几十年才真正学会这一点。

在 AI 史的位置

残差连接的前身——梯度消失的发现——可以追溯到 1991 年 Sepp Hochreiter 的硕士论文。他是第一个数学上分析出"深层 RNN 为什么训不起来"的人——梯度在时间维度上反复乘一个小数,最终趋于零。他后来提出 LSTM(1997) 来解决 RNN 的这个问题——LSTM 的 "cell state" 本质上就是一种早期的 shortcut connection

2015 年 是一个分水岭。5 月,Highway Networks(Srivastava et al.)先提出了一种门控的 skip 机制。12 月,Kaiming He 等人的 ResNet 以更简单的形式(直接相加,不用门) 发表在 arXiv,在 ImageNet 2015 竞赛上一举拿下分类、检测、分割全部第一名。那篇论文(Deep Residual Learning for Image Recognition)是深度学习历史上被引用最多的论文之一,超过 20 万次。

从 2015 开始,所有深层神经网络的标配都是残差连接。DenseNet、HighwayNet、Transformer、ViT、Mamba——形式有变,跨层连接的精神从未缺席。今天你训练的任何大模型,从 GPT-2 到 Claude Opus,内部都密布着成千上万条 Kaiming He 在 2015 年画下的那条短线。

一个如此简单的想法,为什么让深度学习的深度真正变得可能?也许答案就藏在寓言里那位工匠的自嘲里:它不聪明,它只是承认了一件事实

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:12. 翻山送信的邮差

本文链接:https://www.sshipanoo.com/blog/ai/ai-fables/12-翻山送信的邮差/

本文最后一次更新为 天前,文章中的某些内容可能已过时!