본문 바로가기

인공지능

Few-Shot Learning

Few-Shot Learning이란?

Few shot learning은 Meta learning의 한 종류이고, 목적은 "배우는 법을 배우는 것"이다.

 

전통적인 딥러닝 모델은 호랑이와 토끼를 구분하기 위해 호랑이 이미지 1000장, 토끼 이미지 1000장이 있어야 할 것이다.

그러나 Few shot learning은 호랑이와 토끼를 "구분하는 법"을 배운다. 그래서 호랑이 이미지와 토끼 이미지가 학습 데이터셋에 없어도 호랑이 이미지를 주었을 때 "호랑이"라고 맞출 수 있다.

 

Few shot learning을 하려면 Training set, Support set, Query image가 필요하다.

Training set을 통해 "구분하는 법을 배우"고, Query image가 들어왔을 때 Support set 중 어떤 것과 같은 종류인지 맞추는 일을 하는 것이다.

즉, Query image가 어떤 클래스와 "같은 클래스인가"를 푼다고 생각하면 쉽다.

Few-Shot Learning과 Supervised Learning과의 차이점

Supervised Learning은 Test image의 클래스가 Training set에 있다. 즉, Test 이미지로 강아지 사진을 주는 것은 강아지 사진을 잘 학습했는지 묻는 것이다.

 

그러나, Few-Shot Learning은 Training set에 없는 클래스를 맞추는 문제이다.

참고로, 이 Support set의 클래스 개수와 샘플 수를 기준으로 k-way n-shot이라는 표현을 쓴다.

 

k-way는 Support set이 k개의 클래스로 이루어졌다는 것이고, 이는 Query image가 k개의 클래스 중 어떤 것과 같은 것인지 묻는 문제가 되므로 k가 클수록 모델의 정확도는 낮아지게 된다.

 

n-shot은 각 클래스가 가진 sample의 개수이고, 비교해 볼 사진이 많으면 많을 수록 어떤 클래스에 속하는지 알기 쉽기 때문에 n이 클수록 모델의 정확도는 높아지게 된다. n이 1이 되면 one-shot learning이라고 부르게 된다.

 

Few-Shot Learning과 Transfer Learning과의 차이점

Few-Shot Learning과 Transfer Learning과 다른 점은 말하기가 굉장히 애매하다. 

 

Transfer Learning은 다른 도메인으로 학습된 모델의 layer 일부를 freeze하고, 일부를 다른 도메인의 이미지로 fine-tuning 하는 과정이다. 이때 새로운 도메인의 경우 많은 labeling 된 데이터가 있을 수도 있다.

 

하지만 Few-Shot Learning의 경우 꼭 일부를 freeze하고 fine-tuning 하는 것을 의미하지는 않으며(fine-tuning을 안 해도 상관없다) 말 그대로 새로운 도메인(또는 unseen dataset)이 적게(few) 있는 경우를 지칭한다.

 

학습 방법

Few shot learning의 기본 학습 방법은 유사성을 학습하는 것이다.

두 개의 사진이 주어졌을 때 각 사진을 잘 분석해서 두 사진이 유사한지 다른지를 판단할 수 있다면, Query image가 주어졌을 때 Support set의 사진들과 비교하여 어떤 클래스에 속하는지 알아낼 수 있다.

 

 

참고

 

https://zzaebok.github.io/machine_learning/FSL/

 

Few shot learning 정리

 

zzaebok.github.io

https://www.youtube.com/watch?v=hE7eGew4eeg