提出问题
之前的人脸识别工作,在特征比较阶段,通常使用的都是特征的余弦距离
而余弦距离等价于L2归一化后的内积,也等价L2归一化后的欧式距离(欧式距离表示超球面上的弦长,两个向量之间的夹角越大,弦长也越大)
然而,在实际上训练的时候用的都是没有L2归一化的内积
关于这一点可以这样解释,Softmax函数是:
可以理解为WkWk的过程。
这也就是说在训练时使用的距离度量与在测试时使用的度量是不一样的。
测试时是否需要归一化?
为了说明这个问题,作者特意做了试验,说明进行人脸验证时使用归一化后的内积或者欧式距离效果明显会优于直接计算两个特征向量的内积或者欧式距离,实验的结果如下:
*注意这个Normalization不同于batch normalization,一个是对L2范数进行归一化,一个是均值归零,方差归一。
那么是否可以直接在训练时也对特征向量归一化?
针对上面的问题,作者设计实验,通过归一化Softmax所有的特征和权重来创建一个cosine layer,实验结果是网络不收敛了。
本论文要解决的四大问题:
1.为什么在测试时必须要归一化?
2.为什么直接优化余弦相似度会导致网络不收敛?
3.怎么样使用softmaxloss优化余弦相似度
4.既然softmax loss在优化余弦相似度时不能收敛,那么其他的损失函数可以收敛吗?
L2归一化
首先解释问题1和2,即为什么必须要归一化和为什么直接优化归一化后的特征网络不会收敛
为什么要归一化?
全连接层特征降至二维的MNIST特征图,(具体细节可以参考我的博客人脸识别系列(十二):Center Loss)
左图中,f2f3是同一类的两个特征,但是可以看到f1和f2的距离明显小于f2f3的距离,因此假如不对特征进行归一化再比较距离的话,可能就会误判f1f2为同一类。
为什么会是特征会呈辐射状分布
Softmax实际上是一种(Soft)软的max(最大化)操作,考虑Softmax的概率
假设是一个十个分类问题,那么每个类都会对应一个权值向量W0,W1...W9W0,W1...W9,某个特征f会被分为哪一类,取决f和哪一个权值向量的内积最大。
对于一个训练好的网络,权值向量是固定的,因此f和W的内积只取决与f与W的夹角。
也就是说,靠近W0W0的向量会归为第二类,以此类推。网络在训练过程中,为了使得各个分类更明显,会让各个权值向量W逐渐分散开,相互之间有一定的角度,而靠近某一权值向量的特征就会被归为相应的类别,因此特征最终会呈辐射状分布。
如果添加了偏置结果会是怎么样的?
如果添加了偏置,不同类的b不同,则会造成有的类w角度近似相等,而依据b来区分的情况,如下图。
在这种情况下如果再对w进行归一化,那么中间这些类会散步在单位圆上各个方向,造成错误分类。
所以添加偏置对我们通过余弦距离来分类没有帮助,弱化了网络的学习能力,所以我们不添加偏置。
网络为何不收敛
记得前面我们提到,作者做了实验,通过归一化Softmax所有的特征和权重来创建一个cosine layer,实验结果是网络不收敛了,接下来就解释是为什么。
归一化后的内积
是一个[-1,1]区间的数,经过softmax函数之后,即使各个类别都被完全分开了(即f和其标签对应类的权值向量WfWf的内积为1,而与其他类的权值向量内积都是-1),其输出的概率也会是一个很小的数:
上式在n=10时,结果为0.45;在n=1000时,结果为 0.007,非常之小。
因此即使对于完全分开的类,由于梯度中有一项是(1-y),其梯度还是很大,因此无法收敛。
为了解决这一问题,作者提出了一个关于Softmax的命题来告诉大家答案。
命题:如果把所有的W和特征的L2norm都归一化后乘以一个缩放参数L,且假设每个类的样本数量一样,则Softmax损失
的下界(在所有类都完全分开的情况下)是
(文末贴出了证明过程)
其下界和归一化后缩放的参数l的函数图大约如下:
因此,在归一化层后添加一层放大层l可以解决无法收敛的问题。
归一化层的定义
首先定义二范数,加一个很小的ε是为了防止归一化时会除以0.
定义归一化层
损失函数对归一化层的求导如下(建议大家自行推导以加深印象):
根据上式可以推导,L对特征x的梯度总是和x的特征正交(文末贴出了证明过程),
因此经过梯度下降之后,x的范数总会增大,为了防止范数无限增大,需要使用权重衰减项。
改进度量学习
借助于以上对Softmax的透彻研究,作者顺手改进了一下度量学习通常要使用两个损失函数contrastive loss与triplet loss。两者原公式表达如下:
这两者不同于Softmax的单项直接训练,存在挖掘pairs/triplets耗费时间的问题。
借助于Softmax直接以W与X相乘表示余弦相似度的思路,改进以上两种Loss为
Wj作为对应项的权值向量,可以由网络自己训练获得。
改进之后的损失函数称为C-contrastive/triplet loss。
试验
训练
作者使用个一个浅层的网络和一个深层的网络进行试验,在全连接层后面进行归一化,然后计算W和X的内积(Softmax)或是欧式距离(C-contrastive/triplet loss),然后按照上面的损失函数计算损失和梯度
学习率1e-4、1e-3 冲量0.9
验证算法
一张图片和它的水平翻转图把特征对应的位置相加(一般是相接),然后PCA,计算余弦相似度
结果
LFW
1.使用浅层网络
结果看上去Normalization比损失函数还重要
2.使用resnet
这个似乎是说明了resnet还是很有效的
附录:命题的证明
证明一:
命题:如果把所有的W和特征的L2norm都归一化为L,且假设每个类的样本数量一样,则Softmax损失
的下界(在所有类都完全分开的情况下)是
证:
因为每个类样本数量一样,假设有n个类,则L等价于
(其中||Wi||=l,因为完全分开了,所以Wi可以代表该类特征。)
同除得到
由于exp(x)的凸性,有
当且仅当Xi互相相等时等号成立
即
那么
又
同是凸函数
有
所以
注意到
所以
命题得证,考虑等号成立的条件需要任何WaWb内积相同,而对于h维向量W,只能找到h+1个点,使得两两连接的向量内积相同,如二维空间的三角形和三位空间的三面体,但是最终需要分类的数目可能远大于特征维度,所以经常无法取到下界。
证明二:
过程相对简单