求Loss对logits(z)的偏导数,即∂zi∂L
假设模型输出的logits 为zi
softmax输出为:ai=softmax(z)i=∑kezkezi
Loss: L=−∑kykln(ak)
根据链式法则:
这里的求和符号是softmax分母里面的
∂zi∂L=∑j∂aj∂L⋅∂zi∂aj
第一步对:Loss对aj的求导,即对corss-Entropy求导
L=−∑kykln(ak)
对 aj 求导非常简单(只有当 k=j 时那一项不为 0):
∂aj∂L=−ajyj
第二步:求 Softmax 对 z 的偏导 (∂zi∂aj)
这是最复杂的一步。回忆 Softmax 公式:aj=∑kezkezj。
令 Σ=∑kezk,则 aj=Σezj。
开始求导,根据商的求导公式对aj=Σezj求导,注意这里Σ里面是有
ai的,且j可能和i相等,因此分情况讨论:
i = j 时:
∂zi∂ai=Σ2(ezi)′Σ−ezi(Σ)′=Σ2eziΣ−eziezi=Σezi⋅ΣΣ−ezi=ai(1−ai)
这个是类指数函数,化简想办法往原函数aj=Σezj 上去化简。
i = j 时:
∂zi∂aj=Σ20⋅Σ−ezjezi=−Σezj⋅Σezi=−ajai
第三步 合并
∂zi∂L=∑j∂aj∂L∂zi∂aj
将求和分为 j=i 和 j=i 两部分:
∂zi∂L=j=i∂ai∂L∂zi∂ai+j=ij=i∑∂aj∂L∂zi∂aj
代入我们在第一步和第二步得到的结果:
∂zi∂L=(−aiyi)⋅ai(1−ai)+j=i∑(−ajyj)⋅(−ajai)=−yi(1−ai)+j=i∑yjai=−yi+yiai+aij=i∑yj=−yi+aiyi+j=i∑yj
这里有一个关键点:y 是 One-hot 向量,所有 y 的和为 1。
即 (yi+∑j=iyj)=∑ally=1。
所以最终结果简化为:
∂zi∂L=ai−yi
最终结论
Softmax + Cross Entropy 的反向传播梯度就是:
Gradient=Prediction−Label
或者写作:
∂zi∂L=y^i−yi
物理意义:
这个结果非常直观。梯度的方向和大小完全取决于预测值 (y^i) 和真实值 (yi) 之间的差。