안녕하세요. 최근 논문과 세미나에 바쁜 나날을 보내다가 오랜만에 관심있는 아티클을 정리하는 시간을 가져보았습니다. 원본은 아래의 링크를 참고해주시면 됩니다.
이번 포스팅에서는 현재 수 많은 논문에서 활용되고 연구되고 있는 self-supervised learning에 대해 정확하게 정의하고 왜 사용해야하는 지에 대해서 알아보도록 하겠습니다.
1. Supervised Learning
딥 러닝을 가장 처음 배우신 분들이라면 Supervised learning의 개념에 대해서는 숙지하고 계실것입니다. 한번 더 정의해보면 이진 분류, 또는 다중 분류 문제에서 특징 벡터(feature vector) $X$에 대한 타겟 레이블(label)이 함께 존재하여 이를 기계학습 모델이 알맞고 분류하는 것을 의미합니다. 이것을 확률적으로 적어보면 특징 벡터 중 하나 $x \in X$가 주어졌을 때 특정 클래스 $c$일 확률인 $P(y=c|x)$를 구하는 것과 동일합니다. 여기서 supervised learning의 중요한 점은 모든 특징 벡터 $X$에 대해서 레이블이 존재한다는 점입니다. 마치 고양이 사진에는 고양이라는 레이블, 강아지 사진에는 강아지라는 레이블이 존재한다는 것이죠.
하지만, 여러분들 한번 생각해봅시다. 방금 언급한 각 사진에 대한 레이블은 누가 지정해주는 것일까요? 바로 "사람"입니다. 데이터가 십만장, 백만장이 있다고 가정했을 때, 이를 개, 고양이와 같은 클래스로 분류하는 것은 굉장히 인력 낭비일 뿐만 아니라 시간도 소비되며 레이블링에 투입된 사람들에게 돈도 주어야하기 때문에 금전적으로도 손해라고 볼 수 있습니다. 또한 사람이 직접 지정하기 때문에 실수가 존재할 수도 있겠죠. 따라서 실질적인 문제에서는 모든 데이터에 대해서 레이블이 존재하거나 항상 맞는 레이블링이 되었다고 확신할 수 없습니다.
2. Semi-Supervised Learning
위의 문제를 해결하는 방법이 바로 semi-supervised learning입니다. semi-supervised learning에서는 특징 벡터 $X$에 대한 레이블 $y$가 주어져있지 않을 때 $X$에 대한 $y$를 자동적으로 생성하여 쌍을 구성하는 기계학습 모델을 훈련시킨다는 개념으로 받아들이시면 됩니다. 따라서, 이상적인 관점에서 바라보았을 때 해당 모델이 optimal하다면 임의의 특징 벡터 $X$에 대해서 그에 알맞은 레이블 $y$를 생성하고 이를 해당 특징 벡터에 대한 레이블로 쓸 수 있기 때문에 사람이기에 저지를 수 있는 실수, 그리고 레이블링이 안된 데이터셋에 대한 문제를 해결 할 수 있습니다. 그러므로 semi-supervised learning에서는 크게 2가지 stage로 구성된다고 볼 수 있습니다. 첫번째 stage는 레이블을 생성하는 생성 단계, 두번째 stage에서는 생성된 레이블을 기반으로 특정 task를 진행하는 학습 단계로 구성됩니다.
이제 저희는 supervised learning의 실용적인 문제를 해결하기 위해서 semi-supervised learning을 도입한다는 것을 알게 되었습니다. 그렇다면 실제로 어떻게 동작하는 지 알아보도록 하겠습니다.
3. Pretext task & Downstream task
먼저, pretext task입니다. pretext task란, 문제를 해결하도록 훈련된 네트워크가 다른 downstream task에 쉽게 적용할 수 있는 어떤 시각적 특징을 배우는 단계입니다. 여기서 downstream task란 최종적으로 내가 이루고자하는 task입니다. 예를 들어 분류(classification)이 될 수 있겠죠. 이를 위한 구현하는 가장 대표적인 방법으로 해당 아티클에서는 puzzle-solving을 설명하고 있습니다.
기본적으로 성공적인 레이블링을 위해서는 기계학습 모델이 사진을 보고 어떤 대상인지 이해해야합니다. puzzle-solving에서는 상단의 그림처럼 아무렇게나 사진을 조각냅니다. 그러면 왼쪽의 그림처럼 전혀 고양이가 아닌 그림이 생기겠죠. 만약, 모델이 해당 모델이 고양이임을 이해한다면 왼쪽 그림의 0번 패치(patch)는 오른쪽 그림의 3번 자리, 1번 패치는 1번 자리, 2번 패치는 2번 자리, 그리고 3번 패치는 0번 자리로 이동해야합니다.
해당 알고리즘을 제안한 Unsupervised Visual Representation Learning by Context Prediction를 기반으로 설명하면 하나의 영상으로부터 여러 개의 패치를 추출하는 것부터 시작합니다. pretext task에서는 이러한 패치들간의 관계를 예측하도록 모델이 학습해야만 합니다.
- 여러 개의 패치를 한 개의 영상으로부터 추출
- 추출된 패치 중 하나를 무작위로 샘플링
- 선택된 패치는 $3 \times 3$ 그리드의 중간에 배치되고 두 번째 패치도 무작위로 선택한 뒤 해당 그리드의 8개의 위치 중 선택
- 이때 기계학습 모델이 너무 단순한 특징을 기반으로 상대적 위치를 판단하지 않도록 패치 간 간격을 두는 것과 같은 노이즈 추가
- 해당 기계학습 모델은 첫번째로 선택된 패치에 대한 상대적 위치를 실제 레이블로 가지고 이를 예측하도록 설계되었으며 훈련
이를 전체 모델 구조로 그려보면 아래와 같습니다.
다음으로 저희가 관심있는 것은 상단의 feature extraction layers입니다. 모델이 임의의 패치끼리에 대한 상대적 위치를 파악할 수 있다고 가정하면 feature extraction layers에는 주어진 데이터에 대한 의미있는 공간적 특성을 잘 추출할 수 있을 것 입니다. 따라서 해당 feature extractin layers를 그대로 downstream task를 위한 네트워크로 이식하는 과정을 거칩니다. 이제부터는 supervised learning을 수행하는 것이죠.
이와 같은 먼저, 대부분 레이블이 없는 데이터셋을 이용해서 주어진 영상으로부터 임의의 패치에 대한 공간적 특성을 정확하게 학습한 뒤 feature extraction layers를 downstream task를 위한 모델로 그대로 이식하여 소량의 레이블이 있는 데이터셋을 이용해서 학습하는 과정을 거치는 학습 전략이 semi-supervised learning이라고 이해하시면 될 거 같습니다.
참고 문헌
[1].What is Self-Supervised Learning in computer vision? A simple Introduction(medium.com/analytics-vidhya/what-is-self-supervised-learning-in-computer-vision-a-simple-introduction-def3302d883d)
[2]. Unsupervised Visual Representation Learning by Context Prediction(Carl Doersch et al.)
'인공지능 > 아티클 정리' 카테고리의 다른 글
아티클 정리 - How to Do Hyperparameter Tuning on Any Python Script in 3 Easy Steps (0) | 2020.11.19 |
---|---|
아티클 정리 - DCGAN Under 100 Lines of Code (0) | 2020.10.16 |
아티클 정리 - Volumetric Medical Image Segmentation with Vox2Vox (0) | 2020.09.11 |
아티클 정리 - Policy Gradient Reinforcement Learning in PyTorch (0) | 2020.09.09 |
아티클 정리 - Building a Face Recognizer in Python (0) | 2020.09.06 |