본문 바로가기

CV 논문리뷰/Self-Supervised

Self-Supervised Learning 란 무엇인가

해당 리뷰는 Self-Supervised Learning 에 대해 제가 공부 한 내용들을 정리 한 글입니다.

 

Self-Supervised Learning 논문을 읽는 것은 처음이기에 흐름과 틀을 파악하는데 집중하였고,
이에 대해 제가 공부한 내용들을 전반적으로 설명드리겠습니다.


Self-Supervised Learning

시작하기 전 Self-Supervised Learning 논문을 처음 읽는 것이라 해당 방법론에 대한 전반적인 이해가 필요하였습니다.

 

모델을 학습하기 위해서는 데이터가 필요합니다.
그리고 보통은 Label을 가진 데이터를 사용해서 Supervised 방식으로 학습 시키는 것이 일반적입니다.

 

하지만 실제 데이터에 label을 부여하는 annotation 과정은 시간,비용 적으로 매우 expensive 하기 때문에
모든 데이터에 label을 부여하는것이 현실적으로는 거의 불가능합니다.

 

이러한 상황에서 label이 없는 데이터를 사용해 모델을 학습하고자 하는 필요성이 증가하였고,
해당 방법론을 Unsupervised Learning이라 칭합니다.


그리고 이 중에서도 스스로(self) supervision을 만들어서 모델을 학습하는 방식을 Self-Supervised 라고 합니다.

(여담으로 예전에는 Self-Supervised가 정답을 사용하지 않는다는 이유로 Unsupervised의 일종으로 보기도 하였지만,
스스로 supervision을 만들어서 학습하기 때문에 Self-Supervised를 Unsupervised와는 다르게 봐야 한다는 주장이 제기되고 있습니다.)

 

 

여기서 우리는 당연히 정답이 존재하는 Supervised 방식이 존재하지 않는 Self-Supervised 보다 성능이 일정 수준 이상 높을 것이라고 추측할 수 있습니다. 하지만 여러 task들에서 Self-Supervised 방식이 Supervised과 성능이 유사하거나, 오히려 능가하는 수치를 보여줍니다. 

 

사실 해당 부분에 대해서 상식적으로 이해가 가지는 않았지만, 어느정도 납득(?)을 시켜 준 블로그 글이 있습니다.
해당 블로그 글을 참고하였고, 블로그 글쓴이는  Alexei A. Efros 교수님의 해당 발표 영상을 참고하였다고 하네요.

 

 

우리가 흔히 알고 있는 CNN 분류 모델이 Supervised 방식으로 학습을 진행한다고 생각 해 봅시다.


모델에는 Chair, City 이미지와, 이에 해당하는 정답 label이 입력으로 들어가게 됩니다.
아래 설명에서는 의자로 예시를 들도록 하겠습니다.

 

모델은 다양한 종류의 의자 그림과, 동일한 Chair라는 class를 입력으로 받게 됩니다.
여기서 모델은 위 그림처럼 각양각색으로 생긴 의자를 Chair로 예측하기 위해
공통된 feature를 추출하는 방향으로 학습을 진행하게 됩니다.

 

하지만 사람은 어떠한 인지 과정을 거쳐서 의자를 의자라고 분류할까요?
사람들이 어렸을 때 의자를 의자라고 분류할 수 있는 이유는 '다리가 길고, 사람이 앉는 곳이 있고~' 등등
누군가가 의자의 형태 하나하나를 묘사하며 의자라고 알려주었기 때문이 아니라,
먼저 각각의 의자 특성을 잘 파악하고 서로 유사한 지 아닌지 비교해나가는 과정을 통해 새로 마주하게 된 의자를 의자라고 분류할 수 있는 것입니다.

 

즉, 애초에 위 그림처럼 각양각색의 의자들을 모두 Chair라는 동일 class로 가정하고 출발하는 것 자체가
인간의 학습 방식과는 맞지 않다고 언급합니다.

 

이러한 문제를 해결하기 위해 딥러닝 모델 또한 사람과 유사하게,
각각의 의자 이미지들에 대한 특성을 잘 파악하는 것이 우선시 되어야 한다고 합니다.

즉, "해당 이미지들이 무엇인지를 학습하는 것이 아닌 해당 이미지들이 무엇과 유사한지를 살펴보도록 하는 게
인간의 학습 관점에 더 맞다"
라고 판단 한 것입니다.

이러한 관점에서 보면, 데이터셋에 정답 label이 없는 상황에서 각 이미지들의 feature를 잘 표현(representation) 하는 방향으로 학습을 진행하는 Self-Supervised 학습 방식이 일부 task에서 Superviseㄴd와 유사한 성능을 보이는 것이 살짝은 납득이 가긴 합니다,,

 

