Backpropagation “in general”#
假设我们有一个全连接网络 Zi+1=σi(ZiWi);i=1,…,L,如果要求最后一层的偏导,那么就有
∂Wi∂ℓ(ZL+1,y)=∂ZL+1∂ℓ⋅∂ZL∂ZL+1⋯∂Zi+1∂Zi+2⋅∂Wi∂Zi+1注意到这里的链式求导很多都是重复的操作,设
Gi+1=∂ZL+1∂ℓ⋅∂ZL∂ZL+1⋯∂Zi+1∂Zi+2则有一个简单的递推关系
Gi=Gi+1⋅∂Zi∂Zi+1=Gi+1⋅∂ZiWi∂σ(ZiWi)⋅∂Zi∂ZiWi=Gi+1⋅σ′(ZiWi)⋅Wi这里 Gi=∇Ziℓ(ZL+1,y)∈Rm×ni,Zi∈Rm×ni,Wi∈Rni×ni+1。
因此我们调整 Gi+1⋅σ′(ZiWi)⋅Wi 的维度为
Gi=∇Ziℓ(ZL+1,y)=(Gi+1∘σ′(ZiWi))⋅WiT最后就可以求出我们实际上需要的梯度 ∇Wiℓ(ZL+1,y),
∂Wi∂ℓ(ZL+1,y)=∇Wiℓ(ZL+1,y)=Gi+1⋅∂Wi∂Zi+1=Gi+1⋅∂Wi∂σi(ZiWi)=Gi+1⋅∂ZiWi∂σi(ZiWi)⋅∂Wi∂ZiWi=Gi+1⋅σ′(ZiWi)⋅Zi最后再调整维度为
∂Wi∂ℓ(ZL+1,y)=∇Wiℓ(ZL+1,y)=ZiT⋅(Gi+1∘σ′(ZiWi))