以下内容由AI辅助生成
本文从导数的直觉含义出发,逐步引入链式法则、偏导数、反向传播与梯度下降,并通过一个带分叉的完整计算图示例,解释反向传播为什么必须存在,以及梯度复用与梯度汇总在计算中究竟发生在什么地方。
一、导数的本质:变化率
导数描述的是变量之间的变化关系:
当一个量发生微小变化时,另一个量会随之变化多少。
数学上通常写作:
直觉上可以理解为:
在机器学习中,导数的意义并不是求解数学问题,而是用于判断如何调整参数,结果才会向更好的方向变化。
二、多变量函数与偏导数
实际问题中,函数往往依赖多个变量,例如:
此时,单一导数已经不足以描述不同变量对结果的影响。偏导数的含义是:
在保持其他变量不变的前提下,只考察某一个变量变化,对结果造成的影响。
例如:
则有:
即使是同一个损失函数,不同参数对它的影响程度也是不同的。
三、多步计算与链式法则
当一个量的变化需要通过中间变量传递时,就会出现多步依赖关系。
设:
则:
这就是链式法则。
它的直觉表述是:
多步计算的变化率,可以拆成每一步变化率的连乘。
链式法则是反向传播的核心数学规则,但并非唯一规则。在分叉结构中,还需要偏导数的加法规则来汇总来自不同路径的梯度。
四、神经网络的数学本质
从数学角度看,神经网络只是一个参数极多、结构复杂的函数:
训练的目标可以概括为一句话:
通过调整参数,使损失函数
关键问题因此变成:
每个参数改变一点点,会让损失函数变多少?
也就是计算:
五、正向传播与反向传播的分工
正向传播的作用是计算数值。
在正向传播中,输入数据沿着计算图向前传递:
在一次正向传播完成后,损失函数
反向传播并不是将函数倒过来计算,而是:
在正向计算完成之后,以损失函数为起点,沿计算图的反方向系统地应用链式法则,计算损失函数对各个中间变量和参数的偏导数。
反向传播过程中传递的不是损失函数本身,而是:
也就是说,如果当前位置发生单位变化,最终损失函数会变化多少。
六、梯度下降:参数更新发生的地方
反向传播的结果是得到各个参数对应的梯度,但它本身并不修改参数。
参数的更新由梯度下降完成:
其中,
梯度的符号决定更新方向,梯度的大小决定更新步长。当梯度逐渐接近零时,参数逐步逼近损失函数的极小值。
七、为什么反向传播要沿着计算图反向进行
在线性链结构中,每个节点只有一条梯度传播路径,反向传播的优势不太明显。
真正的区别来自具有分叉和汇合的结构。
在分叉结构中,一个节点可能同时影响多个下游节点;在反向传播时,这些下游节点对损失函数的影响,必须被完整地汇总回上游节点。这一过程无法通过简单的正向计算完成。
因此,反向传播在工程上是不可替代的。
八、一个完整的二分叉数值示例
计算图结构
1 | h2 = w2 · h1 |
对应的数学定义为:
设定具体数值:
正向传播计算过程
此时,损失函数是一个确定的数值。
反向传播计算过程
现在从损失函数
第一步:计算
第二步:梯度分发到两个分支
由于
第三步:计算
第四步:梯度汇总到
这是关键步骤。由于
第五步:计算
至此,我们得到了所有参数的梯度:
九、反向传播在分叉结构中的作用方式
反向传播仍然完全遵循链式法则。差异不在于数学规则本身,而在于计算图的结构。
在上述分叉结构中:
输出
中间节点
此外,正向传播中计算得到的中间变量(如
这些现象并不是额外引入的规则,而是链式法则和偏导数加法规则在分叉计算图中的自然结果。
十、总结
导数描述变量之间的变化率,偏导数用于区分多变量函数中不同变量的影响。链式法则解决多步依赖问题,偏导数的加法规则处理梯度汇总。反向传播是以损失函数为起点,对这些数学规则在计算图上的系统组织。梯度下降利用反向传播得到的梯度更新参数。在具有分叉结构的网络中,反向传播天然包含梯度分发、梯度复用与梯度汇总。
可以用一句话概括全文:
反向传播不是新的数学,而是对链式法则和偏导数加法规则在复杂计算图上的高效组织与实现。