第六章:面壁者的破壁一剑

第二卷:寒武纪的来临--算力觉醒与物种大爆发

1、破解梯度消失的秘密

1991年,塞普·霍克赖特(Sepp Hochreiter)还是慕尼黑大学的一名硕士生。当时霍克赖特正试图用RNN处理一些具有时间序列特征的任务。他发现,当时间步稍微拉长,如果让网络记住 10 步之前的一个信号,网络的表现就会断崖式下跌。这其实是RNN的老毛病了,连埃尔曼这位时间领主都无法彻底解决。当时想要使用RNN,就必须小心的摆弄那些初始化参数,再一层层的叠加网络,争取在10层以内解决问题。埃尔曼宣称:“人类的记忆力也是有限的”,所以大家都认为这是算力不够导致的物理限制,所以欣然接受这个问题,本着能用就行了,还要啥自行车的态度,像炼金术士一样摆弄着RNN网络。

塞普·霍克赖特(Sepp Hochreiter)

霍克赖特有着典型德国知识分子的特征。他极度的严谨、有一种不随大流的孤傲,以及一种德国式的对底层逻辑的痴迷。如果他是个灵活、随和的美国硅谷青年(埃尔曼隔空打了个喷嚏),他可能会想方设法绕过这个问题,并给出一个貌似合理的解释。但他没有,他不会愿意承认他的网络练不好是因为运气不好,所以他翻出了BP的论文,开始从根源上寻找为什么梯度会消失。

当然,仅凭勤奋和坚持,是很难解释这样一个困扰全球天才学者多年的问题,会被一个当时24岁的青年解决的。霍克赖特的导师尤尔根·施密德胡伯(Jürgen Schmidhuber),在这过程中也起到了非常重要的作用。

尤尔根·施密德胡伯(Jürgen Schmidhuber)

施密德胡伯的经历非常特殊,他深受库尔特·哥德尔和算法信息论的影响。在大多数人把神经网络看作“简单的分类器”时,施密德胡伯坚持认为神经网络本质上是可以运行程序的通用计算机。他引导霍克赖特从“计算理论”的角度去审视 RNN。既然是计算机,就需要有“内存”。但在当时的 RNN 中,作为内存的权重矩阵在每个步骤都会被修改。施密德胡伯这种“网络即计算机”的执念,让霍克赖特意识到:如果这台计算机的写操作(梯度更新)在长距离运行后失效,那么这台机器就是报废的。这种问题的严重性,是不能用优化和运气来掩盖的。这直接促使霍克赖特去寻找那个让计算崩溃的数学断点。

在“数学断点具体在哪里?”这个问题上,施密德胡伯给出了一句颇具哲学意味的话:普通的递归由于其自身的结构,存在某种无法跨越的“认知鸿沟”。这句话的通俗解释是:有些递归计算,是不适合保存记忆的。

霍克赖特在这句话的指导下,重新审视了反向传播的机制。在 RNN 中,为了计算损失函数对 t 时刻权重的梯度,我们需要利用链式法则将梯度从当前的 T 时刻层层传回 t 时刻。如果我们要把误差传回 k 个时间步,梯度公式中会出现一个类似于 W^k 的项(W 是权重矩阵)。

当梯度经过一层时,它都需要和权重矩阵相乘。权重矩阵的特征值,决定了这个梯度在不同方向上的量是否会被放大或者缩小。如果 W 的特征值小于 1,经过 k 次方运算,梯度会呈指数级衰减。例如,0.9^{50} \approx 0.005,传到最后信号几乎为零,这就是为什么梯度会在经过多层就消失的原因。如果 W 的特征值大于 1,梯度会呈指数级爆炸。例如,1.1^{50} \approx 117,梯度会瞬间冲破计算机的数值极限。这就是梯度爆炸。

所以,W 的特征值决定了梯度消失还是梯度爆炸。控制权重矩阵的特征值就是解决梯度消失的第一个关键。

霍克赖特进一步指出,当时主流使用的 Sigmoid 激活函数让这个过程雪上加霜。Sigmoid 函数的导数最大值只有 0.25(出现在 x=0 时)。这意味着,即便权重 W 是 1,每经过一层,梯度至少也会被削减 75%。如果网络有 10 层,梯度就会衰减到 0.25^{10} \approx 0.00000095。这就解释了为什么网络只能学到“眼前”的规律,而对于长距离的因果关系,它在数学上根本“感知”不到。Sigmoid 激活函数的特征是梯度消失的第二个原因。

发现问题往往是成功的一半,但是这句话对于复杂问题来说,并非如此。因为复杂问题之间往往是互相交叠的,牵一发而动全身。W 的特征值就是这么一个东西。当约束特征值时,就会影响神经网络本身的权重调整范围,就会让这个网络的智能受到影响。霍克赖特虽然很快找到了约束特征值的方法CEC,但是却在解决RNN的训练问题上,束手无策。

但这并不影响他的硕士论文的发表,他的硕士论文《Untersuchungen zu dynamischen neuronalen Netzen》(关于动态神经网络的研究)在1991年成功发表了。这篇论文也成为了神经网络历史上可被记入史册的一篇。可惜的是,这篇论文是用德语写的,在当时并没有造成学术圈的任何反响,

