Hello Computer Vision

비전공생의 MoCo v3(2021) 논문리뷰 본문

Self,Semi-supervised learning

비전공생의 MoCo v3(2021) 논문리뷰

지웅쓰 2023. 11. 14. 15:11

오랜만에 리뷰할 논문은 MoCo V3 논문이다. 해당 논문은 CNN이 아닌 Transformer를 통한 Contrastive Learning을 수행하였고 왜 Transformer를 사용하였는지에 대한 경험적인 실험결과들을 많이 담고 있다. 그리고 밑 글에서 추가로 설명하겠지만 기존 MoCo에서 사용하였던 memory bank는 사용하지 않는다.

https://arxiv.org/pdf/2104.02057.pdf

 

Introduction

이전부터 NLP분야에서는 Transformer를 통한 Masked autoencoder가 유행하고 있지만 CV분야에서는 여전히 Siamese 구조가 유행하고 있다는 걸 언급한다(ResNet기반). 따라서 저자는 Vision분야에서도 ViT를 쓰는 것에 집중했다고 한다. 그러나 적용한 방법으로는 MAE를 사용하는 것이 아닌 기존의 Contrastive Learning을 사용하여 기존의 ResNet과 비교하였다. ViT방법을 사용하였을 때 unstable한 결과가 나오기는 했지만 이것이 큰 실패를 나타내지는 않는다고 한다(Accuracy 1~3% 정도의 하락). 결과적으로는 큰 ViT모델이 좋은 결과를 나타냈다고 한다.

 

Related work

기존의 Contrastive Learning은 SSL분야에서 Positive sample은 attract하고 negative sample은 dispel하면서 큰 성공을 거두었다. 그리고 Transfomer는 NLP분야에서 self attention을 활용해 큰 성공을 거두었다. 그리고 ViT라는 모델이 만들어져 Vision분야의 supervised에서도 많은 성공을 거두었다. 그리고 저자는 이 ViT가 SSL에서도 더 많은 연구가 이루어져야 한다고 말한다.

 

MoCo v3

여기서 ViT에 대해 실험결과들은 모두 MoCo v3의 세팅을 따른다. 기존의 InfoNCE loss를 사용하고 memory bank는 사용하지 않는데, 큰 batch size를 사용할 수록 memory bank는 별로 필요없다고 한다.

알고리즘을 한번 보자면, 증강을 활용해 query, key를 생성 후 , encoder fq, fk를 통해 query, key를 통과시킨후 similiary에 대한 loss를 구한 후 fq 만 업데이트 하고 fk는 moving average 사용해 업데이트 한다.  여기서 encoder f는 ResNet, ViT가 될 수 있다.

그리고 ResNet을 이용한 MoCo v3는 ImageNet에 대한 accuracy를 위와 같이 얻었다고 한다. 이에 대한 성능 향상은 높은 batch size와 추가적인 prediction head로 인한 향상이라고 한다.

 

Stability of Self-supervised ViT Training

저자는 backbone을 단순히 ViT로 바꾸었다고 하는데 main challenge 는 훈련과정에서의 instability라고 한다.

instability는 단순히 accuarcy를 통해 나오는 것이 아니라고 하며 knn curve를 측정한다.

(사실 위 언급은 정확히 무슨 뜻인지 이해를 못하였다. 단순히 accuracy면에서는 약간의 낮은 수치를 보여주었지만 knn curve를 수행하면 위 그래프처럼 instability가 나타났다고 설명하는 거 같다.)

위 그래프를 보면 batch가 6k정도 됐을 때 학습이 불안정한 것을 확인할 수 있다. training과정에서 잘 수렴하지는 않았고 ㅁaccuracy는 약 69.7%가 나왔다고 한다.

 

Learning rate은 보통 배치사이즈가 커지면 동시에 같이 올려주어야 한다.

learning rate이 낮을수록 더 stable했지만 prone to underfitting한다고 언급한다. 

 

Optimizer에 대해서 AdamW를 공통으로 사용한다. 큰 배치사이즈에는 LARS 를 사용할 수 있지만 하이퍼 파라미터에 굉장히 민감하다고 한다. 따라서 이후 optimizer는 AdamW로 고정한다고 한다.

 

저자는 이러한 instability를 first layer에서의 gradient 가 spike하는 것을 발견했다고 한다(gradient가 갑자기 훅 증가). 아래 그래프를 보면 first layer에서 10epoch빨리 last layer보다 gradient 가 증가했다고 한다. 따라서 instability가 이러한 현상에서 일어난 것이 아닐까 생각해 patch projection layer를 training과정에서 freezing하고 random patch projection을 사용한다고 한다.

 

그 결과를 비교해보았을 때 조금 더 stabilize한 결과를 보여준다.

 

그리고 ResNet과 결과들을 비교해보았을 때 큰 모델일수록 더 좋은 성능, 경쟁력 있는 결과를 나타냈다고 한다.

 

느낀점

위에 나타낸거 이외에도 더 많은 결과가 나와있긴한데 개인적으로 아쉬운 부분은 실험적인 결과들만이 존재했다는 것이 아쉬웠다. CNN, Transtomer의 어떠한 차이 때문에 이러이러한~ 차이를 두어 실험했다가 아니라 내가 기대한 내용과는 조금 멀어서 아쉬웠다. 이 논문을 통해 확실히 알 수 있는건 아직 Contrastive Learning에서의 backbone은 별 차이 없다는 것이다. 다른 논문들도 찾아봐야겠다는 생각을 한다.