Machine & Deep learning

[Deep Learning] Self-supervised Learning VS Semi-supervised Learning

cherie-ssom 2024. 9. 24. 18:50

라벨링이 부족한 데이터 문제를 해결하기 위해 고안된 Self-supervised Learning(자기 주도 학습)과 Semi-supervised Learning(준지도 학습) 차이를 정리해 보았다. 

 

결론적으로 먼저 이야기하자면 Self-supervised Learning의 경우 기존 데이터를 가공해서 특성 추출을 위해 학습이 가능한 새로운 형태를 만들어서 지도 학습을 진행하는 것이며, Semi-supervised Learning의 경우 기존 데이터를 가공하지 않고, 라벨이 있는 데이터와 없는 데이터를 함께 사용하여 학습하는 방식이다. 

 

그런데, 공부하다 보면 위에 언급한 것처럼 간단하게만 생각하면 차이를 알 것 같지만 두 가지 개념이 혼동되는 이유는 두 가지 방법 모두 'label을 생성한다.'라는 부분에서 혼동이 오기 쉬운 개념인 것 같다.

 

그래서 오늘은 그 두가지 방법에 대한 차이점을 조금이라도 이해하기 편하도록 정리해두고자 한다.

 

Self-supervised Learning(SSL) 정의

자기 주도 학습이라고도 불리는 이 SSL은 주어진 라벨 없이도 데이터에서 자동으로 라벨을 만들어서 학습하는 방식이다.

self라는 말에서 알 수 있듯이 모델이 주어진 데이터를 활용해서 스스로 라벨을 생성하고, 이를 통해 학습을 진행하는 것을 의미한다. 즉, 지도 학습처럼 라벨이 필요하지만, 라벨이 사람이 아니라 데이터 자체에서 자동으로 생성하는 방식이란 것이다.

 

Self-supervised learning은 크게 두 가지 step으로 구분된다.

다량의 unlabeled 데이터를 활용해서 y를 만들어내고, 소량의 labeled 데이터를 가지고 다시 training을 시키는 과정이 있다.

(다시 말해서 pre-training과 fine-tuning 과정으로 구분된다고 생각하면 될 것 같다.)

 

그렇다면 어떻게 라벨을 생성하는 걸까? 생성되는 라벨이라는 게 뭘까?

self-supervised learning에서는 이 과정에 pretext task를 사용해서 학습에 활용될 pseudo-label(가짜라벨)을 만들어 낸다.

조금 더 자세하게 정리해보자.

Pretext Task의 개념

우선, self-supervised learning을 이해하기 위해서는 pretext task라는 것을 이해해야 한다.

그런데 사실 AI를 공부하는 입장이라면 이 pretext task라는 것이 무엇인지 이미 알고 있다. (특히 비전쪽이라면 더더욱 익숙할 것이다..)

 

pretext task는 모델이 사전 학습 단계에서 데이터에서 중요한 특징을 학습하도록 하는 임시 학습 과제를 의미한다.

(최종 down streamtask를 해결하는 데 필요한 능력을 기르는 것이 목표이다.)

 

NLP에서 자주 사용되는 모델 중 하나인 BERT는 대표적인 SSL 모델이며, 크게 아래의 2가지 pretext task가 있다.

Masked Language Model, Next Sentence Prdiction이 있다.

 

첫 번째의 경우 원래 문장의 일부를 마스킹해서 모델이 해당 단어가 무엇인지 예측하는 작업을 학습 목표로 설정하고,

두 번째의 경우 두 개의 문장이 주어졌을 때, 두 번째 문장이 첫 번째 문장의 자연스러운 다음 문장인지를 예측하는 것 목표로 설정한다. 

즉, 이 두 가지 태스크가 pretask task인 셈이다. 

BERT모델이 이 pretaskl task들을 해결하는 과정에서 데이터의 구조적, 문맥적 패턴을 잘 학습하게 되는 것이다.

 

Computer Vision 분야에서는 기존 이미지에서 회전, 반전, masking, 노이즈 등의 Data augmentation 과정을 통해 얻은 이미지들을 Autoencoder를 통해 복원하여 예측하도록 하는 방식이 있다.

혹은 잘 알려진 Contrastive Learning을 활용하여 augmentation 된 데이터들끼리 비교를 통해 즉, 같은 클래스에 속하는지 다른 클래스에 속하는지 학습하는 방식의 판별 모델 개념이다. (같은 데이터는 가깝고 다른 데이터는 멀게 표현 공간을 학습)

외에도 다양한 방법론들이 있지만, vision 쪽에서는 이러한 pretext task를 통해서 모델을 학습하고 있다.

(외의 다양한 방법론들에 대해선 추후 따로 정리할 예정이다)

 

자, 이렇게 다양한 방법을 통해서(pretext task를 통해서 학습하는 방법) unlabeled 된 데이터에서 pretext task를 통해 y를 만들어내는 과정까지 학습을 한 것이다. 

 

