4.4 Triplet 损失(Triplet 损失)
Last updated
Last updated
要想通过学习神经网络的参数来得到优质的人脸图片编码,方法之一就是定义三元组损失函数然后应用梯度下降
三元组损失每个样本包含三张图片:靶目标(Anchor)、正例(Positive)、反例(Negative),简写成、、
网络的参数或者编码应满足:
让很小,即:
)是,是
如果所有的图片都是零向量,即那么上述不等式也满足。但是对进行人脸识别没有任何作用,所以添加一个超参数,且,对上述不等式做出如下修改:
损失函数的定义基于三元图片组,即取这个和0的最大值:
整个网络的代价函数是训练集中单个三元组损失的总和
总结:
训练三元组损失需要把训练集做成很多三元组,这就是一个三元组(编号1),有一个Anchor图片和Positive图片,这两个(Anchor和Positive)是同一个人,还有一张另一个人的Negative图片。这是另一组(编号2),其中Anchor和Positive图片是同一个人,但是Anchor和Negative不是同一个人,等等。
间隔参数也被称为边界margin,类似于支持向量机中的margin,拉大了Anchor和Positive图片对和Anchor与Negative图片对之间的差距。若,,则
函数的作用是只要,损失函数就是0
如果,最终会得到,即正的损失值。通过最小化这个损失函数达到的效果就是使这部分成为0,或者小于等于0
如何选择三元组来形成训练集:如果从训练集中随机地选择、和,遵守和是同一个人,而和是不同的人这一原则。那么约束条件()很容易达到,因为随机选择的图片,和比和差别很大的概率很大,而且差距远大于,这样网络并不能从中学到什么
所以为了构建一个数据集,要做的就是尽可能选择难训练的三元组、和:
想要所有的三元组都满足条件(),、和的选择应使得很接近,即,这样学习算法会竭尽全力使右边式子变大(),或者使左边式子()变小,这样左右两边至少有一个的间隔。并且选择这样的三元组还可以增加学习算法的计算效率
定义了这些包括、和图片的数据集之后,还需要用梯度下降最小化代价函数,这样做的效果就是反向传播到网络中的所有参数来学习到一种编码,使得如果两个图片是同一个人,那么它们的就会很小,如果两个图片不是同一个人,它们的 就会很大