Triplet Loss

    Triplet Loss

    단어에서 힌트를 얻을 수 있듯이 총 3가지 부류의 데이터를 학습을 한다.

    이 Loss는 2010년대에 많이 사용되었던 loss인데, 주로 Metric Learning을 위해 사용되었다. 

    Triplet Loss는 기준이 되는 Anchor 데이터, Anchor 데이터와 다른 class에 속하는 Negative 데이터, Anchor 데이터와 같은 class에 속하는 Positive 데이터를 가지고 학습을 한다.

    Anchor와 다른 class인 Negative point는 Anchor와 같은 class인 Positive point 보다 'α만큼 더' 멀리 떨어져있어야한다를 학습시키는 전략이다. 이때, 단순히 더 멀리 떨어져있어야한다가 아닌 'α만큼 더' 멀리 떨어져있어야한다라는 조건을 주는 이유는 명시적인 margin을 주어 모델이 더 안정적으로 학습하게 만들기위함이다. 단순히 ‘더 멀어져야 한다’라는 조건만 제시한다면 모델이 애매하게 음수 샘플을 멀리 보내고 양수 샘플을 가깝게 만들 수도 있다. 하지만 일정 마진 α를 부여하면, 양수 샘플과 음수 샘플 간에 충분히 구분되는 간격을 강제할 수 있다. 결국 이 마진을 통해 동일 클래스 간에는 충분히 가깝고, 다른 클래스와는 충분히 멀어지도록 학습을 유도하여 보다 분명한 임베딩 공간을 얻을 수 있게 된다.  

     

    Triplet Loss에서는 Anchor, Positive, Negative 포인트 간의 상대적 거리설정된 Margin 값을 기준으로 Negative 샘플을 Hard, Semi-hard, Easy의 세 가지 유형으로 분류한다.

     

     

    1. Hard Negative
      • Anchor에서 본 Negative 샘플이 Anchor–Positive 거리보다 가까운 경우 (아래 그림에서 빨간색 영역에 해당)
      • Negative가 Positive보다 Anchor에 더 가깝게 자리 잡고 있으므로, 모델이 “다른 클래스”인 Negative를 “같은 클래스”인 Positive보다 더 유사하다고 잘못 판단하는 매우 까다로운 상황이다.
      • 이때 모델이 이 ‘어려운’ 문제에 과도하게 대응하려고 하다 보면, f(x)를 모두 0으로 수렴시키는 등(=모든 점을 한 지점에 몰아버리려는) 극단적인 파라미터 업데이트가 일어날 가능성이 있다.
    2. Semi-hard Negative
      • Negative 샘플이 Anchor–Positive 거리보다는 멀지만, Anchor–Positive 거리에 Margin을 더한 거리에는 미치지 못하는 경우
      • 수식으로는 d(a,n)>d(a,p)  이지만 d(a,n)<d(a,p)+α 를 만족
      • 모델 입장에서는 이 Negative 샘플이 ‘조금 더 떨어지면’(즉, margin만큼 떨어뜨릴 수 있다면) 충분히 구분이 좋아질 수 있으므로, 적절한 학습이 일어나기 쉽다. 실제로도 대부분의 학습에서는 이 Semi-hard Negative가 모델을 정교하게 조정할 수 있는 좋은 학습대상이 된다.
    3. Easy Negative
      • Negative 샘플이 Anchor–Positive 거리 + Margin보다 더 멀리 있는 경우
      • 이미 Anchor–Positive 쌍이 충분히 잘 구분되고 있으므로, 이 상황에서는 모델이 더 이상 학습을 할 필요가 없다고 보고, Triplet Loss가 0이 된다. (즉, 추가적인 update/학습이 발생하지 않는다)

    Triplet Loss expression

    댓글