이렇게 말하면 '갑자기? 엥?' 싶을 수도 있다. 

'어디에서 y를 생성했다는 거지..? 분명 라벨이 없는 건 알겠고.. 이런 pretask를 통해서 데이터에서 특징을 추출하는 건 알겠는데, y를 만들어낸다는 건 어떤 의미지?'라는 의문이 생길 수도 있다. 

 

일단 그 의문을 해결하기 위해서 알아야 하는 것은 SSL에서 생성되는 라벨은 우리가 일반적으로 알고 있는 사람이 직접 단 라벨(e.g. 긍/부정, 강아지/고양이) 이랑은 다른 개념이다. 

 

다시 말해 우리가 알고있는 라벨링을 pretext task로 만들어 내는 것이 아니라는 말이다. 

여기서의 라벨은 단지..학습(특징 추출)을 위한 임시 목표를 설정하고 해결하는 용도로 사용된다.

즉, 설정한 임시 목표(pretext task)를 해결하기 위한 임시의 답(?)의 느낌인 것이다.

 

SSL의 pretext task에서 라벨링(pseudo-label)을 만든다. 라고 부르는 것은 학습 과정에서 모델이 예측해야할 목표(target)을 제공한다는 점에서 유사하기 때문에 그렇게 부르는 것이다. 

 

앞서 설명했던 BERT에서 임시 목표인 pretext task 중 하나 Masked Language Model에서의 라벨은 masking 된 단어가 예측해야 하는 대상이다. 

이미지 학습의 Autoencoder에서는 가려진 부분을 복원하는 작업에서 가려진 픽셀 값이 라벨이 되는 것이다.

 

즉, 특징 추출을 위해 임시 목표를 설정하고 이를 해결하기 위해 데이터의 일부를 가리거나 수정해서 스스로 라벨을 생성한 것이다.

 

정리하자면 self-supervised learning에서 y를 만들어낸다는 것은 pre-training 과정을 통해서 특징을 추출하고 학습하는 과정이라고 생각하면 될 것 같다.

 

앞에 먼저 언급한 바 있지만 다시 정리하면 이젠 조금 더 와닿을 수 있을 것 같다. unlabeled 된 데이터를 통해서 y를 생성하는 부분은 pre-training이며, 이후 우리가 원하는 down streamtask를 위해 fine-tuning 하는 과정이 소량의 labeled 데이터를 활용하는 부분이라고 할 수 있다. 

 

Semi-supervised Learning 정의

반면, 준지도 학습이라 불리는 이 방법은 라벨이 있는 소량의 데이터와 라벨이 없는 데이터를 함께 사용하여 모델을 학습하는 접근 방식이다. 다만, Self-supervised learning처럼 데이터 자체의 가공은 하지 않는다. 

 

이러한 Semi-supervised Learning의 가장 일반적인 방법 중에는 pseudo-labeling이라는 것이 있다.

우선 라벨이 있는 소량의 데이터를 가지고 예측이나 분류 모델을 학습하고, 라벨이 없는 데이터를 넣어 라벨을 예측한다. 

이렇게 예측된 라벨 자체를 pseudo label이라고 간주하고, 이 예측된 라벨을 다시 모델에 포함시켜 학습하고 또 다음 것을 예측하고 하는 방법을 반복하는 것이다.

 

앞서 설명한 self-supervised learning과는 확연이 차이가 느껴짐을 알 수 있다.

 

Self-supervised Learning과 Semi-supervised Learning의 공통점과 차이점

이 두 가지 방법은 라벨이 부족한 데이터 문제를 해결하기 위해 고안된 방법이라는 점에서 공통점이 있다.

하지만, Self-supervised Learning의 경우 2가지 스텝(Pre-training과 fine-tuning)이라는 과정을 거치고 있으며, 데이터 자체의 수정을 통해 라벨링 데이터의 부족 문제를 해결하고 있다.

 

반면, Semi-supervised Learning의 경우 소량의 라벨을 가지고 라벨이 없는 데이터를 넣어 예측하고, 예측한 라벨을 다시 학습데이터로 활용하는 반복 과정을 통해서 해결하고 있다.

 

(어떻게 보면 소량의 labeled 데이터를 언제 쓰느냐의 차이도 있다고 볼 수 있지 않나..? 싶다.)

 

이해하기 쉽게 하기 위해서 Self-supervised learning에서 생성된 y는 이런 거다 저런 거다라고 (조금은 억지스러운...) 설명하긴 했지만, 라벨이 없는 데이터에서 특징을 추출하고 학습했다. 그리고 이러한 학습된 모델을 소량의 labeled 된 데이터에서 예측이나 분류에 더 잘 활용할 수 있다 느낌으로 이해하는 것이 더 편할 수도 있을 것 같다.