超强辅助Center Loss
一、Center Loss介绍
- 核心思想:扩大类内距
- 公式如下:
L c = 1 2 N ∑ i = 1 n ∣ ∣ x i − c y i ∣ ∣ 2 2 (1) L_c=\frac{1}{2N}\sum_{i=1}^{n}||x_i-c_{y_i}||^{2}_{2}\tag{1} Lc=2N1i=1∑n∣∣xi−cyi∣∣22(1) - 反向传播公式:
△ c = α N ∑ i = 1 N ( c − x i ) (2) △c=\frac{α}{N}\sum_{i=1}^N(c-x_i)\tag{2} △c=Nαi=1∑N(c−xi)(2)
上面公式中,α一般取值为0.5
- 在原有的softmax loss中引入一种新的辅助损失函数center loss
二、使用
- 1. 在原有的softmax loss中引入一种新的辅助损失函数centerlos
- 2. 注意:如果直接使用centerloss的效果是不好的,centerloss是用来分开类之间的距离的,但是没有让类之间的距离分开
- Softmax Loss+Center Loss,公式下:
L = L s + λ L c (3) L=L_s+λL_c\tag{3} L=Ls+λLc(3)
L s = − ∑ i = 1 m log e W y i T x i + b y i ∑ j = 1 n e W j T x i + b j + λ 2 ∑ i = 1 m ∣ ∣ x i − c y i ∣ ∣ 2 2 (4) L_s=-\sum_{i=1}^m\log\frac{e^{W^T_{y_i}x_i+b_{y_i}}}{\sum_{j=1}^{n}e^{W^{T}_{j}x_i+b_j}}+\frac{λ}{2}\sum_{i=1}^{m}||x_i-c_{y_i}||^2_2\tag{4} Ls=−i=1∑mlog∑j=1neWjTxi+bjeWyiTxi+byi+2λi=1∑m∣∣xi−cyi∣∣22(4)
-
softmax loss使类间距越来越大,Center Loss使类内距越来越小
-
只使用centerloss效果不好,所以一般是将centerloss与softmaxloss一起使用,引入参数lambda用来平衡两个损失的比例。在模型的训练中,提取出来的特征的区分度越高。λ=0.003和α=0.5时对人脸识别的效果最好
-
效果
-
训练技巧:MNSIT数据集,要使用SGD优化器,效果比较好。
三、缺点
- 是一个辅助函数,单独使用效果不好
- 类别比较多时,对硬件的要求较高。
原因:由于Centerloss为每个类别需要保留一个类别的中心,当类别的熟练很多(>1000)时,这个内存消耗的非常大,它对GPU的内存要求更高 - L2范数的离群点对loss的影响较大
原因:由于centerloss是基于L2范数约束的损失函数,如果某个类别的某个离群点较远,会导致损失下降困难,同样由于损失计算的方差和均值和,即使整体损失下降,个别的利群点仍然离中心很远。 - 类内距太大,MNIST数据实验中可以看到,每一类特征占据的空间较大,如果类别过多,就无法清除的区分每个类别。
- 只适合同类样本差异不大的数据,由于一个trick不一定适合所有场景,一般来说,如果同一类样本相似,如MNIST手写数字,人脸数据,那么centerloss往往能够带来效果提升,而如果本身同一类养而不能就差异很大,如cifar100,那么则不一定。可以理解成一个人的一堆脸取平均值仍然是他的脸,而一堆不同的狗平均值则可能难以认出是什么。
预知后事如何,且听下回分解