此时的辛顿,正在苦寒的多伦多经历着又一次的“移情别恋”。这时BP的热潮已退,大家纷纷撞上了梯度消失的叹息之壁,学术界开始抛弃神经网络,转向支持向量机(SVM)和核方法(Kernel Methods)。既然既然“深层”网络训练不动,他转而研究如何让网络结构更灵活。1991 年他发表了一篇极具前瞻性的论文,《Adaptive Mixtures of Local Experts》(自适应混合专家系统)。这篇论文提出了 MoE (Mixture of Experts) 架构,它对整个行业的发展也非常的重要,这个故事我们在后面会重点讲述,但就梯度消失这个问题而言,辛顿并无任何进展。

此时,大时代选择站在聚光灯下的,又是一个来自法国的天才少年。他出生在法国巴黎,有着摩洛哥和犹太人的血统,他的名字叫约书亚·本吉奥(Yoshua Bengio)。

约书亚·本吉奥(Yoshua Bengio)

2018 年的图灵奖,罕见的颁给了三个人,他与辛顿、杨立昆共同获得了此项殊荣。从此他们三个被并称为“深度学习三巨头”。正是他们三个在寒冬中的抱团取暖,才让深度学习不至于在2000年左右彻底的死掉。他们达成了一个神圣同盟,无论外界如何嘲笑,他们就是要证明深度学习才是计算科学的未来。

在多伦多的辛顿,为了不让深度学习的火种熄灭,向加拿大高等研究院(CIFAR)申请了一笔资金。他用这笔钱搞了一个名为“神经计算和自适应感知”的项目。辛顿把杨立昆和本吉奥都拉了进来。他们每年在温哥华等地开会,不讲究排场,没有那种充满客套话的学术报告,而是几个人关在屋子里,在白板上疯狂推导公式,互相攻击对方的漏洞,然后一起去滑雪。短暂的聚会之后,大家再各自分散,去独立完成自己的任务。他们的配合默契,分工有序,如同配合多年的王者荣耀职业战队。

辛顿担任的是中路法师的角色,他最喜欢的英雄应该是“姜子牙”。姜子牙的被动技能是给队友加经验,这一特质在辛顿身上体现的是淋漓尽致。辛顿桃李满天下,几乎所有现代AI的大牛都受到过他的指点,他是真正的众神之父。辛顿的个性中有着海洋国家人民的灵活度,这就导致他本身比较脆皮,需要被保护,在PDP小组里有鲁梅尔哈特,在CIFAR项目里有杨立昆,在他们的掩护下,他的蓄力30年的大招“蓄力一击”,才得以发出,瞬间清场。

杨立昆则是对抗路的战士,他应该是使用亚瑟的最佳人选。杨立昆是三巨头里最“入世”、最有战斗欲的一位。杨立昆性格极其刚烈,经常在社交媒体与人对线。不管是马斯克、马库斯还是索菲亚机器人,只要他觉得对方在胡扯,他直接“跳脸”输出,毫不留情。他就像站在前排的战士,替深度学习挡下了无数口水,并反手一记重剑。他的LeNET-5当时赢得了银行支票识别的商业订单,这如同亚瑟的被动回血技能,虽然从经济的角度微不足道,但确实会让团队看到深度学习落地应用的希望。

至于本吉奥,则是作为游走的辅助,时刻站在他们两位身旁。他就好像游戏里的庄周,不吃全队的经济,也不抢人头,而是为了团队的BUFF和全图视野一直在忙碌着。本吉奥在学术领域的探索,如同开视野的辅助,总能让行业及早的发现潜伏在草丛中的危险。而他在90年代,对RNN的梯度消失问题的发现,如同庄周的大招“解控”,为整个行业打破梯度消失这堵叹息之墙,解除了控制。

和霍克赖特的纯数学的硬核解释不同,本吉奥对梯度消失的解释则更加接近霍普菲尔德网络的物理学灵魂。对于早已接受这种观念的西海岸的PDP小组和多伦多坚守的辛顿,这种表述上的一致性,让她们有种天然的亲近感。在 80 年代末到 90 年代初,神经网络领域正处于一个被物理学家“接管”的时期。那时研究神经网络的,占多数的是统计物理学家,他们更容易理解“能量景观”、“相变”、“吸引子”这类物理名词,而对微积分和线性代数没那么敏感。霍克赖特的论文,在他们看来,更像是检查代码里的Bug,而不是在发现宇宙的规律,显得不那么性感。

学术界的大佬们也并非全然客观,他们也有着大量的鄙视链存在。和宣称“路不好走”的技术报告比起来,学术界更偏爱那些宣判“死刑”的哲学性结论。本吉奥的理论,构建了一个类似海森堡测不准原理的宏大结论。这个结论的确比霍克赖特的硕士论文更有深度。

