비전 트랜스포머 · CLIP · 멀티모달 모델 한 번에 보기
ViT 패치 토큰 · 파라미터 계산, CLIP 대칭 대조 손실 · 제로샷 손계산, LLaVA로 보는 VLM 구조
먼저 알아야 할 것
다루는 내용
트랜스포머가 이미지를 보고(ViT), 이미지와 글을 같은 공간에 놓고(CLIP), 사진을 보며 대화하는(VLM) 흐름을 한 수업으로 잇습니다. ViT-B/16의 입력 길이 · 패치 임베딩 파라미터를 세고, CLIP 대칭 손실을 3×3 배치로, 제로샷 분류를 스케일 효과와 함께 손계산합니다. LLaVA의 비전 인코더 + 선형 투영 + 언어 모델 구조와 두 단계 학습을 정리합니다.
해설
비전 트랜스포머 · CLIP · 멀티모달 모델 한 번에 보기
글을 다루던 트랜스포머가 이미지를 보고, 이미지와 글을 같은 공간에 놓고, 마침내 사진을 보며 대화하는 모델이 되기까지의 세 걸음을 한 수업으로 잇습니다. 비전 트랜스포머(ViT)의 패치 토큰과 파라미터 수를 직접 세고, CLIP의 대조 손실과 제로샷 분류를 3×3 예로 손계산한 뒤, 비전 인코더 + 연결층 + 언어 모델로 된 시각-언어 모델(VLM)의 구조를 LLaVA로 확인합니다.
| 항목 | 내용 |
|---|---|
| 참고 자료 | D2L '비전 트랜스포머' 절 · d2l.ai/chapter_attention-mechanisms-and-transformers/vision-transformer.html, ViT(arXiv 2010.11929) · CLIP(arXiv 2103.00020) · LLaVA(arXiv 2304.08485) |
| 트랙 · 수준 | 딥러닝 기초 · 중급 |
| 이 수업의 범위 | 패치 임베딩, [class] 토큰, 위치 임베딩, ViT 크기, 귀납 편향과 데이터 규모, 이미지-글 대조 학습, 온도 · 로짓 스케일, 제로샷 분류, 시각-언어 모델 구조와 두 단계 학습 |
| 먼저 알면 좋은 것 | 셀프 어텐션 · 트랜스포머 인코더, 임베딩과 코사인 유사도, 소프트맥스 · 교차 엔트로피, 대조 학습 |
들어가기 전에
- 어텐션 직관: 쿼리 · 키 · 값을 손으로 계산하기 — ViT 내부는 글 트랜스포머와 똑같은 셀프 어텐션입니다.
- 전이 학습과 자기지도 학습 — NT-Xent 대조 손실을 알고 오면 CLIP 손실은 "보기 두 개" 대신 "이미지와 글"로 바꾼 것뿐입니다.
한눈에 보기
- 이미지를 16×16 패치로 잘라 "단어"처럼 다루는 법과 입력 길이 · 파라미터 수를 직접 계산합니다.
- ViT가 왜 데이터가 적으면 CNN보다 약하고, 많으면 앞서는지 귀납 편향으로 설명합니다.
- CLIP의 대칭 대조 손실을 3×3 배치로 손계산하고, 문장으로 분류기를 만드는 제로샷 분류를 따라갑니다.
- 시각-언어 모델이 "이미지 → 시각 토큰 → 언어 모델"로 연결되는 구조와 두 단계 학습을 LLaVA로 봅니다.
1. 비전 트랜스포머: 이미지를 단어처럼
직관(해설용 비유): 퍼즐 조각을 한 줄로 늘어놓고 "조각끼리 서로 보며 전체 그림을 맞히라"고 하는 것입니다. 조각 하나가 문장의 단어 하나 역할을 합니다.
단계 (ViT 논문의 틀)
- 이미지를 패치 개로 자릅니다.
- 패치를 한 줄로 펴서(길이 ) 학습되는 선형층으로 차원 벡터로 바꿉니다(패치 임베딩).
- 맨 앞에 학습되는
[class]토큰을 하나 붙입니다(BERT의[CLS]와 같은 생각). - 위치 정보를 주는 학습되는 위치 임베딩을 더합니다.
- 표준 트랜스포머 인코더(레이어 정규화 → 셀프 어텐션 → 잔차, 레이어 정규화 → MLP → 잔차)를 번 지납니다.
- 마지막 층
[class]위치의 출력을 분류 헤드에 넣습니다.
숫자로 해 보기(해설용, ViT-B/16):
| 항목 | 계산 | 값 |
|---|---|---|
| 패치 수 | 196 | |
| 입력 길이 | ([class]) | 197 |
| 패치 하나의 값 개수 | 768 | |
| 패치 임베딩 파라미터 | (편향) | 590,592 |
| 위치 임베딩 파라미터 | 151,296 | |
| 384×384 입력일 때 길이 | 577 |
ViT-Base 전체는 층 12개, 은닉 768, MLP 3,072, 헤드 12개로 파라미터 약 8,600만 개입니다(논문 표 기준). 표기 "ViT-B/16"은 Base 모델에 16×16 패치라는 뜻입니다. 패치를 작게 하면 입력 길이가 늘어 어텐션 비용이 길이의 제곱으로 커집니다.
패치 임베딩 = 합성곱 한 번: 커널 16×16, 스트라이드 16, 출력 채널 768인 합성곱과 같은 계산입니다. 구현도 흔히 그렇게 합니다.
귀납 편향과 데이터 규모
CNN은 "가까운 픽셀끼리 관련이 깊다(지역성)", "물체가 옮겨 가도 같은 특징(이동 등변성)"이라는 귀납 편향(inductive bias)을 구조에 품고 있습니다. ViT는 이것이 거의 없어 패치 사이 관계를 데이터에서 다 배워야 합니다. 그래서 ViT 논문은 ImageNet(약 130만 장)만으로 학습하면 비슷한 크기 ResNet보다 낮았지만, 1,400만~3억 장 규모로 사전학습하면 앞섰다고 보고합니다.
왜 이게 중요했나: "충분한 데이터만 있으면 범용 구조가 손으로 넣은 가정을 이긴다"는 점이 확인되자, 글 · 이미지 · 소리를 같은 트랜스포머로 다루는 길이 열렸습니다. 이것이 아래 멀티모달 모델의 바탕입니다.
2. CLIP: 이미지와 글을 같은 공간에
직관: 사진 묶음과 설명 묶음을 섞어 놓고 "어느 설명이 어느 사진 것인지" 짝을 맞히게 합니다. 설명을 한 글자씩 받아쓰는 것보다 훨씬 쉬운 과제라 효율적으로 배웁니다.
단계 (CLIP 논문의 틀)
- 배치에 (이미지, 글) 쌍 개를 담습니다(논문: , 인터넷에서 모은 쌍 4억 개로 학습).
- 이미지 인코더(ResNet 또는 ViT)와 글 인코더(트랜스포머)로 각각 벡터를 만들고, 같은 차원으로 투영해 길이 1로 정규화합니다.
- 코사인 유사도 행렬을 만들고 학습되는 스케일(온도의 역수)을 곱합니다.
- 대각선(진짜 짝)이 정답인 분류를 행 방향(이미지 → 글)과 열 방향(글 → 이미지) 두 번 하고 교차 엔트로피를 평균합니다(대칭 손실).
| 기호 | 뜻 |
|---|---|
| 번 이미지와 번 글의 코사인 유사도 | |
| 로짓 스케일(= 1/온도). 논문은 온도 0.07에 해당하는 값에서 시작해 학습하고, 100을 넘지 않게 제한 | |
| 첫째 합 | 이미지마다 "어느 글이 내 짝인가" |
| 둘째 합 | 글마다 "어느 이미지가 내 짝인가" |
숫자로 해 보기(해설용, ): 3쌍의 유사도 행렬이 다음과 같다고 합시다(행 = 이미지, 열 = 글).
| 글 1 | 글 2 | 글 3 | |
|---|---|---|---|
| 이미지 1 | 0.8 | 0.1 | 0.2 |
| 이미지 2 | 0.3 | 0.7 | 0.1 |
| 이미지 3 | 0.2 | 0.4 | 0.6 |
- 이미지 1 행: 로짓 8, 1, 2 → 짝 확률 , 손실 0.0034
- 이미지 2 행: 짝 확률 0.9796, 손실 0.0206
- 이미지 3 행: 로짓 2, 4, 6 → 짝 확률 0.8668, 손실 0.1429
- 이미지 방향 평균 0.0556, 글 방향(열) 평균 0.0283, 전체 손실 약 0.042
(python으로 재확인한 해설용 값.) 이미지 3은 글 2와도 0.4로 꽤 가까워 손실이 가장 큽니다. 학습은 이런 "헷갈리는 짝"을 더 떨어뜨리는 방향으로 진행됩니다.
제로샷 분류: 글로 분류기를 만든다
- 클래스 이름마다 "a photo of a {이름}." 같은 문장을 만들어 글 인코더로 임베딩합니다.
- 새 이미지를 이미지 인코더로 임베딩합니다.
- 이미지와 각 클래스 문장의 코사인 유사도에 스케일을 곱해 소프트맥스합니다.
- 가장 높은 클래스를 답으로 고릅니다. 학습 데이터에 그 클래스의 라벨이 없어도 됩니다.
숫자로 해 보기(해설용): 코사인 0.31(dog) · 0.25(cat) · 0.22(car)일 때 스케일 1이면 확률이 0.350 · 0.330 · 0.320으로 거의 같지만, 스케일 100이면 0.9974 · 0.0025 · 0.0001로 뚜렷해집니다. 코사인 차이가 작아도 스케일이 판단을 분명하게 만듭니다.
논문이 보고한 것 (CLIP): ImageNet 학습 이미지 128만 장을 하나도 쓰지 않고 제로샷으로 원래 ResNet-50과 맞먹는 76.2%를 냈습니다. 이전 제로샷 방법(Visual N-Grams)은 11.5%였습니다. 다만 저자들은 데이터 · 모델 · 연산 차이가 커서 방법끼리 직접 비교로 읽지 말라고 주의합니다.
왜 대조인가: 저자들은 같은 조건에서 "캡션 받아쓰기(예측)"보다 "짝 맞히기(대조)"가 ImageNet 제로샷 효율을 크게 높였다고 보고합니다. 정확한 단어를 맞히는 데 쓰는 능력을 아끼고, 이미지와 글의 대응 자체에 집중하기 때문입니다.
flowchart LR
A[이미지] --> B[패치로 자르기 + 패치 임베딩]
B --> C[ViT 인코더]
C --> D[이미지 벡터]
E[글] --> F[글 트랜스포머]
F --> G[글 벡터]
D --> H[CLIP: 코사인 유사도 × 스케일 → 대칭 교차 엔트로피]
G --> H
C --> I[격자 특징 = 시각 토큰]
I --> J[연결층: 선형 투영 · MLP]
J --> K[언어 모델: 시각 토큰 + 질문 토큰 → 답 생성]3. 시각-언어 모델: 보고 말하는 모델
직관: 이미 말 잘하는 언어 모델에게 "눈"을 달아 주는 일입니다. 눈(비전 인코더)이 본 것을 언어 모델이 읽을 수 있는 단어 모양(시각 토큰)으로 바꿔 주는 통역사(연결층)를 둡니다.
구조 (흔한 설계)
| 부품 | 역할 | 예 |
|---|---|---|
| 비전 인코더 | 이미지를 패치 특징 벡터들로 | CLIP의 ViT |
| 연결층(projector) | 시각 특징을 언어 모델의 단어 임베딩 공간으로 | 선형층, 작은 MLP |
| 언어 모델 | 시각 토큰 + 글 토큰을 읽고 답을 생성 | 공개 LLM |
LLaVA로 보기 (Liu 외, 2023)
- 구성: 고정한 CLIP ViT-L/14 비전 인코더 + 학습되는 선형 투영 행렬 + Vicuna 언어 모델.
- 데이터: GPT-4(글 전용)로 만든 이미지-지시 따르기 데이터 158K개(대화 58K, 자세한 설명 23K, 복잡한 추론 77K).
- 1단계 — 특징 정렬: 걸러 낸 이미지-글 쌍 595K개(CC-595K)로, 비전 인코더와 언어 모델을 모두 고정하고 투영 만 학습합니다.
- 2단계 — 끝에서 끝까지 미세조정: 비전 인코더는 고정한 채 투영과 언어 모델을 지시 데이터로 학습합니다.
- 보고된 결과: 합성 멀티모달 지시 데이터에서 GPT-4 대비 상대 점수 85.1%, ScienceQA에서 92.53%를 보고했습니다.
숫자로 해 보기(해설용): 패치 14×14인 ViT-L/14에 224×224 이미지를 넣으면 개, 336×336이면 개 패치 특징이 나옵니다. 이것을 모두 시각 토큰으로 넣으면 이미지 한 장이 언어 모델의 문맥 창을 수백 토큰 차지합니다. 고해상도 · 여러 장 이미지를 다룰수록 토큰 수와 비용이 빠르게 커지는 이유입니다.
왜 두 단계로 나누나: 처음부터 언어 모델까지 같이 움직이면, 아직 엉뚱한 시각 토큰이 잘 학습된 언어 능력을 흔듭니다. 먼저 작은 연결층만 맞춰 "통역"이 되게 한 뒤, 언어 모델을 함께 다듬는 편이 안정적이고 값쌉니다. 전이 학습의 "출력층 먼저, 몸통은 나중에"와 같은 생각입니다.
다른 설계: 시각 토큰을 입력 앞에 붙이는 대신 언어 모델 층 사이에 교차 어텐션으로 시각 정보를 섞는 설계도 있습니다. 로봇 쪽에서는 같은 구조에 "행동"을 출력으로 더한 시각-언어-행동(VLA) 모델로 이어집니다(PaLM-E, RT-2).
4. 한계 · 주의할 점
- 데이터 편향: 인터넷 이미지-글 쌍은 사회적 편향과 잡음을 담고 있어, 제로샷 분류 결과에도 그대로 나타날 수 있습니다.
- 프롬프트 민감도: 같은 클래스라도 문장 틀에 따라 제로샷 정확도가 달라집니다. CLIP 논문은 여러 문장을 앙상블해 점수를 올렸습니다.
- 세밀한 공간 이해: 이미지 전체 벡터 하나로 비교하는 CLIP은 "왼쪽 · 오른쪽", 개수 세기 같은 질문에 약할 수 있습니다. VLM도 시각 토큰 해상도에 따라 작은 글자 · 세부를 놓칩니다.
- 환각: VLM은 이미지에 없는 물체를 그럴듯하게 말하기도 합니다. 중요한 판단에는 출처 확인이 필요합니다.
연습 문제
1. ViT-B/32(패치 32×32)에 224×224 이미지를 넣으면 입력 길이는?
풀이: 이므로 패치 개, [class]를 더해 50입니다.
2. 패치 16×16, 컬러 3채널, (ViT-Large)일 때 패치 임베딩 파라미터 수는?
풀이: 개입니다.
3. CLIP 배치가 32,768쌍이면 이미지 하나당 비교하는 "틀린 글"은 몇 개인가요?
풀이: 개입니다. 배치가 곧 "클래스 32,768개짜리 즉석 분류"가 됩니다.
4. 2절 3×3 예에서 이미지 3과 글 2의 유사도가 0.4에서 0.1로 내려가면 이미지 3 행의 손실은 늘까요, 줄까요?
풀이: 줄어듭니다. 경쟁 로짓이 4에서 1로 내려가 짝(로짓 6)의 확률이 커지기 때문입니다.
스스로 점검
- ViT가 ImageNet만으로 학습했을 때 ResNet보다 낮았던 이유는?
- 답: 지역성 · 이동 등변성 같은 귀납 편향이 구조에 없어 패치 관계를 데이터에서 배워야 하는데, 그 정도 데이터로는 부족했기 때문입니다.
- CLIP 제로샷 분류에서 "분류기의 가중치" 역할을 하는 것은?
- 답: 클래스 이름 문장을 글 인코더로 만든 임베딩들입니다. 이미지 임베딩과의 내적이 곧 클래스 점수입니다.
- LLaVA 1단계에서 투영층만 학습하는 이유는?
- 답: 고정된 두 모델 사이의 "통역"을 먼저 맞춰, 미숙한 시각 토큰이 언어 모델을 망가뜨리지 않게 하기 위해서입니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 비전 트랜스포머(ViT) | 이미지를 패치 토큰으로 잘라 트랜스포머로 처리하는 모델 |
| 패치 임베딩(patch embedding) | 패치를 펼쳐 차원 벡터로 바꾸는 선형층 |
[class] 토큰 | 이미지 전체를 대표하도록 맨 앞에 붙이는 학습 토큰 |
| 위치 임베딩(position embedding) | 토큰의 위치를 알려 주는 학습 벡터 |
| 귀납 편향(inductive bias) | 구조에 미리 넣어 둔 가정(예: 지역성) |
| CLIP | 이미지-글 짝 맞히기로 두 인코더를 같은 공간에 학습한 모델 |
| 대칭 교차 엔트로피 | 이미지→글, 글→이미지 두 방향 손실의 평균 |
| 로짓 스케일 · 온도 | 유사도에 곱하는 값 · 그 역수, 분포의 뾰족함 조절 |
| 제로샷 분류(zero-shot classification) | 해당 클래스 라벨 학습 없이 문장만으로 분류 |
| 시각-언어 모델(VLM) | 이미지와 글을 함께 읽고 글을 생성하는 모델 |
| 연결층 · 투영(projector) | 시각 특징을 언어 모델 임베딩 공간으로 옮기는 층 |
| 시각 토큰(visual token) | 언어 모델에 넣는 이미지 조각 벡터 |
더 깊이 보려면
ViT 논문의 패치 크기 · 데이터 규모 실험과 CLIP 논문의 프롬프트 앙상블 · 분포 변화 실험은 각 논문 해설에서 자세히 다룹니다. D2L의 '비전 트랜스포머' 절은 패치 임베딩을 합성곱으로 구현하는 코드를 제공합니다. VLM은 LLaVA 논문의 데이터 생성 절차(글 전용 GPT-4로 지시 데이터 만들기)를 읽어 보면 이후 모델들의 공통 뼈대를 이해하기 쉽습니다.
다음에 볼 것
- 이미지는 16x16 단어다 (비전 트랜스포머) — ViT 원 논문의 초록 번역과 실험 결과를 자세히 봅니다.
- 자연어 감독으로 시각 모델 학습하기 (CLIP) — CLIP 원 논문의 학습 설정과 제로샷 결과를 자세히 봅니다.
- 직접 해 보기: PyTorch로 합성곱 신경망 학습하기 — 이 트랙의 내용을 코드로 직접 돌려 봅니다.
라이선스
이 글은 원문 번역이 아니라 KAITABASE가 직접 쓴 해설이며, 숫자 예는 설명용입니다(파라미터 수 · 손실 · 확률은 python으로 재확인). 참고 자료 D2L은 CC BY-SA 4.0입니다. 논문 수치는 각 arXiv 원문과 이 사이트의 원 논문 해설(31 · 32)에서 확인한 것만 옮겼습니다.
출처
- 참고: d2l.ai/chapter_attention-mechanisms-and-t… (D2L 비전 트랜스포머)
- 원문: arxiv.org/abs/2010.11929 (2020 · Alexey Dosovitskiy 외, ViT)
- 원문: arxiv.org/abs/2103.00020 (2021 · Alec Radford 외, CLIP)
- 원문: arxiv.org/abs/2304.08485 (2023 · Haotian Liu 외, LLaVA — 구성 · 158K 데이터 · 두 단계 학습 · 85.1% · 92.53%)
AI 원리부터 이해하기 · 딥러닝 기초 모듈
딥러닝 기초 모듈 학습
이 글은 딥러닝 기초 모듈의 학습 자료입니다. 전체 29개 자료 중 23번째입니다.
출처·원문
원문 보기요약만