FaceNet-Triplet loss function
对于人脸识别任务,最经典的是FaceNet,在FaceNet(A Unified Embedding for Face Recognition and Clustering)中,用到的人脸识别方法-三元损失函数。本文主要讲一下三元损失函数的原理。
Paper: arXiv:1503.03832v3
如下图所示,A,P,N分别表示:人A,P表示与A同一个人,N表示与A不同的人。
那么我们希望在识别的时候,d(A,P)<=d(A,N)。d(A,P)尽可能的小,d(A,N)尽可能的大,也就是:
即:
但是在识别时,有时候,d(A,P)<=d(A,N),在A,P,N为同一个人时也有可能出现,比如d(A,P)=0.5,d(A,N)=0.51,这时候,很明显A,P,N之间的距离较小,为同一个人但是也满足了等式,为了防止这样的情况,在式子中加入一个超参数α:
我们可以设置超参数的数值为0.2、0.3…选择合适的值满足任务需求即可,这时候即使d(A,P)与d(A,N)很接近,也没关系。
总结:三元损失函数:
在损失函数中,取两项最大值,我们要尽可能的使前一项为0,或者小于0,这样得到的结果为0;如果前一项大于0,得到的损失函数值就会大于0.那么代价函数为:
代价函数:
在训练时,对J函数使用梯度下降。
参考:吴恩达 Andrew Ng(卷积神经网络)