Triplet Loss
Triplet loss 的理解,实现的大致步骤
Triplet loss 是在论文FaceNet中提出的,用于训练人脸识别和找出同一个人的不同角度、姿势、光线条件下的照片。为了达到这个目标,我们就需要一张ancor图片,即告知模型哪个人面是我们需要识别的或者说是需要找到与之类似的脸部图片,还需要一个positive图片,用于让模型去学习什么样的图片是与ancor类似的,及negative图片,去判断什么样的图片是不同的。而Triplet loss就是模型的损失函数,在机器学习中,判断相似性一般都是用距离来判断,两者的距离越近,则越相似,反之则越不相同。所以,Triplet loss函数,就希望ancor图片与 positive图片通过模型学习到的embedding向量间的距离越短越好,而ancor与negative之间的距离越远越好,并且,为了避免模型偷懒,Triplet loss加了一个Margin,这个类似于 SVM的正负样本间的最大间距。Triplet loss 公式如下:
Loss = max(||f(a) - f( p)||2- ||f(a) - f(n)||2 + Margin, 0)
其中,f(a),f(p ), f(n)表示的是通过模型学习到的三个图片的embedding 向量。
最开始Triplet loss的训练并不容易,它需要训练很长的时间才能收敛。因为最开始是将(ancor, positive, negative) 三张图片为一组,用三个共享weights的模型训练得到它