GPT가 NLP를 바꾼 것처럼, 이미지도 그렇게 되면 어떨까
2021년 초 OpenAI가 발표한 CLIP(Contrastive Language-Image Pre-training)은 "이미지를 텍스트로 감독한다"는 아이디어 하나로 컴퓨터 비전의 패러다임을 뒤흔든 논문이다. 훈련할 때 단 한 번도 본 적 없는 데이터셋에서, 클래스 이름 하나 보여줬더니 ResNet-50 수준의 정확도가 나왔다. 별도의 파인튜닝도 없이.
배경부터 짚어보자. GPT 계열이 NLP에서 성공한 방식은 단순하다. 인터넷에 쌓인 텍스트를 그냥 다 먹인다. 레이블 필요 없고, 작업에 맞게 데이터를 따로 구축할 필요도 없다. 반면 당시 컴퓨터 비전은 여전히 ImageNet 같은 사람이 일일이 붙인 레이블에 의존하고 있었다. 기존 비전 모델은 딱 정해진 1000개 클래스 시험만 준비하는 학생이었다. 새로운 게 나타나면 모델은 바보가 되고, 뭔가 가르치려면 데이터셋을 새로 만들고 분류기를 뜯어고쳐야 했다. CLIP의 출발점은 여기서 나온다.
왜 Contrastive인가 - 학습 방식 선택의 이유
처음부터 대조 학습을 선택한 건 아니었다. 처음엔 이미지 CNN과 텍스트 트랜스포머를 같이 학습시켜 이미지 캡션을 예측하는 방식(VirTex 스타일)을 시도했다. 결과는 실망스러웠는데, 같은 이미지에 달리는 텍스트가 너무 다양하기 때문이다. "강아지 사진"이라고 레이블 붙인 이미지에 "우리 강아지 귀엽지", "공원 산책", "오늘 날씨 좋다" 같은 텍스트가 모두 달릴 수 있다. 정확한 단어 예측은 너무 어렵고 비효율적인 과제였다.
대신 선택한 것이 훨씬 단순한 질문이다. "이 이미지와 저 텍스트, 쌍이 맞나요?" 배치 안의 N개 이미지와 N개 텍스트가 있으면, 맞는 쌍 N개를 찾아내는 N×N짜리 매칭 문제다. 이를 대조 목적함수로 풀었고, 아래 그래프가 그 결과를 잘 보여준다.
Figure 2. 캡션 예측 방식 대비 대조 학습이 3~4배 효율적이다. Transformer 언어 모델 → BoW 예측 → CLIP 순으로 드라마틱하게 효율이 뛴다.
캡션 예측 대비 4배 효율이 높아진 배경은 과제의 난이도 차이에 있다. 이미지에 어떤 단어가 올지 맞추는 건 무한한 경우의 수가 있지만, "이 이미지-텍스트 쌍이 맞냐"는 배치 내 N×N 중 선택하는 문제다. 훨씬 단순하고 명확한 감독 신호가 된다.
Figure 1. CLIP 전체 파이프라인. 사전 학습(대조 학습) → 텍스트로 분류기 생성 → Zero-shot 예측 세 단계로 구성된다.
학습할 때마다 배치 안의 N개 이미지와 N개 텍스트 사이에서 맞는 쌍(대각선)은 유사도를 최대화하고, N²-N개의 오답 쌍은 유사도를 최소화한다. 이미지 방향 손실과 텍스트 방향 손실을 각각 구해서 평균낸 대칭 크로스 엔트로피 손실이 최종 목적함수다. 배치 크기가 32,768이라는 건 한 번 학습할 때 무려 10억 개가 넘는 부정 쌍을 처리한다는 뜻이다.
실제 구현을 보면 개념이 더 명확해진다.
Figure 3. CLIP 핵심 구현 pseudocode. 두 인코더로 피처를 뽑고, L2 정규화 후 코사인 유사도를 구한 뒤 대칭 손실을 계산한다.
코드에서 눈에 띄는 건 np.exp(t)로 스케일링되는 온도 파라미터다. 일반적으로 이 값은 고정 하이퍼파라미터로 다루는데, CLIP은 이걸 학습 가능한 파라미터로 설정했다. 데이터셋 규모가 4억 쌍에 달하다 보니 어떤 값이 적절한지 사전에 알기 어렵고, 학습 초기와 후기의 표현 분포도 달라진다. 그냥 학습이 알아서 찾도록 맡긴 거다. 단, 학습 불안정을 막기 위해 logit scaling이 100을 넘지 않도록 클리핑했다.
두 가지 인코더 - 이미지는 ResNet과 ViT, 텍스트는 Transformer
이미지 인코더
이미지 인코더로는 ResNet과 ViT 두 계열을 모두 실험했다. ResNet 버전에서 가장 눈에 띄는 변경은 기존 글로벌 평균 풀링을 어텐션 풀링으로 교체한 점이다. 기존 글로벌 평균 풀링이 사진 속 구역을 기계적으로 n등분해서 평균 내는 방식이라면, 어텐션 풀링은 전체 맥락을 파악한 뒤 핵심 피사체가 있는 구역에 가중치를 집중하는 방식이다. 이미지 전체의 평균 풀링값을 쿼리로 삼아 single-layer multi-head QKV 어텐션을 수행하는 구조인데, 텍스트와 의미를 맞춰야 하는 CLIP에서 묻히기 쉬운 핵심 피사체를 더 잘 포착하게 해준다.
스케일링 방식도 다르다. ResNet의 경우 너비, 깊이, 해상도를 동시에 늘리는 EfficientNet 스타일을 채택했다. RN50x4, RN50x16, RN50x64는 각각 ResNet-50 기준 약 4배, 16배, 64배 연산량을 쓴다. 반면 텍스트 인코더는 깊이는 그대로 두고 너비만 ResNet 비율에 맞춰 늘렸다. CLIP 성능이 텍스트 인코더 용량에는 덜 민감하다는 걸 실험으로 확인했기 때문이다.
텍스트 인코더
기본 설정은 GPT-2 스타일 트랜스포머(12-layer, 512-wide, 8 attention heads, 6300만 파라미터)다. 입력은 소문자화된 BPE 토큰으로 어휘 크기 49,152개, 최대 시퀀스 길이 76이다. 앞뒤에 [SOS], [EOS] 토큰을 붙이고 [EOS] 위치의 최상층 출력값을 텍스트 표현으로 사용한다. 마스크드 셀프-어텐션을 쓴 건 나중에 사전 학습된 언어 모델로 초기화하거나 언어 모델링을 보조 목적으로 추가할 여지를 남기기 위해서다.
두 인코더의 출력은 각각 선형 프로젝션을 통해 같은 차원의 멀티모달 임베딩 공간으로 매핑된 뒤 L2 정규화된다. SimCLR에서 성능을 높여준다고 알려진 비선형 프로젝션을 쓰지 않았는데, 선형 프로젝션만 써봤더니 차이가 없었다. 비선형 프로젝션이 이미지-only 자기지도 학습의 특정 세부사항과 결합되어 작동하는 것이지 일반적으로 필요한 건 아닐 거라고 봤다.
데이터셋 WIT - 400만이 아니라 4억 쌍
기존에 널리 쓰이던 MS-COCO와 Visual Genome은 각각 약 10만 장의 고품질 데이터셋이다. YFCC100M은 1억 장이지만 필터링하면 1500만 장으로 쪼그라든다. ImageNet 규모랑 비슷하다. CLIP의 핵심 주장 중 하나는 이런 제한된 데이터로는 자연어 지도 학습의 잠재력을 과소평가하게 된다는 것이다.
그래서 인터넷에서 직접 긁어 만든 WIT(WebImageText) 데이터셋을 구축했다. 영어 위키피디아에 최소 100번 이상 등장하는 단어들과 그 bigram 조합, 위키피디아 문서 제목, WordNet synset까지 포함해 50만 개 쿼리를 만들고, 텍스트에 이 쿼리 중 하나가 등장하는 이미지-텍스트 쌍을 수집했다. 쿼리당 최대 2만 쌍으로 클래스 밸런싱도 했다. 결국 4억 개의 이미지-텍스트 쌍이 모였다.
Zero-Shot Transfer - 새 태스크에 파인튜닝 없이 적용하기
CLIP의 가장 매력적인 기능이 여기서 나온다. 학습이 끝난 모델을 새로운 분류 태스크에 적용하려면? 그냥 클래스 이름을 텍스트로 넣으면 된다. 테스트할 데이터셋의 클래스 이름들을 텍스트 인코더에 넣어 임베딩을 뽑아 캐시해두고, 새 이미지가 들어오면 이미지 임베딩을 뽑아 코사인 유사도를 계산한다. τ로 스케일링하고 softmax를 취하면 각 클래스에 대한 확률 분포가 나온다.
이걸 다른 각도로 해석하면, 텍스트 인코더가 일종의 하이퍼네트워크 역할을 한다. 클래스 이름이라는 텍스트 설명을 받아서 그 클래스를 인식하는 선형 분류기의 가중치를 실시간으로 생성하는 것이다. 매 예측마다 텍스트 인코더를 다시 돌릴 필요 없이 임베딩을 캐시해두고 재사용하면 되므로, 사실상 제로 추가 비용으로 완전히 새로운 분류 태스크에 적용할 수 있다.
Prompt Engineering과 앙상블
zero-shot 성능을 올리는 데 생각보다 중요한 부분이 있는데, 클래스 이름을 어떻게 텍스트로 표현하느냐다. 문제가 두 가지 있다. 첫째, 다의어 문제. "crane"이라고 쓰면 공사용 크레인인지 두루미인지 텍스트 인코더가 구분 못 한다. ImageNet에는 실제로 이 두 가지가 다른 클래스로 들어가 있다. 둘째, 학습 데이터에서 이미지와 함께 나오는 텍스트는 거의 완전한 문장이지 단어 하나짜리가 아니다. 클래스 이름 하나만 쓰면 사전 학습 때 본 텍스트 분포와 괴리가 생긴다.
가장 간단하고 효과적인 해결책이 "A photo of a {label}." 템플릿이다. 이것만으로 ImageNet에서 1.3%가 오른다. 태스크에 맞는 문맥을 더하면 추가로 좋아진다. 여기서 한 발 더 나아가 "A photo of a big {label}", "A photo of a small {label}" 같이 다양한 프롬프트를 여러 개 만들어 각각의 텍스트 임베딩을 뽑은 뒤 평균을 낸다. 확률 공간이 아니라 임베딩 공간에서 평균 내는 게 포인트다. ImageNet에서 80개 프롬프트 앙상블하면 3.5%가 더 오르고, prompt engineering + 앙상블 합산 효과가 약 5%인데 컴퓨팅을 4배 더 쓰는 것과 맞먹는다.
Figure 4. Prompt engineering + 앙상블 효과. 클래스 이름만 쓸 때(파란선) 대비 약 5% 향상이 있고, 이는 컴퓨팅 4배 추가와 동등하다.
기존 Zero-Shot 방법과 비교
Table 1. Visual N-Grams vs CLIP. ImageNet에서 11.5% → 76.2%로 껑충 뛴다.
이전에 zero-shot 이미지 분류를 시도했던 Visual N-Grams는 ImageNet에서 11.5%였다. CLIP은 76.2%다. 64년의 차이가 있는 두 방법을 단순 비교하는 건 무리지만, 자연어 지도 학습의 효과가 어느 정도인지 감을 잡는 데 도움이 된다. CLIP은 ImageNet 학습 예제 128만 장을 단 한 장도 보지 않고도 완전 지도 학습된 ResNet-50과 동등한 성능을 냈다.
Zero-Shot CLIP vs. Linear Probe on ResNet50
Figure 5. 27개 데이터셋에서 Zero-Shot CLIP vs. Linear Probe ResNet50 비교. 16개 데이터셋에서 zero-shot이 이긴다.
27개 데이터셋에서 zero-shot CLIP과 ResNet-50 피처 위에 훈련한 선형 분류기를 비교했을 때, 16개에서 zero-shot이 앞선다. Stanford Cars, Food101에서는 20% 이상 차이가 나는 반면, EuroSAT이나 KITTI Distance 같은 특수 도메인에서는 30-37% 뒤처진다. 자연어로 잘 표현되는 개념(자동차 모델, 음식 종류)은 잘 학습되고, 위성 이미지나 특정 센서 데이터처럼 인터넷 텍스트에 드문 도메인은 약하다는 패턴이 보인다.
Zero-Shot vs. Few-Shot - 직관에 반하는 결과
Figure 6. Zero-shot CLIP이 4-shot linear probe와 비슷하고, 16-shot best 모델(BiT-M)에 근접한다.
CLIP의 zero-shot 분류는 동일한 CLIP 피처 위에 훈련한 4-shot 선형 분류기와 비슷한 성능을 낸다. 직관적으로는 예제가 하나라도 있으면 zero-shot보다 나아야 할 것 같은데, 1-shot은 오히려 낮다.
이유는 과제 방식의 차이에 있다. Zero-shot CLIP 분류기는 자연어로 시각 개념을 직접 지정한다. "A photo of a dog." 하면 모델이 뭘 찾아야 하는지 명확히 안다. 반면 few-shot 선형 분류기는 예제를 보고 개념을 간접적으로 추론해야 한다. 이미지 하나에는 여러 시각 개념이 뒤섞여 있어서, 예제만 봐서는 어떤 특징을 학습해야 하는지 모호하다. Shot 수가 늘어날수록 격차는 좁혀지고, 완전 지도 학습으로 가면 이 역전 효과는 사라진다.
스케일링 - 더 큰 모델이 일관되게 좋아지는가
Figure 9. 모델 연산량(GFLOPs)이 44배 증가하는 구간에서 zero-shot 에러가 log-log 선형으로 일관되게 감소한다.
GPT 계열에서 관찰된 것처럼, CLIP에서도 연산량이 늘어날수록 성능이 예측 가능하게 좋아지는 스케일링 법칙이 성립한다. RN50에서 RN50x64까지 44배 범위에서 log-log 선형 추세가 유지된다. 다만 개별 태스크에서는 노이즈가 꽤 크다. 전체 평균은 매끄럽지만 특정 데이터셋에서는 비단조적으로 움직이기도 해서, 스케일링이 만병통치약은 아니라는 걸 보여준다.
Representation Learning 비교
Figure 10. Linear probe 성능 종합 비교. 왼쪽은 Kornblith et al. 12개 데이터셋, 오른쪽은 27개 데이터셋. CLIP-ViT(빨간 별)가 전반적으로 앞선다.
피처 품질을 평가하는 linear probe 비교에서, 작은 CLIP 모델들은 ImageNet-1K로 학습된 ResNet보다는 좋지만 ImageNet-21K BiT-M이나 EfficientNet 계열보다는 아래다. 하지만 가장 큰 모델인 RN50x64와 ViT-L/14는 당시 공개 모델 중 최고 성능인 Noisy Student EfficientNet-L2를 12개 데이터셋 기준 2.6%, 27개 데이터셋 기준 5% 앞선다.
특히 주목할 건 CLIP ViT가 같은 CLIP ResNet보다 연산 대비 효율이 약 3배 높다는 점이다. 충분히 큰 데이터셋으로 학습하면 ViT가 ConvNet보다 연산 효율이 높다는 ViT 논문의 주장을 비전-언어 도메인에서 재확인한 셈이다. 최종 CLIP 기본 모델로 ViT-L/14@336px를 선택한 이유다.
Distribution Shift에 강하다
Figure 13. Zero-shot CLIP은 동일 ImageNet 정확도(76.2%)의 ResNet-101 대비 자연 분포 이동 상황에서 훨씬 강건하다. 바나나 예시로 직관적으로 보여준다.
ImageNet으로 훈련된 모델은 ImageNet에서 저지르는 실수보다 5배나 많은 실수를 자연 분포 이동 데이터셋에서 저지른다. Zero-shot CLIP은 전혀 다른 그림이다. ImageNet 정확도는 ResNet-101과 같은 76.2%인데, ImageNet-Rendition(스케치/그림 등 렌더링 스타일 변형)에서 ResNet-101이 37.7%일 때 CLIP은 88.9%다. ImageNet-A(어드버서리얼)에서는 2.7% vs 77.1%다.
이유는 단순하다. 특정 데이터셋에 맞춰 훈련하지 않으면 그 데이터셋에만 작동하는 spurious correlation을 학습할 수 없다. 인터넷에서 온 방대하고 다양한 데이터로 학습했기 때문에 특정 도메인에 과적합되지 않은 것이다. 단, 사전 학습 데이터 자체가 평가 분포와 겹치는 부분이 있을 수도 있어서 논문에서도 조심스럽게 짚고 넘어간다.
Figure 14. ImageNet에 적응시키면 정확도는 9.2% 오르지만 평균 분포 이동 성능은 오히려 소폭 내려간다.
흥미로운 실험이 하나 더 있다. Zero-shot CLIP을 ImageNet에 맞게 선형 분류기로 적응시키면 ImageNet 정확도는 9.2% 올라 85.4%가 된다. 3년치 SOTA 발전에 맞먹는 수치다. 그런데 평균 분포 이동 성능은 오히려 소폭 내려간다. 정확도가 9.2%나 올랐는데 로버스트니스는 개선이 없다. 특정 분포에 적응하는 순간, 분포 이동 저항성이 희생되기 시작한다는 걸 잘 보여준다.
인간과의 비교
Table 2. Oxford IIT Pets 데이터셋에서 인간 vs CLIP 비교. Zero-shot에서 CLIP이 오히려 앞선다.
Figure 16. 37개 품종별 난이도. CLIP에게 어려운 품종은 인간에게도 어렵다는 패턴이 보인다.
Oxford IIT Pets 데이터셋에서 5명의 인간 평가자와 CLIP을 직접 비교했다. Zero-shot 상황(힌트 없이 37개 품종 중 선택)에서 인간 평균이 54%, CLIP이 93.5%다. 인간은 예제 1장만 보여주면 54%에서 76%로 급등하는데, CLIP은 이 "few-shot 갱신" 능력이 없다. 인간은 모르는 걸 알고, 하나 보면 업데이트하는데, 현재 방식의 CLIP에는 그게 없다는 차이다.
품종별 난이도를 보면 흥미롭게도 CLIP에게 어려운 품종은 인간에게도 어렵다. 데이터셋 노이즈(잘못 레이블된 이미지)와 분포 외 이미지가 공통 어려움의 원인으로 추정된다.
데이터 오염 분석
Figure 17. 평가 데이터셋과 사전 학습 데이터 간 중복 분석. 대부분 단 자릿수 %로 적고, 전체 정확도에 미치는 영향도 미미하다.
4억 쌍 인터넷 데이터로 학습하다 보니 평가 데이터와 겹치는 부분이 있을 수 있다. 논문에서 직접 중복 분석을 했는데, 중간값 2.2%, 평균 3.2% 수준이다. 이 중복 때문에 전체 정확도가 오르는 경우는 드물고, 가장 큰 영향도 Birdsnap에서 0.6% 향상이 전부다. 통계적으로 유의미한 경우도 35개 데이터셋 중 2개뿐이었다.
사회적 영향 - 논문이 직접 파고든 내용
Table 6. 범죄 관련 레이블과 비인간 레이블로의 오분류율. 비인간 오분류는 흑인 이미지에서 14.4%로 가장 높다.
CLIP 논문은 AI 논문 중에서도 사회적 영향 분석에 진지하게 공간을 할애했다. FairFace 데이터셋으로 bias probe를 했는데, "gorilla", "chimpanzee", "thief", "criminal" 같은 레이블을 동시에 주고 분류하게 했을 때 흑인 이미지에서 비인간 카테고리로 잘못 분류되는 비율이 14.4%로 다른 인종보다 훨씬 높다. 범죄 관련 레이블 오분류 역시 인종 간 격차가 크게 나타난다.
Figure 18. 국회의원 이미지에서 성별에 따른 레이블 분포. 여성에게는 외모 관련, 남성에게는 직업·지위 관련 레이블이 더 많이 붙는다.
성별 편향도 나타난다. 국회의원 이미지를 분류했을 때, 여성 이미지에는 외모 관련 레이블(blonde, bob cut, blouse 등)이, 남성 이미지에는 지위·직업 관련 레이블(suit, military officer, executive 등)이 더 많이 붙는다. 인터넷 텍스트가 담고 있는 사회의 편견을 그대로 학습한 결과다.
클래스 설계(class design)가 편향 발현에 결정적이라는 점도 짚었다. "child" 카테고리를 추가하는 것만으로 0-20세 이미지의 범죄 관련 오분류율이 극적으로 떨어졌다. 누가 어떤 클래스를 정의하느냐에 따라 모델의 사회적 영향이 달라진다는 건 CLIP처럼 zero-shot 분류기를 누구나 쉽게 만들 수 있는 모델에서 특히 중요한 문제다.
한계 - 솔직하게 쓴 섹션
논문 6섹션에서 저자들이 한계를 꽤 솔직하게 나열했다. MNIST에서 88%다. 그냥 픽셀에 로지스틱 회귀를 돌린 것보다도 낮다. 사전 학습 데이터에 손글씨 숫자 이미지가 거의 없기 때문이다. CLIP의 전략은 데이터를 충분히 다양하게 모으면 모든 데이터가 사실상 in-distribution이 된다는 가정인데, MNIST가 그 반례를 잘 보여준다.
fine-grained 분류, 객체 수 세기, 거리 추정 등 추상적이고 체계적인 태스크에서도 약하다. 이미지 하나당 초당 1쌍씩 봐도 400년이 걸리는 규모를 학습했는데도 저자들 추산에 따르면 zero-shot CLIP이 전체 state-of-the-art 성능에 달하려면 연산량이 지금의 1000배가 필요하다.
또 zero-shot에서 few-shot으로 넘어갈 때 성능이 역전되는 현상도 한계로 꼽힌다. Zero-shot의 강점(자연어로 직접 전달)과 few-shot의 강점(구체적 예제)을 잘 결합하는 방법이 없다는 뜻이다. 이 격차를 좁히는 연구가 이후 큰 방향 중 하나가 됐다.
이후 영향 - CLIP 이후의 세계
이 논문 자체도 중요하지만, CLIP이 이후 얼마나 널리 쓰이게 됐는지가 더 놀랍다. DALL-E 2(unCLIP이라고도 부른다)는 CLIP 임베딩 공간에서 직접 이미지를 생성한다. Stable Diffusion의 텍스트 조건화도 CLIP 텍스트 인코더에 기반한다. 즉, 오늘날 텍스트-이미지 생성 모델들의 근간에 CLIP이 있다. 검색, 추천 시스템, 멀티모달 모델까지 영향이 미치지 않는 곳이 없을 정도다.
방법론 면에서도 의미가 크다. "사전 정의된 클래스 없이 자연어로 감독한다"는 아이디어는 이후 ALIGN, Florence, OpenCLIP, SigLIP 등으로 이어졌고, 언어-비전 정렬 자체를 연구 주제로 만들었다. CLIP의 한계였던 zero-to-few-shot 전환 문제는 CoOp, CoCoOp, Tip-Adapter 같은 prompt tuning 계열 연구들이 파고들었고, MNIST 같은 도메인 외 데이터 문제는 더 다양한 사전 학습 데이터를 구축하는 방향과 self-supervised 방식을 결합하는 방향으로 이어졌다. 여러 의미에서 현대 멀티모달 AI의 출발점이 된 논문이다.
'AI Paper > Architecture & Foundation' 카테고리의 다른 글
| [논문 리뷰] Attention Is All You Need (0) | 2026.06.30 |
|---|