오늘 끝나면
ViT & CLIP
- ✓ViT & CLIP의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 ViT이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
비전에도 Transformer, 텍스트와 이미지를 하나로 (멀티모달 빅뱅) 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
AI · Day 20 / 표현·멀티모달
이미지를
단어처럼
2020년, 구글이 CNN 없이 Transformer만으로 이미지 처리함. 1년 뒤, OpenAI가 이미지와 텍스트를 같은 공간에 묻은 CLIP 냄. 이 둘이 GPT-4V, Claude Vision으로 이어지는 멀티모달의 출발점임.
CNN 왕조의 8년, 그리고 균열
2012년 AlexNet 이후 비전은 줄곧 CNN의 시대였음. VGG, ResNet, EfficientNet. 근데 ResNet 이후 5년은 1~2%씩 짜내는 개선뿐이었음.
같은 기간 NLP는 RNN 버리고 Transformer로 넘어감. 근데 왜 비전만 아직 CNN임? CNN 핵심은 귀납적 편향(Inductive Bias) 두 가지임.Locality는 이웃 픽셀만 보는 것.Translation Equivariance는 위치 바뀌어도 같은 필터로 잡는 것.
이 편향은 데이터 적을 땐 축복임. 충분하면 오히려 족쇄 됨. 편향 없는 모델이 전역 관계를 처음부터, 스스로 찾으니까. 이게 Sutton의 Bitter Lesson과 정확히 맞물림.
| 데이터 규모 | ResNet | ViT |
|---|---|---|
| ImageNet (1.3M) | 이김 | 짐 |
| ImageNet-21k (14M) | 비등 | 비등 |
| JFT-300M (303M) | 짐 | 이김 |
편향은 데이터가 적을 때 축복, 충분하면 족쇄가 된다
이미지를 패치로 잘라 문장처럼
ViT 아이디어는 당황스러울 만큼 단순함. 224×224 이미지를 16×16 패치로 자르면 14×14=196개 됨. 이게 바로 "단어 196개짜리 문장"임.
각 패치를 Linear Projection으로 D차원 벡터로 바꿈. 순서 정보 넣으려고 Position Embedding 더함. 맨 앞엔 BERT에서 빌려온 [CLS] 토큰 붙임. 그다음은 그냥 표준 Transformer Encoder임. BERT랑 거의 똑같음.
충격은 결과였음. ImageNet(1.3M)에선 ResNet이 이김. 근데 JFT-300M(3억 장)에선 ViT가 역전함. 편향이 약한 대신, 데이터 충분하면 스스로 최적 구조 배운 거임.
이미지 = 단어 196개의 문장. 첫 layer부터 전역 Attention
CLIP: 자연어를 라벨로 삼다
OpenAI는 더 근본적인 질문 던짐. "왜 이미지를 미리 정한 1,000개 클래스에 욱여넣음? 자연어로 모든 개념 말할 수 있는데."
그래서 인터넷에서 이미지-텍스트 쌍 4억 개 긁어모음. 이미지 인코더(ViT)와 텍스트 인코더를 같은 공간에 투사함.같은 쌍은 가까이, 다른 쌍은 멀리 당기는 Contrastive Learning임. 배치 안에서 맞는 텍스트 고르는 N-way 분류임.
파이썬 코드 보기
# CLIP Contrastive Loss (의사코드) I = ImageEncoder(images) # [N, D] T = TextEncoder(texts) # [N, D] I = normalize(I); T = normalize(T) logits = I @ T.T / tau # 온도 tau labels = arange(N) # 정답은 대각선 loss_i = cross_entropy(logits, labels) loss_t = cross_entropy(logits.T, labels) loss = (loss_i + loss_t) / 2
N×N 유사도 행렬에서 대각선만 정답임. 이미지→텍스트, 텍스트→이미지 양방향으로 학습함.
대각선(같은 쌍)은 당기고 나머지는 밀어낸다 — InfoNCE
Zero-shot이라는 마법
CLIP이 배운 건 "이미지 임베딩 ↔ 텍스트 임베딩 정렬"뿐임. 그래서 추론도 단순함. 클래스 이름을 a photo of a {class} 템플릿에 넣고, 이미지와 코사인 유사도 제일 높은 텍스트 고름.
이 모델은 "개", "고양이"를 직접 학습한 적 없음. 그냥 인터넷에서 그 단어와 그 이미지가 자주 같이 떠서, 임베딩 공간에서 가까워졌을 뿐임. 이게 Zero-shot의 본질임.
충격은 숫자로 옴. ResNet-50을 ImageNet에서 지도학습하면 정확도 76.1%. CLIP은 ImageNet 본 적도 없이 Zero-shot으로 76.2% 냄. 자연어가 1,000개 인덱스를 대체하니, 클래스가 무한히 늘어남.
Q. CLIP이 Zero-shot 분류를 할 수 있는 이유를 한 문장으로?
이미지 임베딩과 텍스트 임베딩을 같은 공간에 정렬해서임. 학습 때 본 적 없는 클래스도 a photo of a {class} 텍스트와 이미지의 코사인 유사도만 계산하면 바로 분류됨.모달리티는 같은 공간의 다른 언어
CLIP 이후 멀티모달 LLM은 다 비슷한 구조 공유함. LLaVA가 제일 이해하기 쉬움.CLIP Vision Encoder로 이미지 특징 뽑고,Linear Projection으로 LLM 토큰 공간에 투사함. 그럼 LLM은 그냥 긴 시퀀스로 처리함.
결국 VLM은 "이미지를 LLM이 알아듣는 언어로 번역"하는 거임. 그 번역기 뿌리가 CLIP임. 이미지든 오디오든 비디오든, 벡터 공간에 투사하면 LLM이 처리함. 2026년 현재 Frontier LLM은 거의 다 멀티모달이 기본임. 텍스트 전용은 legacy임.
비즈니스 워크플로우도 명확해짐. 라벨 없이 CLIP Zero-shot으로 프로토타입 띄움. 정확도 부족하면 수백 장만 라벨링해 Pretrained ViT를 Fine-tune함. 자연어 설명 필요하면 Claude Vision 붙임. 이제 처음부터 scratch로 학습하는 경우는 거의 없음.
Q. 신규 상품 이미지 자동 태깅 시스템, 어떤 순서로?
① CLIP Zero-shot으로 라벨 0장 프로토타입 → ② Pretrained ViT Fine-tuning(수백 장)으로 정확도 보강 → ③ VLM(Claude Vision)으로 상세 설명·예외 처리. 정확도·비용·시간 trade-off를 단계로 쪼개는 게 핵심임.Vision Encoder + Connector + LLM — 모든 VLM의 공통 골격