《A Discriminative Feature Learning Approach for Deep Face Recognition》论文笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m_buddy/article/details/82779643

1. 论文思想

在这篇文章中尉人脸识别提出了一种损失函数,叫做center loss,在网络中加入该损失函数之后可以使得网络学习每类特征的中心,惩罚每类的特征与中心之间的距离。并且该损失函数是可训练的,并且在CNN中容易优化。那么,将center loss与softmax相结合会增加CNN网络的鲁棒性。

在网络中增加center loss的损失函数的思想便是使得类间距变大,类内部间距变小,从而使得分类边界更加明了,类内部更加凝聚(方差减小)。那么这篇文章的主要工作就集中在:
(1)提出了新的损失函数center loss,通过实验证明CNN中加入softmax loss与center loss之后使得网络更加鲁棒。
(2)提出的损失函数在CNN网络中是很容易实现的,可以通过SGD直接进行训练的。

这里只关心了center loss对于其它人脸的部分就不仔细看了-_-||。。。

2. 实验尝试

这里论文使用MNIST数据集和包含两层全连接层的网络进行实验。试验中将第一个全连接层的输出设置为2,目的是为了方便进行可视化观测。对于一般的多分类模型都是采用softmax作为最后一层,那么梯度的源头便是softmax loss。那么对于softmax loss损失函数一般定义成为如下交叉熵的形式:(为啥是这样的形式?请参考:平方损失函数与交叉熵损失函数
L s = i = 1 m l o g e W y i T x i + b y i j = 1 n e W j T x i + b y i L_{s}=-\sum_{i=1}^{m}log\frac{e^{W_{y_{i}}^{T}x_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T}x_{i}+b_{y_{i}}}}
其中, x i x_i 是特征第一个全连接层输出的特征向量, m m 是batch size的大小, n n 是softmax分类的数目。那么使用softmax loss的网络第一个全连接层的输出进行可视化得到的结果是
在这里插入图片描述
左边的是训练集的可视化结果,右边是测试集的可视化结果。可以看到softmax确实是可以将10个类分开,并且具有比较明显的边界信息。但是,每个类的类内方差比较大,类间距也比较小。这就导致了测试集中部分数据的混淆。

2.1 祭出Center Loss

在文章中将Center Loss定义为如下形式:
L c = 1 2 i = 1 m x i c y i 2 2 L_c=\frac{1}{2} \sum_{i=1}^{m}||x_i – c_{y_{i}}||_{2}^{2}
其中, c y i c_{y_{i}} 代表的是每个类聚类的中心,而且该值应该随着网络的变换而变化。在进行训练的时候为了使用batch更新,并且对一些异常的数据,使用 α \alpha 进行调和,该值在 [ 0 , 1 ] [0,1] 之间。对于每个输入的特征向量 x i x_i 进行求导,聚类中心 c y i c_{y_{i}} 的更新参照如下梯度,从而得到:
在这里插入图片描述
上式中的 δ ( c o n d i t i o n ) \delta (condition) 是一个条件函数,在条件满足的时候是1,否则取值为0。那么接下来的事情就是怎么将两个loss结合起来了。文章中使用的是加权相加的形式,使用参数 λ \lambda 去调和这两个loss了
在这里插入图片描述
那么这个算法的流程就可以描述为:
在这里插入图片描述
对于不同的参数 λ \lambda 对最后结果的影响可以通过下图来进行说明:
在这里插入图片描述
可以看到参数 λ \lambda 越大,center loss所占的权重越大,则数据就越向中心聚集。

猜你喜欢

转载自blog.csdn.net/m_buddy/article/details/82779643