티스토리 뷰

▶자기지도학습(Self-supervised Learming)

이번 글에서는 unlabeled 데이터가 많을 때 효과적인 학습 방법인 자기지도학습에 대해 알아보겠습니다 :)

1. 등장 배경

요즘은 국가에서나 각종 대회를 통해 인공지능 학습용 데이터를 개방하곤 하는데요.

그들 입장에서도 이미지 데이터를 얻었다면 그 다음은 label을 다는 작업일 겁니다.

저도 매일 그냥 쓰는 입장이라 별 생각 없이 썼는데 말이죠..?

 

만약에 다음과 같은 이미지들의 label을 단다고 해봅시다.

아래 이미지에서 'eclipse'와 'car' label을 달기는 뭐 어렵지 않을 것입니다.

그렇지만 이미지가 1000만개 정도 주어지고 label을 달아라..하면 힘이 들 수도 있습니다.

 

label을 다는 것이 상당히 어려운 경우

 

  • Natural Language Parsing (구문분석)
    • ex. Treebank
      • 대표적인 corpus로 영어 같은 경우에는 잘 구축되어 있지만
      • 중국어나 한국어 등은 label을 달기 어려운 측면 때문에 text corpus가 잘 구축되어 있지는 않음

  • 암을 찾는 작업
    • ex. CT 스캔 사진
      • 특정한 분야 전문가만이 보고 암인지 아닌지를 label을 달 수 있음
      • 즉, 아무나 하기는 좀 어려움

 

2. 준지도학습( Semi-supervised Leanring )

  • 전통적인 classifiers는 label이 있는 데이터로부터 학습을 하는 형태
  • label이 달려있는 데이터를 확보하는 건 상당히 어려움
    • 사람이 label을 다는 것은 상당히 느림
    • label을 달기 위해서는 전문가나 특별한 기기가 필요할 수 있음
따라서 unlabel 데이터를 바탕으로 label이 있는 데이터의 기술들을 좀 더 나은 성능으로 진행하는 형태로 발전
목적: labeled 데이터와 unlabeled 데이터를 모두 이용!!

 

unlabeled 데이터가 어떻게 도움이 될까?

 

예시1

  • 어떤 두 class를 분류해야 한다고 했을 때
  • unlabeled 데이터가 있을 때 없을 때의 차이
    • Decision boundary Shift

만약 아래와 같이 labeled 데이터가 2개 있다고 해봅시다.

위에서 말했듯이 labled 데이터를 확보하다는 것이 어렵다는 말로부터 시작하기 위해 2개만 있다고 해봅시다.

→ 그렇다면 decision boundary는 데이터1과 데이터2 중간쯤에 위치

 

그런데 그 주변에 unlabled 데이터들이 다수 분포되어 있다고 하면

데이터1과 데이터2 각 주변에 있는 unlabled 데이터를 가까이 있는 labeled 데이터와 동일한 feature를 갖는다고 설정하게 되면

decision boundary는 이전과는 조금 다른 부분에 위치할 것입니다.

 

unlabeled 데이터를 같이 활용하면
boundary를 좀 더 정교하게 shift 가능! 

 

예시2

만약 아래와 같은 상황에서 지도학습을 진행한다면 (=labeled 데이터만 사용!)

아래와 같이 boundary를 적용할 수 있습니다.

반면에 unlabled 데이터만 사용하여 비지도학습을 진행하면

아래와 같은 클러스터링들이 발생하겠죠?

이제 unlabled 데이터를 바탕으로 labled 데이터와의 관계성을 파악하고

그 뒤에 classifier를 적용하면 아래와 같이 좀 더 정교한 classifier 혹은 decision boundary를 얻을 수 있습니다.

이게 바로 semi-supervised learning의 효과 및 목적이 되겠습니다.

Semi-supervised Learning의 목적
unlabeled 데이터를 바탕으로 labeled 데이터와의 관계성 파악으로
좀더 정교한 classifier / decision boundary를 얻자!

 

준지도 학습의 다양한 형태

 

  • Self-Training
  • Co-Training
  • Graph-based models
  • Generative models
  • Cluster and Label
  • ...

 

Self-Training of 준지도 학습

 

  • Self-Training은 unlabeled 데이터를 사용하는 가장 간단한 방법
    • Self-Training 학습 방법
      • \( L=\{(x_{i}, y_{i})\}_{i=1}^l \) (= \(l\)개의 labeled 데이터)와
      • \(U=\{x_{i}\}_{i=l+1}^{l+u} \) (= \(u\)개의 unlabeled 데이터) 가 있다고 가정
      • labeled 데이터를 바탕으로 해서 classifier를 도출
      • 방금 도출한 classifier에 unlabled 데이터 일부를 input으로 넣어서
      • 기존 classifier를 바탕으로 예측이 된 새로운 label을 도출
      • 새로운 labeled 데이터와 기존 labled 데이터를 같이 또 학습해서 개선된 classifier 도출
      • 반복

 

 

