參考鏈接:https://blog.csdn.net/qian99/article/details/78046329
交叉熵cross-entropy
對一個分類神經網絡f,輸出爲z=f(x;θ),z=[z0,z1,⋯,zC−1],z爲logits,其中類別數量爲C,y爲x的one-hot標籤。通過softmax歸一化來得到概率:
pi=∑jexpzjexpzi
負交叉熵誤差爲:
L=−i∑yilogpi
誤差對於概率的梯度爲:
∂pi∂L=−yipi1
緊接着計算∂zk∂pi,k=0,1,...,C−1:
(1)當k=i時,
∂zi∂pi=∂zi∂(∑jexpzjexpzi)=(∑jexpzj)2expzi∑jexpzj−(expzi)2=(∑jexpzjexpzi)(1−∑jexpzjexpzi)=pi(1−pi)
(2)當k=i時,
∂zk∂pi=∂zk∂(∑jexpzjexpzi)=(∑jexpzj)2−expziexpzk=−pipk
根據求導的鏈式法則:
∂zk∂L=j∑(∂pj∂L∂zk∂pj)=j=/k∑(∂pj∂L∂zk∂pj)+(∂pk∂L∂zk∂pk)=j=/k∑(−yjpj1∗−pjpk)+(−ykpk1∗pk(1−pk))=j=/k∑(yjpk)−yk+ykpk=pkj∑yj−yk
因爲y爲one-hot編碼,所以∑jyj=1,i.e.,
∂zk∂L=pk−yk
相對熵KL散度
預測的概率分佈p,真實概率分佈爲q,KL的散度爲:
L=KL(q∣∣p)=k∑qclogpkqk
求解對概率pk的梯度
∂pk∂L=−pkqk
求解對logits zk的梯度:
∂zc∂L=j∑(∂pj∂L∂zk∂pj)=j=/k∑(∂pj∂L∂zk∂pj)+(∂pk∂L∂zk∂pk)=j=/k∑(−pjqj∗−pjpk)+(−pkqk∗pk(1−pk))=j=/k∑(qjpk)+qkpk−qk=j∑qjpk−qk