오늘은 Self-supervised learning(자기주도학습)과 주된 학습 방법인 Contrastive learning에 대해 포스팅하겠습니다. 먼저 Self supervised learning이 왜 필요한지부터 살펴보겠습니다.
Self-supervised learning의 필요성
딥러닝 학습에는 충분한 양질의 데이터가 필요합니다. 또한 이러한 데이터들의 지도학습을 위해서는 라벨링 과정이 필수적인데요, 하지만 현실에서 데이터를 충분히 수집하기란 매우 어렵습니다. 또한, 수집된 데이터에 라벨링을 하는 과정도 시간과 노력이 많이 필요할 수밖에 없죠. 또한 의료 분야의 데이터의 경우 이러한 라벨링의 제약이 있는 경우도 분명 존재할 것입니다.
따라서 이러한 현상에 대응하기 위한 방법으로 비지도학습(Unsupervised-learning), 준지도학습(Semi-supervised learning) 등을 많이 들어보셨을 것입니다. 비지도학습은 라벨이 없는 데이터로 학습하는 방법이며, 준지도학습은 일부의 라벨을 이용하여 학습시키는 방법입니다.
이러한 학습 방법 중 '자기주도학습(Self-supervised learning)'은 비지도학습의 한 분야에 속하는 방법입니다. 이름에 걸맞게 스스로 Supervision을 주는 방법인데요, 비지도학습이기 때문에 전혀 라벨링 되어있지 않은 데이터로 학습을 진행합니다. 그렇다면 이러한 학습 과정은 어떻게 이루어지는 걸까요?
Self-supervised learning의 큰 흐름
이제는 간략하게 Self-supewrvised learning의 큰 흐름을 짚어보겠습니다. 주로 Pretext task와 Contrastive learning에 대해 소개해드리겠습니다.
Pretext task
우선 자기주도학습의 가장 큰 포인트는 사용자가 새로운 문제를 정의한다는 것입니다. 이렇게 정의된 새로운 문제를 논문들에서는 'pretext task' 라고 부릅니다. 이러한 pretext task를 학습함으로써 모델은 데이터 '자체'에 대한 이해를 높일 수 있게 되고, 이렇게 pre-train 되어진 모델을 이전학습함으로써 우리는 down stream task (ex. classification) 를 더 잘 해결할 수 있다는 것이 처음의 아이디어였죠.
이러한 Pretext task가 제안된 최초의 논문은 다음과 같습니다. 2014년에 제시된 Exemplar라는 방법을 살펴보겠습니다.
사진의 붉은색으로 표시되어 있는 부분이 원래의 원본 image(Seed patch)이고, 나머지는 일반적으로 사용하는 augmentation 방법을 이용하여 crop, 색상변환 등의 과정을 거친 것입니다. 이러한 과정을 image 하나하나 별로 진행하는데요, 그 후 이렇게 augmentation으로 생성된 image들을 모두 같은 class로 분류하도록 분류기를 학습시킵니다.
하지만 이러한 방법의 문제점은 무엇일까요? 바로 image 하나하나가 하나의 class를 부여받게되니, 큰 데이터셋에 적용하기에는 무리가 있을 것입니다. 즉, 데이터 개수가 class 개수가 되는 현상이 발생하는 것이죠. 당연히 학습에 무리가 갈 수밖에 없습니다. 이러한 Pretext task를 지정하는 다른 논문은 Context prediction(ICCV, 2015), Jigsaw puzzle(ECCV, 2016), count(ICCV, 2017), rotation(ICLR, 2018) 등이 있습니다. 다른 논문에 대한 자세한 설명을 보시고 싶으시다면 여기를 참고해주세요.
결론적으로 이러한 자기주도학습에는 새로운 메타가 필요해집니다. 바로 Contrastive learning 입니다.
Contrastive learning
Contrastive learning은 다음과 같은 Motivation으로 시작하였습니다. 다음 그림을 보시죠.
그림에서는 치타를 Input image로 넣었습니다. 그런데 Classification response를 보니 래오파드, 재규어 등의 분류 비율이 보트나 쇼핑카트의 분류 비율보다 높음을 확인할 수 있습니다. 이를 통해 치타, 래오파드, 재규어 등에 유사한 feature가 작용하고 있음을 확인할 수 있으며, 이렇게 잘 추출된 특징값은 instance간의 유사도 정보를 가지고 있을 것이라는 가정을 시작하게 됩니다.
따라서 Contrastive Learning은 Positive pair와 Negative pair로 구성됩니다. 간단하게 Positive pair 끼리는 거리를 좁히고, Negative pair끼리는 거리를 멀리 띄워놓는 것이 학습 원리입니다.
다시말해 Contrastive Learning은 같은 image에 서로 다른 augmentation을 가한 뒤, 두 positive pair의 feature representation은 거리가 가까워 지도록(유사해지도록) 학습을 하고, 다른 image에 서로 다른 augmentation을 가한 뒤, 두 negative pair의 feature representation은 거리가 멀어지도록 학습을 시키는 게 핵심입니다. 다음 이미지를 보시면 이해가 더 직관적으로 가실 것 같습니다.
위 이미지에는 강아지와 의자가 있죠? 사실 의자와 강아지는 다리가 4개이기에 비슷한 측면이 있을 것입니다. 우선 강아지와 의자의 이미지를 각각 augmentation하고, 이 augmentation 된 것끼리는 각각 positive pairs로 거리를 좁혀주도록 학습합니다. 하지만 강아지와 의자는 구분해야하므로, 이 둘은 negative pairs로써 학습하는 것입니다. 이러한 Contrastive learning은 현재 활발히 학습 방법으로 이용되고 있으며, NPID(2018, CVPR), MoCo(2020, CVPR) 등에서 이용되었습니다. 자세한 설명은 여기를 참고해주세요! 기회가 된다면 이러한 논문도 리뷰하도록 하겠습니다.
Reference
[0] https://hoya012.github.io/blog/byol/
[1] https://velog.io/@tobigs-gm1/Self-Supervised-Learning
[2] Discriminative unsupervised feature learning with exemplar convolutional neural networks(2014)
[3]http://dmqm.korea.ac.kr/activity/seminar/302#:~:text=Self%2Dsupervised%20Learning%EC%9D%B4%EB%9E%80%20label,%EC%9E%90%ED%95%98%EB%8A%94%20%EC%97%B0%EA%B5%AC%20%EB%B6%84%EC%95%BC%EC%9D%B4%EB%8B%A4.
[4] https://hoya012.github.io/blog/Self-Supervised-Learning-Overview/
'Computer Vision💖 > Basic' 카테고리의 다른 글
[CV] ResNet-18로 특정 Image의 feature 추출하기 (PyTorch) (0) | 2022.05.30 |
---|---|
[CV] Adversarial Learning(적대적 학습)이란? + 응용 (0) | 2022.04.24 |
[CV] AlexNet(2012) 논문을 code로 구현 해보자 (Keras, PyTorch) (0) | 2021.06.25 |
[CV] AlexNet(2012)의 구조와 논문 리뷰 (0) | 2021.06.23 |
[CV] ResNet - Residual Connection(잔차연결) (0) | 2021.05.04 |