그리고 이러한 원리는 아래에서 설명드릴 Self-Supervised 학습 방식 중 Contrastive Learning과 유사하다고 볼 수 있겠네요. Positive와 Negative 사이에서 유사도를 판단하는 학습 방식이니까요. 이에 대해서는 추가적으로 설명을 드리겠습니다.


Pretext Task & Downstream Task

어쨌든 unlabeled dataset에 대해 self로 label을 직접 만들어서 사용하는 Self-Supervised 학습 방식은 크게
pretext taskdownstream task로 나누어 집니다. 아래 그림이 이를 잘 설명해 주고 있네요.

 

 

좌측이 pretext task이고, 오른쪽이 Downstream task 입니다.
해당 학습 방식을 간단하게 설명 하면 아래와 같습니다.

 

unlabeled dataset으로 Self-Supervised 학습을 진행하는 pretext task란 데이터 자체에 대해 이해를 하고,
특징을 잘 추출해내며, 모델의 representation 능력을 학습시키기 위한 임의의 학습 task를 의미하고,
이를 통해 pretext task의 모델(Encoder)이 먼저 학습됩니다.

 

그리고 성공적으로 학습된 pretext task모델의 weights 들을 우리가 실제로 적용하고자 하는 Downstream Task의 모델에 Transfer(전이) 한 후에 우리가 원하는 task의 방향성에 맞게 Fine-Tuning을 진행하는 것입니다.

=> 다시 말해, Pretext Task로 feature를 잘 표현하도록 Self-Supervised 학습을 시킨 뒤,
이를 target으로 삼는 Downstream Task에 전이하는 것입니다.

 

Self-Supervised 학습의 목적은 Downstream Task를 잘 수행하는 것이기 때문에
성능을 비교 할 때에 Downstream Task를 수행하는 모델에서의 성능을 비교하게 됩니다.

 

위와 같이 미리 학습 된 모델의 weights를 사용하는 전이 방식은 우리 모두가 많이 사용해 오고 있습니다.
대부분의 task에서 대규모 데이터셋(e.g ImageNet)을 통해 pre-trained된 모델을 전이해서 사용하는 것이 그 예입니다.어떤 데이터셋(labeled vs unlabeled)을 가지고 어떤 학습(supervised vs self-supervised)을 진행했는지만 다를 뿐
미리 학습을 한 뒤 Downstream Task 로 전이하는 방식은 동일합니다.


Self-prediction & Contrastive Learning

그렇다면 Self-Supervised 학습 방식은 unlabeled dataset에서 좋은 representation을 잘 얻을 수 있는 방향으로 pretext task를 수행해야 하는데, 어떤 식으로 학습이 진행되는것일까?

사실 용어가 완벽하게 확립이 된 거 같지는 않은데,
크게 2가지로 분류하자면 Self-prediction과 Contrastive Learning 이 있다.

 

Self-Prediction

batch 단위로 data sample이 들어올 때,
해당 sample 내의 한 부분을 통해 다른 부분을 예측하는 task를 말합니다.

해당 분야에 대해 서베이를 깊게 해 보지 않아서 어떠한 task들이 있는지 구체적으로 말씀은 드리지 못하지만,
최근 들어 이미지의 일부를 masking하고 나머지 부분을 복원(reconstruction) 하는 방식의 연구가 활발히 진행되고 있습니다. Masked Autoencoder(MAE) 라고 불리는 분야입니다.

 

 

 

Contrastive Learning

 

Contrastive Learning이란 Contrastive loss를 사용해 특정 embedding 공간에서
유사(similar)한 data 끼리의 거리는 가깝게 하고, 유사하지 않은 data 끼리의 거리는 멀게 하도록 하는 방식입니다.

 

각 batch마다 특정 data를 기준으로 positive와 negative를 정의한 뒤 Contrastive Learning를 진행할수록
유사하지 않은 data 끼리의 차이가 좀 더 명확해 지는 방향으로 학습이 진행되겠지요.

 

그러므로 해당 방식에서 중요하게 다뤄지는 문제는 positive와 negative를 정의하는 '유사(similar) 에 대한 정의' 인데요,
이에 따라 많은 연구들이 진행된다고 보시면 될 거 같습니다.


Self-Supervised Learning이 아주 굵직하고 중요한 분야라 그런지
제가 짧은 기간 동안 공부한 내용들로 해당 분야를 모두 설명드리기에는 부족함이 많은 거 같습니다,,