参考链接: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