数学基础

链式法则(chain rule)

/ CHAYN ROOL /

链式法则告诉你,如何求出一连串依赖关系的斜率。假设 A 一变会引起 B 变,B 一变又会引起 C 变。那么你推动 A 时,C 会动多少?链式法则的答案漂亮得很简单:把这些变化率乘起来。如果 A 动会让 B 动得快两倍,B 动又让 C 动得快三倍,那么 A 动就让 C 动得快六倍。

把它想成一串齿轮。转动第一个齿轮,它带动第二个,第二个再带动第三个。最后那个齿轮的转速,是沿途所有传动比的乘积。链式法则正是把这套逻辑改写成斜率的语言:要对一个嵌在另一个函数里头的函数求导,你先对外层求导,再乘以里头那部分的导数,像剥洋葱一样一层层剥下去。

没有链式法则,深度学习根本无从谈起。神经网络是一摞深深的函数,一个接一个地喂下去——上一层的输出就是下一层的输入,往往叠到几十层深。要训练它,你需要求出「最终误差」对一个埋在最开头附近的权重的导数。链式法则让你能沿着这条路把一路上的局部斜率乘起来,从而抵达那里。反向传播,本质上就是带着严谨记账的链式法则。它的另一面是个实实在在的危险:把许多个小斜率相乘,乘积会朝零缩去(梯度消失问题),于是靠前的层可能就停止学习了。

设你的最终得分是 y = (3x + 1)²。把外层看成「某个东西的平方」(它的斜率是「那个东西」的2倍),把内层看成 3x + 1(它的斜率是3)。链式法则把二者相乘:2·(3x + 1)·3 = 6(3x + 1)。在 x = 1 处,结果是 24——把 x 推动一丝一毫,y 变化得大约要快上24倍。

对外层求导,再乘以内层的导数——斜率像传动比一样一环扣一环地连乘。

反向传播就是链式法则,不多也不少——只是带着仔细的记账,从网络末端反着往前应用。把一长串小斜率连乘,正是梯度消失的成因,也是极深网络难以训练的缘由。

又称
链式法则鏈式法則连锁律chain rule of calculus