3. 자기지도학습( Self-supervised Learning )

  • 지도학습(supervised learning)은 강력
    • 하지만, labeled 데이터가 상당히 많이 필요
    • 이러한 문제점을 극복하기 위해 다음과 같은 방법 등장
      • Transfer learning (전이학습)
      • Semi-supervised learning (준지도학습)
      • Weakly-supervised learning
        • labeled 데이터 중 일부 정확하지 않은 데이터라도 해도 상관없이 적용
      • Unsupervised learning(비지도학습)
    • unlabeled 데이터 환경에서 더 나은 성능을 만들기 위한 또 다른 방법 중 하나가 자기지도학습!
728x90
자기지도학습(Self-supervised learning, SSL)

 

  • 비지도학습 종류 중 하나
  • label을 다는 작업이 필요 X
자기지도학습의 목적
자신의 unlabeld 데이터로부터 만들어진 label을 지도학습하는 것을 목적!

 

+ Downstram Task

= 구체적으로 풀고 싶은 문제들

pre-trained 모델을 이용하여 학습을 진행하고, 그 후 원하고자 하는 작업에 따라 fine-tuning 한다고 했었는데,

이때 fine-tuning 할 때의 태스크를 다운스트림 태스트라고 합니다.

 

pretext task 💡

 

= 일부러 어떤 구실을 만들어서 푸는 문제

  • Self-supervised learning의 중요한 개념 !!
  • pretext task를 학습한 모델은 downstream task에 전이하여 사용 가능
  • self-supervised learning의 목적
    • downstram task를 잘 푸는 것
    • 기존 unsupervised learning과 다르게 downstream task의 성능으로 모델을 평가
  • pretext task의 예시 몇 가지
    • image completion
      • 이미지 일부가 없을 때 그 없는 부분의 이미지를 완성해서 원래의 이미지를 파악
    • rotation prediction
      • 회전된 이미지가 원래 이미지로부터 몇 도 정도 회전을 했는지를 파악
    • jigsaw puzzle
      • 쪼갠 이미지를 합쳐서 원래 이미지를 파악
    • colorization
      • 그레이스케일 이미지가 주어졌을 때 원래 어떤 색으로 구성되어 있을지를 파악

pretext task를 통해
좀 더 high-level의 sementic한 feature들을 학습

 

Self-supervised learning의 전반적인 흐름

 

  • pre-training
    • 상당히 많은 양의 unlabeled 데이터를 바탕으로 다양한 pretext tasks 정의
      • unlabeled 데이터들이 갖고 있는 특징들을 파악하기 위해 노력
  • Shallow network 구성
    • 좀 적은 양의 labeled 데이터를 추가로 지도학습 하여 downstream task 진행
      • pre-train 모델의 layer들을 그대로 복사
      • 끝부분에 downstream task를 위한 shallow network를 얹혀서 학습 진행

 

Vision을 위한 Pretext Tasks

① Context Prediction

  • 이미지가 주어지고, 이 이미지에서 총 9개의 patches를 추출
    • patch는 이미지 부분부분을 의미
    • center는 반드시 input으로 들어와야 하고
    • 나머지 8개 중 하나가 랜덤으로 들어가게 됨
  • 가운데 패치를 중심으로 해서 또 다른 랜덤으로 들어온 패치가 어느 부분에 위치하는지를 파악해서 학습

② Jigsaw Puzzle

  • 특정 이미지가 주어졌을 때, 9개의 패치를 먼저 추출
  • 이 패치들을 랜덤하게 배치 (= 패치의 위치를 섞음)
    • 원래 이미지가 어떻게 되어있었는지를 찾는 것을 목적

③ Colorization

  • 그레이스케일 이미지가 주어졌을 때 원래 color 정보를 예측하는 task를 수행
  • color 같은 경우 dense prediction을 요구하기 때문에
    • 여러가지 color의 스케일을 고려하기 위해
    • hypercolumn이라는 것을 적용
      • hypercolumn: 각각 다른 layer들의 feature들을 합쳐서 도출

④ Rotaition

  • 회전된 이미지가 원래 이미지로부터 몇 도 정도 rotate되었는지를 예측하는 task
    • 4-way classification
      • 하필 4-way인 이유는 이 구성이 제일 성능이 좋았기 때문

 

pretext task의 한계점

 

  • pretext task를 정의하기 위해서는 domain-specific한 지식이 필요
  • 앞서 본 4가지 pretext task들이 가장 정형화 된 task
    • 좀 더 다양한 형태의 self-supervision을 정의하기 어려움
  • 특정한 이미지에서 3x3 패치를 추출할 때
    • 뭔가 비슷한 이미지들이 섞여있을 수도 있음
    • 그러면 pretext task의 성능을 좋게 학습하기 어려움
  • 이러한 한계점들을 극복하기 위한 두 가지 다른 접근법
    • Contrastive-based approaches
    • Generation-based approaches

 

