[21′ ICLR] Vision Transformer : AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

This entry is part 21 of 22 in the series Vision Model

1. 들어가며

최근 몇 년 동안, 언어 처리 분야에서 Transformer 구조는 놀라운 성과를 보이며 주목받고 있습니다. 그러나 이미지 처리 분야에서는 여전히 CNN(Convolutional Neural Network)이 대세를 이루고 있습니다. 이미지 분야에서도 Transformer를 적용한 시도들이 있었지만, 그 성능은 여전히 CNN 모델들에 미치지 못했습니다. 그럼에도 불구하고, 이러한 기존의 문제점을 극복하고자 하는 새로운 시도가 등장했습니다. 바로 ‘Vision Transformer’입니다.

‘Vision Transformer’는 이미지 처리 분야에서 Transformer 구조의 잠재력을 최대한 발휘하려는 새로운 접근 방식을 제시합니다. 이 모델의 핵심 구성 요소인 architecture, patch embedding, positional embedding, 그리고 class token embedding에 대한 설명은 이 글의 가장 중요한 부분입니다. 이러한 구성 요소들을 정확하게 이해하는 것은 Vision Transformer의 전체적인 작동 원리와 성능을 이해하는 데 있어 핵심적입니다.

실험 결과 부분에서는 Vision Transformer가 기존의 모델들과 어떻게 비교되는지, 그리고 다양한 조건과 환경에서 어떤 성능을 보이는지에 대해 자세히 살펴봅니다. 이어서, 장단점 부분에서는 Vision Transformer의 강점과 약점을 명확하게 분석합니다. 특히, Transformer의 태생적 한계인 inductive bias에 대한 설명은 이 모델의 근본적인 특성과 한계를 이해하는 데 있어 매우 중요합니다. 이 부분은 반드시 주의 깊게 읽어야 합니다.

마지막으로, 이 글에서는 Vision Transformer의 전반적인 의의와 그것이 미래의 이미지 처리 분야에 어떤 영향을 미칠 수 있는지에 대해 논의합니다.

이 글을 통해 Vision Transformer에 대한 깊은 이해를 얻기를 바랍니다. 특히, 핵심 구성 요소와 inductive bias에 대한 부분은 반드시 정확하게 이해하셔야 합니다. 이제 시작해 보겠습니다!

2. 기존 방법의 문제점

먼저 Vision Transformer가 발표되기 이전 방법들의 문제점을 살펴보겠습니다. 이를 통해 Vision Transformer는 무엇을 개선하고자 하였는지 알아보겠습니다.

Vision Transformer가 발표된 2021년 당시, NLP 분야는 아주 급격하게 발전하고 있었습니다. 이러한 급성장은 Transformer라는 새로운 Architecture의 발견에 가장 큰 영향을 받았는데요. Transformer는 기존 RNN, LSTM들과 달리 Self Attention을 주요 메커니즘으로 사용하며 Language Task 성능을 큰 폭으로 향상시켰습니다. 대표적으로 GPT, BERT 등의 모델이 있죠.

반면 이미지 도메인에서는 여전히 ResNet, EfficientNet 등의 CNN 모델이 메인으로 자리잡고 있었는데요. 이는 언어와 이미지의 도메인 차이로 인해 Transformer를 바로 적용하기 어려웠기 때문입니다. 언어는 고정된 사이즈의 토큰 벡터를 사용하며 입력 데이터가 순차적으로 들어오는 방식이죠. 반면 이미지는 3차원 벡터의 형태이며 사이즈 또한 고정되어 있지 않다는 특성이 있습니다. 이렇게 서로 다른 데이터 특성으로 인해 Transformer를 이미지 모델에 바로 적용하기는 어려움이 있었습니다.

물론 Vision Transformer 이전에도 Transformer를 이미지 모델에 적용한 방법들은 존재했습니다. 대표적인 방법 몇 가지를 간단하게 살펴보겠습니다.

첫 번째는 Stand Alone Self Attention (SASA) 입니다. SASA에서는 CNN의 Convolution 연산을 Self Attention 연산으로 대체하는 방법을 시도했습니다.

그림1. SASA의 Self Attention
그림1. SASA의 Self Attention

위 그림은 SASA에서 사용한 Self Attention 방법을 도식화한 그림인데요. 왼쪽의 파란색 사각형은 입력 데이터를 의미합니다. 입력 데이터에 대해 Query, Key, Value를 Projection한 뒤 Attention Score를 구하는 방법을 사용했습니다. 하지만 이러한 방법은 엄밀히 말하면 Self Attention을 이미지 모델에 적용한 것이지, Transformer 구조를 그대로 이미지 모델에 적용했다고 말하기 어렵습니다.

