논문을 상세히 번역하고 한단어씩 해석해주는 포스팅은 많다.
나는 논문을 누구나 알아듣도록 쉽고 간결하게 전달하고자 한다.
ViT-G/14
일단 이 논문을 읽기 전에 ViT에 대한 내용을 완전히 이해하는걸 추천한다.
저자의 의도
스케일링은 트랜스포머에서 높은 퍼포먼스를 위한 가장 중요한 요소 중 하나다.
NLP에서는 스케일링에 대한 연구가 활발하지만, CV에서는 스케일링에 대한 연구가 없다.
ViT를 스케일링하기 위한 아키텍쳐와 트레이닝 메서드를 정의해보자.
기존 문제점
ViT에서 스케일링 하는 방법을 모른다.
ViT에서 few-shot transfer learning 하는 방법을 모른다.
해결 아이디어
1. Scaling up(계산량, 모델사이즈, 데이터셋)
모델 사이즈가 클수록 representation quality가 증가한다.
위 3개 그래프 중 가운데를 보면 파란색->붉은색 으로 갈수록 파라미터가 크다.
즉 모델 사이즈가 커질수록 error rate가 작아지는 것을 볼 수 있다.
데이터셋 사이즈가 클수록 representation quality가 증가한다.
위 3개 그래프 중 오른쪽을 보면 점의 크기가 커질수록 데이터셋이 크다.
즉 데이터셋이 커질수록 error rate가 작아지는 것을 볼 수 있다.
모델 사이즈와 데이터셋 사이즈가 커지면 자연스레 compute가 증가한다.
따라서 왼쪽 그림처럼 나오게 된다.
하지만, 모델 사이즈가 커지는 그래프는 saturation된다.
모델 사이즈로 얻을 수 있는 이득에는 한계가 있다.
그리고 fine tuning을 full으로 하든 few shot으로 하든 saturation된다.
이 saturation의 근원은 모델 사이즈 그래프이다.
저자는 이런 현상을 irreducible entropy 혹은 performance ceiling이라고 설명한다.
모델이 아무리 좋아도 특정 task에 대한 퍼포먼스 한계는 존재한다.
2. 큰 모델일수록 sample efficient 하다.
sample efficient의 의미는 모델이 작은 데이터셋에서도 학습을 잘 한다는 것이다.
fine tunning 시, 데이터셋을 작게해서 few shot을 하거나, 유사한 다른 데이터셋을 사용해보았다.
이때 언제나 큰 모델의 퍼포먼스가 좋게 나왔다.
3. Large-scale training을 위한 레시피
3.1. Decoupled weight decay for the “head”
pre-training에서 과적합이 되는 것을 방지하기 위해 MLP에서 weight decay를 사용한다.
다만, Body에 있는 MLP가 아닌 Head에 있는 MLP에서만 진행한다.
pre-training에서 accuracy가 떨어지는 현상이 발생하지만,
fine-tuning까지 끝난 후에는 오히려 퍼포먼스가 더 좋다.
3.2. Saving memory by removing [class] token
ViT는 [class] token에 모든 패치의 정보를 반영하여 classification에 사용한다.
그래서 [class] token은 핵심으로 떼려는 생각을 해보진 않았을 거다.
저자는 [class] token을 빼서 메모리를 아끼고 차라리
representation 행렬 전체에 대한 MAP와 GAP를 사용하자고 했다.
GAP : Global Average Pooling, MAP : Multi-head Attention Pooling 이다.
3.3. Scaling up data (JFT-3B)
데이터셋을 가장 큰 3 Bilion 크기로 스케일링 업한다.
JFT-3B를 사용했다.
3.4. Memory-efficient optimizers
옵티마이저로 Adam을 사용하긴 했으나, half-precision momentum을 사용했다.
half-precision은 16비트수를 사용하여 메모리를 아끼는 것인데,
보통 컴퓨터가 32비트 혹은 64비트를 사용하지만 16비트로 제한하는 방법이다.
3.5. Learning-rate schedule
위 그림처럼 2개의 페이즈로 구성된 LR 스케쥴러를 사용했다.
초반에는 warmup 페이즈, 후반에는 cooldown 페이즈 이다.
3.6. Selecting model dimensions (G/14)
모델의 사이즈를 scaling up하여 G/14까지 늘렸다.
약 2 billion 파라미터 사이즈를 가진 모델이다.
Width : 패치 임베딩과 셀프 어탠션 행렬의 너비
Depth : 인코더 블럭 개수
MLP : MLP 블럭의 hidden dimension
Heads : 멀티 헤드 셀프 어탠션의 헤드 개수
논문 구현
자잘한게 다를 뿐 ViT를 그대로 사용했다.
구현은 이 포스팅 맨 아래에 있다.
끝.
'논문리뷰' 카테고리의 다른 글
[논문 리뷰] CoAtNet 요약, 코드, 구현 (0) | 2023.05.24 |
---|---|
[논문 리뷰] ViT Robustness 요약, 코드, 구현 (1) | 2023.05.08 |
[논문 구현] ViT ImageNet 평가 방법 (0) | 2023.03.28 |
[논문 리뷰] Vision Transformer(ViT) 요약, 코드, 구현 (0) | 2023.03.22 |
[논문 리뷰] UNet 요약, 코드, 구현 (0) | 2023.03.20 |