1. softmax loss
Forward:
Zj=wTyjxi+byj(1)
pj=eZj∑keZk(2)
Lk=−∑jqj,klogpj(3)
Backward:
∂pj∂Zm=pj(1−pj),m=j
∂pj∂Zm=−pjpm,m≠j
∂Lk∂Zm======−∑jqj,k∂logpj∂Zm−∑jqj,k1pj∂pj∂Zm−∑j=mqj,k1pjpj(1−pj)−∑m≠jqj,k1pj(−pjpm)−∑j=mqj,k(1−pj)−∑m≠jqj,k(−pm)−∑j=mqj,k(1−pj)−∑m≠jqj,k(−pm)pm−qm,k
∂Li∂wk=∂Li∂Zm∂Zm∂wk=xTi(pm−qm,i)
∇wkL=1/N∑ixTi(pm−qm,i)+2λwk
交叉熵softmax注意事项:
1. 在用softmaxloss训练模型时,如果学习率太大,可能会导致loss=NAN。考虑上面第(2)式子,如果j=k时, pj 趋近于0,(3)loss就会nan。如果出现这种情况,可以考虑用较小的学习率。也有可能是初始化权重太大,尝试用不同的初始化策略,比如用xaiver把初始化的权重再除以10或100,尝试加batch_normalizetion层,可以把输出scale较小的范围。
2. 考虑数值计算稳定性情况下的Softmax损失函数
pj=eZj−max(Zj)∑keZk−max(Zj)
因为指数计算和指数求和的结果可能非常大,会出现overflow,超出浮点数的范围。
2. Center loss
Foward:
Lc=12∑i=1m||xi−cyi||22
xi :第i张图片的特征值
cyi :该图片所属分类的中心(该分类的特征值的中心)
Backward:
∂Lc∂xi=xi−cyi
∇cjLc=∑iδ{yi=j}(cj−xi)1+∑iδ{yi=j}
在线更新 cj :
cj+1=cj−∇cjLc