Few-Shot Learning, 개념만 듣고서 신기해서 찾아봤어요!

2022.01.15 23:41 9,245 조회

📌Introduction

  • 본 포스팅은 데이콘 서포터즈 "데이크루" 1기 활동의 일환입니다.  
  • 데이크루 글을 어떤 내용을 작성해야할까 고민이 많다가 캡스톤 자료 조사를 하다 'Few-Shot Learning' 이란 것을 발견하고 신기해서 정리합니다.  
  • 좋은 유튜브 강의가 있어 해당 내용을 많은 부분 참고하여 번역 및 정리하였습니다.
  • 본 글의 첨부된 사진은 모두 강의 슬라이드 해당 내용 슬라이드에서 가져왔습니다.
  • 원래는 논문도 찾아보고 리뷰 및 코드 적용까지 해보고 싶었지만 시간 관계 상 이번 글은 개념만 정리하겠습니다.


🔎Have you heard about 'Meta Learning'?

일반적으로 사용되는 딥러닝 모델은 많은 양의 데이터를 필요로 합니다. 대부분의 지도 학습 방법을 채택하기 때문이죠. 하지만, 이런 방식은 모델이 새로운 대상을 예측하고자 한다면 새로운 대상에 해당하는 데이터를 추가로 학습을 시켜야 합니다. 따라서 수많은 비용과 시간이 소모되는 것이죠. 뿐만 아니라 의료 데이터나 재난 상황, 보안 이슈 등 다양한 이유로 데이터를 확보하기 어려운 경우에는 충분한 데이터가 수집되지 않기에 높은 성능을 만들기 어렵습니다. 

왼쪽 사진에는 아르마딜로 사진 두 장, 천산갑 사진 두 장이 있습니다. 그리고 오른쪽 사진이 아르마딜로인지 천산갑인지 맞춰보라고 한다면 보통의 사람은 귀와 비닐의 특징을 보고 천산갑이라 답할 수 있을 것입니다. 하지만, 이를 딥러닝 모델에게 학습시키고 예측을 시키면 잘 맞출 수 있을까요..? 아마 안 될 것 입니다.

사람이 특징을 보고 구분할 수 있듯이 딥러닝 모델도 구분 방법을 배우도록 하는 것이 Meta Learning이며 Few-Shot Learning 역시 Meta Learning의 한 종류입니다. 


📝Few-Shot Learning 

일반적인 지도학습은 저런 학습 데이터가 주어졌을 때 주어진 데이터에 대해서만 학습을 진행하고 예측을 수행할 수 있습니다. 예를 들어 저런 학습 데이터를 주고 저 데이터에 없는 다람쥐 이미지를 주고 예측하라고 한다면 예측하지 못 할 것입니다.

하지만, Few-Shot Learning은 훈련데이터를 통해 유사점과 차이점을 배우는 것입니다. 즉, 인간이 구분하는 방법과 비슷한 방법을 학습하고 새롭게 적은 양의 support data만 받더라도 예측을 수행할 수 있는 것입니다. 여기서 support set(data)란, 적은 양의 새롭게 예측해야 하는 데이터라고 생각하시면 편할 것입니다. 

예시로 위에서 제시된 학습 데이터 외에 새롭게 예측을 수행하고자 하는 데이터를 Support Set이라고 하며 이와 같이 주어져 있을 수 있습니다. 그리고 새롭게 예측하고자 하는 것을 Query라고 하고 Query와 Support Set간의 비교를 통해 예측을 수행할 수 있는 것입니다. 아까 학습하는 법 자체를 배웠으므로 적은 양의 support set 만으로도 Query와의 비교를 수행할 수 있는 것입니다. 


🎯k-way n-shot

그리고 이제 위와 같이 Support Set은 k-way n-shot이라는 표현을 씁니다. K-way에서 k는 몇 가지의 클래스가 있냐, 즉 범주의 수를 의미합니다. N-shot에서 n은 각 클래스별 이미지가 몇 개나 존재하는지에 대한 지표로 범주별 서포트 데이터의 수라고 할 수 있습니다. 위의 그림에서는 다람쥐, 토끼, 햄스터, 수달 4가지의 클래스가 있으므로 4-way가 됩니다. 그리고 각 클래스 별로 2개의 이미지가 있으므로 2-shot이 되게 됩니다. 4-way 2-shot 문제라고 할 수 있는 것이죠. 그런데 여러 자료를 살펴본 결과 N-way K-shot으로 부르는 곳도 있어 way 앞에 오는 값과 shot 앞에 오는 값의 의미만 알면 될 것 같았습니다.


📈k,n에 따른 정확도 변화

그렇다면 k와 n의 수치에 따라 정확도는 어떻게 될까요?? 

많은 분들이 예상하시는 것처럼 분류해야 하는 클래스가 많아질수록 즉, k값이 높아질수록 정확도는 낮아집니다. 세 종류의 이미지 분류보다 여섯 종류의 이미지 분류가 당연히 어려운 것입니다. 단순 찍을 확률만 보더라도 1/3과 1/6의 차이니까요. 

n값에 따라서는 어떻게 될까요?

이 역시 당연하게 각 클래스 당 이미지가 많을수록 정확도는 올라가게 됩니다. 유사점과 차이점과 같은 특징을 찾을 이미지가 많아지는 것이니까요. 


📖학습 방법

기본 아이디어는 유사성을 학습하는 것입니다. ImageNet과 같은 대규모 데이터 세트를 활용해 네트워크를 훈련합니다. 그리고 학습된 유사성 함수를 이용해 support set의 모든 샘플과 query를 비교해 유사성 점수를 계산합니다. 그리고 유사도 점수가 가장 높은 샘플을 찾아 예측으로 반환하는 것입니다. 

추후, 반드시 논문을 읽고 한계점, 더 자세한 방법론에 대해 리뷰하겠습니다..!


Few-Shot Learning '적은 데이터로 학습을 시키자'라고 단정짓기엔 무리가 있는 내용입니다. 정리하면 학습데이터를 통해 학습하는 방법 자체를 배우고 이 방법을 통해 적은 양의 데이터로도 충분히 예측을 수행할 수 있다니까요! 해당 내용을 적용하면 데이터가 상대적으로 부족한 문제를 풀 때도 도움이 되겠네요. 관련해서 적용할 만한 대회나 사례가 보이면 다시 한 번 글을 써보도록 하겠습니다.


읽어주셔서 감사합니다!


📎참고자료

글에 포함된 슬라이드 자료 : https://github.com/wangshusen/DeepLearning/blob/master/Slides/16_Meta_1.pdf

유튜브 강의 : https://www.youtube.com/watch?v=hE7eGew4eeg

Few-Shot Learning 정리 내용 : https://www.kakaobrain.com/blog/106