2026-08-06 08:18

为什么反向传播改变了神经网络?

author_path 宇众不同的露萱
头图

本文来自微信公众号: 宇众不同的露萱 ,作者:宇众不同的露萱


为什么反向传播改变了神经网络?


一个诞生于1970年代的数学技巧,为什么要等上十几年,才等到它改变世界的机会?


今天我们训练一个神经网络,从几十万参数的小模型到千亿参数的大语言模型,底层依赖的都是同一个算法:反向传播。它安静地藏在PyTorch的loss.backward()、TensorFlow的GradientTape背后,多数人从没读过它的推导,却每天都在使用它的成果。


但很少有人知道,这个算法差一点被历史埋葬,也差一点无人问津。它的故事,是一场关于"谁能证明机器可以自己学习"的漫长战争。


故事背景:一场足以让整个领域冻结十年的争论


1958年,Frank Rosenblatt在康奈尔航空实验室造出了感知机(Perceptron)——一个能从数据里自动学习分类边界的单层神经网络。媒体为之疯狂,《纽约时报》甚至预言机器很快就能"行走、说话、看见、写作、自我复制,并意识到自己的存在"。


十年不到,泡沫破裂。1969年,MIT的Marvin Minsky和Seymour Papert出版了《Perceptrons》一书,用严谨的数学证明:单层感知机连最简单的异或(XOR)问题都无法解决。异或问题需要一条弯曲的决策边界,而单层感知机只能画直线。


这本书的杀伤力不在于它揭示了感知机的局限——理论上多加几层神经网络就能解决XOR——而在于它顺带浇灭了整个领域的信心:没有人知道该如何训练一个多层网络。当年可用的学习规则,只能根据输出层的误差调整最外层的权重,中间的隐藏层像是一群不受管教的黑箱,没有人知道该给它们分配多少"责任"。


资金枯竭,论文遇冷,这段时期后来被称为第一次"AI寒冬",持续了将近十五年。


旧方案为什么失败?


在反向传播成熟之前,训练多层网络面临一个核心困境:信用分配问题(Credit Assignment Problem)。


想象一条工厂流水线,最终产品出了质量问题,你只能看到成品的瑕疵,却不知道是流水线上哪一道工序、哪一个工人的责任。感知机的学习规则,本质上只知道调整"最后一道工序"(输出层)的参数,而对更早的、隐藏在中间的工序(隐藏层)束手无策。


当时也不是没有尝试:


  • 随机扰动法:给每个权重加一点随机噪声,看看误差是变大还是变小,据此调整方向。这在理论上可行,但计算量随参数数量线性甚至更差地增长,训练一个稍大的网络需要的尝试次数是天文数字。


  • 逐层贪心训练:先单独训练靠近输入的那一层,冻结它,再训练下一层。这种方法丢失了"全局最优"的可能性,每一层只能看到局部信息,无法根据最终误差反过来调整早期的特征提取方式。


  • 符号主义路线的反攻:既然神经网络训练不动,那不如放弃"学习",改用专家系统——把人类的知识直接编码成规则。这条路径在80年代一度大热,催生了大量商业专家系统公司,但很快暴露出"规则爆炸"的问题:现实世界的知识太琐碎、太多例外,人力编码永远追不上真实世界的复杂度。


这些方案不是当年的工程师们想不清楚,而是他们缺一样东西:一个能把"最终误差"精确、高效地分配回每一层、每一个权重的数学工具。


真正的突破:把链式法则用到极致


反向传播的数学核心其实是微积分课本里最基础的一条规则——链式法则(Chain Rule)。这条规则十九世纪就写在教科书里,任何学过微积分的人都推导过。真正的突破不是发现了新数学,而是意识到:如果把一个多层神经网络看成一条函数复合链,链式法则可以从输出一路"反向"传递梯度,直到最开始的输入层,而且计算成本只是一次前向传播的量级。


这个想法并非凭空出现,它的历史比1986年那篇著名论文早得多。1970年,芬兰学者Seppo Linnainmaa在他的硕士论文里,已经给出了自动微分中反向模式的完整推导——只是当时没人把它和神经网络训练联系起来。1974年,Paul Werbos在他的哈佛博士论文中,第一次明确提出把这套方法用于训练多层网络,但这篇论文在当时几乎无人问津。


真正让反向传播被整个领域看见的,是1986年David Rumelhart、Geoffrey Hinton和Ronald Williams在《Nature》上发表的论文《Learning representations by back-propagating errors》。这篇论文没有宣称发明了全新数学,而是用清晰的实验证明:反向传播确实能训练出有效的多层网络,隐藏层确实能自动学出有意义的特征表示。


这篇论文之所以有分量,部分原因也在于作者的身份——Hinton后来被称为"深度学习教父",几十年如一日地押注神经网络这条当时不被看好的路线,最终在2018年和Yoshua Bengio、Yann LeCun一起获得图灵奖。他们坚持的年代,恰恰是符号主义如日中天、神经网络被主流学界边缘化的年代。


源码里的体现


反向传播在代码里最经典的呈现,不是某个具体项目的源码,而是它揭示的一种计算结构:梯度沿着计算图反向流动,每一步都只依赖局部导数。


用最简化的方式表达一个两层网络的核心更新逻辑:


#前向传播:逐层计算输出


z1=W1@x+b1


a1=relu(z1)


z2=W2@a1+b2


loss=loss_fn(z2,y)


#反向传播:从输出开始,链式法则逐层回传


dz2=loss_grad(z2,y)


