Triplet损失(三元组损失)

Triplet损失, 意味着需要同时看三个图片, Anchor图片, Positive图片,Negative图片。

(Anchor图片与Positive图片意味着是同一个人, Anchor图片与Negative图片意味着不是同一个人的图片)

Triplet损失(三元组损失)_第1张图片

当Anchor图片与Positive图片对比时, 想让输出距离越小,

当Anchor图片与Negative图片对比时, 想让输出距离更大一点。

d(Anchor, Positive) = | f(Anchor) - f(Positive) |²

d(Anchor, Negative) = | f(Anchor) - f(Negative) |²

所以公式为: | f(Anchor) - f(Positive) |² <= | f(Anchor) - f(Negative) |²

此时把等式右边移到左侧: | f(Anchor) - f(Positive) |² - | f(Anchor) - f(Negative) |² <=  0

由于存在 0 - 0 <= 0的情况,所以增加一个超参数防止这种情况。

即: | f(Anchor) - f(Positive) |² - | f(Anchor) - f(Negative) |²  + α <=  0  (α是一个超参数)

一般 α超参数设置为: 0.2,  Anchor与Positive相减范数 和 Anchor与Negative相减的范数至少相差0.2

损失函数: L(A,P,N) = max( ( | f(Anchor) - f(Positive) |² - | f(Anchor) - f(Negative) |²  + α),0)

解读:只要 ( | f(Anchor) - f(Positive) |² - | f(Anchor) - f(Negative) |²  + α)这个值小于0,那么损失函数值就是0,

通过训练网络,利用损失函数达到的效果就是使( | f(Anchor) - f(Positive) |² - | f(Anchor) - f(Negative) |²  + α)的损失小于等于0, 如果这部分小于等于0, 说明网络网络正确,比用去关心负值有多大。

代价函数  J=L(Ai, Pi,Ni)。是所有数据的总和。

Siamese网络结构:

上下两层神经网络具有相同的网络参数,是绑定的

Triplet损失(三元组损失)_第2张图片

人脸识别转换成二分类问题:

 y^ = | f(xi) - f(xj) |²   最后一层网络有一个神经元节点,用来输出是或者不是同一个人。这样就把一个人脸识别转换成二分类问题了。

y^是所有特征值的总和, 再利用sigmoid函数映射到0和1这两个分类。

如果是相同的人,那就输出1, 如果不是同一个人,那么就输出0

 

你可能感兴趣的:(深度学习,深度学习)