한편 2020년에는 ICLR에서는 Self Attention과 Convolution 연산을 비교하는 논문도 발표되었죠. 이 논문에서는 수식 비교와 여러 실험을 통해 Self Attention은 Convolution의 모든 표현을 완벽하게 포함할 수 있음을 증명했습니다.

Vision Transformer와 가장 비슷한 모델로는 2020년 ICML에 발표된 ImageGPT를 들 수 있는데요. ImageGPT는 이름에서 알 수 있듯이 언어 모델인 GPT의 철학을 그대로 이미지 모델에 적용한 방법입니다.

그림2. ImageGPT 방법
그림2. ImageGPT 방법

위 그림은 ImageGPT의 방법을 도식화한 그림인데요. 왼쪽은 이미지를 저해상도로 낮춘뒤 각 픽셀을 토큰으로 만드는 모습을 표현하고 있습니다. 가운데는 ImageGPT가 Pretraining 하는 방법을 소개하고 있는데요. a에서는 GPT와 동일하게 Autoregressive 방식으로 학습하는 모습을 보여주고 있습니다. 이때의 Autoregressive란 이전 데이터까지를 입력받아 다음 토큰을 예측하는 방식을 반복적으로 수행하는 방법을 의미합니다. 반복적으로 적용하기에 Regressive라고 하고, 순차적으로 이전까지의 데이터를 업데이트하며 반복하기에 Autoregressive라고 표현합니다. b에서는 BERT 방식으로 학습하는 모습을 보여주는데요. 랜덤으로 토큰을 지우고, 이를 예측하는 방법을 의미합니다.

ImageGPT는 Vision Transformer와 가장 유사한 방법입니다. 하지만 몇 가지 한계를 갖고 있는데요. 가장 주요한 한계는 이미지 픽셀값을 토큰으로 사용하기 위해 저화질 이미지를 사용해야 했다는 점입니다. 따라서 이미지넷과 같이 중간 사이즈의 이미지 데이터셋에서는 아주 좋은 성능을 발휘하기 어려웠죠. Vision Transformer에서는 이 점에 주목합니다. ImageGPT와 같이 Transformer 구조를 최대한 그대로 이미지 모델에 적용하되, 고화질 이미지를 학습할 수 있는 방법에 초점을 맞춥니다. 이제 아래에서는 이 부분에 주목하여 어떻게 문제를 해결했는지 살펴보겠습니다.

3. Vision Transformer

이번 챕터에서는 위와 같은 문제를 해결하기 위해 Vision Transformer가 적용한 방법들을 살펴보겠습니다. 먼저 Vision Transformer의 전체적인 구조를 살펴볼거고요. Vision Transformer의 핵심 개념이라고 할 수 있는 세가지, Patch Embedding, Position Embedding, Class Token Embedding을 살펴보겠습니다. 이어서는 이 핵심 개념들을 어떻게 조합해서 연산하는지, 하이브리드 구조를 만드는 방법, Fine Tuning 방법과 고화질 이미지를 적용하기 위한 방법들을 간단하게 살펴보겠습니다. Vision Transformer의 핵심은 Architecture와 세 가지 Embedding (Patch / Position / Class Token)을 어떤 방법으로 조합해서 연산 하는지입니다. 이 내용을 완벽하게 이해한다면 Vision Transformer의 핵심을 이해했다고 할 수 있습니다.

3-1. Architecture

먼저 Architecture 부분을 살펴보겠습니다. Vision Transformer의 전체적인 구조는 이렇게 구성되어 있습니다.

그림3. Vision Transformer 구성
그림3. Vision Transformer 구성

그림의 아래 부분에서는 입력 이미지를 Encoder에 넣어주기 전에 Transformer가 연산할 수 있도록 데이터를 변환해주는 모습을 표현해주고 있습니다. 이 부분은 아래의 Embedding 부분에서 자세히 살펴보겠습니다. 이렇게 변환된 데이터를 Input Embedding이라고 부를건데요. 이 Input Embedding은 본격적인 연산을 위해 Transformer Encoder로 들어가게 됩니다. Vision Transformer에서는 Transformer의 Encoder 부분을 그대로 가져와서 사용합니다.

그림4. Vision Transformer Encoder
그림4. Vision Transformer Encoder

위 그림은 Vision Transformer의 Encoder 부분을 모듈별로 나누어 표현한 그림인데요. Transformer와 동일하게 Multi Head Self Attention을 주요한 모듈로 하여 구성된 모습을 볼 수 있습니다.

3-2. Patch Embedding 만들기

이러한 Transformer Encoder를 사용해서 데이터를 연산하기 위해서는 Transformer가 사용할 수 있는 형태로 이미지 데이터를 변환해주어야 하는데요. 이렇게 Transformer가 연산할 수 있는 형태로 변환된 데이터를 Patch Embedding이라고 부릅니다. 이번 챕터에서는 입력 이미지를 Patch Embedding으로 변환하는 방법을 살펴보겠습니다.

