이 때 당시에는 Softmax loss가 Triplet loss에 비해 우월하다는 것이 딥러닝 씬의 대세였던 것 같은데, Triplet loss에 hard mining을 결합함으로써 Triplet loss 역시 굉장히 효과적인 loss가 될 수 있음을 입증해 낸 페이퍼이다.
일단 Triplet loss의 모습은 다음과 같다. Anchor image 와 같은 identity를 가진 positive image , 그리고 다른 identity를 가진 의 쌍으로부터 다음과 같이 구한다.
하지만 이러한 Triplet loss는 1) 데이터로부터 3개의 쌍을 만들 수 있는 경우의 수가 cubic 함수로 증가하고, 2) 이 중에서 trivial한 경우의 수가 매우 빠르게 많아진다는 것이다. 즉 경우의 수가 무지막지하게 많은데, 대부분의 경우는 아주 쉬운 케이스라 잘 학습이 되지 않는다는 것이다.
그렇다고 데이터에서 "가장" 어려운 케이스들만 뽑아모면, 또 outlier의 존재 등으로 인해 역시 학습이 제대로 이루어지지 않는 경우가 많다. 여기서 이 페이퍼는 임의로 추출한 batch로부터 뽑아낸 "적당히" 어려운 케이스들만을 가지고 Triplet loss를 계산하는 Hard Triplet loss를 제안한다. 우리가 흔히 알고 있는 그 Hard Triplet loss이다. 수식으로 설명하기 애매하니 말로 하자면, batch마다 개의 class를 뽑고, 다시 각각의 뽑힌 class에서 개의 이미지를 임의로 추출한다. 그러면 batch에 총 개의 이미지가 존재하게 되는데, 각각의 이미지마다 가장 어려운 positive, negative sample들을 하나씩 뽑아 내어 triplet 쌍을 만들어내는 것이다. 이러한 쌍들을 통해 Triplet loss를 계산함으로써, outlier가 아닌 적당히 어려운 샘플들을 안정적으로 추출해낼 수 있게 된다.
또한 Triplet loss의 hinge function()은 이미 충분히 쉬운 쌍으로부터는 학습하지 않음을 의미하는데, 페이퍼에서는 이를 방지하기 위해(즉 이미 충분히 쉽더라도 더 학습하도록 하기 위해) Soft Margin loss를 사용할 것을 권한다.
아무튼 이렇게 하니 당시의 통념을 깨고, 다양한 데이터셋에서 꽤 많은 성능의 향상을 이끌어낼 수 있었다고 한다.
E.O.D.