AI 术语通俗词典:链式法测
链式法则是微积分、机器学习、深度学习、自动微分和人工智能中非常基础的一个术语。它用来描述当一个函数由多个函数嵌套组成时如何计算整体函数对某个变量的导数。 换句话说链式法则是在回答一个结果经过多步计算得到时最终结果的变化应该怎样一层层追溯到最初输入。如果说导数回答的是“一个变量变化会让结果变化多少”那么链式法则回答的就是“当变量之间存在多层依赖关系时这种变化如何逐层传递”。因此链式法则常用于神经网络训练、反向传播、自动微分、计算图、梯度下降和深度学习框架是理解模型如何学习参数的核心基础。一、基本概念什么是链式法则链式法则Chain Rule是求复合函数导数的基本规则。假设有两个函数也就是说y 不是直接由 x 得到的而是先由 x 得到 u再由 u 得到 yx → u → y那么 y 对 x 的导数为其中• dy/dx 表示 y 对 x 的变化率• dy/du 表示 y 对 u 的变化率• du/dx 表示 u 对 x 的变化率从通俗角度看链式法则可以理解为如果 x 先影响 uu 再影响 y那么 x 对 y 的影响等于“x 对 u 的影响”乘以“u 对 y 的影响”。例如可以拆成那么所以这就是链式法则的基本思想复杂函数可以拆开求导再把局部导数连乘起来。二、为什么需要链式法则链式法则之所以重要是因为现实中的模型通常不是一步算出结果而是由许多连续计算组成。例如一个人工神经元会先计算线性输入再通过激活函数再与真实标签计算损失整个过程可以写成x, w, b → z → a → L训练模型时我们关心的不是只算出 L而是要知道也就是损失对权重和偏置的影响。问题在于L 并不是直接由 w 和 b 得到的而是经过 z、a 等中间变量一步步计算出来的。链式法则正好解决这个问题它允许我们沿着计算路径把最终损失对参数的影响一层层传回去。从通俗角度看参数影响中间结果中间结果影响输出输出影响损失所以参数也会间接影响损失。链式法则就是用来计算这种“间接影响”的数学工具。这也是反向传播能够训练深度神经网络的根本原因。三、链式法则的核心公式最基本的链式法则是如果中间变量更多例如x → u → v → y也就是那么从通俗角度看只要变量之间形成一条依赖链整体导数就等于这条链上每一步局部导数的乘积。在深度学习中变量往往不是标量而是向量、矩阵或张量。此时链式法则仍然成立只是导数会变成偏导数、梯度、雅可比矩阵或张量形式。对于多变量函数如果那么可以写为其中• ∂L/∂w 表示损失对参数 w 的偏导数• ∂L/∂z 表示损失对中间变量 z 的偏导数• ∂z/∂w 表示中间变量 z 对参数 w 的偏导数这正是神经网络参数梯度计算的基础形式。四、一个直观例子从简单函数理解链式法则假设有一个函数这个函数看起来是一个整体但可以拆成两步也就是x → u → y先求每一步的导数根据链式法则代入得到再把 u 换回从通俗角度看x 每变化一点先让 u 变化u 的变化再让 y 变化。链式法则就是把这两段影响连起来。这也是为什么它叫“链式”法则变量之间像一条链变化沿着链传递。五、链式法则与计算图链式法则和计算图关系非常密切。计算图把一个复杂计算拆成许多简单步骤而链式法则告诉我们如何沿着这些步骤求导。例如有一个简单损失函数可以拆成z wxa z be a - yL e²对应的计算路径是w, x → z → a → e → Lb ─────┘y ─────────→ e如果要计算 L 对 w 的导数就沿着路径w → z → a → e → L反向应用链式法则从通俗角度看计算图告诉我们变量之间怎样连接链式法则告诉我们梯度怎样沿这些连接传递。这正是自动微分框架的工作基础。在 PyTorch、TensorFlow 等框架中用户通常不需要手动推导这些导数。框架会记录计算图然后根据链式法则自动计算梯度。六、链式法则与反向传播反向传播Backpropagation本质上就是链式法则在神经网络中的系统应用。神经网络前向传播时数据从输入层流向输出层输入 → 隐藏层 → 输出 → 损失反向传播时梯度从损失开始沿相反方向传回每一层损失 → 输出层 → 隐藏层 → 输入层每一层都会根据链式法则计算其中• L 表示损失函数• W 表示某一层的权重矩阵• b 表示某一层的偏置例如某一层计算为如果已经知道那么需要继续计算再进一步计算从通俗角度看反向传播就是从最终错误出发一层层追问每个参数对这个错误负多少责任。链式法则则提供了这种“责任分配”的数学规则。七、链式法则与自动微分自动微分Automatic Differentiation是现代深度学习框架自动计算梯度的核心技术。它的基本思想是把复杂函数拆成基本运算并在计算图上反复使用链式法则。例如复杂函数可能由以下基本运算组成• 加法• 乘法• 除法• 指数• 对数• 矩阵乘法• 激活函数• 损失函数每个基本运算都有简单的导数规则。自动微分系统会记录这些运算的连接关系然后用链式法则组合局部导数。从通俗角度看自动微分 记录计算过程 自动套用链式法则这与数值差分不同。数值差分会通过微小扰动近似导数例如这种方法简单但在高维模型中计算成本高而且有近似误差。自动微分则可以更精确、更高效地计算梯度。因此链式法则是自动微分能够工作的数学核心。八、链式法则的优势、局限与使用注意事项1、链式法则的主要优势链式法则最大的优势是可以处理复杂复合函数。无论函数有多少层只要每一步可导就可以把整体导数拆成局部导数的组合。其次链式法则非常适合神经网络。神经网络本质上就是多层函数复合每一层都可以看作一个函数链式法则正好用于计算整体函数对各层参数的梯度。再次链式法则支持模块化求导。每个运算只需要知道自己的局部导数整体梯度就可以通过组合得到。从通俗角度看链式法则的优势在于它让复杂模型的求导变成“局部求导 逐层传递”。2、链式法则可能带来的问题链式法则本身是严格的数学规则但在深度学习中它会带来一些训练现象。因为梯度是许多局部导数连乘的结果如果这些局部导数长期小于 1梯度可能越来越小这就是梯度消失。如果这些局部导数长期大于 1梯度可能越来越大这就是梯度爆炸。例如如果中间很多因子都很小最终梯度可能接近 0。从通俗角度看链条太长时信号一层层传递可能越来越弱也可能越来越强。这就是深层网络训练需要激活函数、归一化、残差连接、合理初始化和优化器设计的重要原因。3、使用链式法则时需要注意的问题理解链式法则时需要注意• 链式法则适用于复合函数求导• 深度学习中的反向传播本质上依赖链式法则• 计算图提供变量依赖结构链式法则提供梯度传播规则• 多变量情况下通常使用偏导数和梯度• 深层网络中链式连乘可能引发梯度消失或梯度爆炸• 自动微分框架会自动应用链式法则但理解原理有助于调试模型从实践角度看链式法则不是只存在于数学课本中的公式而是深度学习模型能够训练的基础机制。九、Python 示例下面给出几个简单示例用来帮助理解链式法则的计算过程。示例 1手动计算一个复合函数的导数假设根据链式法则用 Python 计算 x 2 时的导数x 2 # 中间变量u 2 * x 3 # 函数值y u ** 3 # 链式法则dy_du 3 * u ** 2du_dx 2dy_dx dy_du * du_dx print(u, u)print(y, y)print(dy/dx, dy_dx)这个例子展示了x → u → y整体导数等于两段局部导数的乘积。示例 2使用 PyTorch 自动应用链式法则import torch # 创建需要梯度的张量 x 2.0x torch.tensor(2.0, requires_gradTrue) # 复合函数u 2x 3, y u³u 2 * x 3y u ** 3 # 反向传播计算 y 对 x 的导数y.backward() print(y, y.item()) # 输出 y (2*23)³ 7³ 343print(dy/dx, x.grad.item()) # dy/dx 3u² * 2 3*49*2 294PyTorch 会自动记录计算图x → u → y调用 y.backward() 后框架会沿计算图反向传播梯度并自动应用链式法则。示例 3神经元中的链式法则假设一个简单神经元使用 PyTorch 自动计算梯度import torch # 输入、参数和真实值x torch.tensor(2.0) # 输入特征w torch.tensor(3.0, requires_gradTrue) # 权重需梯度b torch.tensor(1.0, requires_gradTrue) # 偏置需梯度y_true torch.tensor(10.0) # 真实标签 # 前向计算z w * x b # 线性输出z 3*217a torch.relu(z) # ReLU激活max(0,z)7loss (a - y_true) ** 2 # 平方误差损失(7-10)²9 # 反向传播自动计算损失对w、b的梯度loss.backward() print(z, z.item())print(a, a.item())print(loss, loss.item())print(dL/dw, w.grad.item()) # 梯度 2*(a-y_true) * (1 if z0 else 0) * x 2*(-3)*1*2 -12print(dL/db, b.grad.item()) # 梯度 2*(a-y_true) * 1 -6这个例子中梯度会沿着w, b → z → a → loss反向传播。从链式法则角度看示例 4计算图被切断时梯度无法传递import torch # PyTorch 库 # 创建需要梯度的张量 x 2.0x torch.tensor(2.0, requires_gradTrue) # 计算 u 2x 3保留计算图u 2 * x 3 # detach 切断 u 与计算图的连接返回不可导的新张量u_detached u.detach() # 对 detached 张量进行立方运算y 无法反向传播到 xy u_detached ** 3 # u 有 grad_fn乘法加法u_detached 无 grad_fny 有 grad_fn幂运算print(u.grad_fn, u.grad_fn)print(u_detached.grad_fn, u_detached.grad_fn)print(y.grad_fn, y.grad_fn)这个例子中detach() 会让 u_detached 脱离原来的计算图。因此y 不再依赖 x 的梯度路径。从通俗角度看链式法则需要一条连续的计算链如果计算图被切断梯度就无法沿链条传回去。 小结链式法则是复合函数求导的基本规则。它说明当一个结果由多个中间步骤计算得到时整体导数可以由各步骤局部导数相乘得到。深度学习中的反向传播、自动微分和计算图都建立在链式法则之上。对初学者而言可以把链式法则理解为结果的变化会沿着计算路径一层层传回去每一步的局部影响相乘就得到最初变量对最终结果的影响。“点赞有美意赞赏是鼓励”