그림5. Patch Embedding
그림5. Patch Embedding

위 그림은 Vision Transformer에서 Patch Embedding을 만드는 부분을 표현한 그림입니다. 입력 이미지를 여러개의 패치로 나누어주고요. 이 패치들은 Linear Projection을 통해 Patch Embedding으로 만들어집니다. 이렇게 보면 쉽게 이해되지 않으니 이 과정을 데이터 관점에서 다시 한번 생각해볼게요.

그림6. Patch Embedding 구성 방법
그림6. Patch Embedding 구성 방법

위 그림은 입력 이미지를 Patch Embedding으로 변환하는 과정을 데이터에 초점을 맞춰서 시각화한 그림인데요. 먼저 입력 이미지는 HxWxC 사이즈를 갖는다고 가정해보겠습니다. 가장 먼저 해야 하는 과정은 이 입력 이미지를 쪼개서 N개의 Patch로 만들어 주는 것입니다. 이때의 Patch 사이즈는 PxPxC라고 표현했습니다. ImageGPT에서는 이렇게 만들어진 Patch를 BERT와 Autoregressive 방식으로 학습하기 위해 입력 이미지 화질을 아주 작게 만들어야 했습니다. 픽셀값을 예측하도록 학습해야 했기 때문이죠. 반면 Vision Transformer에서는 픽셀값을 예측할 필요가 없기 때문에 낮은 차원의 벡터로 변환만 해주면 되는데요. 이를 위해서 Linear Projection을 사용합니다. 결과적으로 3차원의 PxPxC 사이즈를 갖는 Patch는 D 차원의 벡터로 변환되게 됩니다. 이때 총 N개의 Patch를 모두 Linear Projection 해주어서 총 NxD 사이즈의 Patch Embedding이 만들어지게 됩니다.

3-3. Positional Embedding 만들기

이렇게 만들어진 Patch Embedding을 그대로 입력 데이터로 사용하면 될까요? 이대로 사용하기에는 중요한 문제가 한가지 남아있는데요. Transformer는 Self Attention을 사용하기에 Permutation Invariant하다는 문제입니다. 쉽게 말하면 입력 데이터의 순서가 바뀌어도 Transformer는 알아차리지 못한다는 것인데요. 이는 CNN과 달리 Self Attention을 사용하는 Transformer가 갖는 태생적인 특징이라고 할 수 있습니다.

문제는 우리의 입력은 이미지를 쪼개서 만든 패치라는 겁니다. 즉 우리에게는 순서가 중요하다는 것이죠. 눈은 위에 있어야 하고, 코는 가운데에 있어야 하고, 입은 아래에 있어야 하잖아요? 하지만 이대로 학습하게 되면 Transformer의 특성상 눈이 아래에 있고 입이 위로 올라가도 아무 문제를 못느낀다는것이 문제입니다.

이러한 문제는 언어 문제를 처리하기 위해 제안된 Transformer에서도 마찬가지였습니다. 이 문제를 해결하기 위해 Transformer에서는 Positional Embedding이라는 개념을 도입하는데요. 쉽게 말하면 위치마다 고유한 값을 지정해서 입력 데이터에 이 위치 정보를 포함해주겠다는 아이디어입니다. 위치 마다 위치 정보 값이 다르기 때문에 위에 있는 눈과, 아래에 있는 눈의 값이 달라지게 되고, 따라서 Transformer도 위치에 따라 정보를 다르게 인식할 수 있게 되는 것이죠.

Vision Transformer에서도 이러한 취지에서 Positional Embedding을 도입합니다. 다만 Transformer의 Positional Embedding과는 아주 중요한 차이가 한가지 있습니다. Transformer에서는 ‘고정된’ Positional Embedding을 사용했습니다. Sin과 Cosine 함수를 조합하여 위치별로 ‘고정된’ 값을 할당해 주었죠. 이렇게 지정된 위치값은 학습이 진행되는동안 변경되지 않습니다. Sin과 Cosine을 조합한 고정된 함수로 표현되는 값이기 때문이죠.

반면 Vision Transformer에서는 학습 가능한 Positional Embedding을 사용합니다. 이 말은 일단 Positional Embedding 벡터는 임의의 값으로 초기화해준 뒤, 학습을 통해 적절한 Positional Embedding 벡터를 찾겠다는 의미죠. 이 부분은 언어 모델의 Transformer와 Vision Transformer의 결정적인 차이입니다.

그림7. Positional Embedding
그림7. Positional Embedding

