机器学习数学基础 120 章

求导法则与一元链式法则

层级:A|必学

1. 复杂模型由简单函数组合而成

手工从极限定义求每个导数不可行。求导法则让我们复用局部导数;链式法则则把复合函数各层变化率相乘。神经网络反向传播就是多变量链式法则的系统化实现。

2. 常数倍与加减法则

ddx[af(x)+bg(x)]=af′(x)+bg′(x).\frac d{dx}[af(x)+bg(x)] =af'(x)+bg'(x).

求导是线性运算。例如

ddx(3x2−5x+7)=6x−5.\frac d{dx}(3x^2-5x+7)=6x-5.

这也解释了求和损失可以逐样本求导再相加:

ddθ∑iℓi(θ)=∑iℓi′(θ).\frac d{d\theta}\sum_i\ell_i(\theta) =\sum_i\ell_i'(\theta).

3. 乘积法则

ddx[f(x)g(x)]=f′(x)g(x)+f(x)g′(x).\frac d{dx}[f(x)g(x)] =f'(x)g(x)+f(x)g'(x).

不能写成 f′g′f'g'。直觉是乘积变化包含“第一项变化、第二项不变”和“第二项变化、第一项不变”两部分;两者同时变化的二阶小量在极限中消失。

例:

ddx[xex]=ex+xex=ex(1+x).\frac d{dx}[xe^x]=e^x+xe^x=e^x(1+x).

4. 商法则

若 g(x)≠0g(x)\ne0:

(fg)′=f′g−fg′g2.\left(\frac fg\right)' =\frac{f'g-fg'}{g^2}.

例:

ddxx1+x=1+x−x(1+x)2=1(1+x)2.\frac d{dx}\frac{x}{1+x} =\frac{1+x-x}{(1+x)^2} =\frac1{(1+x)^2}.

也可以把 1/g1/g 写成 g−1g^{-1},配合链式法则推导。

5. 链式法则

若

y=f(u),u=g(x),y=f(u),\qquad u=g(x),

则

dydx=dydududx=f′(g(x))g′(x).\frac{dy}{dx} =\frac{dy}{du}\frac{du}{dx} =f'(g(x))g'(x).

它不是普通分数约分,但微分记号准确提示了依赖路径。

局部变化解释:

Δu≈g′(x)Δx,\Delta u\approx g'(x)\Delta x, Δy≈f′(u)Δu,\Delta y\approx f'(u)\Delta u,

合并得到 Δy≈f′(u)g′(x)Δx\Delta y\approx f'(u)g'(x)\Delta x。

6. 分层计算示例

求

y=(3x2+1)5.y=(3x^2+1)^5.

令 u=3x2+1u=3x^2+1,y=u5y=u^5:

dydu=5u4,dudx=6x.\frac{dy}{du}=5u^4, \qquad \frac{du}{dx}=6x.

所以

dydx=30x(3x2+1)4.\frac{dy}{dx}=30x(3x^2+1)^4.

常见错误是只求外层 5(3x2+1)45(3x^2+1)^4,漏乘内部导数。

7. 常用复合导数

若 u=u(x)u=u(x):

ddxeu=euu′,\frac d{dx}e^{u}=e^u u', ddxlog⁡u=u′u(u>0),\frac d{dx}\log u=\frac{u'}u\quad(u>0), ddxup=pup−1u′,\frac d{dx}u^p=pu^{p-1}u', ddxσ(u)=σ(u)(1−σ(u))u′.\frac d{dx}\sigma(u)=\sigma(u)(1-\sigma(u))u'.

链式法则使“先算中间量、再传播导数”成为标准模式。

8. Sigmoid 导数

σ(x)=11+e−x.\sigma(x)=\frac1{1+e^{-x}}.

推导:

σ′(x)=−(1+e−x)−2(−e−x)=e−x(1+e−x)2.\sigma'(x)=-(1+e^{-x})^{-2}(-e^{-x}) =\frac{e^{-x}}{(1+e^{-x})^2}.

又因为

1−σ(x)=e−x1+e−x,1-\sigma(x)=\frac{e^{-x}}{1+e^{-x}},

故

σ′(x)=σ(x)(1−σ(x)).\sigma'(x)=\sigma(x)(1-\sigma(x)).

最大导数为 1/41/4;输入绝对值大时导数接近 0,深层连乘后容易产生梯度消失。

9. 对数似然求导

若似然 L(θ)>0L(\theta)>0:

ddθlog⁡L(θ)=L′(θ)L(θ).\frac d{d\theta}\log L(\theta) =\frac{L'(\theta)}{L(\theta)}.

若 L=∏ipi(θ)L=\prod_ip_i(\theta),直接乘积法则会很复杂;先取对数:

log⁡L=∑ilog⁡pi,\log L=\sum_i\log p_i,

再逐项求导,既简洁又数值稳定。

10. 计算图

以

L=(wx+b−y)2L=(wx+b-y)^2

为例拆成:

z=wx+b,r=z−y,L=r2.z=wx+b,\quad r=z-y,\quad L=r^2.

局部导数:

∂L∂r=2r,∂r∂z=1,∂z∂w=x.\frac{\partial L}{\partial r}=2r, \quad\frac{\partial r}{\partial z}=1, \quad\frac{\partial z}{\partial w}=x.

沿路径相乘:

∂L∂w=2r⋅1⋅x.\frac{\partial L}{\partial w}=2r\cdot1\cdot x.

若一个变量通过多条路径影响输出,需要把各路径贡献相加。

11. 高阶复合与梯度消失/爆炸

深层复合导数包含很多局部导数乘积。若多数绝对值小于 1,乘积指数级变小;若大于 1,可能爆炸。权重初始化、归一化、残差连接、合适激活和梯度裁剪都与控制这些乘积有关。

易错点

  1. 乘积导数不是导数相乘。
  2. 链式法则不能漏掉内部导数。
  3. 商法则分子顺序是 f′g−fg′f'g-fg'。
  4. 多条依赖路径的梯度要相加。
  5. 代数化简前后导数相同,但数值稳定性可能不同。

常见问答

Q1:反向传播是否只是链式法则?

数学核心是链式法则;算法价值是复用中间结果,以与前向计算同量级的成本得到所有参数梯度。

Q2:为什么反向而不是正向传播导数?

当输出是单个损失、参数很多时,反向模式一次传播可得所有参数梯度;逐参数正向模式成本更高。

Q3:可以先化简交叉熵与 Sigmoid 再求导吗?

可以且常得到简洁梯度 p−yp-y。实现还应使用合并的 binary_cross_entropy_with_logits 避免溢出与取 log⁡0\log0。

练习

  1. 求 d[(x2+1)ex]/dxd[(x^2+1)e^x]/dx。
  2. 求 dlog⁡(1+x2)/dxd\log(1+x^2)/dx。
  3. 求 d(e−3x)/dxd(e^{-3x})/dx。
  4. 对 L=(wx−y)2L=(wx-y)^2 求 ∂L/∂w\partial L/\partial w。
  5. 若 y=f(u,v)y=f(u,v),且 u,vu,v 都依赖 xx,写出总导数结构。

答案与提示

  1. ex(x2+2x+1)e^x(x^2+2x+1)。
  2. 2x/(1+x2)2x/(1+x^2)。
  3. −3e−3x-3e^{-3x}。
  4. 2(wx−y)x2(wx-y)x。
  5. dy/dx=(∂f/∂u)(du/dx)+(∂f/∂v)(dv/dx)dy/dx=(\partial f/\partial u)(du/dx)+(\partial f/\partial v)(dv/dx)。