Boosting Self-Supervised Learning via Knowledge Transfer
Mehdi Noroozi, Ananth Vinjimoor, Paolo Favaro, Hamed Pirsiavash
(Submitted on 1 May 2018)
arXiv:1805.00385
pretext task 를 학습한 모델과 target task 를 학습한 모델이 서로 달라도 transfer를 이용한 learning을 가능케 함.
또한 Jigsaw++ 방법을 활용했음.
현재까지 많은 SSL은 transfer learning을 이용하지만 이 같은 방법에서의 최대 한계점은 모델 디자인의 선택이었다.
즉, pretext task에서 선택했던 모델과 target task 를 학습할 때 사용할 모델이 동일해야 했다는 점이다.
이를 극복하여 더 딥한 모델에서도 knowledge transfer를 하는 방법을 작성했다.
우선 그들은 좋은 visual representation space에서 의미적으로 유사한 데이터들은 서로 가까이에 위치할 것이라는 직감을 이용했다.
(a) Self-Supervised Learning Pre-Training
다양한 pretext task를 통해 네트워크를 학습시킨다.
(b) Clustering
데이터 셋에 존재하는 모든 unlabeled image들에 대해서 feature vectors를 계산한다.
(이 때 feature들은 CNN의 중간 layer에서도 추출이 가능하다.)
그리고나서, feature들을 cluster하기 위해 Euclidean distance를 가지고 k-means algorithm을 이용한다.
더 자세한 k-means clustering 에 대해서는 아래 블로그를 참고하면 될 것이다.
https://ratsgo.github.io/machine%20learning/2017/04/19/KC/
(c) Extracting Pseudo-Labels.
(b) 단계에서 계산해뒀던 각 cluster의 center들은 virtual category들로 고려될 수 있다.
각각의 feature vector들의 pseudo-label을 결정하기 위해서 이 벡터들을 가장 가까운 cluster center에 할당했다.
이 때 사용되는 데이터셋들은 (a)또는 (b)에서 사용된 것들과 다를 수 있다.
(d) Cluster Classification
target task에 사용될 architecture를 이용하여 간단한 classifier를 학습시킨다.
(c)에서 사용되었던 pseudo label을 뽑을 때 썼던 데이터들을 다시 input으로 넣으면서 이번에는 이전에 할당된 pseudo-label을 예측하는 방식의 학습을 진행한다.
결국, classifier는 target architecture 속에서 새로운 representation을 배운다.
해당 논문에서는 jigsaw++ 라는 기존 jigsaw problem의 변형 버전을 사용한다.
main image 인 (a)와 random image인 (b)가 필요하다.
처음에는 (a)를 직소퍼즐과 비슷하게 섞어준다. ==> (c)의 상태가 됨.
그리고 나서 random image로부터 random patches 를 교환한다. ==> (d)의 상태가 됨.
(d)가 Jigsaw++ 에서 풀어야 할 퍼즐이다.
이는 기존 jigsaw 문제보다 훨씬 복잡해진 버전이다.
- 모델은 occluding tile을 찾아야 한다.
- occluding tile 이외의 나머지 타일들로 jigsaw 를 풀어야 한다.
실험결과
What is the impact of the number of clusters?
k-means clustering에서는 유저가 직접 cluster의 수를 정해줘야한다.
그에 따른 결과로는 클러스터의 수에 네트워크가 그렇게 민감하지는 않았다.
어느정도 클러스터의 수가 증가됨에 따라 mAP도 올랐다고 보이지만
이는 클러스터의 수가 커지면 클러스터 당 data의 개수가 줄어드는 효과 때문에 overfit의 원인이 되었기 때문이다.
Transfer Learning Evaluation
PASCAL VOC fine-tuning
결과는 AlexNet 보다 deep한 vgg를 이용했고 Jigsaw++를 pretext task로 사용했고 Cluster classfication을 사용했을 때 가장 성능이 좋다는 것을 확일 할 수 있다.
또한 Supervised와 성능차이도 크게 나지 않았음을 보인다.
그들은 그들의 knowledge transfer 방식이 더 큰 스케일의 데이터셋과 더욱 deep한 모델을 pre-training에서 사용할 수 있게 했다고 주장한다. (심지어 fine-tuning에서는 AlexNet을 사용)
Linear Classification
여기서도 vgg를 pre-training에 사용하고 CC와 Jigsaw++를 이용한 모델이 가장 성능이 좋음을 볼 수 있다.
Nonlinear Classification
이 실험은 AlexNet의 마지막 layer에서 nonlinear classifier를 이용했다는 것이다.
이 실험은 CC를 통해 얻은 pseudo-label과 ground truth label 사이의 alignment를 설명할 또다른 방식이라고 한다.
여전히 CC+vgg-Jigsaw++ 가 가장 성능이 좋았다.
Visualization
Alexnet에서 학습된 filter들을 시각화한 버전이다.
여기서 흥미로운 점은 Color dropping인 (c)에서는 color를 볼 수 없다는 것이다.
이러한 사실은 pre-training stage에서 어떠한 색 이미지도 볼 수 없는 color dropping의 방식과 일치했다.
또한 CC+vgg-Jigsaw++에서 학습에서 사용된 sample cluster들을 보여준다.
각 줄은 하나의 cluster center와 가장 가까운 이미지들을 보여준다.
결론
그들의 knowledge transfer는 꽤나 효과를 보인다고 생각한다.
일단 이전까지의 transfer learning과 다르게 새로운 모델에 적용이 가능하다는 것이 흥미로웠고
그 실험 결과까지 성능이 좋게 나오니 괜찮은 방법이었다고 생각한다. :)