위 그림은 전체 연산 과정에서 Positional Embedding의 위치를 보여주고 있습니다. 논문의 그림에서는 0,1,2…9 등으로 위치 정보가 포함된 데이터임을 표현해주고 있는 모습입니다. 하지만 저렇게 고정된 값은 아니고, 학습 과정을 통해 최적의 위치 정보를 찾는다는 점을 꼭 기억해주세요!

이제 위에서 설명한 Patch Embedding과 Positional Embedding을 결합하여 최종 Input Embedding으로 구성해주어야 하는데요. 이 과정은 언어 모델의 Transformer와 동일하게 진행됩니다. 동일한 위치끼리 더해주는 Element Wise Summation 방식을 통해 진행됩니다.

그림8. Positional Embedding 계산 방법
그림8. Positional Embedding 계산 방법

위 그림과 같이 동일한 사이즈의 Patch Embedding과 Positional Embedding을 요소끼리 더해 동일한 사이즈를 갖는 Input Embedding을 만들어줍니다.

3-4. Class Token Embedding 만들기

그럼 이제 Input Embedding을 Transformer Encoder에 넣어 연산해주면 될까요? 이제 이 시점에서 고민해봐야 할 문제가 있는데요. 우리가 하고자 하는건 결국 Vision Transformer로 추출한 Feature를 가지고 Classification을 학습하는 거잖아요? 이를 위해서 Feature에는 Classification layer를 연결해서 Cross Entropy Loss로 학습해줄거고요. 이때 의문은 이겁니다. 그럼 그 Feature는 어떤 Feature를 사용해야 할까요? Transformer에서 나온 모든 Feature를 그대로 사용하면 될까요?

언듯 생각하면 당연히 그래야 할 것 같은데요. 조금만 더 생각해보면 이럴 수 없다는걸 알 수 있습니다. 이대로 사용하기에는 추출된 Feature 사이즈가 너무 크기 때문입니다. 무슨 말이냐면요, 지금 추출한 Feature 사이즈는 NxD인데요. 이때의 N은 패치 개수이고, D는 Projection 해준 차원입니다. 패치의 개수인 N은 14×14이고, D는 768이라고 가정해볼게요. 그럼 이렇게 나온 Feature 사이즈는 196×768입니다. 보통 CNN에서는 Feature를 추출한 뒤 Classification Layer에 연결해주기 전에 Pooling 연산을 통해 사이즈를 대폭 줄여주잖아요. 특히 Spatial 사이즈를 줄여서 h*w*c 사이즈를 1*1*c로 압축해주죠. 지금 우리에게 필요한 과정이 바로 이 과정입니다. 196에 해당하는 Spatial 사이즈를 압축해주는 과정이 필요한거죠.

Vision Transformer에서는 CNN과 달리 이를 위해 Pooling 연산을 사용하지 않습니다. 이때 사용하는 방법이 바로 Class Token Embedding인데요. 이는 Vision Transformer에서 처음 제안한 아이디어는 아니고, BERT에서 사용한 방법을 그대로 적용한건데요. 이 방법은 앞서 설명한 Patch Embedding에 Class Token Embedding 이라는 벡터를 추가하는 겁니다. 이 벡터는 말 그대로 해당 입력 이미지의 클래스 정보를 함축하고 있는 벡터를 의미합니다. 이 벡터를 학습을 통해 찾아내는겁니다. 이 표현이 굉장히 중요한데요. Class Token Embedding 벡터는 앞서 Patch Embedding과 달리 학습을 통해 찾아냅니다. 이 부분은 Positional Embedding과 동일하죠. 임의의 값으로 초기화한 1xD 사이즈의 벡터를 Class Token Emdding이라고 부르고, Patch Embedding의 가장 앞에 넣어줍니다. 그리고 이대로 학습을 진행해주는거에요. 그럼 처음에는 Class Token Embedding은 의미없는 값을 갖는 벡터겠죠. 하지만 학습이 진행되면서 Self Attention 가중치는 학습 데이터의 상호 관계를 파악할 수 있는 방향으로 학습이 될겁니다. 그리고 학습이 완료되면 Multi Head Self Attention을 거쳐서 나온 Class Token Embedding 벡터는 해당 입력 이미지를 Classification 하기 위한 모든 정보를 포함하게 되는거죠. 왜냐하면 지금까지 이 Class Token Embedding 벡터만을 사용해서 Classification을 학습했으니까요. 이 과정을 도식화하면 다음 그림과 같습니다.

그림9. Class Token Embedding 구성 방법
그림9. Class Token Embedding 구성 방법

