神经网络有上亿个参数,靠人工调整绝无可能。反向传播给出了一条高效算出每个参数该往哪调、调多少的路线。本文用“责任分摊”的比喻讲清它的思路,并说明它如何让多层网络的训练第一次变得切实可行。
核心要点
- 反向传播先用前向计算得出误差,再沿网络把误差往回逐层分摊。
- 它依赖链式法则逐层求梯度,避免对每个参数重复做前向计算。
- 算出梯度后由优化器更新参数,一个定方向、一个定步长。
误差该由谁负责
网络做出一次预测,和正确答案一比,得到一个误差。接下来要问的是:网络里成千上万个参数,各自该为这个误差负多少责任?最笨的办法是逐个参数去试——把它微微调大一点,看看误差怎么变。参数一多,这个做法的成本会大到无法承受。
反向传播给出了聪明的解法。它注意到误差是沿着网络一层层算出来的,前面层的参数只能通过影响后面层来间接影响误差。既然如此,就可以从输出层开始,把误差责任逐层往回摊派,每个参数只需知道它所在层的局部信息,一次反向遍历就能算清楚全部责任。
从输出层往回走
过程分两段。前向阶段,输入从前往后算过每一层,中间结果被暂存,最后得到预测值并算出误差。反向阶段则从误差出发,利用链式法则一层层往回推:先算输出层参数的梯度,再算倒数第二层,依此类推。前向时存好的中间结果直接复用,避免重复计算。
链式法则听起来抽象,其实就是“牵一发动全身”的量化版本:如果一件事情通过若干中间环节影响到最终结果,那么总影响等于各环节影响的连乘。网络里每一层只做几次乘法和加法,梯度公式很好写,这才让上亿参数的训练在工程上变得可行。
它带来了什么变化
反向传播的思想在 1986 年前后随着相关工作的发表被广泛传播,让多层网络的训练第一次变得切实可行,神经网络研究由此重新活跃起来。此后几十年,深度学习的起起落落几乎都围绕着一个主题:如何让梯度在更深的网络里依然传得动、传得稳。
需要澄清的是,反向传播只负责算出梯度,也就是每个参数该往哪个方向调、调多少;真正动手更新参数的是各种优化器。优化器综合考虑学习率、动量、历史梯度等因素,决定这一步实际迈多大。一个算方向,一个定步长,合起来才是一次完整的学习。
常见问题
反向传播是不是生物大脑的学习方式?
几乎肯定不是。大脑没有全局的误差信号,也没有把梯度往回精确回传的机制,突触的调整依赖局部的时序关系。反向传播是工程上计算梯度的高效算法,应当把它当作数学工具看待,而不是对生物学习过程的模拟。
本文为 AI 科普内容,仅用于知识普及,不构成任何技术选型、投资或职业决策建议。