机器学习数学基础 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(3x25x+7)=6x5.\frac d{dx}(3x^2-5x+7)=6x-5.

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

ddθii(θ)=ii(θ).\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).

不能写成 fgf'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)=fgfgg2.\left(\frac fg\right)' =\frac{f'g-fg'}{g^2}.

例:

ddxx1+x=1+xx(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 写成 g1g^{-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).

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

局部变化解释:

Δug(x)Δx,\Delta u\approx g'(x)\Delta x, Δyf(u)Δu,\Delta y\approx f'(u)\Delta u,

合并得到 Δyf(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+1y=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', ddxlogu=uu(u>0),\frac d{dx}\log u=\frac{u'}u\quad(u>0), ddxup=pup1u,\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+ex.\sigma(x)=\frac1{1+e^{-x}}.

推导:

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

又因为

1σ(x)=ex1+ex,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θlogL(θ)=L(θ)L(θ).\frac d{d\theta}\log L(\theta) =\frac{L'(\theta)}{L(\theta)}.

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

logL=ilogpi,\log L=\sum_i\log p_i,

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

10. 计算图

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

为例拆成:

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

局部导数:

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

沿路径相乘:

Lw=2r1x.\frac{\partial L}{\partial w}=2r\cdot1\cdot x.

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

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

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

易错点

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

常见问答

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

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

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

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

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

可以且常得到简洁梯度 pyp-y。实现还应使用合并的 binary_cross_entropy_with_logits 避免溢出与取 log0\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(e3x)/dxd(e^{-3x})/dx
  4. L=(wxy)2L=(wx-y)^2L/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. 3e3x-3e^{-3x}
  4. 2(wxy)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)