위 그림은 Class Token Embedding을 포함하여 Patch Embedding, Positional Embedding, Input Embedding의 연산 과정을 도식화한 그림입니다. 앞선 그림과 달리 Embedding의 사이즈가 NxD가 아닌 (N+1)xD가 되었는데요. 이는 1xD 사이즈의 Class Token Embedding이 Patch Embedding 맨 앞에 추가되었기 때문입니다. Positional Embedding도 그 사이즈에 맞도록 추가해준 것이죠. 위 그림에서 초록색 음영에 해당하는 부분이 Class Token Embedding입니다. CNN에서 Pooling거쳐 압축된 Feature만 사용하여 Classification을 수행한것과 마찬가지로, Vision Transformer에서는 이 입력 데이터 정보를 압축하고 있는 Class Token Embedding만을 사용하여 Classification을 학습합니다. Class Token Embedding에 관한 추가적인 내용은 BERT 설명글을 참고해주세요.

3-5. 최종 연산 과정

지금까지 Vision Transformer에서 가장 중요한 부분인 Architecture, Patch Embedding, Positional Embedding을 자세히 살펴봤습니다. 이제 나머지는 부차적인 부분인데요. Transformer에서도 Multi Head Self Attention (MSA) 외에 MLP, Layer Norm (LM), Residual Connection 등의 구성 요소들이 있었는데요. Vision Transformer에서도 이 부분들을 동일하게 적용해줍니다. 이에 따라 전체적인 연산 과정은 다음과 같이 표현할 수 있습니다.

그림10. Vision Transformer 전체 연산 과정
그림10. Vision Transformer 전체 연산 과정

3-6. Hybrid Architecture

지금까지 이미지를 그대로 사용하여 Transformer로 연산하는 방법을 살펴봤는데요. CNN과 Transformer를 결합한 구조를 만들 수 있을까요? Vision Transformer 논문에서는 이 구조를 Hybrid Architecture라고 설명하는데요. 입력 이미지로부터 CNN을 사용하여 Feature를 추출하고, 이렇게 추출한 Feature를 Patch Embedding으로 사용하는 방법입니다. 기존 방법과 다른 점이라면 기존에는 이미지 패치 픽셀로부터 Linear Projection을 통해 Patch Embedding을 만들었는데, Hybrid Architecture에서는 Linear Projection이 아닌 CNN을 통해 Patch Embedding을 만들어낸다는 점이죠. 이렇게 구성한 Hybrid Architecture의 성능은 아래의 실험 결과 챕터에서 살펴보겠습니다.

3-7. Fine Tuning and Higher Resolution

다음은 고해상도 이미지로 Fine Tuning 하는 방법에 대해 알아보겠습니다. Vision Transformer는 보통 아주 큰 데이터로 Pretrain을 진행하고 작은 Downstream Task로 Fine Tuning을 진행하여 사용합니다. 이는 Vision Transformer는 Inductive Bias가 적어서 아주 많은 학습 데이터가 필요하기 때문입니다. 학습 데이터가 적으면 일반화 능력이 떨어져 성능이 크게 하락하는 문제점이 있죠. 이 부분은 아래의 장단점 챕터에서 더 자세히 다루도록 하고, 이번 챕터에서는 이러한 문제를 해결하기 위해 더 큰 해상도로 Fine Tuning 하는 방법을 알아보겠습니다.

그래서 Vision Transformer는 Inductive Bias가 적어서 많은 데이터로 Pretrain을 한 뒤 Fine Tuning을 진행하는데요. 가끔 Pretrain에 사용한 이미지보다 더 큰 해상도로 Fine Tuning을 하면 성능이 더 좋아지는 경우가 있습니다. 그런데 생각해보면 이렇게 다른 해상도의 이미지를 사용하면 문제가 발생하는데요. Pretrain 과정에서 Positional Embedding을 학습한다고 했잖아요. 이 Positional Embedding은 Pretraing에 사용한 패치 개수에 맞도록 학습이 되었을거고요. 그런데 입력 이미지 사이즈가 달라지면 이 패치 개수가 달라지게 되고, 그럼 학습한 Positional Embedding이 소용없어지는 문제가 발생합니다. 물론 이 Positional Embedding도 Downstream Task로 다시 Fine Tuning 하는 방법도 있겠지만, 저자들은 그렇게 하지 않고 앞서 학습한 Positional Embedding을 Interpolation 해서 사용하는 방법을 제시합니다. 쉽게 생각해서 저화질 이미지를 고화질 이미지로 변환할때, Interpolation을 수행하잖아요? 이것과 동일한 연산 방법으로 이미지 사이즈가 커지면서 생기는 공백의 Positional Embedding 벡터들을 계산해서 사용해준다는 말입니다.

4. 실험 결과

