본문으로 바로가기

[개념정리] Ranking Loss Functions & Metric Learning

category AI/CV & SSL 2019. 11. 16. 11:34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.





direct하게 label, value, set, input으로 부터 주어진 value를 예상하도록 학습하는 것이 목표인 Cross-Entropy Loss나 Mean Square Error Loss와 같은 다른 loss function들과 달리 Ranking losses의 목표는 inputs 사이의 상대적인 거리를 예측하는 것이다.

이 작업은 종종 metric learning이라고 불리기도 한다.


Ranking Loss Function을 사용하기 위해서는...

  1. 첫번째로 2개 혹은 3개의 input data points로부터 feature를 추출하고 각각의 그들로부터 embedded representation을 얻는 것이다.
  2. 얻은 representation들 사이의 유사성(ex. euclidian distance)을 측정하는 metric function을 정의한다.
  3. input들이 비슷하면 비슷한 representation을 생성하고, input들이 서로 다르면 거리가 먼 representation을 생성하도록 feature extractors를 훈련시킨다. 


 여기서 우리는 representation이 어떤 값을 가지는지 생각할 필요가 없다. 단지 그들 사이의 거리만 신경쓰면 된다.

그럼에도 불구하고, 이 학습방법은 다른 태스크보다 더욱 강력한 representation을 생성한다는 것을 증명하였다.



[Ranking Losses Formulation]

대체로 두가지 버전을 많이 사용한다.

pairs of training data points를 사용하는 버전과 triplets 버전..

일단 나는 triplets을 알아야하는 상황이라 triplets을 공부하고

후에 pairs에 대해서 공부해야하는 상황이 오면 추가 작성을 하겠다.




[Triplet Ranking Loss]

두 가지 input을 비교하는 pair 버전보다 triplets 버전이 더욱 성능이 좋다고 한다.

Anchor sample(기준)을 positive sample(닮은 것)을 , negative sample(닮지 않은 것)을 라고 하자.

목표는 anchor와 negative sample representations 사이의 거리인 

  1. margin 보다 커야한다.
  2. anchor와 positive representations 사이의 거리인 보다 커야한다.

notation으로는 아래와 같이 이를 작성한다.




이 loss에 대해서 3가지 상황을 분석하자:

  • Easy Triplets . 이를 작성negative sample이 이미 positive sample과 비교했을 때 embedding space 에서 anchor와 충분히 멀리 있다. max 함수를 통해 결국 loss는 0이 되고 parameter는 업데이트되지 않는다.

  • Hard Triplets  . negative smaple이 postive보다  anchor와 더 가까이 있다. loss는 양수값을 가진다. (보다 큰 값)

  • Semi-Hard Triplets. negative sample이 positve보다 anchor와 더 멀리 있긴 하지만 그 거리가 margin보다 크지가 않아서 loss 는 여전히 양수값이다. (보다 작은 값)


Source: https://omoindrot.github.io/triplet-loss. Representation of three “types of negatives” for an anchor and positive pair.



Negatives Selection

Triplet Ranking Loss를 통해 학습하는데 있어서 중요한 결정은 negatives selection 또는 triplet mining이다. 

고른 strategy는 훈련 효율성과 마지막 성능에 매우 높은 영향력을 선사할 것이다. 

또한 분명한 것은 Easy Triplets 상황에서의 training은 loss가 0이 될 것이므로 피해야 한다.


이 부분은 자세하게 보지 않아서 넘어간다.




[Siamese and triplet nets]

Siamese 와 triplet nets은 pairwise ranking loss와 triplet ranking loss를 사용하지만 그 setup이 위와는 다르다.

이 nets은 pair나 triplets의 training sample에 대한 representation들이 공유 weights를 사용하는 동일한 net에서 계산된다.

즉, 같은 CNN, 즉 하나에 연속으로 학습시키는 것이다.


여기서 siamese는 넘어간다.

내가 궁금한 것은 triplet nets...


Triplet Nets


이 모델은 대응하는 anchor image에 positive와 negative image를 동시에 주고 triplet ranking loss를 사용하여 훈련한다.

이 방법은 net이 어느 이미지가 anchor image에 더 비슷하고 다른지를 잘 구분할 수 있도록 한다.


같은 CNN  을 세가지 triplet elements에 대한 representation들을 계산할 때 사용한다.

그러므로 Triplet Ranking Loss 를 이렇게 쓸 수 있다:




위와 같은 Triplet Ranking Loss는 PyTorch에 이미 구현되어 있으니 아래 사이트를 참고하자.

https://pytorch.org/docs/stable/nn.html#torch.nn.TripletMarginLoss




(참고!)

Ranking Loss는 아래와 같은 다른 이름으로도 불린다고 한다.

    • Ranking Loss

    • Margin Loss

    • Contrastive Loss

    • Triplet Loss

    • Hinge Loss



위와 같이 불리는 이유와 더욱 더 상세한 정보는 아래 사이트에 적혀있다.

해당 내용도 모두 아래 사이트를 참고하여 번역한 것이다.

https://gombru.github.io/2019/04/03/ranking_loss/