Softmax即其变种

2018-10-17 66 0

softmax loss

softmax将模型输出映射到0 ~ 1之间,共有n个类,对于每个样本,可以理解为它属于类别i i 的概率。若z z 表示全连接层的输出,zi z_{i} 表示第i i 类的值,即

z=Wx+bz = W \cdot x + b

h(zi)=ezik=1nezkh(z_i) = \frac {e ^ {z_i}}{\sum_{k=1}^{n}e^{z_{k}}}

假设当前样本属于类别j j ,则其真实概率分布为y1,y2yn y_1 , y_2 … y_n ,只有第 j j 类的概率 yj y_j 为1,其他为0。

而预测分布即Softmax的输出为h1,h2,hn h_1, h_2, … h_n hi=h(zi) h_i = h(z_i)

其loss即交叉熵为

loss=i=1nyilog(1hi)=i=1nyilog(hi)loss = \sum_{i=1}^{n} y_i \cdot log( \frac{1}{h_i} ) = - \sum_{i=1}^{n} y_i \cdot log( {h_i} )

如其真实label为j j ,则

loss=log(hj)loss = - log(h_j)

其对于hj h_j 的导数为

αLαhj=1hj=1hzj\frac{\alpha L}{\alpha h_j} = - \frac{1}{h_j} = - \frac{1}{h_{z_j}}

为了进行反向传播,首先求Softmax的导数,分两种情况。如果 j==i j == i :

αh(zj)αzi=kezkezj(kezk)2ezj=h(zj)(1h(zj))\frac{\alpha h(z_j)}{\alpha z_i} = \frac{\sum_k e^{z_k} - e^{z_j} }{( \sum_k e^{z_k} )^2} \cdot e^{z_j} = h(z_{j}) * (1 - h(z_j))

如果 j!=i j != i

αh(zj)αzi=0ezj(kezk)2ezi=h(zi)h(zj)\frac{\alpha h(z_j)}{\alpha z_i} = \frac{0 - e^{z_j}}{( \sum_k e^{z_k} )^2} \cdot e^{z_i} = - h(z_i) \cdot h(z_j)

于是

αLαzj={h(zj)1;y=ih(zi);y!=i\frac{\alpha L}{\alpha z_j} = \left \{ \begin{aligned}& h(z_j) - 1 &; y = i \\& h(z_i) &; y != i\end{aligned}\right.

原始的softmax loss非常优雅,简洁,被广泛用于分类问题。它的特点就是优化类间的距离非常棒,但是优化类内距离时比较弱。

weighted softmax loss

当样本不均衡时进行加权

loss=i=1nwiyilog(hi)loss = - \sum_{i=1}^{n}w_i \cdot y_i \cdot log( {h_i} )

soft softmax loss

h(zi)=ezi/Tk=1nezk/Th(z_i) = \frac {e ^ {z_i / T}}{\sum_{k=1}^{n}e^{z_{k} / T}}

当T = 1时,就是原始的softmax,当 T > 1 时,称之为soft softmax,T越大,因为Zk产生的概率差异就会越小。

当训练好一个模型之后,模型为所有的误标签都分配了很小的概率;然而实际上对于不同的错误标签,其被分配的概率仍然可能存在数个量级的悬殊差距。这个差距,在softmax中直接就被忽略了,但这其实是一部分有用的信息。

文章的做法是先利用softmaxloss训练获得一个大模型,然后基于大模型的softmax输出结果获取每一类的概率,将这个概率,作为小模型训练时soft target的label。

L2-constrained softmax loss

将学习的特征x归一化。作者观测到好的正面的脸,特征的L2-norm大,而特征不明显的脸,其对应的特征L2-norm小,因此提出这样的约束来增强特征的区分度。

上面式就是将其归一化到固定值α。实际训练的时候都不需要修改代码,只需要添加L2-norm层与scale层,如下图。

为什么要加这个scale层?NormFace【6】中作出了解释。

该文章指出了直接归一化权重和特征,会导致loss不能下降。因为就算是极端情况下,多类样本,令正样本|wx|=1取最大值,负样本|wx|=-1取最小值,这时候分类概率也是

e1/(e1+(n1)e1)e^1/(e^1+(n-1)e^{-1})

当类别数n=10,p=0.45;n=1000,p=0.007。当类别数增加到1000类时,正样本最大的概率还不足0.01,而反向求导的时候,梯度=1-p,会导致一直传回去很大的loss。

所以,有必要在后面加上scale层,作者还计算出了该值的下界,具体可自行参考。

large margin softmax loss

将全连接层的输出替换成內积的形式,即

zk=Wkx=Wkxcosθk;0θkπz_{k} = W_k \cdot x = || W_k || \cdot || x || \cdot cos\theta_k ; 0 \leq \theta_k \leq \pi

我们看二分类的情况,对于属于第1类的样本,我们希望

W1xcosθ1>W2xcosθ2|| W_1 || \cdot || x || \cdot cos\theta_1 \gt || W_2 || \cdot || x || \cdot cos\theta_2

如果我们对它提出更高的要求,由于cos函数在 0 ~ π之间是递减函数,我们将要求更改为

W1xcosmθ1>W2xcosθ2;m1,0θjπ|| W_1 || \cdot || x || \cdot cosm\theta_1 \gt || W_2 || \cdot || x || \cdot cos\theta_2 ; m \geq 1, 0 \leq \theta_j \leq \pi

在这个条件下,原始的softmax条件仍然得到满足。

我们看下图,如果W1=W2,那么满足条件2,显然需要θ1与θ2之间的差距变得更大,原来的softmax的decision boundary只有一个,而现在类别1和类别2的decision boundary不相同,这样类间的距离进一步增加,类内更近紧凑。

更具体的定义如下:

其中,m是一个控制距离的变量,它越大训练会变得越困难,因为类内不可能无限紧凑。实际表现如下图所示

angular softmax loss

也称A-softmax loss。它就是在large margin softmax loss的基础上添加了两个限制条件||W||=1和b=0,使得预测仅取决于W和x之间的角度θ。

上图分别比较了原softmax loss,原softmax loss添加||w||=1约束,以及在L-softmax loss基础上添加||w||=1约束的结果。

为什么要添加|w|=1的约束呢? 作者做了两方面的解释,一个是softmax loss学习到的特征,本来就依据角度有很强的区分度,另一方面,人脸是一个流形,将其特征映射到超平面表面,也可以解释。

additive margin softmax loss

就是把L-Softmax的乘法改成了减法,同时加上了尺度因子s。作者这样改变之后前向后向传播变得更加简单。其中W和f都是归一化过的,作者在论文中将m设为0.35。

值得注意的是,normalization是收敛到好的点的保证,同时,必须加上scale层,scale的尺度在文中被固定设置为30。

那到底什么时候需要normalization什么时候又不需要呢?这实际上依赖于图片的质量。

我们看一个公式如下

y=xα=>dydx=1αy = \frac{x}{\alpha} => \frac{dy}{dx} = \frac{1}{\alpha}

其中α \alpha 是向量 x x 的模,它说明模值比较小的,会有更大的梯度反向传播误差系数,这实际上就相当于难样本挖掘了。不过,也要注意那些质量非常差的,模值太小可能会造成梯度爆炸的问题。

argface additive angular margin

在定义这个loss的时候,作者干脆做了一个表把现有基于softmax loss及其改进的loss的二分类决策边界条件都列了出来。