-
Vision Transformer(ViT)AI 2026. 5. 5. 22:45
컴퓨터 비전 분야의 패러다임을 완전히 바꾼 비전 트랜스포머(Vision Transformer, ViT)에 대해 현존하는 가장 상세한 가이드를 작성해 보고자 합니다.
2020년 구글 리서치 팀이 발표한 "An Image is Worth 16x16 Words" 논문은 CNN이 지배하던 이미지 인식 분야에 트랜스포머라는 새로운 가능성을 제시했습니다. 단순히 구조를 훑는 것을 넘어, 왜 이 모델이 강력한지 그 근본적인 철학부터 뜯어보겠습니다.
1. 근본적인 차이: 귀납적 편향(Inductive Bias)의 해체
ViT를 진정으로 이해하기 위해서는 먼저 '귀납적 편향(Inductive Bias)'이라는 개념을 알아야 합니다.
딥러닝 모델의 귀납적 편향이란, 모델이 본 적 없는 데이터를 일반화하여 예측하기 위해 설계 단계에서부터 가지는 '가정(Assumption)'을 의미합니다.
- CNN (합성곱 신경망): 지역적 편향(Locality) & 이동 불변성(Translation Invariance)
- CNN은 "이미지에서 의미 있는 특징은 인접한 픽셀들끼리 모여 있을 것이다"라는 강력한 가정을 가집니다. $3 \times 3$ 커널이 이미지를 훑으며(Sliding Window) 지역적인 특징을 추출합니다.
- 이러한 가정 덕분에 CNN은 상대적으로 적은 데이터로도 학습이 잘 됩니다. 하지만 멀리 떨어져 있는 픽셀 간의 관계를 파악하려면 수많은 계층(Layer)을 깊게 쌓아야만 합니다.
- RNN (순환 신경망): 순차적 편향(Sequentiality)
- RNN은 "데이터는 시간적 흐름이나 순서가 중요하다"는 가정을 가집니다. 이전 시간의 상태를 기억해 다음 상태를 예측하므로 시계열 데이터에 강합니다.
- ViT (비전 트랜스포머): 귀납적 편향이 거의 없음 (Minimal Bias)
- ViT는 데이터에 대한 선입견이 없습니다. 지역적 편향도, 순차적 편향도 강요하지 않습니다. 다양한 쿼리(Query), 키(Key), 값(Value)의 임베딩 형태로 스스로 모든 데이터 간의 관계를 학습합니다.
- "초반엔 헤맬지 몰라도, 대용량 데이터를 주면 스스로 모든 관계를 파악해 낸다!" 이것이 ViT의 무서운 점입니다. 귀납적 편향이 약한 대신, 방대한 데이터(예: JFT-300M 등)가 주어지면 기존 CNN의 성능을 압도하는 일반화 성능을 보여줍니다.
결론: CNN은 적은 데이터로도 빨리 배우지만 한계가 명확하고, ViT는 초반에는 학습이 어렵지만 대용량 데이터가 주어지면 CNN이 보지 못하는 전역적 문맥(Global Context)을 파악하여 성능을 압도합니다.
2. ViT 아키텍처: 이미지를 '단어'로 만드는 5단계 흐름
BERT와 같은 언어 모델은 문장 단위보다 작은 '토큰(Token)'들이 순차적으로 입력됩니다. ViT는 이를 이미지에 적용하기 위해 "이미지를 격자 형태의 작은 패치(Patch)로 나누어 문장의 단어처럼 순차적으로 입력한다"는 아이디어를 사용했습니다.
동작 과정을 순서대로 아주 상세히 뜯어보겠습니다.

