Contrastive Learning은 간단하게 말하면 유사도가 높은 것은 가깝게 유사도가 낮은 것은 멀리 가도록 학습을 진행하는 것이다. 주로 self-supervised learning에서 사용된다.
예를 들어, 이미지 x를 augmentation 시킨 가 있다고 할 때에 둘은 아무리 augmentation한다고 하더라도(그렇다고 너무 시키면 안 되겠지만) similar할 것이다.
그에 반해, y라는 이미지와는 당연하게도 similarity가 낮을 것이고 object가 다르다면 다르다고 평가하는 것이 맞을 것이다.
이 과정에서 contrastive learning은 를 가깝게 그리고 y와는 멀게 학습을 진행할 것이다.
이를 이용한다면 data의 representation을 학습할 수 있을 것이고 이에 따라 labeling이 된 데이터에 대해서도 그것의 label에 따라 representation을 학습할 수 있을 것이다.
contrastive learning이란 결국에는 similarity라는 기준에 따라 학습이 진행되는데 그렇다면 similarity가 무엇인지부터 정해야 한다.
그리고 학습을 위해서는 이미지간의 유사도를 이미 알고 있어야 한다. 그래야만 학습이 진행될 수 있기 때문이다. 이것 역시 dataset 구축이기에 쉽지 않은 과정이다.
그것이 label, augmentation 여부 등을 통해 정해졌을 때 학습 방법에는 세가지가 있다.
이러한 방식으로 학습된 것들을 대상으로 유사한 것은 가깝게 유사하지 않은 것은 멀게 학습한다.
그렇다면 유사도 즉, metric은 어떻게 결정될 수 있는가도 정해야 한다. 보통은 객체 간의 “거리”라는 개념으로 얘기되는 유사도는 여러 가지 방식을 통해 수량화를 시킬 수 있다.
그리고 이 거리의 도출에는 두 가지 방식이 사용된다.
결국에는 아래 방식이 deep learning에서 사용하고 있는 data manifold learning 방식이고 거기서부터 distance를 도출한다.
여기서 positive pair와 negative pair를 학습하게 되는데 postivie pair는 loss에서 거리가 가깝도록 negatvie pair는 m이라는 일정 margin을 갖도록 학습된다.
이 두가지를 합친 것이 contrastive loss라고 부른다.
pytorch의 경우 postive pair에도 margin 값을 설정할 수 있어 overfitting을 방지할 수 있다.
Margin이라는 개념을 사용하면 negative pairs를 margin에 따라 종류를 나눌 수 있다.
결과적으로 거리를 적절히 파악할 수 있고 이를 학습에 사용할 수 있다면 학습 결과 유사 데이터들끼리 contrastive learning으로 clustering이 될 것이다.