Downstream task란?
Pre-Training이란?
-> 즉, weight와 bias를 잘 초기화 시키는 방법을 의미한다.
Fine-Tuning이란?
Transfer Learning(전이학습)이란?
BERT
Inductive Bias란?
DNN 기본적인 요소들의 Inductive Bias는?
- Attention은 Query, Key, Value로 나누어서 Attention Score를 계산하고 이를 통해 Sequence가 다른 Sequence의 요소들과 어느 정도의 연관이 있는지를 나타낸다. 그래서 Fully Connected처럼 모든 입력 및 출력 요소가 상호 영향을 미칠 수 있으므로 Inductive Bias가 낮다고 말할 수 있다.
NLP분야에서 Transformer 구조는 높은 성능을 보였지만, CV 분야에서의 적용은 제한적
본 연구에서는 NLP에서 사용되는 standard Transformer를 이미지에 그대로 적용하여 이미지 분류에 좋은 성능을 도출한 Vision Transformer를 제안함
image patch를 단어의 배열처럼 sequence로 생각하면 된다.
핵심 아이디어는 다음과 같다.
- Image를 일정한 크기의 patch로 분할한 후, 이를 NLP의 단어의 배열처럼 Sequence로 취급하자!
즉, Image patch는 NLP의 Token(Words)처럼 처리하면 된다. (하나의 image patch = 하나의 Token)
- 각 patch들을 linear하게 embedding하여 sequence를 생성한다.
- 이 sequence를 Transformer의 Input으로 넣어 이미지를 분류한다.
- 이를 통해 Large scale 학습이 낮은 Inductive Bias로 인한 성능 저하를 해소시키는 것을 알 수 있다.
Transformer 구조를 기반으로 대량의 Corpora로 학습하고 원하는 Task에 대해서 fine-tuning하는 대표적인 모델은
- BERT: a denoising self-supervised pre-training task
- GPT: language modeling as its pre-training task
-> 이때 사전학습 방법을Self-Supervised Learning
이라고 한다.
- Jean-Baptiste Cordonnier, Andreas Loukas, and Martin Jaggi. On the relationship between self attention and convolutional layers. In ICLR, 2020
- 핵심 아이디어: Fully image에 Attention을 적용하기 힘든 문제를 2 x 2 image patches를 추출해 Attention을 적용함으로써 연산량을 낮춤.
2. ImageGPT(IGPT)
: 가장 유사한 최근 모델이며, 이미지의 해상도와 색상 차원을 낮춘 뒤 Transformer를 pixel에 적용한 모델이다.
- 기존 Transformer 구조와 비슷하게 하려고 한 이유는
1) 확장성 (scalability)
2) efficient implementations
ViT의 작동과정은 다음과 같다. 참고자료
- 이미지 x ∈ 가 있을 때, 이미지를 (PxP) 크기의 N(= / )개로 분할하여 flatten한 패치 sequence ∈ 로 reshape 해준다.
출처: https://baekyeongmin.github.io/paper-review/vision-transformer-review/
- Trainable linear projection을 통해 의 각 패치를 flatten한 벡터를 D차원으로 변환한 후, 이를 패치 Embedding으로 사용한다.
- Learnable class 임베딩과 patch 임베딩에 learnable position 임베딩을 더한다.
Learnable class 임베딩은 Step3에서의 분홍색 맨 앞쪽의 * 해당하는 vector이다.
여기서 Learnable class는 BERT 모델과 같이 class token을 만들고, 이를 다른 token들에 concat해준다. (10xD)
-> BERT의 Class token과 유사하게, pre-traing, fine-tuning에서 이미지의 representation으로 이용될 학습 가능한 임베딩 을 시퀀스의 첫번째 위치에 추가한다.
** ViT에서는 위의 4가지 position Embedding을 시도한 후, 최종적으로 가장 성능이 좋은 1D position Embedding을 사용하였다.
** 원래 이미지에 맞게 positional embedding도 2D-aware position embedding을 사용했으나 성능 향상이 없었다.
- 임베딩을 vanilla Transformer encoder에 input으로 넣어 마지막 Layer에서 class embedding에 대한 output인 image representation을 도출한다.
- MLP에 image representation을 input으로 넣어 이미지의 class를 분류한다.
GELU activation function 참고자료
- GELU 함수는 dropout, zoneout, ReLU 함수의 특성을 조합한 함수로, NLP, Vision 등 다양한 Task에 대해 ReLU, ELU보다 일관적으로 성능이 좋다.
- Gaussian Error Linear Unit의 줄임말로, 원본입력에 원본입력을 Gaussian Distribution의 CDF를 통과한 값과 곱해주는 함수이다.
- 이를 통해 x가 다른 입력과 비교했을 때 얼마나 큰지로 gating이 되는 효과를 얻는다.
- bounded below가 되어 있어 gradient vanishing에서 자유롭다.
- locality
: 가까이 있는 neighborhood pixel들에 영향을 많이 받고 거리가 멀어질수록 그 영향도가 떨어지는 것
- translation equivariance
: xy축으로 이동하거나 회전을 주더라도 같은 object로 인식하는 것
ViT에서는 모델에 2가지 방법을 사용하여 Inductive Bias의 주입을 시도하였다.
- Patch Extraction
: Step 1에서 봤었던 image를 여러 개의 patch로 분할하여 Sequence 형태로 넣는 것.
- Resolution adjustment
: 이미지의 Resolution에 따라서 patch의 크기는 동일하지만 patch의 개수는 달라지게 된다. 이 달라지는 개수에 대해 fine-tuning을 할 때, 미세 조정하는 것
inductive bias가 적다는 것은 contraint 없이 이미지 전체에서 정보를 얻을 수 있지만, 적합한 파라미터를 찾기 위한 space가 커져버리기 때문에 데이터가 충분치 않으면 학습이 안된다.
- CNN의 feature map을 Transformer Encoder의 입력 sequence로 넣는 방법이다.
- 즉, CNN 위에 Transformer encoder를 쌓은 구조를 이용한다.
이 과정이 Resolution adjustment을 의미한다. 이 과정에서 해상도(resolution)을 조정하고 patch를 추출하며 inductive bias가 수동으로 주입된다.
이 파트에서는 여러 데이터셋과 모델을 비교하면서 실험을 진행하였다. 결과만 간략하게만 보고 넘어가겠다.
(이 부분은 추후 코드 실습 진행할 때 더 자세하게 볼 예정이다.
)
- 본 실험에서는 14x14 patch size를 사용한 ViT-Huge와 16x16 patch size를 사용한 ViT-Large의 성능을 baseline과 비교한 표이다.
- ViT-L/16 모델이 모든 downstream task에 대하여 BiT-L보다 높은 성능을 도출하였다.
- ViT-L/14모델은 ViT-L/16 모델보다 향상된 성능을 도출하였고, BiT-L모델보다 학습시간이 훨씬 짧다.
- 이 실험에서는 pre-training dataset의 크기에 따른 fine-tuning 성능을 확인한다.
- 데이터가 클수록 ViT가 BiT보다 성능이 좋고, 크기가 큰 ViT 모델이 효과가 있다.
- CNN은 작은 데이터셋에서는 indutive bias 덕분에 좋은 결과를 도출하고 있지만, 큰 데이터셋에서는 ViT가 더 좋은 성능을 도출하였다.
Pre-training cost란?
: TPUv3 accelerator에서 모델의 inference 속도 관련 지표
- 모델들의 scale를 맞춘 후 성능을 비교하는 실험이다. 이때 FLOP을 scale의 지표로 사용한다.
- ViT가 ResNet(BiT)와 비교했을 때, 성능과 cost의 trade-off가 우세하다.
- Cost가 증가할수록 Hybrid와 ViT의 성능과 trade-off 차이가 감소한다.
저자가 뭘 해내고 싶어 했는가?
NLP분야에서 좋은 성능을 보인 Transformer구조를 CV 분야에서도 적용하고자 하였고, 이미지 분류에 좋은 성능을 도출한 Vision Transformer를 제안하였다.
이 연구의 접근 방식에서 중요한 요소는 무엇인가?
image를 일정한 크기의 path로 분할한 후, 이를 단어의 배열처럼 sequence로 취급하자!
즉, image patch는 NLP의 Token처럼 처리하자!
어느 프로젝트에 적용할 수 있는가?
이미지 분류 프로젝트!
참고하고 싶은 다른 레퍼런스에는 어떤 것이 있는가?
-Transformer
-BERT
-GPT
-ImageGPT(IGPT)
-On the relationship between self attention and convolutional layers
느낀점은?
- NLP에서만 보던 Transformer를 CV분야에서 보니까 색다르고 신기했다. 그리고 Transformer 내용을 여러번 복습할 수 있어서 좋았고, 특히 복습을 하면서 Posional Embedding의 필요성을 구체적으로 알 수 있었다. 그리고 헷갈리던 개념들을 정리하고 나니까 시야가 넓어질 수 있었던거같다.
- CV 분야에 Transformer를 적용하기 위한 많은 노력들이 있었는데, Related Work에서 소개된 논문을 추후 시간되면 읽어봐야겠다.
유튜브
블로그
그림 및 개념 참고
- GELU 그림 참고: https://velog.io/@tajan_boy/Computer-Vision-GELU
- Pre training & Fine tuning 개념 참고: https://velog.io/@soyoun9798/Pre-training-fine-tuning
- DownStream Task, Transfer Learning 개념 참고: https://chan-lab.tistory.com/31
- '텐서플로 2와 머신러닝으로 시작하는 자연어 처리 (개정판)' 7장 참고
- BERT 개념 참고: https://ebbnflow.tistory.com/162?category=895676
- GELU 개념 참고: https://sanghyu.tistory.com/182