霍克赖特回答了How,他的论文精准的解释了梯度是怎么消失的。他的答案是:因为连乘。因为特征值小于 1。这很硬核,很精准。而本吉奥则回答了Why。在本吉奥的论述里,梯度是注定要消失的。本吉奥告诉大家,梯度消失是因为我们在对抗熵(噪声)。为了对抗噪声,我们需要吸引子把状态“吸”住;而一旦吸住了,信息就流不动了。这种解释触及了信息的本质。它把梯度消失解释为“为了鲁棒性所必须付出的代价”。这种解释的层级显然比“矩阵连乘”高了一个维度。

正因如此,虽然施密德胡伯一直在为自己弟子更早发表的对于梯度消失的解释不受重视而义愤填膺,斥责北美学术圈对欧陆学术成果的忽视,但本质上,从学术理论的视角和维度上来看,的确本吉奥的发现是更胜一筹的。学术圈的确也讲政治,但这也仅会出现在差距不大的情况下,本吉奥和霍克赖特这种大师和工匠级别的差距,是和学术政治完全扯不上关系的。本吉奥的结论被认为是解释梯度下降的圭臬,应该是实至名归的。这个规律的发现,是本吉奥的雏凤之啼,在后续的几十年后,他持续不断的为行业输出着惊喜。

2、几何视角的梯度消失问题

让我们跟随本吉奥的视角,重新审视一下这个梯度消失问题。

我们需要先建立一个几何视角,权重矩阵 W 乘以一个向量 v,本质上是对向量 v 进行旋转和伸缩。矩阵 W 有一些特定的“主轴”方向。在这些方向上,向量不会旋转,只会伸长或缩短。特征值 \lambda 就代表了在“主轴”方向上的伸缩倍率。

向量在主轴方向的伸缩示意图

让我们看看霍克赖特对梯度消失和梯度爆炸的诠释,在几何视角下的面貌。

特征值 |\lambda| > 1 ,这种情况下属于梯度爆炸。想象梯度向量是一个放在原点的小箭头。当第一次乘 W:它沿着特征向量的方向被拉长了一点;第二次乘 W:基于上次的结果,又拉长了一点。在多次拉长之后,整个长度变得无限大,就好像把照片放大多次,最后只能看到几个巨大模糊的像素,计算机无法处理这么大的数字,直接崩溃了。

当特征值 |\lambda| < 1 时,这种情况就是梯度消失,想象梯度向量是一个气球。第一次乘 W:气球漏气了,体积缩小为原来的 0.9 倍;第二次乘 W:体积又缩小为 0.9 倍。多次收缩后,向量向原点坍缩。无论初始的误差信号有多强,经过层层空间的“压缩”,最后到了第一层时,梯度向量变成了一个几乎看不见的几何点。此时,第一层的权重感觉不到任何拉力,所以它停止了学习。

这就好像在捏面团,如果将面团用大力不停的拉长,面团最终一定会断掉,如果用大力不停的压面团,则面团一定会被压成一个小点,直到在视线里面看不见。而所谓的神经网络的训练,就是一个技艺高超的面点师,在捏面团的时候,尽量确保面团保持原来的体积(即 |\lambda| \approx 1 ),这就是神经网络训练的炼金术的本质。让我们记住这个捏面团的比喻,后面我们还会用它来理解解决梯度消失的方案。

让我们回到本吉奥的视角,看看他和霍普菲尔德是怎么看待神经网络训练这个问题的。

让我们再用几何的视角详细回顾一下霍普菲尔德的观点。

霍普菲尔德认为,所谓的记忆就是蓝色小球停留在的坑的位置,可能是上面的局部最优,也可能停留在下面的全局最优处。在这样一座峰峦叠嶂的复杂地形中,寻找到全局最优是非常困难的,但是小球总是会沿着梯度往下滚的。反向传播就是当小球卡在某个小坑的时候,把它往上推一推,离开这个小坑,继续往下滚。所谓记忆的长度,就是这个小球滚动的轨迹。

从这个图我们可以看出,要想小球滚的久(记忆长度长),那么这个山坡就应该平坦,梯度自然就会很小,甚至消失。如果想要陡峭的山谷,那么就没办法让记忆的长度太长。

这就是本吉奥的核心观点,记忆和学习(训练难度)之间是存在根本上的矛盾的。要想维持稳定的长时记忆,就得承担训练难度大,甚至梯度消失导致训练失败的风险,否则就只能让记忆变短。这并不是什么数学技巧或者运气问题,而是RNN的必然。

在这篇论文中,本吉奥其实是比较悲观的。他的结论更像是:“这事儿太难了,梯度下降这种方法可能搞不定。”在这个结论下,只能有两条路可以选了:

第一条路是改变学习方法,不用梯度下降结合BP计算梯度,第二条路是改变目标,不再追求长时记忆。当人们意识到本吉奥说的是对的,就开始在架构上用工程的方式努力尝试找到一个满意的方案了。这种取舍,找平衡的手段,被叫做trade off,是一种常见的工程智慧。后面,我们还会见到大量的这种智慧的方法闪烁在人工智能的发展进程中。

辛顿的方法就是采用第一种方法,他开始使用玻尔兹曼机实现他的破壁之旅。而霍克赖特和他的老师施密德胡伯则选择了第二条路,改变了追求长时记忆的目标。