若 y=f(u),u=g(x),则:
∂x∂y=∂u∂y⋅∂x∂u
若 y=f(u),u=g(x),则:
∂x∂L=∂x∂u⋅∂u∂L
以 f(x,y,z)=(x+y)⋅z 为例:
graph LR
x --> Plus["+"]
y --> Plus
Plus --> q["q = x + y"]
q --> Mul["x"]
z --> Mul
Mul --> f["f = q * z"]
从输出向输入逐层计算梯度:
∂z∂f=q=x+y
∂q∂f=z
∂x∂f=∂q∂f⋅∂x∂q=z⋅1=z
∂y∂f=∂q∂f⋅∂y∂q=z⋅1=z
对于任意节点 v:
∂v∂L=∑c∈children(v)∂c∂L⋅∂v∂c
| 符号 | 含义 |
|---|
| al | 第l层激活值 |
| zl | 第l层加权输入 |
| Wl | 第l层权重 |
| bl | 第l层偏置 |
| δl | 第l层误差项 |
BP1:输出层误差
δL=∇aL⊙σ′(zL)
BP2:隐藏层误差
δl=((Wl+1)Tδl+1)⊙σ′(zl)
BP3:偏置梯度
∂bl∂L=δl
BP4:权重梯度
∂Wl∂L=δl(al−1)T
前向传播:
对于 l = 1, 2, ..., L:
z^l = W^l · a^{l-1} + b^l
a^l = σ(z^l)
反向传播:
δ^L = ∇_a L ⊙ σ'(z^L)
对于 l = L-1, L-2, ..., 1:
δ^l = (W^{l+1})^T · δ^{l+1} ⊙ σ'(z^l)
∂L/∂W^l = δ^l · (a^{l-1})^T
∂L/∂b^l = δ^l
参数更新:
W^l ← W^l - η · ∂L/∂W^l
b^l ← b^l - η · ∂L/∂b^l
∥δ1∥∝∏l=1L−1∥Wl∥⋅∥σ′(zl)∥
当 ∣σ′(z)∣<1 时,梯度指数衰减。
解决方案:ReLU、残差连接、BatchNorm、合适的初始化
当权重矩阵的谱半径 ρ(W)>1 时,梯度指数增长。
解决方案:梯度裁剪、权重正则化、BatchNorm
按值裁剪:
∇clipped=clip(∇,−θ,θ)
按范数裁剪:
∇clipped={∇∥∇∥θ∇∥∇∥≤θ∥∇∥>θ
SGD:
θt+1=θt−η∇θL
SGD + Momentum:
vt=βvt−1+η∇θL
θt+1=θt−vt
Nesterov Momentum:
vt=βvt−1+η∇θL(θt+βvt−1)
θt+1=θt−vt
AdaGrad:
θt+1=θt−Gt+ϵη⊙∇θL
RMSProp:
E[g2]t=βE[g2]t−1+(1−β)gt2
θt+1=θt−E[g2]t+ϵηgt
Adam:
mt=β1mt−1+(1−β1)gt
vt=β2vt−1+(1−β2)gt2
m^t=1−β1tmt,v^t=1−β2tvt
θt+1=θt−v^t+ϵηm^t
| 优化器 | 适用场景 | 推荐度 |
|---|
| SGD+Momentum | CV、需要精细调优 | 高 |
| Adam | 通用、NLP、快速原型 | 高 |
| AdamW | Transformer、大模型 | 高 |
| LAMB | 大batch训练 | 中 |