CLIP은 레이블이 아닌 캡션으로부터 학습한다 — 두 개의 인코더, 하나의 공유 공간, 그리고 대각선이 승리해야 하는 N×N 행렬
요약
CLIP은 고정된 레이블 대신 웹상의 이미지-캡션 쌍을 활용하여 대조 학습(Contrastive Learning)을 수행하는 모델입니다. 두 개의 인코더를 하나의 공유 임베딩 공간으로 정렬하여 이미지와 텍스트 간의 유사도를 극대화하는 원리를 설명합니다.
핵심 포인트
- 이미지와 텍스트를 동일한 임베딩 공간으로 매핑하는 두 개의 인코더 구조
- N×N 유사도 행렬의 대각선 요소를 최대화하는 대조 학습 방식
- 별도의 레이블링 없이 배치 내 다른 항목을 네거티브 샘플로 활용
- 학습 가능한 온도(Temperature) 파라미터를 통한 소프트맥스 스케일링
이미지 분류기(image classifier)를 일반적인 방식으로 학습시키면 고정된 레이블 목록에 갇히게 됩니다. CLIP은 이를 탈피합니다. 레이블 대신 CLIP은 웹상에 이미 수억 개(약 4억 개) 존재하는 가공되지 않은 (이미지, 캡션) 쌍인 _캡션(captions)_으로부터 학습합니다. 이는 두 개의 인코더를 동시에 학습시켜 이미지와 그 캡션이 하나의 공유 공간(shared space) 내의 동일한 지점에 위치하도록 만듭니다. 수작업으로 레이블링된 클래스는 전혀 없습니다. 캡션 _자체_가 지도(supervision) 역할을 합니다. 구성 요소별로 구축된 핵심 아이디어는 다음과 같습니다.
하나의 공간으로 향하는 두 개의 인코더
이미지 인코더(ViT 또는 ResNet)와 텍스트 인코더(transformer)가 있습니다. 각 인코더는 입력을 벡터로 매핑하며, 두 인코더 모두 동일한 임베딩 공간(embedding space)으로 L2 정규화(L2-normalized)됩니다. 따라서 유사도는 단순히 코사인(cosine) 유사도가 됩니다. 두 타워(towers) 사이에는 그들이 목표로 하는 공간 외에는 공유되는 것이 없습니다. 내부 구조의 크기가 같을 필요도 없으며, 마지막에 동일한 차원으로 투영(project)되기만 하면 됩니다. 학습 신호(training signal)는 이미지와 그 캡션을 동일한 위치로 강제하는 동시에, 서로 다른 개념들은 멀리 떨어뜨려 놓습니다. 학습되지 않은 상태에서 벡터는 노이즈에 불과하지만, 학습이 완료되면 각 이미지는 자신의 캡션 위에 놓이게 됩니다.
N×N 유사도 행렬
N개의 (이미지, 캡션) 쌍의 배치를 가져옵니다. N개의 이미지와 N개의 캡션을 모두 임베딩한 다음, 모든 이미지와 모든 캡션 사이의 코사인 유사도로 N×N 행렬을 형성합니다. 이 N²개의 셀 중 정확히 N개는 실제 쌍이며, 이들은 대각선(diagonal) 상에 위치합니다. 나머지 N²−N개의 셀은 불일치하는 항목, 즉 네거티브(negatives)입니다. 전체 손실(loss)은 이 행렬 안에 존재합니다.
대조 학습 손실(Contrastive loss): 대각선이 승리하게 만들기
손실 함수를 정의하는 것은 매우 간단합니다. 각 대각선 셀이 해당 행(row)과 열(column)에서 가장 큰 값이 되도록 만드는 것입니다. 각 이미지를 자신의 캡션 쪽으로는 끌어당기고, 배치 내의 다른 모든 캡션으로부터는 대칭적으로 밀어냅니다. 이는 행(이미지→캡션)에 대한 소프트맥스 교차 엔트로피(softmax cross-entropy)와 열(캡션→이미지)에 대한 소프트맥스 교차 엔트로피를 각각 계산하여 평균을 낸 방식입니다. 배치 크기가 커질수록 단계당 네거티브(negatives)가 많아지며, 이것이 CLIP이 거대한 배치 크기를 원했던 주요 이유 중 하나입니다. 학습이 진행됨에 따라 대각선은 뜨거워지고(값이 커지고) 손실은 떨어집니다.
여기에는 우아함이 있습니다. 배치(batch) 내의 다른 항목들이 공짜로 네거티브(negatives)가 되어준다는 점입니다. 하드 네거티브(hard negatives)를 따로 찾아내거나 무엇인가를 "틀렸다"라고 레이블링할 필요가 없습니다. 동일한 배치 내의 일치하지 않는 모든 캡션(caption)은 자동으로 이 이미지가 멀리 떨어져 있어야 할 대상이 됩니다. 이것이 바로 별도의 어노테이션 파이프라인(annotation pipeline) 없이도 4억 개의 웹 쌍(web pairs)까지 목적 함수(objective)를 확장할 수 있게 만드는 핵심입니다.
온도 (Temperature)
소프트맥스(softmax)를 적용하기 전에, 유사도(similarities)는 학습 가능한 온도 $\tau$에 의해 스케일링됩니다 (로짓 스케일(logit scale)은 $1/\tau$입니다). $\tau$가 낮을수록 소프트맥스가 날카로워지며 네거티브를 더 강하게 밀어냅니다. 하지만 너무 낮으면 학습이 불안정해집니다. CLIP은 $\tau$를 고정하는 대신 직접 _학습_하며, 안전한 범위 내로 클램핑(clamping)합니다. 이는 대각선 요소가 자신의 행과 열에 있는 다른 모든 요소들을 얼마나 공격적으로 이겨내야 하는지를 제어하는 하나의 스칼라(scalar) 역할을 합니다.
공짜로 얻는 제로샷 분류 (Zero-shot classification)
이것이 바로 보상입니다. 한 번도 학습해 본 적 없는 레이블(labels)을 사용하여 완전히 새로운 이미지를 분류하려면, 각 레이블을 문장으로 작성하면 됩니다. 예를 들어 "고양이 사진(a photo of a cat)", "강아지 사진(a photo of a dog)"와 같이 작성한 뒤, 텍스트 타워(text tower)로 해당 프롬프트(prompts)를 인코딩하고 이미지 타워(image tower)로 이미지를 인코딩하여 가장 가까운 캡션을 선택하면 됩니다. 분류기 헤드(classifier head)도, 파인튜닝(fine-tuning)도, 그래디언트 단계(gradient step)도 필요 없습니다. 다른 레이블 세트로 교체하기만 하면 공짜로 다른 분류기를 얻게 되는 셈입니다. 동일한 공유 공간(shared space)은 이미지$\leftrightarrow$텍스트 검색(retrieval)을 직접적으로 가능하게 하며, CLIP의 텍스트 인코더는 Stable Diffusion과 DALL·E 2의 조건부 생성(conditioning)을 담당하고 오픈 보캐블러리(open-vocabulary) 탐지 및 세그멘테이션(segmentation)의 동력이 됩니다.
캡션이 고정된 레이블 세트보다 나은 이유
고정된 분류기는 오직 학습된 클래스 중 하나만을 말할 수 있지만, CLIP은 당신이 쓸 수 있는 어떠한 텍스트라도 점수를 매길 수 있습니다. 이는 작업의 한계치(ceiling)를 뒤집어 놓았습니다. 새로운 카테고리는 새로운 학습 과정이 아니라 새로운 문장이 됩니다. 이것이 바로 캡션을 감독 신호(supervision)로 사용하는 아이디어가 멀티모달 머신러닝(multimodal ML)의 많은 부분을 재편한 이유입니다. 다만, 품질이 프롬프트 문구(예: 단순 레이블보다는 "a photo of a {label}"이 더 효과적임)에 의존한다는 점과, 웹의 캡션이 무엇을 다루고 있는지에 따라 결정된다는 점이 비용으로 작용하며, 이것이 곧 CLIP의 사각지대(blind spots)가 발생하는 지점이기도 합니다.
토이 배치(toy batch)를 학습시키고, 손실(loss)이 떨어짐에 따라 대각선이 밝게 빛나는 것을 관찰하며, 제로샷 분류기를 실시간으로 실행해 보세요:
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기