Contrastive-based approaches

 

  • pretext task를 통해 이미지를 위한 작업들이 효과적인 접근법일 수는 있지만,
  • 다른 형태의 데이터에 적용하기에는 어려움이 있을 수 있음
    • 예를 들어 고양이의 high-leve sementation한 feature들을 이해하는 데에는 도움이 되지만
    • 이러한 내용을 바탕으로 강아지에 바로 적용할 수는 없음

Contrastive learning의 핵심 아이디어
좀 더 general한 pretext task를 만들자
→ 원본 이미지가 주어지고, pretext task 용도의 다른 이미지들은 positive sample로 규정
→ 원본 이미지와 다른 object 이미지는 negative sample로 규정

 

💡Contrastive learning의 목적
\( score(f(x), f(x^{+})) >> score(f(x), f(x^{-})) \)
→ reference 이미지와 positive 샘플간의 score는 높이고, reference 이미지와 negative 샘플간의 score는 낮추자!

 

  • loss function
    • \(l\)개의 positive sample과 \(N-l\)개의 negative sample이 있다고 했을 때

 

  • Contrastive-based approaches를 핵심 아이디어로 해서 나온 알고리즘
    • SimCLR(2020)
    • MoCo(2020)
    • Contrasfive Predictive Coding(2020)

 

Generation-based approaches

 

  • BERT나 GPT 구조를 활용한 approach가 많음
    • BERT(Bidirectional Encoder Representations from Transformers)
      • 구글이 공개한 사전 훈련(pre-trained) 모델
      • 트랜스포머를 이용해 구현
      • 위키피디아(25억 단어)와 BooksCorpus(8억 단어)와 같은 unlabled 데이터로 훈련되었음 
      • 인코더만 활용을 해서 모델 구축
      • 대용량 unlabeled 데이터로 모델을 미리 학습 시킨 후 특정 task를 가지고 있는 labeled 데이터로 전이학습
      • BERT의 사전 훈련 방법 2가지
        • 마스크드 언어 모델(Masked Language Model, MLM)
          • 가려진 단어들을 예측하도록 학습 (=빈칸 뚫어놓고 맞추기 학습)
        • 다음 문장 예측(Next Sentence Prediction, NSP)
          • 두 개의 문장을 준 후에 이 문장이 이어지는 문장인지 아닌지를 맞추는 방식으로 학습
    • GPT(Generative Pre-trained Transformer)
      • 디코더만 활용을 해서 모델 구축
      • 한 단어가 들어오면 그 다음에 올 적절한 토큰을 생성하는 언어 모델
        • 예를 들어, "오늘"이라는 단어가 GPT 모델에 input으로 들어가게 되면 GPT는 "날씨가" 같은 적절한 단어를 output으로 내보내는 것
      • GPT는 별도의 추가적인 데이터를 사용하여 학습 X
      • 기존에 pre-train된 지식만을 가지고 분석

BERT - 마스크드 언어 모델

 

BERT - 다음 문장 예측
GPT

 

 

Self-Attention & Masked Self-Attention

 

  • self-Attetion
    • transformer의 인코더 부분에서 활용
    • 특정한 input을 모두 넣었다고 했을 때
      • 특정 단어와 단어 간의 관계성을 파악
  • Masked Self-Attention
    • transformer의 디코더 부분에서 활용
    • 뒷부분은 모르는 상태로
      • 앞 단어를 바탕으로 뒤에 오는 다른 단어를 도출해 가는 과정
    • 뒷부분은 우리가 새롭게 도출해야 하는 부분이기 때문에
    • 마스킹을 하고 남은 단어들간의 관계성을 파악하여 단어를 도출

이러한 Self-Attention기법과 Masked Self-Attention 기법을 사용하는 transformer의 인코더와 디코더 부분을 사용해서

BERT와 GPT를 도출하게 됩니다.

위 사진은 BERT 논문에 첨부된 그림으로 BERT, GPT, ELMo의 구조적인 차이를 보여줍니다.

ELMo의 경우 정방향 LSTM과 역방향 LSTM을 각각 훈련시키는 방식으로 양방향 언어 모델을 만들었습니다.

GPT는 트랜스포머의 디코더를 이전 단어들로부터 다음 단어를 예측하는 방식의 단방향 언어 모델입니다.

반면 BERT는 화살표가 양방향으로 뻗어나가는 모습으로 이는 Masked Language Model을 통한 것입니다.

 

BERT
트랜스포머의 인코더 부분을 활용하고,
문장의 빈칸을 맞추도록 학습하거나 두 문장이 이어지는 문장인지 아닌지 맞추는 것을 학습

GPT
한 단어를 주고 그 다음 단어가 무엇인지 맞추도록 학습

 

 

728x90
LIST
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함