Exploring Simple Siamese Representation Learning 논문 간단 리뷰

2022. 5. 2. 17:12논문리뷰

반응형

오늘은 cvpr에 등재된 논문 'Exploring Simple Siamese Representation Learning'에 대해 리뷰해보고자 한다. 해당 논문은 kaiming_normal로 유명한 kaiming he가 저자로 있고, Facebook AI에서 출판한 논문이다. cvpr2022 2월까지의 논문중 rank가 가장 높은 논문이다. siamese learning에 대해서 인사이트를 주는 논문인데, 이는 self supervision에서 주로 쓰이는 학습 모델이다. stop gradient를 통해 siamese learning의 문제점인 'output이 상수로 붕괴되는 현상'을 해결했다고 한다.

 

  1. 사전 지식
    1. siamese network
    2. contrastive learning
    3. clustering
  2. SimSiam
    1. 모델 구조
    2. stop gradient 증명
    3. 실험

 


1. 사전 지식

self supervision, unsupervised learning에서 주로 쓰인다. 대표적인 예로는 face-recognition이 있으며 이를 예로 들자면 이미지에 사람 이름이 태깅되는 형식으로 정말 많은 Label이 필요할 것이다. self supervision을 통해 이미지의 임베딩 벡터를 학습시키며 이러한 문제를 풀 수 있다. 

 

1. siamese network

 input의 특징을 학습하며, 학습 단계에 진짜 Label이 필요하지 않다.  두개의 network를 필요로 하는데, weight를 공유하는 형태다. 이미지 x를 augmentation 한 x1, x2를 학습에 이용하는데, 이 x1과 x2가 비슷한 metrix를 뱉어내도록 학습한다. siamese network의 문제점은 output값이 상수로 붕괴된다는 거였다. 이를 해결하기 위해 아래와 같이 contrastive learning과 clustering이 주로 사용되었다. 

 

2. contrastive learning

siamese network에서 negative sample 하나를 더 추가해줬다. x1, x2간 이미지 유사도를 계산하는 것에 추가로, x와 다른 라벨을 가진 이미지와 함께 학습함으로써 output값이 붕괴되는 현상을 막아주었다. contrastive learning을 사용한 모델로는 MoCo와 SimCLR을 들 수 있다. 

MoCo논문에 나온 contrastive learning 설명 그림.

 

3. Clustering

negative sample을 사용하지 않지만 군집화를 통해 비슷한 효과를 낼 수 있다. 군집의 중심을 negative sample로 가정하여 계산하는데, 예시 모델로는 SwAV가 있다. 

 

 

 

 

 

2. SimSiam

본 논문에서 말하고자 했던 바는 siamese network만을 사용해도 output이 constant로 붕괴되지 않게 막을 수 있다는 거다. 이는 stop gradient를 통해 가능했는데, 어려운 개념은 아니고, 그냥 encoding시 사용한 모델의 gradient를 반영하지 않는 것이다.

SimSiam 구조

 

 

 1. 모델 구조

pytorch식의 수도코드는 다음과 같다. 이미지 x에 대해 augmentation 하고, 이를 통해 embedding과 predict를 진행한다. 이때 임베딩의 결괏값인 z1, z2는 loss계산에 사용되지 않는다. pytorch에서는 .detach()를 통해 gradient를 사용하지 않도록 설계할 수 있다. 따라서 loss를 backpropagation 할 때 임베딩 z1, z2는 상수 취급을 받는다. 

pytorch식 수도코드

 

 

2. stop gradient 증명

이렇게 gradient를 적용하지 않는 것이 어떻게 output이 collapse되는걸 막는 걸까? 저자는 output값에 l2 norm을 적용해서 실험을 해봤다고 한다. 다만 output이 가우시안 분포를 따른다고 가정했을 때다. 

 

stop-gradient 실험

위 그래프는 stop-gradient를 적용했을 때와 적용하지 않았을 때의 결과다. 실험적으로 1, 3번째 그래프에서 w/stop-grad가 성능이 좋음은 알 수 있다. 2번째 그래프는 output의 표준편차를 나타낸 것인데, output이 가우시안 분포를 따른다면 이 표준편차는 1 / √d 값을 가지게 된다고 한다. w/stop-grad시에 output의 표준편차가  1 / √d  와 비슷한 값을 갖고 있으므로 collapse 되지 않았음을 판단한 것이다. 

 

 

3. 실험

논문의 실험결과에서 내가 특히 좋았던 점은 batch_size에 대한 것이다. 보통 contrastive loss를 사용하는 MoCo나 SimCLR 같은 경우는 최소 batch size를 4096으로 권장하고 있다. 하지만 본 논문에서는 siamese network에서 64 정도로 작은 batch size로도 학습이 가능함을(acc 66%)을 보여주었다. 참고로 SGD를 쓰는데 batch size가 크다면 잘 동작하지 않았다고 한다. 

 

batch size에 대한 실험 결과

 

 

 

그외 ImageNet 데이터셋을 대상으로 batch norm(BN)의 사용에 대한 세부적인 실험, prediction 하는 Multi Layer Perceptron(MLP)의 구조 실험도 있다. 

 

 

 

 


 

저자가 코드를 github에 공개했으니, ImageNet으로 실험해도 좋을듯 하다. 

https://github.com/facebookresearch/simsiam 

 

GitHub - facebookresearch/simsiam: PyTorch implementation of SimSiam https//arxiv.org/abs/2011.10566

PyTorch implementation of SimSiam https//arxiv.org/abs/2011.10566 - GitHub - facebookresearch/simsiam: PyTorch implementation of SimSiam https//arxiv.org/abs/2011.10566

github.com

논문 원문은 다음과 같다. 

https://openaccess.thecvf.com/content/CVPR2021/papers/Chen_Exploring_Simple_Siamese_Representation_Learning_CVPR_2021_paper.pdf

 

현재 ImageNet기준으로 self supervision의 정확도는 82%라고 한다. 분류 모델의 ImageNet 정확도가 90% 정도니, 개인적으로 이런 이미지 임베딩을 기반으로 하는 unsupervised 계열 연구가 더욱 재미있는 결과를 내주면 좋겠다. 

728x90
반응형