Hello Computer Vision

Contrastive Learning 에 대한 이해 본문

Self,Semi-supervised learning

Contrastive Learning 에 대한 이해

지웅쓰 2023. 3. 27. 00:19

이번에 SSL도 공부하면서 흥미가 생긴 few-shot learning, zero-shot learning 등 많은 곳에서 유사도를 훈련하는 contrastive 를 활용하는 것들이 많이 나오길래 한번 짚고 넘어가보려고 한다. 본 포스팅은 논문을 보지 않고 여러 글들을 참고하여 개인적인 이해를 담았습니다. 참조한 글들은 아래 남겨두었습니다.

 

Contrastive Learning(이하 CLR)이란 무엇인가?

self-supervised learning(이하 SSL)의 일종으로 데이터에서 서로 두 데이터간의 특징들의 비교를 통해 학습하는 방법

SSL은 별도의 라벨링을 하지 않고 기존의 feature들을 이용하는 것이므로 SSL의 방법 중 하나라고 할 수 있다. 기존의 SSL이 무엇인가에 대한 글에서 사람과 컴퓨터의 사물을 인식하는 방법에서 큰 차이가 있다고 말을 했는데, CLR역시 이미지의 특징을 파악하기 위해 고안되었다.

Figure by Author. Photo by  Edgar  on  Unsplash, https://towardsdatascience.com/understanding-contrastive-learning-d5b19fd96607

이렇게 기본 이미지에서 데이터 증강을 활용하더라도 기본 base는 같으므로 positive pair로 간주한다.

그러나 이 강아지들은 기본 base가 다르므로 negative pair로 간주되는데 이러한 것들을 거리를 정의하여(loss) 학습을 진행한다. 즉 각각의 데이터들에 대해 label을 따로 주지 않아도 고양이들만의 특징, 강아지들만의 특징을 학습하여 실제 데이터들의 unseen 데이터들에 대해서도 잘 작동한다.

 

CLR의 구조

이를 잘 설명해주는 구조는 다음과 같을 수 있다. (비전 분야)

각 이미지에 대하여 여러가지의 데이터 증강을 활용하고 encoder 에 넣는다(여기서 encoder는 CNN이 될 수 있고 Transformer도 될 수 있다). Encoder를 통해서 나온 벡터들에 대하여(이미지의 여러가지 특징을 담고 있다) Projection head에서는 일정차원으로 차원을 줄여준다(ex. 2048 -> 128). 그리고 이렇게 차원이 줄여진 embedding들에 대하여 각 증강 이미지들끼리는 positive pair이므로 가깝게, 다른 이미지에서 나온 것들은 negative pair이므로 멀게 하도록 한다. 그리고 이러한 loss를 contrastive loss라고 한다.(유클라디안 거리가 될 수 있고 cross entropy가 될 수 있다)

 

CLR 학습과정

https://daebaq27.tistory.com/97

  전체적인 학습과정을 보여주는 이미지이다. pretext task에서 이미지들의 representation들을 학습하기 때문에 downstream task에서 fine tuning을 진행하는 과정에서 좋은 성능을 낼 수 있다.

 

유의점

데이터 증강을 활용하여 유사도를 계산하는 방법이다 보니 어떤 데이터증강을 사용하는지에 따라 성능이 많이 다르다 -> 학습이 불안정하다. 이에 대해 어떠한 증강 방법들이 성능이 좋은지도 나와있는 논문이 있는걸로 알고 있습니다(SimCLR인지..? 그러나 컴퓨터 성능만 된다면 가능한한 많은 증강을 활용하면 더 성능이 좋을 거 같다고 생각은 합니다). 

 

 

앞으로의 이해를 위해 가볍게 정리해보았고 혹시라도 틀린 내용 있다면 지적 감사히 받겠습니다.


Reference

https://daebaq27.tistory.com/97

https://towardsdatascience.com/understanding-contrastive-learning-d5b19fd96607

https://iambeginnerdeveloper.tistory.com/198