지금까지 Vision Transformer의 핵심 내용을 모두 살펴봤습니다. 이번 챕터에서는 여러 실험 결과를 살펴볼겁니다. 먼저 기존의 다른 모델들과 성능 비교를 할 거고요. 데이터셋 사이즈에 따른 성능 비교 실험을 통해 Vision Transformer의 데이터셋 사이즈 의존성을 살펴보겠습니다. 다음으로 동일한 계산 복잡도를 갖는 다른 모델들과의 성능 비교 실험을 통해 동일 조건에서의 모델 성능을 비교해보겠습니다. 마지막으로 Vision Transformer의 Attention이 어떻게 동작하는지 분석하는 실험 결과를 살펴보겠습니다.

4-1. 모델별 성능 비교

먼저 기존의 다른 모델들과의 성능 비교 실험을 살펴보겠습니다.

그림11. 모델별 성능 비교 실험 결과
그림11. 모델별 성능 비교 실험 결과

위 표는 기존 CNN을 대표하는 모델들인 ResNet, EfficientNet 등과 다양한 Classification 데이터셋에 대한 성능을 비교한 그림입니다. Ours-JFT는 대용량 데이터인 JFT로 학습한 Vision Transformer를 의미하고요, Ours-I21k는 ImageNet 21k로 학습한 Vision Transformer를 의미합니다.

결과를 보면 일단 JFT로 Pretraining한 모델이 가장 성능이 좋은 모습을 볼 수 있습니다. 대용량 데이터로 Pretrain을 한 뒤 Downstream Task로 Fine Tuning 할 때 가장 성능이 좋음을 알 수 있습니다. 그리고 기존 CNN 모델들보다 모든 데이터셋에서 성능이 좋은 모습을 보입니다. 드디어 이미지 도메인에서도 Transformer 기반의 모델이 CNN 모델을 넘어서기 시작한 모습이죠.

4-2. Pretraining 데이터 사이즈에 따른 성능 비교

다음은 Pretraining 데이터 사이즈에 따른 성능을 비교해보겠습니다.

그림12. 데이터 사이즈에 따른 성능 비교 실험 결과
그림12. 데이터 사이즈에 따른 성능 비교 실험 결과

위 그림은 다양한 데이터셋으로 학습한 ViT, BiT 모델의 성능을 비교한 그래프입니다. 오른쪽으로 갈 수록 더 큰 데이터셋입니다.

첫 번째로 더 큰 데이터셋으로 학습 했을때 Vision Transformer의 성능이 좋아지는 모습을 확인할 수 있습니다.
두 번째로 ImageNet 만으로 학습 했을때는 Large 모델(파란색) 이 Base 모델(보라색) 보다 더 성능이 낮은 모습을 볼 수 있습니다. 이를 통해 역시 Vision Transformer를 제대로 사용하기 위해서는 반드시 큰 데이터셋으로 Pretrain을 해야 함을 알 수 있습니다.

그림13. 데이터 샘플 개수에 따른 성능 비교 실험 결과
그림13. 데이터 샘플 개수에 따른 성능 비교 실험 결과

위 그림은 JFT 데이터셋의 샘플을 늘려가며 Vision Transformer와 ResNet의 성능을 측정한 그래프입니다.

첫 번째로 알 수 있는 사실은 학습 데이터양이 적으면 Vision Transformer는 ResNet보다 성능이 낮다는 사실입니다. 이는 학습 데이터 양이 적을때 ResNet의 성능이 Vision Transformer보다 낮다가, 이후 역전되는 현상을 통해 확인할 수 있습니다.

4-3. 모델 별 Scale에 따른 성능 비교

다음은 모델의 Scale에 따른 성능 비교 실험을 살펴보겠습니다.

그림14. 연산량에 따른 성능 비교 실험 결과
그림14. 연산량에 따른 성능 비교 실험 결과

위 그림은 연산량에 따른 성능을 비교한 그래프입니다.

첫 번째로 알 수 있는 사실은 동일한 연산량의 모델에서는 Vision Transformer가 ResNet을 압도한다는 것입니다. 이는 전체적으로 회색 점이 주황색, 파란색 점 보다 아래에 있는 모습을 통해 확인할 수 있습니다.
두 번째로 알 수 있는 사실은 하이브리드 모델이 기본 Vision Transformer 모델보다 살짝 더 좋다는 사실입니다. 이는 주황색 점이 전체적으로 파란색 점 보다 위에 있는 모습을 통해 확인할 수 있습니다.
세 번째로 알 수 있는 사실은 Vision Transformer의 성능은 이번 실험을 통해서 Saturation 되지 않았다는 점입니다. 즉 연산량을 더 높이면 지금보다 더 좋은 성능을 낼 수 있다는 것이죠.

4-4. Vision Transformer의 분석

다음은 학습이 완료된 Vision Transformer의 여러 모듈을 분석해보겠습니다.

