[카테고리 분류] CLIP 이미지 임베딩과 텍스트 임베딩이 따로 군집을 이루는 이유 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. CLIP 모델이란?

a. 무엇을 하는 모델인가?

  • 텍스트(자연어)와 이미지를 모두 같은 “의미 공간”에 임베딩하도록 설계된 멀티모달 모델
  • 예를 들어 “a photo of a cat”라는 문장과 고양이 사진을 각각 512차원 벡터로 바꾼 뒤, 두 벡터를 비교하면 얼마나 잘 어울리는지(유사한지)를 알 수 있음
  • 구성 요소
    1. 텍스트 인코더: Transformer 기반. 입력된 문장을 토큰화→임베딩→어텐션 연산→512차원 벡터로 출력
    2. 이미지 인코더: ViT-B/32(Visual Transformer). 입력된 이미지를 32×32 패치 단위로 나누고, 토큰처럼 처리→512차원 벡터로 출력
    3. 둘 다 출력 차원이 같고, contrastive learning(대비 학습)을 통해 “맞는 쌍은 가깝게, 틀린 쌍은 멀어지게” 학습

2. 이미지 임베딩과 텍스트 임베딩이 완전히 겹치지 않는 이유

빨간색이 이미지, 파란색이 텍스트. 같은 공간에 매핑되지만, 서로 다른 군집을 이룬다.

빨간색이 이미지, 파란색이 텍스트. 같은 공간에 매핑되지만, 서로 다른 군집을 이룬다.

a. 모달리티 갭(Modality Gap)

  • “텍스트용 인코더”와 “이미지용 인코더”가 각각 따로 학습된 뒤, 마지막에 같은 공간으로 정렬된 형태라 두 모달리티가 딱 하나로 겹치지 않음
  • 학습 목표는 “올바른 매칭 쌍(pair)이 다른 쌍보다 상대적으로 더 가깝도록” 하는 것이지, “이미지 벡터 = 텍스트 벡터” 그 자체를 만드는 건 아님

b. Contrastive Loss의 특성

  • 맞는 쌍을 가깝게 뭉치게 하고(positive pair), 틀린 쌍을 멀리 떨어뜨리며(negative pair) Softmax에 온도(temperature)를 조정해 학습
  • 이 과정에서 두 모달리티 간 **일정 수준의 각도(거리)**를 유지하게끔 벡터 분포가 형성.
  • 결과적으로 같은 의미라도 cosine 유사도가 0.3~0.4 정도로 나와도, 다른 “틀린” 텍스트나 이미지들에 비해 높은 값이라는 상대적 의미를 가짐

c. 실제 의미

  • cosine similarity = 0.32라고 해도, “이 이미지와 이 문장이 가장 잘 어울린다”는 순위 판단이 중요
  • 절대값(0.32)을 0.9 같은 절대신뢰도로 해석하면 오해! CLIP에서는 “여러 후보 중 가장 높은 값”이 정답

3. UMAP 등 시각화에서 텍스트·이미지 벡터가 따로 모이는 이유

a. 별도 인코더 기반 임베딩

  • 텍스트와 이미지는 서로 다른 입력 특성을 갖기 때문에, 각 인코더가 만든 벡터가 초기에 다른 분포를 가짐

b. Contrastive 학습만으로 “절대 겹침”을 강제하지 않음

  • positive pair가 서로 가까워지도록만 학습하므로, “텍스트 벡터 전체 분포”와 “이미지 벡터 전체 분포”는 여전히 구분된 클러스터 형태로 남아 있음

c. UMAP 투영 결과

  • 실제로 pre-trained CLIP을 2D로 투영하면, 빨간 점(텍스트)과 파란 점(이미지)이 각각 크게 뭉쳐 있고
  • 그 안에서 회색 선으로 연결된 같은 쌍(pair)끼리는 다른 점들보다 조금 더 가깝지만, 여전히 텍스트·이미지 자체 클러스터가 분리
  • CLIP은 “텍스트와 이미지가 말 그대로 한 점에 겹치도록” 학습된 모델이 아니라, “서로 다른 인코더로 만든 벡터를 상대적으로 정렬한” 모델이기 때문에 나타나는 자연스러운 결과