오늘 끝나면
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의 공통 골격이다