논문을 상세히 번역하고 한단어씩 해석해주는 포스팅은 많다.
나는 논문을 누구나 알아듣도록 쉽고 간결하게 전달하고자 한다.
MoCo v2
저자의 의도
SimCLR을 MoCo 프레임워크 안에서 학습시켜보자.
MoCo를 SimCLR의 MLP projection head, augmentation을 사용해 수정해보자.
SimCLR의 관점에서는 거대한 학습 배치 문제를 개선해보자.
기존 문제점
MoCo의 작업 효율성 이 낮다.
MoCo의 데이터 증강 기법이 너무 단순하다.
SimCLR은 배치 사이즈가 너무 크다. (4k~8k 정도)
해결 아이디어
1. Contrastive learning
contrastive learning이 뭔지부터 살펴보자.
data에서 추출한 representation pair의 비슷한 정도를 학습하는 기법이다.
이는 곧 dictionary look-up problem이라 생각할 수 있다.
이를 수식으로 나타내면 contrastive loss 함수인 InfoNCE가 된다.
InfoNCE의 loss function 이다.
수식을 해석하자면 같은 이미지를 기원으로하는 pair가 비슷해지도록 학습하는 것이다.
q: 쿼리의 representation, k: 키 샘플의 representation
+: positive pair 비슷한 것, -: negative pair 비슷하지 않은 것.
positive pair는 같은 이미지 2개에 다른 증강기법을 적용한다.
negative pair는 다른 이미지 2개에 다른 증강기법을 적용한다.
2. MoCo
다음으로 MoCo를 알아보자.
dictionary를 구축할 때 전체 배치를 사용하지 않고 queue 기법 적용했다.
배치 사이즈와 dictionary(negative pair 전체) 사이즈를 분리했다.
이렇게 큰 2가지 특징이 있는데, 더 자세한 내용이 궁금하면 아래 포스팅을 보고 오자.
https://davidlds.tistory.com/42
[논문 리뷰] MoCo v1 요약, 코드, 구현
논문을 상세히 번역하고 한단어씩 해석해주는 포스팅은 많다.나는 논문을 누구나 알아듣도록 쉽고 간결하게 전달하고자 한다. MoCo v1Momentum Contrast for Unsupervised Visual Representation LearningHE, Kaiming, e
davidlds.tistory.com
3. Improved designs
SimCLR는 기존 end-to-end 모델에서 3가지 차별점을 뒀다.
첫번째는 4k or 8k의 거대한 배치로 negative 샘플을 늘린 것이다.
두번째는 최종 레이어를 MLP head로 바꿨다.
세번째는 강력한 데이터 증강 기법을 사용했다.
MoCo는 이미 queue를 사용해서 충분히 큰 배치를 사용한다.
따라서 두번째 세번째를 MoCo에 적용한다.
이 두가지는 MoCo에서 사용한 메서드들과 'orthogonal'하다.
직역하자면 겹치는 것이 없고 전혀 다른 수직에 가까운 메서드 이다.
따라서 성능 향상을 기대해볼 수 있다.
결과 분석
비지도학습에는 ImageNet training set을 사용했다.
2가지 평가(ImageNet linear classification, VOC object detection)를 진행했다.
backbone으로는 ResNet50을 사용했다.
1. MLP head
기존에는 단일 FC head를 사용했는데 이를 MLP head로 교체한다.
2-layer MLP head, 2048-d, ReLU 으로 구성했다.
pre-training 에만 사용하고 fine-tuning에서는 버리는 헤드이다.
τ의 기본값 0.07에서도 linear probing 성능이 2% 향상 됐다.
τ가 커지면 커질수록 좋아진다.
Table 1을 보면 MLP head를 사용한 (a)에서 5.6% 만큼 크게 향상됐다.
2. Augmentation
기존 MoCo에서 사용하던 방식에 blur와 color distortion을 추가했다.
MoCo v1에서는 본인들의 큐 딕셔너리 아이디어를 가장 강조했다.
그리고 실험 부분에서 augmentation을 너무 간단한 걸로 확정하고 실험했다는 말이 나온다.
MoCo v2에서 이 부분을 보완한 것이다.
Table 1을 보면 (b)에서 이 augmentation 만 추가해도 성능이 2.8% 올라간다.
3. Comparison with SimCLR
모든 기법을 적용한 MoCo v2를 SimCLR과 비교한다.
같은 배치(256) 같은 에포크(200)의 SimCLR과 비교했을 때 크게 성능을 앞선다.
심지어 큰 배치(8192)의 SimCLR과 비교해도 더 좋다.
최대 에포크로 늘려서 학습한 두 모델을 비교했을 때 SimCLR보다 MoCo v2가 더 좋다.
4. Computational cost
SimCLR을 GPU에서 학습한다고 가정한다. (원래는 TPU)
256 배치 사이즈 끼리 비교해도 MoCo v2가 더 메모리를 덜 쓴다.
back propagation에서 차이가 있기 때문이다.
SimCLR은 q,k 인코더를 둘 다 업데이트 하지만, MoCo는 q 인코더만 업데이트 하기 때문이다.
4096 배치는 심지어 GPU에서 돌릴 수 없을 정도로 크다.
굳이 큰 배치를 고수하지 않아도 충분히 좋은 모델을 만들 수 있다.
코드 및 구현
MLP head 와 augmentation 만 다르기 때문에 생략함.
'논문리뷰' 카테고리의 다른 글
[논문 리뷰] MambaOut 요약, 코드, 구현 (1) | 2024.06.11 |
---|---|
[논문 리뷰] MoCo v3 요약, 코드, 구현 (0) | 2024.06.04 |
[논문 리뷰] MoCo v1 요약, 코드, 구현 (0) | 2024.05.22 |
[논문 리뷰] DeiT 요약, 코드, 구현 (0) | 2024.05.13 |
[논문 리뷰] V-JEPA 요약, 코드, 구현 (0) | 2024.04.30 |