【深度学习常见问题——损失函数(度量学习)】

深度学习常见问题——损失函数(度量学习)

  • Triplet Loss

Triplet Loss

  1. 应用范围
    Triplet Loss主要应用与那些没有固定类别数,但是想区分不同类别的任务(比如人脸识别)。另外也可以用在一些无监督学习的任务上。
  2. 目标
    Triplet loss的目标是拉近anchor和正例的距离,拉远anchor和负例的距离。其公式为:
    L = m a x ( d ( a , p ) − d ( a , n ) + m a r g i n , 0 ) L = max(d(a,p)-d(a,n)+margin, 0) L=max(d(a,p)d(a,n)+margin,0)
    【深度学习常见问题——损失函数(度量学习)】_第1张图片
  3. 情况分类
    根据构成三元组的positive, negetive和anchor之间的距离关系不同,使网络能学习的难易程度也不同,基本可以分成3类情况:
  • Easy Triplets
    【深度学习常见问题——损失函数(度量学习)】_第2张图片
    这种情况下Negative与anchor的距离很远, d ( a , n ) > d ( a , p ) + m a r g i n d(a,n) > d(a,p) + margin d(a,n)>d(a,p)+margin,这种情况下不需要优化。取值范围: L o s s t r i p l e t = 0 Loss_{triplet}=0 Losstriplet=0

  • Hard Triplets
    【深度学习常见问题——损失函数(度量学习)】_第3张图片
    此情况下Nagetive与anchor的距离比Positive还近,即 d ( a , p ) > d ( a , n ) d(a,p) > d(a, n) d(a,p)>d(a,n),所以此时损失计算会很大,需要优化,取值范围 L o s s t r i p l e t ∈ [ m a r g i n , + ∞ ) Loss_{triplet} \in [margin, +\infty) Losstriplet[margin,+)

  • Semi-Hard Triplets
    【深度学习常见问题——损失函数(度量学习)】_第4张图片
    此情况下虽然Negative和Anchor的距离比Positive远,但是距离之差小于 m a r g i n margin margin,即 d ( a , p ) < d ( a , n ) < d ( a , p ) + m a r g i n d(a, p) < d(a,n) < d(a, p) + margin d(a,p)<d(a,n)<d(a,p)+margin,所以Positive和Negative的距离还是比较相近的,区分度较差,仍然需要优化,取值范围 L o s s ∈ ( 0 , m a r g i n ] Loss \in (0, margin] Loss(0,margin]

  1. 设置Margin的意义
    设置Margin的目的是为了避免让模型走捷径,如果没有margin,模型只需要让Positive的距离小于Negative的距离即可,二者可能非常相近,这样的结果仍然无法区分正负例

你可能感兴趣的:(深度学习基础知识,算法,深度学习,人工智能)