求导法则与一元链式法则
层级:A|必学
1. 复杂模型由简单函数组合而成
手工从极限定义求每个导数不可行。求导法则让我们复用局部导数;链式法则则把复合函数各层变化率相乘。神经网络反向传播就是多变量链式法则的系统化实现。
2. 常数倍与加减法则
dxd[af(x)+bg(x)]=af′(x)+bg′(x).
求导是线性运算。例如
dxd(3x2−5x+7)=6x−5.
这也解释了求和损失可以逐样本求导再相加:
dθdi∑ℓi(θ)=i∑ℓi′(θ).
3. 乘积法则
dxd[f(x)g(x)]=f′(x)g(x)+f(x)g′(x).
不能写成 f′g′。直觉是乘积变化包含“第一项变化、第二项不变”和“第二项变化、第一项不变”两部分;两者同时变化的二阶小量在极限中消失。
例:
dxd[xex]=ex+xex=ex(1+x).
4. 商法则
若 g(x)=0:
(gf)′=g2f′g−fg′.
例:
dxd1+xx=(1+x)21+x−x=(1+x)21.
也可以把 1/g 写成 g−1,配合链式法则推导。
5. 链式法则
若
y=f(u),u=g(x),
则
dxdy=dudydxdu=f′(g(x))g′(x).
它不是普通分数约分,但微分记号准确提示了依赖路径。
局部变化解释:
Δu≈g′(x)Δx,
Δy≈f′(u)Δu,
合并得到 Δy≈f′(u)g′(x)Δx。
6. 分层计算示例
求
y=(3x2+1)5.
令 u=3x2+1,y=u5:
dudy=5u4,dxdu=6x.
所以
dxdy=30x(3x2+1)4.
常见错误是只求外层 5(3x2+1)4,漏乘内部导数。
7. 常用复合导数
若 u=u(x):
dxdeu=euu′,
dxdlogu=uu′(u>0),
dxdup=pup−1u′,
dxdσ(u)=σ(u)(1−σ(u))u′.
链式法则使“先算中间量、再传播导数”成为标准模式。
8. Sigmoid 导数
σ(x)=1+e−x1.
推导:
σ′(x)=−(1+e−x)−2(−e−x)=(1+e−x)2e−x.
又因为
1−σ(x)=1+e−xe−x,
故
σ′(x)=σ(x)(1−σ(x)).
最大导数为 1/4;输入绝对值大时导数接近 0,深层连乘后容易产生梯度消失。
9. 对数似然求导
若似然 L(θ)>0:
dθdlogL(θ)=L(θ)L′(θ).
若 L=∏ipi(θ),直接乘积法则会很复杂;先取对数:
logL=i∑logpi,
再逐项求导,既简洁又数值稳定。
10. 计算图
以
L=(wx+b−y)2
为例拆成:
z=wx+b,r=z−y,L=r2.
局部导数:
∂r∂L=2r,∂z∂r=1,∂w∂z=x.
沿路径相乘:
∂w∂L=2r⋅1⋅x.
若一个变量通过多条路径影响输出,需要把各路径贡献相加。
11. 高阶复合与梯度消失/爆炸
深层复合导数包含很多局部导数乘积。若多数绝对值小于 1,乘积指数级变小;若大于 1,可能爆炸。权重初始化、归一化、残差连接、合适激活和梯度裁剪都与控制这些乘积有关。
易错点
- 乘积导数不是导数相乘。
- 链式法则不能漏掉内部导数。
- 商法则分子顺序是 f′g−fg′。
- 多条依赖路径的梯度要相加。
- 代数化简前后导数相同,但数值稳定性可能不同。
常见问答
Q1:反向传播是否只是链式法则?
数学核心是链式法则;算法价值是复用中间结果,以与前向计算同量级的成本得到所有参数梯度。
Q2:为什么反向而不是正向传播导数?
当输出是单个损失、参数很多时,反向模式一次传播可得所有参数梯度;逐参数正向模式成本更高。
Q3:可以先化简交叉熵与 Sigmoid 再求导吗?
可以且常得到简洁梯度 p−y。实现还应使用合并的 binary_cross_entropy_with_logits 避免溢出与取 log0。
练习
- 求 d[(x2+1)ex]/dx。
- 求 dlog(1+x2)/dx。
- 求 d(e−3x)/dx。
- 对 L=(wx−y)2 求 ∂L/∂w。
- 若 y=f(u,v),且 u,v 都依赖 x,写出总导数结构。
答案与提示
- ex(x2+2x+1)。
- 2x/(1+x2)。
- −3e−3x。
- 2(wx−y)x。
- dy/dx=(∂f/∂u)(du/dx)+(∂f/∂v)(dv/dx)。