그림15. Vision Transformer 분석
그림15. Vision Transformer 분석

위 그림은 학습 완료된 Vision Transformer 모듈을 여러 형태로 분석한 그림입니다.

먼저 왼쪽은 Vision Transformer 첫 번째 Layer를 시각화한 그림입니다. 학습 완료된 CNN의 필터와 유사하게 이미지 특징들을 잘 학습한 모습입니다.

두 번째는 Positional Embedding을 분석한 그림입니다. Positional Embedding의 각 행,열에 대해 모든 행,열의 코사인 유사도를 측정한 것인데요. 이를 통해 알 수 있는 사실은 가까운 패치일 수록 비슷한 Positional Embedding을 갖고 있다는 것입니다. 그리고 같은 행,열에서 더욱 비슷한 값을 갖고 있기도 하죠. 이를 통해 우리는 이미지를 1차원 형태로 잘라서 Transformer를 학습했지만, 학습 과정에서 Vision Transformer가 2차원 형태의 이미지 특성을 잘 학습했음을 알 수 있습니다.

세 번째는 Self Attention Weight를 분석한 그림입니다. Layer에 따라 Self Attention Weight를 바탕으로 Mean Attention Distance를 표현했습니다. 즉 Attention Distance가 크다는 말은 더 멀리 있는 정보에 집중하고 있다는 것을 의미합니다. 그래프를 보면 낮은 레이어에서는 Attention Distance가 다양하게 분포하고 있는 모습인데요. 이는 낮은 레이어에서는 Local한 정보와 Global한 정보를 모두 잡아내고 있음을 의미합니다. 반면 높은 레이어에서는 Attention Distance가 모두 큰 값을 갖는데요. 이는 높은 레이어에서는 모두 Global 정보를 잡아내고 있음을 의미합니다.

5. 장단점

여기까지 Vision Transformer 논문의 모든 내용을 살펴봤습니다. 이번에는 Vision Transformer 논문을 통해 생각해볼 수 있는 Vision Transformer의 장단점을 정리해보겠습니다.

5-1. 장점

첫 번째 장점은 전역적인 컨텍스트 인식 능력입니다. Vision Transformer는 이미지의 각 부분을 독립적으로 처리하는 것이 아니라, 전체 이미지의 컨텍스트를 고려하여 정보를 처리합니다. 이는 Transformer의 Self Attention 모듈 덕분에 가능하며, 이로 인해 이미지의 각 부분이 서로 어떻게 관련되어 있는지, 그리고 전체 이미지에서 어떤 역할을 하는지를 파악할 수 있습니다. 이러한 전역적인 컨텍스트 인식은 특히 복잡한 시각적 관계나 패턴을 파악하는 데 매우 유용합니다.

두 번째 장점은 스케일링의 유연성입니다. Vision Transformer는 크기나 깊이를 쉽게 조절하여 다양한 연산 요구 사항에 맞게 스케일링할 수 있습니다. 이는 모델의 성능을 향상시키기 위해 필요한 리소스와 정확도 간의 균형을 맞추는 데 도움이 됩니다. 또한, 큰 데이터셋에서 큰 모델을 훈련시킬수록 성능이 향상되는 경향이 있어, 스케일링이 Vision Transformer의 성능 향상에 중요한 역할을 합니다.

세 번째 장점은 데이터 전처리의 최소화입니다. Vision Transformer는 이미지를 패치로 나누고 이를 벡터로 변환하는 간단한 전처리 과정만을 필요로 합니다. 복잡한 데이터 증강이나 특별한 전처리 없이도 높은 성능을 달성할 수 있습니다. 이는 훈련 과정을 단순화하고, 다양한 데이터셋에 쉽게 적용할 수 있게 합니다.

네 번째 장점은 모듈화 및 재사용의 용이성입니다. Vision Transformer의 구조는 모듈화가 잘 되어 있어, 다양한 시각적 작업에 쉽게 적용할 수 있습니다. 또한, 훈련된 모델을 다른 작업에 전이 학습하기 쉽습니다. 이는 연구자들이 새로운 시각적 작업을 탐색하거나 다양한 데이터셋에서 성능을 향상시키기 위해 Vision Transformer를 재사용할 수 있게 합니다.

5-2. 단점

첫 번째 단점은 계산 복잡도입니다. Vision Transformer는 이미지의 모든 부분 간의 관계를 계산하기 때문에, 계산 복잡도가 높습니다. 특히, 이미지의 크기나 패치의 수가 증가하면 연산 요구 사항이 급격히 증가할 수 있습니다. 이로 인해, 특히 큰 이미지나 데이터셋에서는 훈련 시간이 길어질 수 있습니다.

