ViT는 Transformer 인코더를 크게 변경하지 않고 이미지 처리에 적용 - 기존: Attention 기법을 사용할 때 CNN과 함께 사용하거나, CNN 구조를 유지하면서 CNN 특정 구성 요소 대체에 사용 - Attention만을 사용한 모델도 있었지만 CNN 기반 모델의 성능을 넘기지 못함
ViT에서는 Transformer만으로 CNN 기반 모델의 성능을 뛰어넘음
장단점
장점
확장성이 좋다. - Tansformer 구조를 거의 그대로 사용하기 때문 - 기존 Attention 기반 모델은 이론적으로 뛰어나지만, 특성화된 Attention 패턴으로 다른 네트워크에 확장하기 어려웠음
Large Scale 학습에 우수하다. - Transformer의 장점을 그대로 흡수
전이학습 시에 CNN보다 학습에 적은 연산 리소스를 활용한다.
단점
Inductive Bias가 부족하다. - 때문에 학습 시 CNN보다 많은 양의 데이터를 필요로 한다.
Inductive Bias 비교
Inductive Bias (귀납적 편향)
모델이 처음 보는 입력에 대한 출력을 예측하기 위해 사용하는 '가정'
모델 구조 자체가 데이터의 특성을 미리 짐작하도록 설계된 성질
CNN의 Inductive Bias
- 다음의 2가지 가정을 통해 CNN이 단순한 MLP보다 좋은 성능을 낸다.
Translation Equivariance
Locality
CNN의 가정 1: Translation Equivariance (평행이동 등변성)
사물의 위치가 바뀌어도 동일 사물로 인식
CNN에서는 입력값의 위치가 변하면 출력값의 위치도 같이 변하면서 값을 유지한다.
CNN vs. MLP - CNN : Translation Equivariance 가정으로 단순 MLP보다 좋은 성능을 가진다. - MLP : 완전히 같은 값을 가지는 패치의 위치가 조금 달라지더라도 Flatten한 벡터값이 달라지게 됨. Fully Connected 연산 시 weight가 모두 달라지므로 결과값이 달라진다.
CNN의 가정 2: Locality (지역성 -- 공간적 집약성을 뜻하는 듯)
근접 픽셀끼리 종속성 (= 한 픽셀이 주변 픽셀에 대해 높은 종속성을 가진다.)
Convolution 연산을 할 때, 전체 이미지에서 Convolution 필터가 일부분만 보게 된다. 특정 영역만 보고 Convolution 필터가 특징을 추출할 수 있다.
ex) '코'라는 특징은 파란 테두리 내부의 픽셀과 관계가 있다.
Transformer 모델은 Inductive Bias가 없다.
Attention 구조만 사용한다. - CNN과 같이 Local Receptive Field(지역 수용 영역)를 보지 않음
지역적 패턴을 익히기 위해 CNN 보다 많은 데이터를 필요로 한다. - 불충분한 데이터양으로 학습하면 일반화 성능이 떨어짐 ex) ImageNet 데이터셋(중간 사이즈 데이터셋)을 학습에 사용할 경우, 유사한 크기의 ResNet(CNN 모델)보다 성능 낮아짐
Large Scale 데이터셋을 이용하면 CNN보다 좋은 성능을 낸다. - Large Scale 데이터셋에서 학습하고, 전이학습(Transfer Learning)하면 효과적 - 논문에서 Large Scale 데이터셋 ImageNet 21K, JFT-300M으로 사전 학습 & CIFAR-10으로 Transfoer Learning 했을 때 높은 정확도였음
ViT Architecture
전체 구조
Linear Projection of Flattened Pathches
특징
Transformer 구조에 맞는 입력값을 넣어야 함 - Transformer Encoder를 가져와 ViT에 사용했기 때문
Transformer와 동일하게 시퀀스 데이터에 ① Embedding, ② Positional Encoding 추가
1. 이미지를 패치 단위로 쪼개고 각 패치를 왼쪽 상단에서 오른쪽 하단의 순서로 나열하여 시퀀스 데이터 형태로 만든다.
입력 이미지 : (C, H, W) 크기 ↓
패치 단위로 쪼갬 : (C, P, P) 크기
2. 각 패치는 Flatten하여 벡터로 변환해준다.
Flatten한 벡터 : C*P*P 크기
이 N개의 벡터를 합쳐 xp라고 함 : (N, C*P*P)
ex) 입력 : (3, 256, 256) 크기의 이미지
P(patch의 크기) = 16 → 각 패치의 크기 (3, 16, 16) & 패치의 개수 (16 x 16)
이 패치 flatten : 3∗16∗16 = 768 → 768 크기의 벡터를 16 X 16개 가지게 됨
이 값을 시퀀스 데이터로 나타내면 (256, 768)의 형태로 표현
3. 각 벡터에 Linear 연산을 거쳐서 임베딩한다.
임베딩하기 위해 임베딩 행렬 E와 연산 : (C*P*P, D) 크기 * D : Embedding Demension
xp와 E를 행렬곱 : (N, C*P*P) * (C*P*P, D) = (N, D)의 크기
배치 사이즈도 고려 : (B, N, D)
4. 임베딩 결과에 클래스를 예측하는 [CLS] 토큰을 1개 추가한다.
토큰이 1개 추가 : (B, N+1, D) 크기
왜?
Transformer의 Self-Attention은 모든 패치가 서로를 참조하는 전역적(Global) 연산이다.
따라서 의미 없던 [CLS] 토큰이 L번의 인코더 레이어를 거치면서 다른 모든 이미지 패치들의 핵심 정보를 모두 가지게 됨.