Vision Transformers — Transformer가 보는 법을 배운 과정 (3부작 중 2부)
요약
Transformer 아키텍처가 시각 분야로 확장되는 과정을 다룹니다. 기존 CNN의 국소성 및 계층적 특징 추출 방식과 Transformer의 차이점을 비교하며, Vision Transformer의 등장 배경을 설명합니다.
핵심 포인트
- Transformer의 핵심 요소인 셀프 어텐션과 위치 인코딩 설명
- CNN의 주요 특징인 국소성, 이동 등변성, 계층적 특징 추출 분석
- CNN이 가진 제한된 수용 영역(receptive field)의 한계 지적
원래 내 블로그에 게시되었습니다. 정식 링크(canonical link)와 함께 이곳에 교차 게시되었습니다.
요약: Transformer 혁명 (1부)
이 시리즈의 1부에서 우리는 Google의 2017년 논문 _"Attention Is All You Need"_에서 소개된 Transformer 아키텍처가 어떻게 자연어 처리 (NLP)를 뒤흔들었는지 살펴보았습니다. 핵심 아이디어는 셀프 어텐션 (self-attention) (모든 토큰이 다른 모든 토큰을 참조할 수 있게 함), 위치 인코딩 (positional encodings) (순환 구조 없이 시퀀스 순서를 주입), 그리고 멀티 헤드 어텐션 (multi-head attention) (여러 관계 패턴을 병렬로 학습)이었습니다. Transformer는 RNN과 LSTM을 대체하여 언어 모델의 중추가 되었으며, 결과적으로 GPT, BERT 및 그 이후의 모든 모델의 기반이 되었습니다.
하지만 Transformer는 토큰(단어, 서브워드, 문자)의 시퀀스를 위해 설계되었습니다. 이미지는 시퀀스가 아닙니다. 이미지는 공간적 구조, 국소적 패턴(local patterns), 계층적 특징(hierarchical features)을 가진 픽셀의 2D 그리드입니다. 수십 년 동안 완전히 다른 계열의 아키텍처가 시각 분야를 지배해 왔습니다. 바로 합성곱 신경망 (CNN)입니다.
그렇다면 Transformer는 어떻게 보는 법을 배웠을까요? 그것이 이 포스트의 이야기입니다.
CNN 시대: 무엇이 작동했고 무엇이 작동하지 않았는가
합성곱 신경망 (CNN)은 2012년 AlexNet이 ImageNet에서 우승한 이후 컴퓨터 비전의 핵심 동력이 되어 왔습니다. 이 아키텍처는 우아합니다. 학습 가능한 작은 필터들이 이미지를 가로질러 슬라이딩하며 가장자리(edges), 질감(textures), 모양(shapes)과 같은 국소적 패턴을 감지합니다. 합성곱 계층을 쌓으면 계층 구조가 구축됩니다. 초기 계층은 가장자리를 감지하고, 중간 계층은 부분(눈, 바퀴)을 감지하며, 깊은 계층은 전체 객체를 감지합니다.
CNN은 설계 단계부터 강력한 **귀납적 편향 (inductive biases)**이 내장되어 있습니다:
- 국소성 (Locality): 각 필터는 이미지의 작은 패치 (patch)를 살펴봅니다. 3x3 컨볼루션 (convolution)은 한 번에 9개의 픽셀만 봅니다.
- 이동 등변성 (Translation equivariance): 동일한 필터가 모든 곳에 적용되므로, 왼쪽 상단에서 감지된 고양이는 오른쪽 하단의 고양이와 동일한 가중치 (weights)를 사용합니다.
- 계층적 특징 추출 (Hierarchical feature extraction): 풀링 계층 (pooling layers)은 공간 해상도 (spatial resolution)를 점진적으로 줄여, 네트워크가 추상적인 표현 (abstract representations)을 구축하도록 강제합니다.
이러한 편향 (biases)은 데이터가 제한적일 때 큰 도움이 됩니다. 이는 네트워크가 단 하나의 학습 예시를 보기 전부터 이미지를 어떻게 보아야 하는지를 알려줍니다. ResNet, EfficientNet, ConvNeXt와 같은 모델들은 놀라운 정확도와 효율성을 달성했습니다.
하지만 CNN에는 한계가 있습니다:
- 제한된 수용 영역 (Limited receptive field): 깊은 CNN조차 장거리 의존성 (long-range dependencies)을 포착하는 데 어려움을 겪습니다. 왼쪽 상단의 픽셀은 네트워크의 매우 후반부에 이르기 전까지는 오른쪽 하단의 픽셀과 직접적인 연결이 없습니다. 이는 장면 수준의 문맥 (scene-level context)을 이해하는 데 중요합니다. 예를 들어, 어떤 사람이 서프보드를 들고 있다는 것을 알기 위해서는 멀리 떨어진 이미지 영역들을 서로 연관시켜야 합니다.
- 고정된 기하학적 구조 (Fixed geometric structure): 컨볼루션은 경직되어 있습니다. 콘텐츠와 상관없이 고정된 크기의 국소 이웃 (local neighborhoods)을 처리합니다. 이미지의 어떤 부분이 서로 가장 관련이 있는지 동적으로 결정할 수 없습니다.
- 확장 병목 현상 (Scaling bottlenecks): CNN도 어느 정도 확장이 가능하지만, 모델 크기, 데이터, 성능 사이의 관계는 NLP에서 Transformer가 달성하는 것에 비하면 정체되는 경향이 있습니다.
연구자들은 질문했습니다: 입력의 어떤 부분이든 다른 모든 부분에 주의를 기울일 수 있는 (attend to) 능력을 가진 Transformer가 더 잘할 수 있을까?
핵심 통찰: 패치의 시퀀스로서의 이미지
Vision Transformer의 이면에 있는 획기적인 아이디어는 놀라울 정도로 단순합니다: 문장이 단어의 시퀀스인 것처럼, 이미지를 패치 (patches)의 시퀀스로 취급하는 것입니다.
224x224 픽셀 이미지를 예로 들어보겠습니다. 이 이미지를 겹치지 않는 16x16 패치 (patches) 그리드로 나눕니다. 그러면 14 x 14 = 196개의 패치를 얻게 됩니다. 각 패치는 16 x 16 x 3 = 768개의 픽셀 값(RGB 이미지의 경우)을 포함하는 작은 이미지 영역입니다. 각 패치를 하나의 벡터로 평탄화 (flatten)하고, 선형 레이어 (linear layer)를 통해 투영 (project)하면, 이미지의 각 패치를 나타내는 196개의 "토큰 (tokens)" 시퀀스가 생성됩니다.
이제 이 시퀀스를 표준 Transformer 인코더 (encoder)에 입력할 수 있습니다. 셀프 어텐션 (Self-attention)을 통해 모든 패치는 공간적 거리와 관계없이 다른 모든 패치를 참조할 수 있습니다. 왼쪽 상단 모서리에 있는 패치는 단 한 개의 레이어만으로도 오른쪽 하단 모서리에 있는 패치와 직접 상호작용할 수 있습니다. 넓은 수용 영역 (receptive field)을 구축하기 위해 수십 개의 레이어를 쌓을 필요가 없습니다.
이것이 2020년 말 Google Research에서 발표한 **Vision Transformer (ViT)**의 핵심 아이디어입니다.
ViT 아키텍처: 단계별 상세 분석
ViT가 입력부터 분류 (classification)까지 단일 이미지를 어떻게 처리하는지 추적해 보겠습니다.
1단계: 패치 임베딩 (Patch Embedding)
입력 이미지(예: 224x224x3)는 P x P 패치 그리드(일반적으로 P=16)로 나뉩니다. 각 패치는 P^2 x C 길이의 벡터로 평탄화되며(여기서 C는 채널 수), 16x16 RGB 패치의 경우 768차원 벡터가 됩니다. 학습 가능한 선형 투영 (linear projection)은 각 평탄화된 패치를 모델의 은닉 차원 (hidden dimension) D(예: 768)로 매핑합니다. 그 결과, N = (224/16)^2 = 196개의 패치 임베딩 (patch embeddings) 시퀀스가 생성됩니다.
이미지 (224x224x3)
→ 16x16x3 크기의 196개 패치로 분할
→ 각 패치를 768차원 벡터로 평탄화
...
2단계: [CLS] 토큰
ViT는 BERT에서 직접 빌려온 특수한 학습 가능한 [CLS] 토큰을 패치 시퀀스 앞에 추가합니다. 이 토큰은 어떤 이미지 패치와도 일치하지 않습니다. 대신, 이는 집계 지점 (aggregation point) 역할을 합니다. 즉, 모든 레이어에 걸친 셀프 어텐션을 통해 모든 패스로부터 정보를 수집합니다. 마지막 Transformer 레이어를 거친 후, [CLS] 토큰의 표현 (representation)은 분류를 위해 사용됩니다.
이제 시퀀스의 길이는 1개의 [CLS] 토큰 + 196개의 패치 토큰, 총 197개의 토큰이 됩니다.
Step 3: 위치 임베딩 (Position Embeddings)
컨볼루션 (Convolutions)과 달리, Transformer에는 공간적 위치에 대한 내장된 개념이 없습니다. 만약 패치의 순서를 섞더라도 셀프 어텐션 (Self-attention) 출력은 동일합니다 (이는 순열 동변성 (Permutation-equivariant)을 가집니다). 공간 정보를 인코딩하기 위해, ViT는 각 토큰에 **학습 가능한 1D 위치 임베딩 (Learnable 1D position embeddings)**을 추가합니다. 위치 0은 [CLS] 토큰이며, 위치 1-196은 래스터 순서 (Raster order, 왼쪽에서 오른쪽, 위에서 아래)로 배치된 패치들에 대응합니다.
흥미롭게도, 원본 ViT 논문에서는 1D 위치 임베딩이 명시적인 2D 위치 인코딩 (2D positional encodings)만큼이나 잘 작동한다는 것을 발견했습니다. 모델은 데이터로부터 2D 구조를 학습합니다. 즉, 인접한 위치 임베딩들이 결과적으로 유사한 값을 갖게 되어 효과적으로 2D 그리드 (2D grid)를 재구성하게 됩니다.
Step 4: Transformer 인코더 (Transformer Encoder)
위치 정보가 인코딩된 197개의 임베딩 시퀀스는 표준 Transformer 인코더로 입력됩니다. 이는 NLP 세계에서 사용되는 것과 정확히 동일한 아키텍처입니다. 각 레이어는 다음과 같이 구성됩니다:
- 레이어 정규화 (Layer Normalization): (Pre-Norm 관례에 따라 어텐션 이전에 적용)
- 멀티 헤드 셀프 어텐션 (Multi-Head Self-Attention, MHSA): 모든 토큰이 다른 모든 토큰을 참조합니다. 197개의 토큰의 경우, 헤드당 197x197 크기의 어텐션 행렬 (Attention matrix)이 생성됩니다. 각 헤드는 서로 다른 관계를 학습할 수 있습니다. 어떤 헤드는 인접한 패치에 집중할 수 있고, 다른 헤드는 의미론적으로 연관된 멀리 떨어진 패치에 집중할 수 있습니다.
- 잔차 연결 (Residual Connection): 어텐션 출력을 입력값에 다시 더합니다.
- 레이어 정규화 (Layer Normalization)
- MLP (Feed-Forward Network): GELU 활성화 함수를 사용하는 두 개의 선형 레이어로, 차원을 4배로 확장했다가 다시 투영합니다.
- 잔차 연결 (Residual Connection)
ViT-Base는 이러한 레이어를 12개 사용하고, ViT-Large는 24개, ViT-Huge는 32개를 사용합니다.
Step 5: 분류 헤드 (Classification Head)
마지막 인코더 레이어를 거친 후, [CLS] 토큰의 출력 표현 (Output representation)을 추출하여 간단한 MLP 헤드(사전 학습(Pre-training) 중에는 하나의 은닉층, 미세 조정(Fine-tuning) 중에는 단일 선형 레이어 사용)를 통과시켜 클래스 로짓 (Class logits)을 생성합니다.
입력 이미지 (Input Image)
→ 패치 임베딩 (Patch Embedding, 196개 패치)
→ [CLS] 토큰 추가 (197개 토큰)
...
그 우아함은 매우 인상적입니다. 풀링 레이어 (Pooling layers), 컨볼루션 (Convolutions), 수작업으로 설계된 특징 추출기 (Hand-crafted feature extractors)가 전혀 없습니다. 오직 패치 (Patches), 선형 투영 (Linear projections), 그리고 어텐션 (Attention)뿐입니다.
데이터 갈증 문제 (The Data Hunger Problem)
여기에 함정이 있습니다. ViT가 ImageNet(130만 장의 이미지)만으로 학습되었을 때는 ResNet과 같은 유사한 CNN보다 성능이 더 낮았습니다. 트랜스포머 (Transformer)의 귀납적 편향 (Inductive bias) 부족은 강점이자 동시에 약점입니다.
CNN은 국소적인 영역을 살펴보고 공간적으로 가중치를 공유해야 한다는 것을 "알고" 있습니다. 반면 ViT는 아무것도 모릅니다. 인접한 픽셀들이 서로 연관되어 있다는 사실과 패턴이 이미지 어디에서나 나타날 수 있다는 사실을 포함하여 모든 것을 데이터로부터 학습해야 합니다. 이러한 사전 지식 (Priors)을 처음부터 학습하려면 엄청난 양의 데이터가 필요합니다.
원래의 ViT 논문은 규모(Scale)에 따라 상황이 극적으로 바뀐다는 것을 보여주었습니다. JFT-300M (Google의 내부 데이터셋인 3억 장의 이미지)로 사전 학습(Pre-trained)했을 때, ViT-Huge는 ImageNet, CIFAR-100 및 기타 벤치마크에서 모든 CNN을 능가했습니다. 결론은 명확했습니다. 비전용 트랜스포머 (Transformers for vision)는 효과적이지만, 데이터 갈증 (Data-hungry)이 심하다는 것입니다.
이는 실질적인 질문을 던졌습니다. 대부분의 연구자와 기업은 3억 장의 라벨링된 이미지를 보유하고 있지 않습니다. Vision Transformer가 거대한 비공개 데이터셋 없이도 작동할 수 있을까요?
생태계: Vision Transformer 변형 모델들 (Vision Transformer Variants)
원래의 ViT 논문은 그 한계를 해결하려는 후속 연구의 폭발적인 증가를 불러일으켰습니다. 가장 중요한 모델들과 그 기여도는 다음과 같습니다.
DeiT — Data-Efficient Image Transformers (Facebook, 2021)
DeiT는 JFT 없이 ImageNet(130만 장의 이미지)만으로도 ViT를 효과적으로 학습할 수 있음을 증명했습니다. 주요 혁신 사항은 다음과 같습니다:
- 강력한 데이터 증강 (Strong data augmentation) (RandAugment, Mixup, CutMix, random erasing)을 통해 귀납적 편향 (Inductive bias)의 부족을 보완
- 정규화 기술 (Regularization techniques) (stochastic depth, repeated augmentation)
- CNN 교사 모델 (Teacher model, RegNet)로부터의 지식 증류 (Knowledge distillation): 특수한 증류 토큰 (Distillation token)이 CNN의 예측을 모방하도록 학습하여, CNN의 귀납적 편향을 트랜스포머로 효과적으로 전달
DeiT-Base는 단 4개의 GPU를 사용하여 ImageNet 데이터로만 학습하면서도 ViT-Base의 성능을 일치시켰으며, 이는 연산 요구 사항을 대폭 감소시킨 결과입니다.
Swin Transformer — Shifted Windows (Microsoft, 2021)
Swin Transformer는 ViT의 가장 큰 두 가지 구조적 문제인 이차 복잡도(quadratic)의 어텐션 비용과 단일 스케일 표현(single-scale representation) 문제를 해결했습니다.
- 계층적 특징 맵 (Hierarchical feature maps): CNN과 유사하게, Swin은 스테이지 사이의 패치들을 병합함으로써 다양한 해상도(입력 크기의 1/4, 1/8, 1/16, 1/32)의 특징 맵을 생성합니다. 이를 통해 FPN 및 UPerNet과 같은 탐지(detection) 및 세그멘테이션(segmentation) 프레임워크에서 CNN을 즉시 대체할 수 있는 백본(backbone) 역할을 수행합니다.
- 윈도우 기반 어텐션 (Window-based attention): 모든 패치에 대해 전역적 셀프 어텐션(global self-attention)을 수행하는 대신 (O(N^2) 비용), Swin은 고정된 크기의 로컬 윈도우(예: 7x7 패치) 내에서 어텐션을 계산합니다. 이를 통해 복잡도를 O(N)으로 줄입니다.
- Shifted windows (이동된 윈도우): 교차되는 레이어에서 윈도우 분할을 윈도우 크기의 절반만큼 이동시켜, 전역 어텐션의 비용 없이도 윈도우 간의 정보 흐름을 가능하게 합니다.
Swin은 밀집 예측(dense prediction) 작업(객체 탐지, 의미론적 세그멘테이션, 인스턴스 세그멘테이션)의 사실상 표준(de facto) 백본이 되었으며, ICCV 2021에서
- CvT (Convolutional Vision Transformer): 선형 패치 임베딩 (linear patch embedding)을 컨볼루션 토큰 임베딩 (convolutional token embeddings)으로 대체하고, 어텐션 투영 (attention projection) 내부에 depthwise convolutions를 사용합니다. 이는 전역 어텐션 (global attention) 메커니즘을 유지하면서 Transformer에 지역성 편향 (locality bias)을 주입합니다.
- CoAtNet (Google, 2021): depthwise convolution 레이어 (초기 단계의 지역적 패턴을 위해)를 Transformer 레이어 (후기 단계의 전역 어텐션을 위해)와 쌓아 올립니다. 컨볼루션 (convolutions)과 어텐션 (attention)을 체계적으로 결합함으로써, CoAtNet은 강력한 효율성과 함께 최첨단 (state-of-the-art) ImageNet 정확도 (top-1 90.88%)를 달성합니다.
이러한 하이브리드 (hybrid) 접근 방식은 실용적입니다. 지역성 (locality)이 가장 중요한 곳(원시 픽셀을 처리하는 초기 레이어)에는 컨볼루션을 사용하고, 전역적 추론 (global reasoning)이 중요한 곳(고수준 특징을 구성하는 후기 레이어)에는 어텐션을 사용합니다.
DINO 및 DINOv2 — 자기지도 학습 (Self-Supervised Learning) (Meta)
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기