(1) 이미지 패치 분할 (Patch Partitioning)
가장 먼저 입력 이미지를 $16 \times 16$ 등의 일정한 크기를 가진 '패치(Patch)'로 분할합니다. 픽셀 단위로 처리하는 CNN과 달리, ViT는 이 패치 단위로 이미지를 처리합니다.
- 패치 개수 계산 공식:예를 들어 입력 이미지 크기가 $9 \times 9$이고, 커널 크기(패치 크기)가 $3 \times 3$, 간격(Stride)이 3이라면: $\frac{9 - 3}{3} + 1 = 3$. 가로세로 각각 3개씩 총 $9$개의 패치가 생성됩니다. 생성된 패치들은 왼쪽에서 오른쪽, 위에서 아래 순서로 나열됩니다.
-
$$ \text{patch size} = \frac{\text{image size} - \text{kernel size}}{\text{stride}} + 1 $$
(2) 패치 임베딩 & 선형 투영 (Linear Projection)
잘게 쪼개진 패치들은 아직 2차원의 이미지 조각일 뿐입니다. 트랜스포머가 이해할 수 있도록 이를 1차원 벡터로 쭉 폅니다(Flatten). 그 후 선형 투영(Linear Projection)을 거쳐 특정 차원을 가진 임베딩 벡터로 변환합니다. 이 선형 투영을 거치면 단순한 픽셀 조각이었던 패치는 모델이 의미를 부여할 수 있는 '단어(Token)'로서의 자격을 갖추게 됩니다.
(3) [CLS] 토큰과 위치 임베딩 (Position Embedding)
- 분류 토큰 (Special Classification Token, [CLS]): 패치 배열의 가장 왼쪽(맨 앞)에 [CLS]라는 특수한 토큰을 하나 추가합니다. 이 토큰은 이미지의 특정 부분에서 온 것이 아니라, 학습을 통해 '전체 이미지를 대표하는 벡터'로 성장할 빈 그릇입니다.
- 위치 임베딩 (Position Embedding): 트랜스포머 모델 자체는 순서를 모릅니다. 따라서 패치들이 평탄화되면서 잃어버린 2차원 공간 상의 상대적 위치 정보(예: 이 패치가 고양이의 귀인지, 꼬리 쪽인지)를 보존하기 위해, 각 패치 벡터에 위치 정보를 담은 임베딩 벡터를 더해줍니다(Add), 이때 2차원이기때문에 2d information을 포지션 임베딩에 더해줍니다.
(4) 트랜스포머 인코더 (Transformer Encoder)
이제 패치 토큰들이 $N$개의 트랜스포머 인코더 계층을 반복적으로 통과합니다. 인코더의 핵심은 셀프 어텐션(Self-Attention) 메커니즘입니다.
- 합성곱 신명강(CNN)이 좁은 수용 영역(Receptive Field)으로 점진적으로 특징을 추출한다면, ViT의 어텐션은 **어텐션 거리(Attention Distance)**를 통해 첫 레이어부터 이미지 내 모든 패치 간의 상관관계를 학습합니다.
- 각 패치는 Query(질문), Key(이름표), Value(실제 정보) 값을 가집니다. 특정 패치(Query)가 다른 모든 패치들(Key)과 연관성을 계산하여, 연관성이 높은 패치(Value)의 정보에 더 높은 가중치를 주어 융합합니다. ("나는 너한테만 가중치를 줄 거야!" 라는 식으로 상호작용합니다.)
이 과정은 $N$번 반복됩니다.
- Layer Normalization: 학습의 안정성을 확보합니다.
- Multi-Head Self-Attention: 모든 패치가 서로 "너는 나와 얼마나 상관있니?"를 묻고 답하며 가중치를 계산합니다.
- MLP (Multi-Layer Perceptron): 비선형 특징을 학습합니다.
- Residual Connection: 층이 깊어져도 학습이 잘 되도록 입력을 출력에 더해줍니다.
(5) 최종 분류 (MLP Head)
$N$번의 인코더 계층을 모두 통과하면 최종 시퀀스 산출물(Sequential Output)이 나옵니다. 이때 ViT는 오직 맨 앞에 있던 [CLS] 토큰 벡터만을 사용하여 최종 분류를 수행하고, 나머지 패치 토큰들의 출력값은 분류 작업에서는 버려집니다.
- "그럼 나머지 패치들은 왜 만든 건가요?"
- 최종 단계에서 버려지는 것처럼 보이지만, 인코더를 통과하는 내내 나머지 패치들은 [CLS] 토큰과 끊임없이 어텐션(Self-Attention)을 주고받았습니다. 즉, 1번부터 9번까지의 이미지 패치들이 자신이 가진 로컬 정보들을 [CLS] 토큰에게 모두 보고하여 하나로 뭉쳐낸 것입니다. 분류 목적이 아니라 객체 탐지(Detection)나 세그멘테이션(Segmentation) 작업이라면 이 나머지 패치들의 출력값도 모두 살려서 활용하게 됩니다.
Transformer 인코더를 거쳐 나온 출력값은 고차원 벡터($D$-dimension) 형태입니다. 하지만 우리가 원하는 결과는 보통 "1,000개의 클래스 중 어디에 속하는가?" 같은 구체적인 수치입니다.
MLP Head는 이 고차원 벡터를 입력받아 다음과 같은 연산을 수행합니다.
- 차원 축소/확장: 인코더의 출력 차원을 클래스 개수(예: CIFAR-100이면 100개)에 맞게 변환합니다.
- 비선형 변환: 단순 선형 결합만으로는 해결하기 어려운 복잡한 경계선을 학습하기 위해 활성화 함수(GELU, ReLU 등)를 포함합니다.
구조적 특징
일반적으로 다음과 같은 층(Layer)들로 구성됩니다.
- Layer Normalization: 입력 데이터를 정규화하여 학습을 안정화합니다.
- Linear Layer (Dense Layer): $y = Wx + b$ 연산을 통해 차원을 변경합니다.
- Activation Function: 비선형성을 부여합니다 (ViT에서는 주로 GELU 사용).
- Dropout: 과적합(Overfitting)을 방지하기 위해 사용되기도 합니다.
참고: 전이 학습(Transfer Learning)을 할 때는 보통 기존 모델의 '입(Head)'만 떼어내고, 내 데이터셋의 클래스 개수에 맞는 새로운 '입'을 붙여서 학습시킵니다. 이를 Head Fine-tuning이라고 부릅니다.
3. 핵심 질문: "나머지 패치는 왜 버리고 [CLS]만 쓰나요?"
이 부분은 ViT의 핵심적인 '정보 압축' 메커니즘입니다.
- 반장 선출: [CLS] 토큰은 처음엔 아무 정보 없는 빈 벡터지만, 인코더를 통과하면서 Self-Attention을 통해 모든 이미지 패치와 대화합니다.
- 정보 흡수: 1번 패치의 '눈' 정보, 5번 패치의 '귀' 정보를 [CLS] 토큰이 어텐션 가중치만큼 가져와 자기 자신을 업데이트합니다.
- 대표성: 마지막 층에 도달했을 때, [CLS] 벡터는 이미지 전체를 가장 잘 대변하는 요약본이 됩니다.
- 효율성: 모든 패치 정보를 각각 처리하는 대신, 잘 요약된 [CLS] 토큰 하나만 MLP Head(분류기)에 넣어 연산량을 줄이고 정확도를 높이는 것입니다.
4. ViT의 한계와 발전형 모델들 (Swin, CvT)
ViT가 강력하긴 하지만 완벽한 것은 아닙니다.
- 고해상도 이미지 처리의 한계: 이미지 크기가 커지면 패치 개수가 기하급수적으로 늘어나고, Self-Attention의 연산량은 패치 수의 제곱($O(N^2)$)에 비례하여 폭발합니다.
- 공간적 위치 정보 취약: 픽셀 단위 처리가 아니기 때문에 저수준 특징(Low-level feature: 선, 코, 입 등)을 세밀하게 포착하는 데 약하고, 이미지 변환에 취약합니다.
이러한 문제를 해결하기 위해 다양한 후속 모델이 제안되었습니다.
- 스윈 트랜스포머 (Swin Transformer):
로컬 윈도우(Local Window)라는 개념을 도입해, 전체가 아닌 윈도우 안에서만 어텐션을 수행하고 층이 깊어질수록 윈도우를 병합해 나갑니다. 물체의 크기나 해상도를 계층적으로 학습하며 연산량을 크게 줄였습니다. - CvT (Convolutional Vision Transformer):
CNN의 장점인 합성곱(Convolution) 연산 과정을 ViT에 결합했습니다. CNN처럼 저수준 특징부터 고수준 특징까지 계층적으로 반영하며, Query, Key, Value를 추출할 때 공간적 다운샘플링을 적용해 계산 복잡도를 혁신적으로 감소시켰습니다.
5. 실습: FashionMNIST와 HuggingFace LoRA 튜닝
일반적으로 ViT 실습은 FashionMNIST 데이터세트(총 10개의 의류 클래스, 6만 개의 훈련 데이터와 1만 개의 테스트 데이터)를 활용합니다.
현업에서 ViT 계열의 거대한 모델을 처음부터 학습(Train from scratch)시키는 것은 불가능에 가깝습니다. 대신 HuggingFace의 Transformers 라이브러리를 사용하여 사전 학습된 모델을 불러오고, 파라미터 효율적 미세조정 기법인 LoRA (Low-Rank Adaptation)를 적용하는 것이 최신 트렌드입니다.
LoRA는 모델의 기존 가중치는 그대로 얼려둔(Freeze) 채, 어텐션 계층의 특정 부분(주로 Query와 Value)에만 아주 작은 크기의 가중치 행렬(Low-Rank Matrices)을 추가로 덧대어 학습시킵니다. 이를 통해 컴퓨팅 자원은 획기적으로 아끼면서도, 우리가 원하는 특정 도메인(예: 의류 분류)에 맞게 모델을 완벽하게 커스텀할 수 있습니다.
💡 요약 및 결론
비전 트랜스포머(ViT)는 "이미지를 패치로 쪼개어 언어 모델처럼 순차적으로 처리한다"는 직관적이고도 파격적인 아이디어로 컴퓨터 비전의 한계를 돌파했습니다.
- CNN처럼 지역적인 편향(Inductive Bias)에 얽매이지 않고, 전체 이미지의 문맥(Global Context)을 첫 레이어부터 파악합니다.
- 학습을 이끄는 [CLS] 토큰은 모든 패치들의 정보를 흡수하여 최종 판단을 내리는 중요한 핵심 뼈대 역할을 합니다.
여전히 극복해야 할 연산량과 데이터 의존성 문제가 있지만, ViT 구조는 현재 이미지 생성, 객체 탐지, 멀티모달(Multi-modal) 등 거의 모든 AI 비전 연구의 근간(Backbone)으로 굳건히 자리 잡고 있습니다
'AI' 카테고리의 다른 글
Swin Transformer: 계층적 비전 트랜스포머 (0) 2026.05.11 크로스 엔트로피(Cross Entropy) (0) 2026.05.02 생성 모델의 발전 과정: Autoencoder, VAE, GAN, 그리고 Diffusion (0) 2026.05.02 생성 모델(Generative Model) (0) 2026.05.02 PEFT의 핵심: "기존 모델은 얼리고, 추가 레이어만 학습한다" (1) 2026.04.18 - CNN (합성곱 신경망): 지역적 편향(Locality) & 이동 불변성(Translation Invariance)