直接使用欧氏距离作为损失函数的缺陷
一 缺陷
如果我们直接以欧氏距离作为损失函数,模型的训练会出现这样的问题:
- 对于人脸来说,每一类就是一个人,然而每一类中会有很多个样本(一个人有很多照片),直接用欧氏距离相当于只考虑了类内距离,未考虑类间距离,但实际上有时候类内距离会比类间距离大。
- 比如我们可以对MNIST数据集(0-9十个数字的图片)进行降维,使得每张图片最后降维2维,这样每一张图片都是直角坐标系上的一个点,我们可以将所有样本点画在一张图上。我们希望的是类内距离尽可能近,而类间距离尽可能远,但在图上我们会发现,类内中两端样本点之间的距离比图中心不同类之间样本点之间的距离更大。
二 改进
1、三元组损失(Triplet Loss)
举例
我们用更加正式的名称来称呼上面三张图像。一个输入的三元组包括一对正样本对和一对负样本对。三张图片分别命名为固定图片(Anchor,a)、正样本图片(Positive,b)和负样本图片(Negative,n)。图片a和图片p为一对正样本对,图片a和图片n为一对负样本对。
三元组损失要求满足以下不等式:
即相同人脸间的距离平方至少要比不同人脸间