dW2=dz2@a1.T


da1=W2.T@dz2


dz1=da1*relu_grad(z1)


dW1=dz1@x.T


这段代码的精妙之处在于对称性:反向传播的每一步,都精确复用了前向传播中已经计算过的中间结果(a1、z1),而不需要重新计算。这不是巧合,而是链式法则的直接推论——每一层的梯度,只依赖于它自己的局部函数形式和"下游"传来的梯度信号,不需要知道整个网络更早发生了什么。


这也是为什么现代框架(PyTorch、TensorFlow)能把反向传播自动化成一个通用引擎——autograd。它们在前向传播时悄悄记录下一张"计算图",每个节点知道自己是怎么算出来的,也就自然知道该怎么把梯度往回传。用户写loss.backward()时,触发的正是这张图上从输出节点到每个参数节点的一次链式法则遍历。


设计思想


反向传播浓缩的,不只是一个算法,更是一整套至今仍在指导深度学习工程的设计哲学:


  • 局部计算,全局优化:每个节点只需要知道自己的局部导数,却能拼出全局最优方向——这是"分而治之"思想在连续优化领域的体现。


  • 复用中间结果:前向传播的中间值在反向传播时被重新使用,避免重复计算,本质上是一种"记忆化"(memoization)。


  • 计算图作为一等公民:把"如何计算"本身表示成一个可以被遍历、被自动求导的数据结构,这个思路后来直接催生了TensorFlow的静态图和PyTorch的动态图两条技术路线。


  • 梯度作为通用的"责任信号":把误差拆解成对每个参数的偏导数,本质上是给系统里的每一个组件都分配了一份可量化的"责任",这与后来强化学习里的信用分配问题一脉相承。


为什么它最终赢了?


因为它把"训练任意深度的网络"这件事,从一个几乎无解的组合优化难题,变成了一个可以用梯度下降稳定推进的连续优化问题——而梯度下降本身早已是数值优化领域几十年积累的成熟工具。


反向传播赢的不是某一场具体的性能对比,而是赢在了通用性:只要一个函数是可微的,无论它多深、多复杂,反向传播都能给出精确梯度,而且计算成本几乎恒定,不随网络深度指数增长。这个特性让研究者敢于不断加深网络——从LeNet的几层,到AlexNet的8层,再到ResNet的上百层,每一次加深都建立在反向传播依然可靠的信心之上。


今天几乎所有深度学习框架都是围绕反向传播设计的运行时:PyTorch的动态计算图、TensorFlow的GradientTape、JAX的函数式自动微分,本质上都是同一个数学工具的不同工程实现。它改变的不只是神经网络怎么训练,而是重新定义了"什么问题可以被机器学习解决"——只要能写成一个可微分的函数,就有希望被数据和梯度下降找到答案。


有没有更好的方案?


今天重新审视反向传播,它并非完美无缺,一些裂缝已经显现,也确实在被修补甚至绕开。


梯度消失/爆炸问题曾长期困扰深层网络——误差信号在层层回传的乘法链条中,可能指数级衰减到趋近于零,也可能指数级爆炸。这直接推动了ReLU激活函数取代Sigmoid(避免梯度被压缩到极小区间)、残差连接(ResNet的核心创新,让梯度可以"抄近路"直接跨层传递)、以及各种归一化技术(BatchNorm、LayerNorm)的诞生。这些都不是对反向传播本身的替代,而是为了让它在更深的网络里依然好用。


生物合理性的质疑也从未停止。Hinton本人后来多次公开反思:真实大脑的神经元不太可能像反向传播要求的那样,精确地把误差信号原路传回突触——大脑更可能用某种局部学习规则完成类似的效果。这催生了一系列探索性的替代方案,比如反馈对齐(Feedback Alignment)、前向-前向算法(Forward-Forward Algorithm,Hinton本人在2022年提出),试图用更接近生物神经元行为的方式实现类似的学习效果。


硬件正在反过来塑造算法。GPU的大规模并行矩阵运算能力,恰好完美契合反向传播里密集的矩阵乘法,这某种程度上也是"硬件红利选择了算法路线"的结果——如果没有GPU的算力爆发,反向传播训练大模型的想法很可能依然停留在纸面。


但到目前为止,还没有任何一种替代方案,在通用性、稳定性和工程成熟度上真正撼动反向传播的主导地位。


现实中的应用


从图像识别到语言模型,反向传播是几乎所有现代深度学习系统共同的地基:


  • PyTorch/TensorFlow/JAX:三大主流深度学习框架的自动微分引擎,底层实现的正是通用化的反向传播。


  • YOLO:目标检测模型的每一次训练迭代,都依赖反向传播把检测误差精确传回骨干网络的每一层卷积核。


  • Transformer与大语言模型:无论是GPT系列还是其他大模型,预训练阶段的参数更新,本质上都是在一张极其庞大的计算图上执行反向传播。


  • AlphaGo/AlphaFold:无论是强化学习中的策略网络,还是蛋白质结构预测中的深度网络,参数优化的核心机制没有脱离这套框架。


它们采用同一套机制,不是因为没有更好的选择,而是因为过去将近四十年里,没有任何一个替代方案,能在"效果、效率、工程可实现性"这三者上同时超越它。


一句话总结


真正伟大的算法,往往不是诞生时就震撼世界,而是安静地等待,直到时代终于准备好理解它的价值。

本内容由作者授权发布,观点仅代表作者本人,不代表虎嗅立场。
如对本稿件有异议或投诉,请联系 tougao@huxiu.com。