작성자 : 김승일(모두의연구소 연구소장)
발표일 : 20201012 at DeepLAB 논문반
학습자료
논문 링크
함께 보면 좋을 참고자료
•
Attention is All You Need (Transformer를 처음 제안한 논문)
•
Illustrated Transformer (Transformer를 알기 쉽게 표현해 주는 블로그)
•
BERT (Transformer를 이용한 Pre-trained Language Model)
•
Illustrated BERT (BERT를 알기 쉽게 표현해 주는 블로그)
논문 요약
목표
•
Transformer 기반의 architecture가 자연어처리 쪽 task는 짱먹고 있는데, 왜 영상쪽은 아직도 CNN 기반이 우세할까? 정말 transformer로 image classification task에서 SOTA를 찍는 것은 불가능한가? 우리가 해보겠음.
아이디어
•
Sequential Data는 RNN 계열에서 Transformer 계열로 완전히 대세가 기울었음
•
그러나, Image Data는 Convolution Layer를 통한 Inductive Bias(Transition Equivariance, Locality 등) 가 너무 강력했었음.
•
근데 Transformer가 누구냐... 엄청 많은 training data로부터 token들의 관계를 통으로 외워버리는 녀석. 진짜 많은 데이터를 넣어주면 Inductive Bias가 없어도 있는 것처럼 잘 되지 않겠느냐?
•
그래서 BERT가 엄청 잘되듯.. image recognition에서도 BERT 같은 걸 만들어보겠음.
Method : Vision Transformer(ViT)
Overview
image를 patch로 나누어 transformer의 입력에 넣어준다. 이 때 BERT와 마찬가지로 CLS token 을 앞에 넣어주고, 그 CLS token의 마지막 레이어 출력값에 MLP 를 붙여서 classification 하는 형태로 구현된다. BERT의 Classification과 같은 구조이지만, Mask를 사용하지는 않는다 (Mask를 사용하는 Self-Supervised 방식을 사용해보기도 했는데, 그냥 Supervised로 하는게 성능이 조금 더 좋았다.)
Details
(1) image patch 만들기
•
WxH 의 image(NLP의 문장에 해당)를 PxP짜리 patch(NLP의 단어에 해당)로 나누어준다.
•
총 N개의 patch가 나오게 됨.
Ex] 224x224 image를 16x16 patch로 쪼개면 총 N=196개의 패치로 표현할 수 있다.
(2) embedding
•
patch에 linear projection matrix 를 곱하여, Dx1짜리 vector로 만들어준다.
•
extra learnable embedding 를 넣어준다. BERT의 [CLS] token과 같은 역할.
Q1 ([CLS] token을 넣고, 를 곱하는 형태로 안하고, 그냥 learnable embedding으로 한 이유가 있을까?
•
positional embedding도 추가한다.
◦
2D positioning 도 해봤는데 1D positioning과 큰 차이는 없음.
◦
2D positioning 시에는 positional embedding을 learning parameter로 했음 Q2 why?
(3) Transformer Encoder
•
patch embedding 를 transformer 입력으로 넣어준다.
•
Transformer Encoder는
LayerNorm → Self-Attention 과정과
이 후 LayerNorm → MLP 과정 둘로 나누어 볼 수 있다.
•
MLP 에서는 GELU activation을 사용.
(4) 에 해당하는 마지막 레이어 출력 값을 MLP 입력 (self-attention이 고려된 image representation, )으로 넣기 전에 Layer Norm을 해준다.
Hybrid Architecture
•
patch로 나누고 embedding하지말고, ResNet 중간 레이어의 feature map을 활용하게끔도 구현해봤음.
•
작은 데이터셋에서는 이 hybrid architecture가 더 좋은 성능을 냈으나, 데이터셋이 늘어나면서 이 gap이 줄어들었음. → Large dataset에서는 convolutional layer를 충분히 대체할 수 있다고 주장하고 있음.
Q2 왜 Hybrid Architecture는 L/16, H/14 for 14 epochs 에 대해서 계속 실험하지 않았나?
Fine-Tuning
•
Fine-Tuning 하는 방법 :
pre-trained prediction head를 제거하고 zero-initiated DxK feedforward layer를 붙인다.
•
만약 image size가 high-resolution 인 경우, patch의 position이 달라진다. 이 경우 pretrained position embedding을 2D interpolation 해서 사용한다. 즉, high resolution image는 단순히 긴 문장처럼 생각되어 positional embedding하는 것이 아닌, 기존 문장(image)의 사이사이에 token이 들어가는 형태가 되어야 한다.
Experiment
Dataset
Training Dataset
•
ILSVRC-2012 : 1k classes + 1.3M images
•
ImageNet-21k : 21k classes + 14M images
→ 여기까지 몇개 안되는 영상으로 학습하면 ResNet 50이 더 좋음
•
JFT : 18k classes + 303M images
→ 이 때부터는 ViT가 좋아짐
Comparison to SOTA
•
기존 SOTA 방법들보다 성능이 우수한 반면, pre-training 속도는 훨씬 빠르다.
Attention Distance
•
Attention Distance는 query pixel과 all other pixels 간의 average에 의해 계산된다.
(첫 query patch의 pixel과 각 layer에서의 patch pixel 간 거리???)
•
CNN의 receptive field와 비슷한 의미로 볼 수 있다. why? distance가 가깝다면 attention 한 결과가 query pixel과 비슷한 곳의 attention weight가 높았다고 볼 수 있음. 즉, receptive field가 작은 의미..