상태: 초안 (2026-10-13), 일부 실측. 예제는 노트북 CPU 에서 직접 돌린 값입니다(
code/07_vit.py, 1초 안). 논문 수치는 원문을 열어 조건과 함께 옮겼고, 하드웨어는 등급으로 적었습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」으로 표시합니다.
목차
- 1. 어텐션: 모든 쌍의 관계를 본다
- 2. ViT: 그림을 조각의 문장으로
- 3. 해상도의 비용
- 4. 왜 데이터가 많이 필요한가
- 5. DeiT: ImageNet 만으로 학습하기
- 6. 계층 구조로 돌아가기: Swin, Hiera
- 7. 한계와 우리 프로젝트
- 참고 문헌
1. 어텐션: 모든 쌍의 관계를 본다
트랜스포머(2017)는 번역을 위해 만든 모델입니다. 핵심 연산은 셀프 어텐션입니다. 문장의 단어마다 세 가지 벡터를 만듭니다.
- 질의(Q): 「나는 무엇을 찾고 있나」
- 키(K): 「나는 어떤 정보를 갖고 있나」
- 값(V): 「나를 고르면 이것을 준다」
단어 i 의 질의와 단어 j 의 키를 내적해 「i 가 j 를 얼마나 볼지」를 정하고, 그 비율로 값들을 섞습니다.
Attention(Q, K, V) = softmax( Q·Kᵀ / √d_k ) · V
√d_k 로 나누는 이유를 논문은 이렇게 설명합니다. 차원 d_k 가 크면 내적값이 커지고(성분이 평균 0, 분산 1 이면 내적의 분산이 d_k), softmax 가 한쪽으로 몰려 기울기가 아주 작아집니다. 나눠서 분산을 1 근처로 되돌립니다.
합성곱과 비교하면 차이가 분명합니다. 합성곱의 출력 한 칸은 이웃 3×3 만 보고, 멀리 보려면 층을 쌓아야 했습니다(1편의 수용 영역). 어텐션은 첫 층부터 모든 위치를 봅니다. 누구를 볼지는 고정된 창이 아니라 데이터(Q·K)가 정합니다.
2. ViT: 그림을 조각의 문장으로
Dosovitskiy 등의 ViT 는 그림을 문장처럼 만듭니다.
- 224×224 그림을 16×16 조각으로 자릅니다. 14×14 = 196조각.
- 조각 하나(16×16×3 = 768개 숫자)를 펴서 선형 투영으로 D 차원 벡터(토큰)로 바꿉니다.
- 맨 앞에 학습하는 CLS 토큰을 하나 붙입니다. 마지막 층에서 이 토큰의 출력을 그림 전체의 표현으로 써서 분류합니다.
- 각 토큰에 위치 임베딩(학습하는 벡터)을 더합니다.
- 표준 트랜스포머 인코더(셀프 어텐션 + MLP, 각각 잔차 연결과 층 정규화)를 L 층 쌓습니다.
| 모델 | 층 | 숨은 차원 D | MLP | 헤드 | 파라미터 |
|---|---|---|---|---|---|
| ViT-Base | 12 | 768 | 3072 | 12 | 8,600만 |
| ViT-Large | 24 | 1024 | 4096 | 16 | 3억 700만 |
| ViT-Huge | 32 | 1280 | 5120 | 16 | 6억 3,200만 |
이름의 「/16」, 「/14」는 조각 크기입니다. 9편의 SAM 이 쓰는 이미지 인코더가 이 ViT-Huge(조각 16)입니다.
직접 해 보기 1: 조각 + 선형 투영 = 보폭 16 합성곱
조각으로 잘라 행렬을 곱하는 것과, 16×16 필터를 보폭 16 으로 미는 합성곱은 같은 계산입니다. 같은 가중치로 두 방법을 계산해 비교했습니다(실측).
224×224 → 패치 196개(14×14), 패치 하나 768개 숫자 → 64차원 토큰
「잘라서 선형 변환」과 「보폭 16 합성곱」의 최대 차 2.7e-15
차이는 부동소수 반올림뿐입니다. 실제 구현도 대부분 이 부분을 합성곱 한 층으로 짭니다. ViT 의 첫 층은 「창이 겹치지 않는 아주 큰 합성곱」이고, 합성곱다운 부분은 거기까지입니다.
직접 해 보기 2: 위치 임베딩이 없으면 순서를 모른다
셀프 어텐션은 토큰의 순서를 보지 않습니다. 입력 토큰을 섞으면 출력도 똑같이 섞일 뿐입니다(순열 등변성). 그러면 그림의 왼쪽 위 조각과 오른쪽 아래 조각을 바꿔도 모델은 모릅니다(실측).
토큰 순서를 섞어 넣은 출력 == 원래 출력을 같은 순서로 섞은 것: 최대 차 1.3e-15
위치 임베딩을 더하면 같은 패치를 섞었을 때 출력이 달라진다: 상대 차 0.28
그래서 위치 임베딩이 필요합니다. ViT 논문의 실험(ViT-B/16, ImageNet 5장씩 선형 평가)에서 위치 임베딩이 없으면 0.614, 1D 학습 임베딩 0.642, 2D 임베딩 0.640, 상대 위치 0.640 이었습니다. 있느냐 없느냐는 크게 다르고, 어떤 종류냐는 거의 차이가 없었습니다. 조각 수준(14×14)에서는 1D 번호만 줘도 모델이 2D 배치를 스스로 배운다는 뜻입니다.
3. 해상도의 비용
어텐션은 모든 토큰 쌍을 보므로 비용이 토큰 수 N 의 제곱입니다(실측 계산).
| 입력 한 변 | 토큰 수 N | 어텐션 행렬 N² | 224px 대비 |
|---|---|---|---|
| 224 | 196 | 38,416 | 1.0배 |
| 384 | 576 | 331,776 | 8.6배 |
| 512 | 1,024 | 1,048,576 | 27.3배 |
| 1024 | 4,096 | 16,777,216 | 436.7배 |
SAM 은 1024×1024 를 넣습니다. 그래서 SAM 의 ViT-H 는 대부분의 층에서 14×14 창 안에서만 어텐션하고, 전역 어텐션은 4개 층에만 둡니다(9편). 해상도가 중요한 일에 ViT 를 쓰려면 이런 절충이 필요합니다.
4. 왜 데이터가 많이 필요한가
ViT 논문의 가장 중요한 결과는 정확도 숫자보다 데이터 크기에 따른 역전입니다.
- ImageNet-1k(약 130만 장)만으로 사전학습하면 큰 ViT 가 ResNet(BiT)보다 못했고, ViT-Large 가 ViT-Base 보다도 못했습니다.
- ImageNet-21k(약 1,400만 장)에서는 Large 와 Base 가 비슷해졌습니다.
- JFT-300M(약 3억 장)에서야 큰 모델의 이점이 다 드러나고 ViT 가 ResNet 을 넘었습니다.
| 모델(사전학습 데이터) | ImageNet top-1 | 사전학습 비용(TPUv3 코어·일) |
|---|---|---|
| ViT-H/14(JFT-300M) | 88.55% | 2,500 |
| ViT-L/16(JFT-300M) | 87.76% | 680 |
| ViT-L/16(ImageNet-21k) | 85.30% | 230 |
| BiT-L(ResNet152×4, JFT-300M) | 87.54% | 9,900 |
| Noisy Student(EfficientNet-L2) | 88.4–88.5% | 12,300 |
(논문 표 2. ViT-H/14 는 518px, ViT-L/16 은 512px 로 미세조정.)
이유를 논문은 귀납 편향으로 설명합니다. 합성곱은 「가까운 화소끼리 관계가 깊다(국소성)」와 「같은 무늬는 어디서나 같다(이동 등변성)」를 구조로 갖고 태어납니다(1편). ViT 에서 그런 성질을 가진 것은 조각 안의 MLP 뿐이고, 셀프 어텐션은 전역입니다. 그러니 「가까운 조각을 더 봐라」는 규칙을 데이터에서 스스로 배워야 하고, 데이터가 적으면 그 규칙을 배우기 전에 학습 데이터를 외워 버립니다. 데이터가 충분하면 반대로 그 자유가 이점이 됩니다. 구조가 강요하지 않으니 데이터에 맞는 더 나은 규칙을 찾을 수 있습니다.
실제로 학습된 ViT 를 들여다보면, 가장 아래층에서도 일부 헤드는 그림 대부분을 보고 다른 헤드는 가까운 곳만 보며, 층이 깊어질수록 보는 거리가 늘었습니다(논문 4.5절). 합성곱처럼 국소적으로 보는 헤드를 스스로 만들어 낸 셈입니다.
비용 쪽도 흥미롭습니다. 위 표에서 ViT-H/14 는 BiT-L 보다 정확하면서 사전학습 비용은 약 1/4 이었습니다. 데이터가 충분하면 트랜스포머가 계산 효율에서도 유리했습니다.
5. DeiT: ImageNet 만으로 학습하기
대부분은 3억 장의 비공개 데이터를 쓸 수 없습니다. Touvron 등의 DeiT(2021)는 ImageNet-1k 만으로 ViT 를 잘 학습하는 방법을 보였습니다. 열쇠는 둘입니다.
- 강한 증강과 정규화. RandAugment, mixup, CutMix, 무작위 지우기, 확률적 깊이, 반복 증강을 다 씁니다. 하나씩 빼 본 실험(DeiT-B, 224px)에서 mixup 과 CutMix 를 함께 빼면 81.8% → 75.8%, 반복 증강을 빼면 76.5% 로 떨어졌고, 무작위 지우기나 확률적 깊이를 빼면 학습 자체가 실패했습니다. 데이터에서 배워야 할 귀납 편향을, 데이터를 부풀려 가르치는 셈입니다.
- 증류 토큰. CLS 토큰 옆에 「선생 모델의 답을 따라 하는」 토큰을 하나 더 둡니다. 선생은 합성곱 망(RegNetY-16GF, 82.9%)입니다. 합성곱의 귀납 편향을 선생의 답을 통해 물려받는 것으로 볼 수 있습니다.
| 모델(ImageNet-1k 만) | 224px | 384px |
|---|---|---|
| DeiT-B | 81.8% | 83.1% |
| DeiT-B + 증류 | 83.4% | 84.5% |
학습은 GPU 8장짜리 서버 한 대로 2–3일이었습니다(300에폭에 53시간). 논문의 다른 곳에는 「GPU 4장으로 3일」이라는 표현도 있어 원문 안에서 조건이 엇갈립니다.
6. 계층 구조로 돌아가기: Swin, Hiera
ViT 는 처음부터 끝까지 14×14 한 해상도입니다. 검출·분할처럼 여러 크기의 물체를 다루는 일에는 합성곱의 피라미드(고해상도 → 저해상도)가 그리웠습니다.
- Swin Transformer(2021): 작은 창 안에서만 어텐션하고, 층마다 창을 반 칸 밀어서 창 사이 정보를 섞습니다. 비용이 그림 크기에 선형이 되고, 단계마다 토큰을 합쳐 피라미드를 만듭니다. COCO test-dev 상자 AP 58.7, ADE20K 분할 mIoU 53.5 였습니다.
- Hiera(2023): 계층형 ViT 에 붙어 있던 부품들(상대 위치 임베딩, 합성곱, 겹치는 풀링 등)을 다 걷어 내고, 대신 강한 MAE 사전학습(그림 일부를 가리고 복원하기)으로 그 역할을 배우게 했습니다. 정확도는 유지하면서 빨라졌습니다(Hiera-L 이 비교 대상 MViTv2-L 보다 초당 처리량 약 2.4배, 데이터센터 GPU·FP16). Hiera-H 는 ImageNet-1k 86.9% 입니다. SAM 2 의 이미지 인코더가 Hiera 입니다(10편).
MAE 같은 자기지도 사전학습의 원리는 자매 시리즈(자기지도·영상·자세·스포츠)에서 다룹니다.
7. 한계와 우리 프로젝트
- 데이터와 계산. 귀납 편향이 약한 만큼 큰 데이터나 강한 증강·사전학습이 필요합니다.
- 해상도 비용. N² 비용 때문에 고해상도에는 창 어텐션 같은 절충이 필요합니다.
- 작은 물체. 16×16 조각 하나보다 작은 물체는 한 토큰 안에 묻힙니다. 모델 입력에서 지름 3px 인 탁구공은 조각의 1% 도 안 됩니다.
그래서 TT Score 에서는 역할이 갈립니다. 공 찾기는 합성곱(HRNet 계열), 탁구대 분할은 트랜스포머(SAM 2.1 의 Hiera) 입니다. 탁구대는 크고 단순하며 경기 시작 때 한 번만 찾으면 되니 무거운 트랜스포머를 써도 되고, 공은 작고 프레임마다 찾아야 하니 가볍고 국소적인 합성곱이 맞습니다(TT Score 모델 해부 1편).
다음 글은 트랜스포머로 검출을 다시 쓴 DETR 입니다. 앵커도 NMS 도 없습니다.
티티 한마디. 조각 순서를 섞어도 위치 임베딩이 없으면 모델은 눈치를 못 채요. 그림을 퍼즐 조각 더미로 보는 거죠. 번호표를 달아 줘야 퍼즐이 맞춰져요.
참고 문헌
- Vaswani, A. et al. (2017). Attention Is All You Need. NeurIPS 2017. https://arxiv.org/abs/1706.03762
- Dosovitskiy, A. et al. (2021). An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale. ICLR 2021. https://arxiv.org/abs/2010.11929
- Touvron, H. et al. (2021). Training data-efficient image transformers & distillation through attention. ICML 2021. https://arxiv.org/abs/2012.12877
- Liu, Z. et al. (2021). Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. ICCV 2021. https://arxiv.org/abs/2103.14030
- Ryali, C. et al. (2023). Hiera: A Hierarchical Vision Transformer without the Bells-and-Whistles. ICML 2023. https://arxiv.org/abs/2306.00989
- 예제 코드와 출력: 이 폴더의
code/07_vit.py,code/07_vit.out.txt