두 번째 단점은 데이터 의존성입니다. Vision Transformer는 충분한 양의 데이터와 다양한 데이터가 필요합니다. 작은 데이터셋에서는 성능이 제한될 수 있으며, 충분한 데이터 없이는 모델의 전체 잠재력을 발휘하기 어렵습니다. 따라서, 큰 데이터셋에서의 훈련이 권장됩니다. 이는 Transformer의 태생적 한계인 Inductive Bias 때문인데요. 이 부분에 대해서는 좀 더 자세히 생각해볼 필요가 있습니다.

먼저 Inductive Bias(귀납적 편향)가 무엇일까요? 바로 데이터 구조에 대한 특성을 모델에 선반영한 것을 말합니다. 생각해보면 CNN은 이미지 도메인에 대한 특성을 반영하여 설계되어 있습니다. 이미지는 주변 픽셀 정보가 중요하잖아요? 멀리 떨어져 있는 정보 보다는 주변 픽셀로부터 많은 정보를 얻을 수 있죠. 이러한 특성을 활용하기 위해 CNN에서는 Convolution, Pooling 등을 조합합니다. 이들은 주변 정보를 하나로 통합하는 특성을 포함하고 있죠. 어떻게 보면 반칙이라고도 볼 수 있겠죠. 왜냐하면 해당 도메인에서만 잘 동작하도록 모델을 구성한거니까요. 반면 Vision Transformer에는 이러한 반칙(?)이 반영되어 있지 않습니다. 생각해보면 주변 픽셀 정보는 특별히 더 생각해야 한다는 의도가 반영된 연산이 하나도 없잖아요. 순진한 Self Attention은 입력 이미지의 모든 패치에 대해 상관관계를 계산해봐야하죠. 따라서 반칙을 사용해서 멀리있는 정보는 애초에 무시하는 CNN보다 더 많은 데이터를 통해서 이러한 이미지만의 특성을 직접 부딪혀가며 알아낼수 밖에 없는겁니다.

세 번째 단점은 해석의 어려움입니다. Transformer 구조는 CNN에 비해 직관적이지 않을 수 있습니다. 따라서, 모델이 어떻게 이미지를 처리하고 판단을 내리는지를 이해하거나 해석하는 것이 어려울 수 있습니다. 이는 연구자나 개발자가 모델의 동작 방식을 분석하거나 문제점을 파악하는 데 어려움을 줄 수 있습니다.

6. 의의

마지막으로 Vision Transformer의 의의를 정리해보겠습니다.

첫 번째 의의는 CNN에 대한 새로운 도전입니다. Vision Transformer는 전통적인 CNN(Convolutional Neural Network)에 대한 새로운 도전을 제시합니다. CNN은 이미지 처리와 관련된 작업에서 오랜 시간 동안 주류로 사용되어 왔습니다. 그러나 Vision Transformer는 Transformer 구조를 사용하여 이미지를 처리하는 독특한 방식을 제안하며, 이를 통해 CNN과 유사하거나 그 이상의 성능을 보여줍니다. 이는 이미지 처리 분야에서의 기존 패러다임에 변화를 가져올 수 있으며, 연구자들에게 새로운 연구 방향성을 제시합니다.

두 번째 의의는 다양한 시각적 작업에의 확장 가능성을 증명한 점입니다. Vision Transformer는 다양한 시각적 작업에 적용될 수 있는 높은 확장성을 보여줍니다. 기존의 CNN 모델은 특정 작업에 최적화되어 있을 수 있지만, Vision Transformer는 그 구조상 다양한 작업에 쉽게 적용될 수 있습니다. 이는 전체 이미지의 컨텍스트를 고려하는 Transformer의 특성 덕분입니다. 따라서, Vision Transformer는 이미지 분류뿐만 아니라 객체 탐지, 시멘틱 분할 등 다양한 작업에도 적용될 수 있을 것으로 기대됩니다.

세 번째 의의는 전이 학습의 중요성을 재확인한 점입니다. Vision Transformer는 전이 학습의 중요성을 강조하고 있습니다. 특히, 큰 데이터셋에서 사전 훈련된 모델을 작은 데이터셋의 작업에 적용하여 높은 성능을 달성하는 것이 가능하다는 것을 보여줍니다. 이는 작은 데이터셋만을 가지고 있는 작업에서도 Vision Transformer를 활용하여 높은 성능을 달성할 수 있음을 의미합니다. 또한, 이러한 전이 학습의 접근 방식은 다양한 분야에서의 연구나 실제 응용에서도 큰 잠재력을 가지고 있음을 보여줍니다.

Series Navigation<< [19′ ICML] EfficientNet : Rethinking Model Scaling for Convolutional Neural Networks[21′ NIPS] MLP-Mixer: An all-MLP Architecture for Vision >>
5 2 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top