- NLP분야에서 transformer가 사실상 standard하였지만, vision에서는 매우 드물게 사용되었다. Vision에서는 attention 사용 시, CNN과 혼합해 사용하거나 전체구조에서 몇개의 구성요소만 대체되는 방식으로 사용되어 왔다. 본 연구는 CNN에 의존하는 것이 불필요하며 오직 transformer만으로 image patch들의 sequence를 적용해 image classification task에 매우 잘 동작함을 실험적으로 증명하였다. 많은 dataset을 pre-train한 후 small~midsize의 이미지 인식 bench mark dataset에 전이학습 시, 여타 CNN보다 ViT가 요구계산량은 적으면서도 S.O.T.A를 보여준다.
1. 서론 (Introduction)
-"Self-Attention"기반 구조 특히나 Transformer[Vaswani2017]는 NLP task에서 널리 사용되며 가장 지배적이고 널리 사용되는 방식은 매우 긴 text에 대한 pre-train 이후 작고 구체적인 task의 dataset에 fine-tuning하는 것이다. transformer의 특징 중 하나인 계산의 효율성과 확장성 덕분에 전례없는 크기(100억개 이상의 parameter)의 model을 학습할 수 있다는 점이다. (model과 dataset 크기의 증가에도 성능이 saturating되지 않음)
- 다만 computer vision에서는 CNN방식이 지배적으로 남아있어서 NLP의 성공에 영감을 얻어 CNN에 "Self-Attention"을 합치려는 실험, Conv.layer를 모두 self-attention으로 대체하는 등이 이루어졌다. 후자의 경우, 이론적으로는 효율적이지만 attention의 독특한 계산메커니즘으로 효율적사용이 어렵다. (∵ image 전체를 한번에 넣는 연산 >>> 단어 vector에 대한 연산) 그렇기에 ResNet같은 모델들이 Large-Scale image에서 S.O.T.A로 남아있다.
- 본 연구는 NLP성공에 영감을 받아 standard transformer architecture의 구조를 조금 수정 후, image에 직접 적용하는 실험을 진행하였다. 이를 위해 image를 patch로 나누고, 이 patch들의 linear embedding의 sequence를 transformer의 input으로 집어 넣는다. (patch는 NLP의 transformer에서 token(word)과 동일하게 다루어 짐을 의미한다.)
- 훈련 시, ImageNet과 같은 중간크기의 dataset에 대해 강한 규제화(regularization)없이는 비슷한 크기의 ResNet과 같은 구조의 모델들에 비해 정확도가 떨어졌다. 이에 대해 CNN은 내재된 inductive biases가 있으나 Transformer는 내재된 inductive biases의 부족으로 충분하지 못한 양의 dataset에 대한 훈련은 모델의 일반화성능이 좋지 않을 것이라 예측 하였다.
- 다만, 14M~300M정도의 대규모의 dataset의 경우, inductive biases를 찍어눌러버릴 수 있음을 연구진은 확인했다. ViT가 충분히 큰 dataset에 pre-train된 후 더 작은 dataset에 대해 transfer learning이 이루어지게 될 때, 기존의 S.O.T.A모델들의 성능과 비슷하거나 더 능가하는 결과를 보여준다. cf) the best model reaches the accuracy of 88.55% on ImageNet, 90.72% on ImageNet-ReaL, 94.55% on CIFAR-100, and 77.63% on the VTAB suite of 19 tasks.
2. Related Work
- Transformer[Vaswani2017]는 NLP분야의 기계번역에서 S.O.T.A방법이 되었으며, Large Transformer기반 모델들은 매우 큰 말뭉치(corpora)에 pre-train한 후 task의 목전에 전이학습(fine-tuning)을 진행한다 : BERT[Devlin2019]는 "Denoising Self-Supervised pre-training task"로 사용하고 GPT[Radford2018, 2019, Brown2020]는 "Language modeling pre-train task"로 활용한다.
- image에 대한 Naive한 "Self-Attention" 적용은 각 pixel이 다른 모든 pixel에 주목(attend)할 것을 요구한다. (= 하나의 pixel을 embedding 시, 다른 pixel도 embedding에 참여할 것이 요구된다는 의미) pixel수에서 2차적인 계산복잡도를 야기하며 이로 인해 다양한 input size로 확장되는 것이 어렵다. 즉, image processing에 transformer를 적용하려면 몇가지 근사(approximation)가 필요하다. ∙ local self-attention ∙ sparse attention ∙ 다양한 크기의 block에 scale attention 적용 이런 specialized attention구조들은 computer vision 분야에서 괜찮은 결과를 보여주지만 효율적 구현을 위해서는 복잡한 engineering이 필요하다.
- self-attention을 이용해 feature map을 augmentation하거나 CNN의 output에 attention을 추가적으로 사용하는 등 CNN과 self-attention을 융합하려는 많은 연구도 이루어 졌다.
- 본 연구와 가장 관련있는 모델은 Cordonnier2020논문에서 소개된 모델로 input image에서 2×2 크기의 patch를 추출하여 top에 full self-attention을 적용한다. ViT와 비슷하지만 ViT는 더 추가적인 증명을 진행하는데, 대규모 pre-training은 평범한 transformer가 S.O.T.A와 경쟁력 있게 한다. 추가적으로 Cordonnier2020논문의 모델은 2×2 piexl이라는 작은 크기의 patch를 사용하는데, 이는 small-resolution image에만 적용가능하다는 단점이 존재한다. (우리는 medium-resolution image를 다루지만...)
- 최근의 또다른 관련있는 모델은 iGPT[Chen2020]로 iGPT는 image의 resolution과 color space를 줄인 후 pixel들에 transformer를 적용한 생성모델로써 "Unsupervised"방식으로 훈련되었고 이를 통해 얻어진 representation은 classification을 위해 전이학습이나 선형적으로 탐색될 수 있으며, 이를 예시로 활용 시 ImageNet에서 최대 정확도 72%로 나타난다.
- 본 연구는 추가적으로 기존 ImageNet보다 더 많은 image를 보유한 인식데이터셋을 활용한 연구의 연장선으로 CNN의 성능이 dataset size에 따라 어떻게 달라지는 지에 대한 연구와 대규모 dataset(ImageNet-21K, JFT-300M)에 대한 CNN의 전이학습에 대해 경험적탐구도 진행한다. (이전 연구와 달리 ResNet이 아닌 Transformer를 사용하여.)
3. Method
- model 설계에서 기존 Transformer[Vaswani2017]를 가능한 근접하게 구성했으며, 이는 쉽게 확장가능한 NLP transformer 구조에 대한 이점과 효율적인 구현이 가능하다는 이점이 되어 별도의 설정없이 바로 사용할 수 있게 된다. 3.1 Vision Transformer (ViT) - 기존의 Transformer는 token embedding의 1D sequence를 input으로 받는다. - BERT의 [CLS]token처럼 embedding된 patch들의 가장 앞에 하나의 learnable한 class token embedding vector를 추가한다. - Position Embedding은 image의 위치정보를 유지하기 위해 patch embedding 시 trainable한 position embeddings가 더해진다. image를 위해 개선된 2D-aware position embedding을 사용해 보았지만 1D Position Embedding과의 유의미한 성능향상이 없어서 "1D Position Embedding"을 사용한다. (Appendix D.4) 이렇게 embedding된 벡터들의 sequence를 encoder의 입력에 넣는다.
- Transformer의 Encoder부분은 Multi-Head Attention(식 2,3)층들과 MLP가 교차로 구성되는데, 이는 하나의 image이더라도 차원을 쪼갠 뒤 multi-head를 관찰하는 현상을 볼 수 있다.
3.2 Fine-tuning. &. Higher Resolution
4. Experiments
연구진들은 ResNet, ViT, 그리고 하이브리드 모델의 representation learning capabilities를 평가했다. 각 모델이 요구하는 데이터의 양상을 파악하기 위해 다양한 사이즈의 데이터셋으로 사전훈련을 진행했고 많은 벤치마크 테스크에 대해 평가 실시했다. ViT가 모델의 사전훈련 연산 대비 성능 부분에서 다른 모델들보다 더 낮은 pre-training 비용으로 가장 높은 성능을 달성했다. 마지막으로 self-supervised를 이용한 작은 실험을 수행해 ViT가 self-supervised에서도 가능성이 있음을 보였다.
4.1 Setup ∙Datasets - 모델 확장성(scalability)을 조사하기 위해 1,000개 class와 1.3M image가 있는 ILSVRC-2012 ImageNet dataset, 21,000 class와 14M image가 있는 superset ImageNet-21k(Deng2009), 18,000 class와 303M의 고해상도 image의 JFT(Sun2017)를 사용.
[Kolesnikov2020]에 이어 downstream task의 testset을 통해 pre-training dataset을 중복 제거. 이 dataset에 대해 훈련된 모델을 다음과 같은 여러 benchmark에 전이학습을 진행한다: 원본 유효성 검사 라벨과 정리된 ReaL 라벨의 ImageNet(Beyer2020), CIFAR-10/100(Krizhevsky2009), Oxford-IIIT Pets(Parkhi2012) 및 Oxford Flowers-102(Nilsback & Ziserman, 2008). 이때, dataset의 전처리과정은 [Kolesnikov2020]를 따른다.
- 또한 19개 작업 VTAB classification suite(Zhai 2019)에 대해서도 평가한다. VTAB는 task당 1,000개의 training example들을 사용해 다양한 task에 대해 낮은 data transfer를 평가한다. task는 3가지로 분류된다: Natural(Pets, CIFAR), Specialized(의료, 위성사진), Structured(localization같은 기하학적 이해가 필요한 작업)
∙Model Variants - 표 1에 요약된 것처럼 BERT(Devlin 2019)에 사용된 ViT 구조를 기반으로 BERT에서 "Base" 및 "Large" 모델을 직접 채택하고 더 큰 "Huge" 모델을 추가한다. 후술에서는 모델의 크기와 입력 patch크기를 나타내기 위해 간략한 표기법을 사용. ex) ViT-L/16은 16 × 16의 input patch size를 갖는 "Large" variant를 의미. Transformer의 시퀀스 길이는 패치 크기의 제곱에 반비례하므로 패치 크기가 작은 모델은 계산 비용이 더 많이 든다. - 기본 CNN의 경우 ResNet을 사용한다. 다만, Batch Normalization(Ioffe & Szegedy, 2015)대신 Group Normalization(Wu & He, 2018)으로 바꾸고 표준화된 Convolution(Qiao 2019)을 사용한다. 이 수정은 transfer를 개선하며[Kolesnikov2020], 이를 "ResNet(BiT)라 부른다.
hybrid 시, 우리는 중간 feature map을 하나의 "pixel"의 patch 크기로 ViT에 전달한다. 다른 시퀀스 길이를 실험하기 위해 (i) 일반 ResNet50의 4단계 output을 가져오거나 (ii) 4단계 제거, 3단계에 동일한 수의 레이어(총 레이어 수 유지)를 배치하고 이 확장된 3단계 출력을 가져온다. 이때, (ii)를 사용하면 sequence 길이가 4배 더 길어지고 ViT 모델의 비용이 더 많아진다.
∙Training. &. Fine-tuning - ResNet을 포함, 모든 모델은 Adam(Kingma & Ba, 2015)을 사용한다. (β1 = 0.9, β2 = 0.999) batch=4096으로 훈련하고 모든 모델의 transfer에 유용한 0.1이라는 높은 weight_decay를 적용한다. (Appendix D.1은 일반적인 관행과 달리 Adam이 ResNets용 SGD보다 약간 더 잘 작동함을 보여준다).
linear Learning rate warmup과 decay를 사용한다. (detail은 Appendix B.1을 참조) 전이학습 시, 운동량이 있는 SGD, batch=512를 모든 모델에 대해 Appendix B.1.1에 소개된 것처럼 사용한다. 표 2의 ImageNet 결과의 경우 ViT-L/16의 경우 512, ViT-H/14의 경우 518로 미세 조정했으며 평균 계수 0.9999999로 [Polyak & Juditsky 1992]를 사용한다(Ramachan 2019, 2020).
∙Metric - few-shot이나 전이학습 정확도를 통해 downstream dataset에 대한 결과에 대해 설명한다. 전이학습 정확도는 각 dataset서 전이학습한 이후 각 모델의 성능을 capture한다. few-shot의 정확도는 train image의 표현을 {-1,1}K 표적 벡터에 매핑한 정규화된 최소 제곱 회귀(MLE) 문제를 해결하여 얻을 수 있다. 이 공식을 사용하면 폐쇄형(closed form)으로 정확한 솔루션을 복구할 수 있습니다. 주로 전이학습의 성능에 중점을 두지만, 전이학습비용이 너무 많이들어서 신속한 평가를 위해 선형 퓨샷 정확도를 사용하기도 한다.
4.2 Comparision to S.O.T.A - 먼저 가장 큰 모델인 ViT-H/14 및 ViT-L/16을 최신 CNN과 비교한다. 첫 번째 비교할 점은 대규모 ResNets로 감독된 전송 학습을 수행하는 Big Transfer(BiT)이다. 두 번째는 Noisy Student(Xie 2020)으로, 레이블이 제거된 상태에서 ImageNet 및 JFT-300M에서 준지도 학습을 사용하여 훈련된 대규모 EfficientNet이다.
- 표 2의 결과는 JFT-300M에서 pre-train된 작은 ViT-L/16 모델은 모든 작업에서 BiT-L을 능가하는 동시에 훈련에 훨씬 적은 계산 리소스를 필요로 함을 보여준다. 대형 모델인 ViT-H/14는 특히 ImageNet, CIFAR-100 및 VTAB suite 등 까다로운 dataset에서 성능을 더욱 향상시킨다.
흥미로운 점은, 이 모델은 이전기술보다 pre-train에 훨씬 적은 시간이 소요되었다. 하지만 pre-train의 효율성은 architecture의 선택뿐만 아니라 training schedule, optimizer, weight_decay 등 같은 다른 parameter에도 영향을 받을 수 있다는 점에 주목한다. Section 4.4에서는 다양한 architecture에 대한 성능과 computing에 대해 제어된 연구를 제공한다.
- 마지막으로, ImageNet-21k dataset으로 pre-train된 ViT-L/16 모델은 대부분의 dataset에서도 우수한 성능을 발휘하면서 pre-train에 필요한 리소스는 더 적습니다. 약 30일 내에 8개의 코어가 있는 표준 클라우드 TPUv3를 사용하여 교육될 수 있다. - 그림 2는 VTAB task를 각 그룹으로 분해하고, 이 benchmark의 이전 S.O.T.A 방법인 BiT, VIVI - ImageNet 및 Youtube에서 공동 교육된 ResNet(Tschannen 2020) 및 S4L - ImageNet에서 supervised 및 semi-supervised 학습(Zhai 2019)과 비교한다. ViT-H/14는 Natural 및 Structure task에서 BiT-R152x4 및 기타 방법을 능가하는데, Specialized에서 상위 두 모델의 성능은 유사하다.
4.3 Pre-training Data Requirements - ViT는 대규모 JFT-300M dataset에서 pre-train 시 성능이 우수하며 ResNet보다 Inductive bias가 적다. 그렇다면 dataset의 크기는 얼마나 중요할까? 에 대해 2가지 실험을 진행한다.
① 크기가 증가하는 dataset에 대해 ViT 모델을 pre-train한다: ImageNet, ImageNet-21k 및 JFT-300M. 소규모 dataset의 성능을 향상시키기 위해 weight_decay, dropout, label-smoothing이라는 3가지 기본적인 Regularization parameter들을 최적화한다. 그림 3은 ImageNet을 pre-train된 결과를 보여준다 cf. (다른 dataset에 대한 결과는 표 5에 나와 있다). ImageNet pre-train모델도 전이학습되어있으나 ImageNet에서는 다시 전이학습이 진행된다. (전이학습 시 해상도가 높아지면 성능이 향상되기 때문). 가장 작은 dataset인 ImageNet에서 pre-train 시, ViT-Large 모델은 (moderate) regularization에도 불구하고 ViT-Base 모델에 비해 성능이 떨어진다. JFT-300M만 있으면 더 큰 모델의 이점을 최대한 누릴 수 있는데, 그림 3은 또한 다양한 크기의 BiT 모델이 차지하는 성능 영역을 보여준다. BiT CNN은 ImageNet에서 ViT를 능가하지만 dataset이 클수록 ViT가 앞서는 것을 알 수 있다.
② 9M, 30M 및 90M의 랜덤 하위 집합과 전체 JFT-300M dataset에 대한 모델을 교육한다. 이때, 더 작은 하위 집합에 대해 추가적인 정규화를 수행하지 않고 모든 설정에 대해 동일한 hyper-parameter를 사용한다. 이 방식으로, regularization의 효과가 아니라 본질적인 모델 특성을 평가합니다. 하지만, Early Stop을 사용하고, training 중 달성한 최고의 validation accuracy를 알려준다. 계산을 절약하기 위해 전체의 전이학습 정확도 대신 few-shot linear accuracy를 알려주며, 이는 그림 4에는 결과가 나와 있다. ViT는 소규모 dataset에서 비슷한 계산 비용으로 ResNet보다 더 적합하다. ex) ViT-B/32는 ResNet50보다 약간 빠르다.
9M 하위 집합에서는 성능이 훨씬 떨어지지만 90M+ 하위 집합에서는 성능이 더 우수한데, ResNet152x2 및 ViT-L/16에 대해서도 마찬가지이다. 이 결과는 Convolution의 Inductive Bias가 작은 dataset에 유용하다는 직관을 강화한다. 하지만, 큰 dataset의 경우 관련 패턴을 데이터에서 직접 학습하는 것만으로도 충분하고, 심지어 유용하다.
4.4. Scaling Study - JFT-300M의 transfer 성능을 평가하여 다양한 모델에 대해 제어된 scaling 연구를 진행한다. 이 설정에서 데이터 크기는 모델의 성능에 병목 현상을 일으키지 않으며, 각 모델의 accuracy/pre-train cost를 평가한다. model set은 다음과 같다. - 7 epochs에 대해 사전훈련된 ResNets(R50x1, R50x2 R101x1, R152x1, R152x2, R152x2) - 7 epochs에 대해 사전 훈련된 R16 및 R1450 - 14 epochs에 대해 사전 훈련된 R152x2 및 R200x3 - 14 epochs에 대해 사전 훈련된 ViT-B/32, B/16, L/32, L/16 - 14 epochs에 대해 사전 훈련된 R50+ViT-L/16 (hybrid의 경우 모델 이름 끝 숫자는 patch size가 아닌, ResNet 백본의 총 downsampling비율을 나타낸다).
- 그림 5에는 총 사전 교육 계산 대비 이전 성능이 나와 있다(compute detail: Appendix D.5 ; model별 detail: Appendix의 표 6). 이에 대해 몇 가지 패턴을 관찰할 수 있다: i) ViT는 accuracy/computing 절충에서 ResNets를 압도한다. ViT는 동일한 성능을 얻기 위해 약 2~4배 적은 컴퓨팅을 사용한다(평균 5개 이상의 dataset). ii) hybrid는 적은 computing으로 ViT를 약간 능가하나, 더 큰 모델에서는 그 차이가 사라진다. 이 결과는 Convolution의 local feature processing이 모든 크기에서 ViT를 지원할 것으로 예상할 수 있기 때문에 다소 놀라운 결과라 할 수 있다. iii) ViT는 시도한 범위 내에서 포화되지 않는 것으로 나타나 향후 확장 노력에 동기를 준다.
4.5. Inspecting Vision Transformer - ViT는 image data처리방법이해를 위해 internal-representation을 분석한다. ViT의 첫층은 flattened patch를 낮은 차원의 공간(Eq.1)으로 linearly project한다. 그림 7(왼쪽)은 학습된 embedding filter의 주요 구성요소를 보여준다. 구성요소는 각 patch내 fine-structure를 낮은 차원으로 표현하기 위한 그럴듯한 기본함수와 유사하다. - 투영한 후, 학습된 position embedding이 patch의 representation에 추가된다. 그림 7(가운데)은 모델이 position embedding의 유사성에서 image내 distance를 encoding하는 방법을 학습하는 것을 보여준다. 즉, 더 가까운 patch는 더 유사한 position embedding을 갖는 경향이 있다.
- 또한 행-열(row-column) 구조가 나타난다. 동일한 행/열에 있는 패치는 유사한 임베딩을 갖는다.
- 마지막으로, sin파의 구조는 때때로 더 큰 grid(Appendix D)에 apparent한데, position embedding이 2D-image topology를 표현하는 방법을 배운다는 것은 직접 설계된 2D-aware embedding이 개선되지 않는 이유를 설명한다.(Appendix D.4)
- Self-Attention을 통해 ViT는 전체적으로 정보를 통합할 수 있는데, 가장 낮은 층에서도 이미지를 생성할 수 있다. 연구자들은 신경망이 이 수용력을 어느정도까지 사용하는지 조사한다. 특히 attention weight를 기반으로 정보가 통합되는 image space의 average distance를 계산한다(그림 7, 오른쪽). 이 "attention distance"는 CNN의 receptive field size와 비슷하다.
- 연구자들은 일부 head가 이미 낮은 층에 있는 대부분의 image에 주목을 하는것을 발견, 정보를 global하게 통합하는 특징이 모델에 실제로 사용되는것을 보여준다. 다른 attention heads는 낮은 층에서 일관되게 attention distance가 작다. 이렇게 고도로 local하게 된 attention은 transformer(그림 7, 오른쪽)이전에 ResNet을 적용하는 hybrid 모델에서 덜 두드러지며, 이는 CNN의 초기 convolution층과 유사한 기능을 수행할 수 있음을 보여준다. 또한 신경망의 깊이에 따라 attention distance가 증가하는데, Global하게 모델이 clasification과 의미론적(semantically)으로 관련이 있는 image의 영역에 주목함을 발견할 수 있다. (그림 6).
4.6. Self-Supervision - Transformer는 NLP 작업에서 인상적인 성능을 보여주지만, 그들의 성공의 대부분은 뛰어난 확장성뿐만 아니라 대규모 self-supervised pretraining(Devlin 2019; Radford 2018)에서 비롯됩니다. 또한 BERT에서 사용되는 masked language modeling task를 모방해 self-supervision을 위한 masked patch prediction에 대한 예비 탐색을 수행한다. "Self-supervised pre-training"을 통해, 우리의 작은 ViT-B/16 모델은 ImageNet에서 79.9%의 정확도를 달성하고, 처음부터 교육에 대해 2%의 상당한 개선을 이루나, 여전히 supervised pre-training에 비해 4% 뒤떨어져 있습니다. Appendix B.1.2에는 추가 detail이 존재한다.
5. Conclusion
- 연구진들은 image 인식에 대한 transformer의 직접적인 적용을 탐구하며 이전의 연구들에서 computer vision에 "self-attention"을 사용한 것과 달리 초기 patch생성을 제외하고 image별 inductive biases를 architecture에 도입하지 않는다. 대신, image를 일련의 patch로 해석해 기본 Transformer의 Encoder로 처리한다. 이는 단순하지만 확장가능하기에 대규모 dataset에 대한 pre-train과 결합하게 되면 매우 잘 작동한다. 따라서 ViT는 많은 S.O.T.A모델과 비슷하거나 능가하지만 pre-train에 상대적으로 cheap하게 작동한다.
- 본 연구의 이런 시초적인 결과는 고무적이라 할 수 있으나 많은 과제가 여전히 남아있는데, ① Detection, Segmentation 등의 Computer Vision에 적용하는 것과 ② "Self-Supervised pre-training"에 대한 방법을 찾는 것이다. 우리의 이 초기실험은 "Self-Supervised pre-training"에 개선을 보여주긴 하지만 대규모 "Supervised pre-training"보다는 여전히 큰 격차가 존재하기에 ViT의 추가적인 확장은 성능향상의 여지를 보여준다.
😶 부록 (Appendix)
[A] Multi-Head Self Attention
[B] Experiment Details
이를 위해, trainingset의 작은 부분을 validation set으로 설정한다. (CIFAR은 2%, ImageNet은 1%)ResNet의 경우, [Kolesnikov2020]을 따르며 모든 fine-tuning 실험은 384resolution에서 실행된다. [Kolesnikov2020]에 따르면, training과 다른 resolution으로fine-tuning을 하는 것이 일반적이다.
[C] Additional Results
논문에 제시된 수치에 해당하는 세부 결과로 표 5는 논문의 그림 3에 해당하며 크기가 증가하는 dataset에서 사전 훈련된 다양한 ViT 모델의 전이학습 성능을 보여준다: ImageNet, ImageNet-21k 및 JFT-300M. 표 6은 논문의 그림 5에 해당하며 다양한 크기의 ViT, ResNet 및 하이브리드 모델의 전송 성능과 사전 교육의 예상 계산 비용을 보여준다.
📌 Long-Term Dependency (장기의존성) - Convolution의 경우, 이웃 pixel과의 정보를 교환한다. - 주로 3×3, 5×5의 작은 kernel을 사용하기에 영상 내 멀리 떨어진 물체간의 상호작용을 하려면 "Deep layer"가 필요하다. 예를 들어, 3×3kernel은 10만큼 떨어진 pixel의 경우, 4개의 층을 거쳐야 비로소 상호작용이 일어날 수 있다.
- Recurrent의 경우, 시간축을 따라 상호작용이 일어난다. Convolution과 Recurrent는 모두 깊은 신경망으로 상호작용이 일어난다. 하지만 층이 깊어지면서 여러 요소간에 발생한 정보가 혼합되어 중요한 정보가 흐릿해진다.
- Transformer는 start-end까지 "Self-Attention"을 이용해 explicit하게 "Long-term dependency"를 처리한다. 즉, CNN과 RNN은 어느 순간의 이웃 요소만 교류하는 "Locality"를 벗어나지 못한다. 하지만 Transformer는 "Global"정보를 명시적으로 표현, 처리함과 동시에 "Locality Extraction"에도 능숙하다. [Cordonnier2020; https://arxiv.org/abs/1911.03584] ViT의 경우, "Self-Attention"을 통해 patch를 주목하게 하여 해결한다. 위의 예시를 보면, 16개의 head를 갖는 6개의 encoder block에 대해 "가운데의 pixel을 query로 사용해 각 head가 어디가 주목하는지" 표시한 그림이다. - 왼쪽의 얕은 층에서는 query근처에 주목해 "Local 정보"를 추출 - 오른쪽(깊은 층)으로 갈수록 먼 곳까지 주목하는 현상을 확인할 수 있다. 특히나 Layer 6에서는 head가 주목하는 곳을 달리해 image전체를 살피는 좋은현상이 나타난다.
📌 Scalability (뛰어난 확장성) - model 및 dataset의 크기면에서 확장성(scalability)가 뛰어나다. [Kaplan2020; https://arxiv.org/abs/2001.08361]의 연구는 큰 모델을 사용하는 것이 유리하다는 근거를 제시한다. 즉, model크기가 작으면 dataset을 확장하거나 학습시간을 늘려도 성능향상에 한계가 존재한다.
- 다만, NLP의 이런 분석이 CV에 그대로 적용되지는 않는다. 컴퓨터비전은 자율지도학습보다는 "지도학습"에 의존하는 경향이 크다. 따라서 사람이 labeling한 dataset에 영향을 더 많이 받는다.
- ViT의 경우, 모델크기를 다음과 같은 방식으로 키울 수 있다. encoder block↑ , patch_size ↓ , head↑, patch_encoding_dimension인 d_model을 늘리는 등의 방식으로 키울 수 있다.
📌 Explainability(뛰어난 설명가능성) - 사람의 의사결정에 대한 이유를 설명해야 할 때, 이를 설명하는 능력이 뛰어나다. transformer는 영상을 구성하는 pixel간의 "Self-Attention"을 명시적으로 표현하기에 설명가능한 능력을 구현하기 매우 유리하다. 예를 들어, Object Detection에 적용가능한 Transformer인 DETR의 경우, 박스를 지정할 때 Object Boundary에 "Attention"을 집중하는 것을 알 수 있다.
- 또한 CUB-200과 같은 미세분류 dataset에 대해 미세분류를 수행하는 TransFG라는 transformer model은 전체적인 모양이 비슷한 미세분류 dataset에 대해 "특정한 곳에 집중해 구별"하는 경우에 매우 잘 수행함을 알 수 있다.
📌 Multi-Modal(뛰어난 확장성) - 모든 기계학습모델은 귀납편향(inductive bias)이 존재한다. 예를들어, CNN의 경우 이웃한 pixel과 비슷한 특성을 갖는다는 "locality"와 물체가 이동하면 이동한 위치에 동일한 특징이 추출된다는 "translation-equivalent" 등이 대표적이다. CNN의 경우 이런 귀납편향이 강한 편으로 이를 만족하지 못하는 자연어와 같은 다른 modality-data에 적용은 부자연스러운 결과가 나온다. (물론, RNN도 시간축과 관련된 강한 귀납편향을 갖는다.) cf) 귀납편향: 기계학습모델이 학습단계에 보지않았던 새로운 sample로 옳게 추론하기 위해 사용하는 가정
- 하지만 transformer의 경우, 귀납편향이 약한 편으로 가장 중요하게 활용되는 "Self-Attention"은 image, text를 포함해 대부분의 signal에서 나타나서 여러 input형태 (multi-modal data)에 적용할 여지가 존재한다. 예를 들어 자연어->그림의 DALL-E 등등 vision과 NLP를 동시에 처리하는 여러 응용에서 backbone으로 활용할 수 있다.
📌Foundation Model(토대 모델) - 귀납편향이 강해 응용이 한정적인 CNN, RNN과 달리 귀납편향이 약한 transformer는 multi-modal dataset에 두루 적용가능하며 확장성과 성능이 뛰어나다는 점으로 토대 모델이 될 수 있었다. 최근에는 Florence라는 computer vision분야의 토대모델이 발표되었다.
[ViT : Vision Transformer]
🧐 Computer Vision with Transformer 오랫동안 Convolution Neural Network는 Computer Vision에서 가장 성공한 model로 군림했다. 2017년, transformer의 공개 이후 이 둘을 접목하려는 시도가 이루어졌었다. - 초기에는 CNN을 backbone으로 두고 transformer로 추출한 self-attention 정보를 보조로 사용하는 방식을 택하였다. ex) Attention augmented convolutional network [Bello2019; https://arxiv.org/abs/1904.09925] 구조는 다음과 같다. 기존 CNN: feature map을 생성, 다음 층으로 전달하는데 이때, self-attention으로 증강시킨 신경망에서는 feature map과 transformer의 MHA로 만든 feature map을 결합해 다음층으로 전달한다.
최근에는 classification, detection, segmentation, tracking문제를 "하나의 모델"로 모두 해결하는 방식으로 진화했는데 Swin Transformer가 대표적이다. [Liu2021a; https://arxiv.org/abs/2103.14030]
앞서 언급한 것들처럼 computer vision에 적용된 transformer model을 통칭해 Vision Transformer라 부른다.
🧐 ViT : Transformer for classification ViT는 [Vaswani2017; https://arxiv.org/abs/1706.03762]에서 소개된 transformer구조를 최대한 그대로 따라 실험한다. 다만, 기존 transformer는 언어 번역 등의 목적을 위해 개발되었기에 문장은 단어가 순서대로 배열된 1차원 구조의 data이다. 따라서 ViT는 image의 pixel이 2차원 구조로 배열된 data이기에 transformer에 조금의 변형을 가미한다.
Classification Task에서는 image를 입력받아 class의 probability vector를 출력하는데, 이는 즉 [Vaswani]의 Transformer구조에서 Encoder부분만 있으면 된다. - Encoder는 Decoder로 tensor를 전달하는 대신, 추출한 feature map을 class probability vector로 변환, output layer를 통해 출력하면 되기 때문이다. - 따라서 전체적인 ViT의 구조는 아래와 같다. 위의 사진에서 알 수 있듯, encoder에 input tensor를 입력시의 과정은 다음과 같다.
<Encoder에 image를 입력하는 과정> ① image를 p×p개의 patch로 나눈다.
② p²개의 patch를 일렬로 배치, 이어붙인다. ex) h×w×3라면 ①과 ②를 통해 p²×(h/p * w/p * 3)으로 변환된다. ③ pixel을 일렬로 이어 붙인 후 embedding진행 ex) 3hw / p²차원의 벡터로 만든다. 또한 이 벡터를 embedding층으로 d_model차원으로 변환한다. 이 벡터(d_model)를 행에 쌓으면 p²×d_model크기의 행렬이 된다.
④ 위치 인코딩(Position Encoding)을 더해, Encoder로 입력한다. ex) X = P+S라는 식을 적용할 수 있는데, 여기서 S는 p²×d_model의 행렬이고 P는 위치 인코딩 행렬이다.
지금까지 설명한 vision transformer는 class probability vector만 출력하면 되기에 가장 단순한 편에 속하며, DETR의 경우, 출력이 가변개수인 box이기에 Encoder와 Decoder를 모두 사용해야 한다. 또한 작은 dataset에 대해서는 transformer가 열등한 경향이 있기에 주의해서 사용해야한다.
😶 실습 _ by tensorflow
import os
import cv2
import math
import wandb
import shutil
import random
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import *
from tensorflow.keras.layers import *
from tensorflow.keras.losses import *
from tensorflow.keras.metrics import *
from tensorflow.keras.optimizers import *
from tensorflow.keras.activations import *
from tensorflow.keras.regularizers import *
from tensorflow.keras.callbacks import *
from tensorflow.keras.preprocessing import *
(x_train,y_train),(x_test,y_test)=keras.datasets.cifar10.load_data()
n_class=10 # 부류 수
img_siz=(32,32,3)
img_expanded_siz=(72,72,3)
patch_siz=6 # 패치 크기
p2=(img_expanded_siz[0]//patch_siz)**2 # 패치 개수
d_model=64 # 임베딩 벡터 차원
h=8 # 헤드 개수
N=6 # 인코더 블록의 개수
위의 논문에서는 Convolution, Recurrent 등의 신경망의 구성요소를 모두 제거하고
"오로지 Attention만으로 신경망을 구현한다."
transformer가 한번에 처리하기에 이로 인해 순환신경망이 갖는 bottleneck문제를 해결할 수 있다.
🧐 기본적인 Architecture
<Encoder> 단어는 embedding을 통해d차원의 embedding벡터로 표현된다. (논문에서는d= 512를 사용) Inputs라는 부분에 입력이 되며, 이때 Sequential 구조가 아님을 알 수 있다. 즉, transformer는 모든 단어를 "한번에 입력"한다. 이렇게 "한번에 입력"받는 방식은 "Self-Attention"을 가능하게 한다.
{Positional Encoding} 단어의 위치정보를 보완하기 위해 positional encoding을 통해 "embedding벡터에 위치정보를 더한다".
{MHA : Multi-head Attention} Encoder에 MHA(Multi-Head Attention)층과 FF(Feed Foward)층이 존재. 이때, MHA층은 "Self-Attention"을 수행한다! - multi-head라는 말처럼 h개 head가 독립적으로 self-attention을 수행, 결과를 결합한다. - MHA층의 출력은 FF층의 입력이 된다. (MHA->FF) - 또한, FF(Feed Forward)층은 FC(Fully-Connected) layer로 이루어진다.
MHA층과 FF층 모두 Add&Norm을 적용한다. - Add는 Shortcut Connection을 - Norm은 layer Normalization을 의미한다. - Nx는 Encoder block이 N개 연결되었다는 것을 의미한다. (논문에서는 N=6을 사용)
<Decoder> Encoder처럼 단어 embedding과 Positional Encoding을 통해 변환된 단어들이"한번에 입력"된다. 예를들어, 한국어문장은 Inputs에, 영어문장은 Outputs에 입력된다.
- Decoder에는②~③에 표시된 2개의MHA층과FF층이 존재하며 출력에Add&Norm을 적용한다. - 이후 출력층은 "softmax"를 통해 확률벡터를 출력하며, 이런 Decoder block이 N개 연결되어 있다. ①~③은 3개의 MHA층으로 Attention을 담당하는 핵심요소이다. - ①은 Encoder에서 입력문장을 구성하는 단어간의 Attention을 처리한다. 같은 문장을 구성하는 단어간의 Attention이기에 이를 "Self-Attention"이라 부른다.
-② Masked MHA의 의미는 다음과 같다. Decoder는 i일 때, 1, 2, ..., i-1까지만 관찰해야한다. 그렇기에 Mask를 사용해 i+1, i+2, ... 등을 감추어야(masked) 한다.
-③은Encoder가 처리한 입력과 Decoder가 처리하고있는 출력사이의 Attention을 다룬다. 따라서 ③은 "Self-Attention이 아니다!!" 이때, Encoder의 state벡터는 key와 value이고 Decoder의 state는 query로 작용하며 Encoder와 Decoder는 ③의 MHA를 통해 정보를 교환한다.
①과 ②로 표시한 MHA(Multi-Head Attention)층의 "Self-Attention"은 transformer의 main idea이다.
이제 전반적인 Transformer의 Architecture를 보았으니 좀 더 세부적으로 Encoder와 Decoder의 동작에 대해 설명하겠다.
[Encoder의 동작과정]
🧐 Input Embedding. &. Positional Encoding
encoder는 입력문장의 단어를 임베딩 후d_model차원의 벡터로 변환한다. (논문에서는 d=512로 설정) 또한, 모든 단어를 "한번에 입력"하기 위해 문장을T×d_model 크기의S행렬로 표현한다. (이때,T는 단어의 개수이다.)
행렬S의 모든 행이 동시에 처리되서순서정보를 신경망이 얻지 못할 가능성을 배제하기 위해위치정보를 표현한 행렬P를S행렬에 더해X행렬을 만들고X를 신경망에 입력한다. 이때, 3가지 행렬 모두 같은 size를 갖는다. 이 과정을 "Positional Encoding"이라 한다. 위치행렬P를 생성하는 여러 방법 중, 아래 식과 같은 sin, cos함수를 사용한다.
🧐Self-Attention
X행렬에 대해①의 MHA로 "Self-Attention"을 수행한다.
"Self-Attention의 본질" 이때, query는 확장이 필요한데, 하나의 벡터q로 표현하는 Bahdanau attention과 달리 Self-Attention에서는 query가T개의 행을 갖는 행렬Q가 되기에 확장된 query행렬은 다음과 같이 나타내며, 이때Q, K, V는 모두T×d_model크기의 행렬이고 이 식의 결과인C도 T×d_model행렬이다. "Self-Attention 구현의 가장 단순한 방법"은 바로Q, K, V를 모두X로 설정하고 위의 식을 적용하는 것이다. 하지만 transformer는 이런 단순한 방법이 아닌 query, key, value를 가중치 행렬 WQ, WK, WV를 이용해 X를 변환해 사용하며, 이때, QKT는 √d_key로 나누어 정규화를 거친다. 이를 식으로 나타내면 아래와 같다. X:T×d_model 행렬 WQ:d_model×d_key 행렬 WV:d_model×d_value 행렬 Q, K:T×d_key 행렬 V:T×d_value 행렬 (보통d_model>d_value,d_key 로 설정한다.)
🧐 Multi-Head Attention
Architecture에서①로 표시한 MHA에는 여러 head가 있으며각 head는고유한 transform matrix WQ, WK, WV를 갖고 softmax식을 이용해"Self-Attention"을 독립적으로 수행해 상호보완한다. 즉, 여러 head로 self-attention을 진행, 결과를 결합해 성능향상을 진행시킨다.
따라서 MHA의 동작을 아래와 같은 식으로 정의한다.
예를 들어보자.
이후 MHA를 통과한C행렬은 Add&Norm층을 통과하는데, Skip connection과 Layer Normalization을 진행한다. - Skip-connection: MHA층의 출력특징맵C와 입력특징맵X를 더하는 연산 - Layer Normalization: mini-batch를 구성하는 sample별로 특징맵의 분포가 N(0,1)이 되게하는 방법이다.
🧐 position-wiseFeedForward layer
MHA에서 사용된 아래 식에 따라 출력한X'을 입력으로 받아X''을 출력한다. 아래 X''을 구하는 식을 보면 MLP를 구하는 방법처럼 linear transformation을 사용하는 것을 알 수 있다. X와X''은 모두 encoder의 최초 입력X와 같이 Txd의 행렬이다. 이는 transformer가신경망을 흐르는 tensor의 모양이 유지시켜 행렬연산이 원활히 이루어짐을 알 수 있다.
position-wise FF라 부르는 이유??
[Decoder의 동작과정]
encoder와 거의 비슷하게 동작하기에 다른 부분에 주안점을 두어 설명을 진행한다.
🧐 Masked Multi-Head Attention 층
Decoder에②로 표시된 Masked MHA층은 행렬일부를 마스크로 가린다는 점을 제외하면①의 MHA층과 같다. i = 1일 때, <SOS>를 입력하면 모델은 'That'을 예측하고 i = 2일 때, 'That'을 보고 'can't'를 예측하는 이런 방식을 재귀적으로 수행하는 자귀회귀방식을 적용해 언어번역을 진행한다.
다만, 학습단계는 추론단계와 상황이 다른데, - 예측단계는 출력문장을 모른채 동작하지만 - 학습단계는 입출력문장이 모두 주어지고 자귀회귀방식을 사용가능하다. (다만 교사강요; teacher forcing방식을 주로 사용한다.) 이는 잘못 예측했을 경우, 이후 단어는 계속 틀릴 가능성이 높기 때문이다. 교사강요에서는 '<SOS> That can't turn red by itself <EOS>'를 decoder에 한꺼번에 입력한다.
transformer도 교사강요로 학습을 수행하는데,예측단계의 자기회귀를 모사한 "Masking"을 사용한다.
Masked MHA층은 이 행렬의 대각윗행렬의 모든 원소를 무한대에 가까운 음수로 설정하면, 이전에 나온 단어들에만 주목할 수 있게 되는데, 예를 들어보면 아래와 같다.
🧐 Encoder와 연결된 Multi-Head Attention 층 (Not Self-Attention)
위의 그림에서③으로 표시된 MHA층은 encoder와 decoder가 상호작용한다. ①:이 MHA층은 입력문장내의 단어간의 Attention을 처리하는 "Self-Attention"이다. ②:이 MHA층은 출력문장내의 단어간의 Attention을 처리하는 "Self-Attention"이다. ③:이 MHA층은 Decoder로 입력된 문장의 단어가 Encoder로 입력된 문장의 단어에 주목할 정보를 처리한다. "Self-Attention"이라는 점만 제외하고 모든 연산은①과②의 MHA층과 동일하다.
①에서의 식은 "Self-Attention"을 처리하기에 같은 문장에서 구한 행렬X만 존재한다. ∴ query와 key, value 계산 시 모두X를 사용한다.
하지만③의 MHA층은 encoder의X와 decoder의X가 존재한다. 이를 구별하기 위해X_enc,X_dec라 할 때, key와 value는X_enc를 사용하고 query는X_dec를 사용한다. 이를 통해 query가 key와 value에 주목하는 정도를 계산할 수 있으며 아래와 같이 나타낼 수 있다. 여기서 MHA층의 출력 행렬은 Architecture에서 볼 수 있듯 Add&Norm층, FC층, Add&Norm층을 거친 후 Linear와 softmax로 구성된 출력층으로 전달된다.