오늘은 SSL, Self-supervised learning의 초기 발전 과정을 보여주는 논문을 하나 다뤄보려고 한다. SSL은 데이터에 label이 없을 때 사용하는 기법이다. 데이터가 부족할 때 사용하는 기법이 아니라, 데이터는 많지만 이에 대한 사람의 label이 존재하지 않을 때, SSL 기법을 통해 데이터의 "built-in" 한 특징을 label처럼 삼아서 마치 label이 존재하는 것처럼 대하는 것이다. 이를 Pseudo label이라고 한다.
보통은 우리가 메인으로 하는 task 이외에 pseudo-label을 만들 수 있는 다른 task, pretask를 하나 만드는 방법이 대표적이다. 일부로 일거리를 하나 만들고, 그 일거리를 해결함으로써 얻는 지식이 label처럼 되는 것이다. 이 논문에서의 일거리는 바로 jigsaw puzzle을 푸는 것이다. 모델이 사진에 대한 jigsaw puzzle을 잘 풀도록 학습시킴으로써 어떤 이미지 패치가 어디로 가야하는지를 알게하고, 이를 사전지식, label처럼 활용하겠다는 것이 이 논문의 기본적인 아이디어이다.
원문링크: https://arxiv.org/abs/1603.09246
Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles
In this paper we study the problem of image representation learning without human annotation. By following the principles of self-supervision, we build a convolutional neural network (CNN) that can be trained to solve Jigsaw puzzles as a pretext task, whic
arxiv.org
1. Method
일단 전체적인 방법론을 큰 틀에서 말해보면,
1. pretask인 jigsaw 퍼즐을 풀기 위한 CFN (Context-Free Network)를 훈련시킨 후,
2. 훈련된 convolution layer 가중치들을 standard AlexNet에 붙여넣은 다음에,
3. labeled data를 이용해 다시 훈련시키는 supervised fine-tuning 을 거치면
우리가 원하는 최종적인 image classifier가 나온다.
1.1. Why Jigsaw Puzzle?
왜 하필 저자들은 jigsaw puzzle을 선택했을까. 그 이유는 직쏘 퍼즐로 pretask를 구성하면,
1. 각 퍼즐 조각 안의 요소들의 생김새
2. 각 퍼즐 조각들이 대체적으로 어디에 위치해야 하는지
를 모두 학습시킬 수 있기 때문이다. 또한,
이렇게 같은 카테고리 안에 속하지만 color나 texture가 살짝 다른 경우에도, 이러한 변화에 robust한 모습을 보여줄 수 있는데, jigsaw puzzle을 푸는데에는 위치만 알면 되지 색깔과 같은 정보들은 무시해도 되기 때문이다.
이제 이 jigsaw puzzle 문제를 어떻게 세팅하는지, 그리고 이를 어떻게 푸는지 한 번 보도록 하자.
2. CFN - Solving Jigsaw puzzle
먼저 CFN이 어떤 구조인지 논문의 figure를 통해 보자.
CFN의 훈련과정을 단계별로 breakdown 해보자.
1. 이미지를 패치들이 섞인 퍼즐로 만들기
일단 원본 이미지를 가지고, 가장 짧은 쪽이 256px이 되도록 사이즈를 조정해준 뒤에, random하게 225 x 225 window로 crop하고, 이 window를 3x3, 각각의 패치 1개가 75 x 75가 되도록 자른다.
그 다음에 위의 그림을 보면 패치들이 서로 딱 붙어있는게 아니라 약간 간격도 있고 딱딱 맞아떨어지지 않는데, 0-22px 사이의 random한 offset의 간격을 주고, 각 패치는 64 x 64가 되도록한다. 이렇게 하면 각 패치당 평균 11px의 간격을 가지게 된다.
그 다음에 이걸로 퍼즐을 만들어야하는데, 이 패치들을 어떻게 섞을 지에 대한 permutation은 이미 predefine 해놓았다.
저자들에 따르면, mutual average Hamming distance를 가장 maximize하는 약 1000개 정도의 permutation set을 정의해놓고, 여기서 uniform sampling을 하여 나온 P에 적혀있는 대로 이미지 패치들을 배열한다. 위의 그림에도 있는데, 차량 사진 밑에 조그맣게 있다.
2. Feature Extraction (siamese-ennead pass)
이후 그림의 오른쪽으로 간다. 이렇게 나뉘어진 각각의 9개의 패치를, 같은 parameter로 세팅된 각자의 conv에 independently하게 돌려서 feature extraction을 한다.
fc6 (fully connected layer) 이후에는 모든 output을 그냥 이어붙여서 하나의 벡터로 만든 뒤, fc7과 fc8, 그리고 softmax를 지나 최종 출력 결과를 낸다. 최종 출력 결과는, 이미지에 apply된 permutation P가 permutation 집합 속의 몇 번째 index에 위치하는지를 결과로 낸다. 그림에 64가 있는 것은, 우리의 CFN이, 이번에 이미지에 적용된 permutation이 집합의 64번째 permutation vector에 해당한다고 예측했다는 것이다.
그리고 CFN이 출력하는 것은,
softmax이기 때문에 probability vector이다.
3. Training the CFN
우리가 원하는 것은 위의 식에서도 볼 수 있듯이 바로 아래의 식이다.
바로 true conditional density of the tile‐configuration S (i.e. the permutation) given the raw patches Ai.
어떻게 섞여있는지에 대한 확률분포를 원한다. 그리고 위의 방식대로 CFN을 훈련시키면, 다음과 같은 효과가 나온다.
우리가 최종적으로 원하는 것을 좀 더 쉽게 구할 수 있게 오른쪽의 term들로 breakdown하는 효과가 생긴다. 그래서 어려운 문제인 왼쪽을 조금 더 쉬운 문제인 오른쪽처럼 만들어서 푸는 것이다.
4. ShortCut Problem
저자들은 permutation이 한 번만 이루어진다던지의 방식으로 이루어지면, 모델이 pretask에만 집중하고 이후 우리가 진짜 원하는 task인 image classification과 같은 task에서는 잘 작동하지 않을 수 있다고 한다.
이게 바로 shortcut 문제이고, 간단하게 말하면 모델이 cheating하는 것이다. 그냥 주어진 patch들의 절대적인 위치를 외워버리는 것이다. 다른 패치들을 고려하면서 패치들 간의 위치관계도 배워야하는데, 일단 그냥 어떤 패치를 무조건적으로 특정 위치에 배치시키는 전략을 취하는 것이다. 이러면 당장 permutation을 맞추는 성능은 나올 수 있으나 나중에 classification 문제에서 이미지와 패치 location에 대한 정보와 이해가 없으므로 문제다.
이를 방지하기 위해 저자들은 여러 기법들을 적용하는데,
5. Results
앞으로도 이런식의 pretask를 어떻게 구성하는지에 따른 여러 방법론들이 소개될 예정인데, 가장 중요한것은 이 pretask를 어떻게 만들 것인가가 관건인 것 같다.