멀티모달 AI는 이미지, 텍스트, 음성처럼 서로 다른 형태의 데이터를 함께 다루는 AI이다. 예를 들어, 이미지와 텍스트를 함께 다루는 경우, 사진과 문장을 비교하고 모델은 이미지와 각 문장이 얼마나 잘 맞는지 계산할 수 있다.
CLIP은 이미지와 텍스트를 같은 벡터 공간에서 비교하는 모델이다. 즉, 이미지는 Image Encoder에 넣고, 텍스트는 Text Encoder에 넣어서 각각 embedding vector로 만든다. 그 다음 두 벡터가 얼마나 가까운지 비교하여 이미지와 문장의 의미가 잘 맞으면 두 벡터가 가까워지고, 의미가 다르면 멀어진다.

이때 중요한 것은 Image Encoder와 Text Encoder의 출력은 같은 차원이어야 한다. CLIP은 Image Encoder가 만든 이미지 embedding과 Text Encoder가 만든 텍스트 embedding을 같은 벡터 공간에서 비교한다. 이때 두 embedding의 차원이 같아야 cosine similarity나 dot product를 계산할 수 있다. 예를 들어 이미지 feature 행렬이 [이미지 개수, d]이고 텍스트 feature 행렬이 [텍스트 개수, d]라면, 텍스트 feature를 전치하여 [d, 텍스트 개수]로 만든 뒤 행렬곱을 수행할 수 있다. 그러면 [이미지 개수, 텍스트 개수] 크기의 similarity matrix가 만들어진다. 이 행렬의 각 값은 특정 이미지와 특정 텍스트가 얼마나 잘 맞는지를 나타낸다. 따라서 Image Encoder와 Text Encoder의 출력 차원 d가 같아야 행렬곱을 통해 이미지-텍스트 유사도 matrix를 계산할 수 있다.
CLIP의 가장 직관적인 활용은 zero-shot 이미지 분류로, 이는 새로운 이미지 분류기를 따로 학습하지 않는다는 의미를 지닌다. 즉, 분류 클래스가 바뀌면 모델 구조를 바꾸는 것이 아니라 후보 문장만 바꾸기에 모델 구조를 바꾸거나 새 classifier를 학습하지 않아도, 후보 문장만 바꿔서 새로운 분류 문제를 만들 수 있다.
여기서 CLIP과 일반 이미지 분류의 차이점을 알 수 있다. 일반 이미지 분류기는 학습할 때 미리 정해진 클래스 중 하나를 선택한다. 따라서 새로운 클래스를 분류하려면 보통 출력층을 바꾸거나 새로운 데이터로 다시 학습해야 한다. 반면 CLIP은 이미지를 고정된 클래스 번호로 바로 분류하는 것이 아니라, 이미지와 후보 문장을 각각 embedding으로 변환한 뒤 유사도를 비교한다. 예를 들어 a photo of a cat, a photo of coffee, a photo of a rocket 같은 문장을 후보로 만들고, 이미지 embedding과 가장 가까운 문장을 선택한다. 즉 CLIP은 새로운 분류기를 따로 학습하지 않고 후보 문장만 바꾸어 이미지를 분류하는 zero-shot classification을 수행한다.

이때, 클래스 이름을 문장으로 바꾸는 이유는 CLIP이 단순한 클래스 이름만 학습한 것이 아니라 이미지와 자연어 문장의 관계를 학습한 모델이기 때문이다. 그래서 cat, coffee, rocket처럼 단어만 넣는 것보다 a photo of a cat, a photo of coffee, a photo of a rocket처럼 자연스러운 문장 형태로 바꾸면 이미지-텍스트 학습 방식과 더 잘 맞는다. 클래스 이름을 문장 prompt로 바꾸면 모델이 이미지를 클래스 번호가 아니라 어떤 문장과 가장 의미적으로 가까운지를 기준으로 비교할 수 있다. 이 때문에 zero-shot classification에서는 클래스 이름을 후보 문장으로 만들어 사용한다.
또, CLIP은 텍스트를 Text Encoder에 그대로 넣어 embedding으로 변환하는 방식이기에 같은 의미를 가진 문장이라도 표현 방식이 달라지면 텍스트 embedding도 달라진다. 예를 들어 a cat, a photo of a cat, a close-up photo of a cat, a cute orange cat은 모두 고양이를 의미하지만, 각 문장에 포함된 단어와 구체성이 다르기 때문에 이미지 embedding과의 유사도 점수가 달라질 수 있다. 즉 CLIP은 핵심 단어 하나만 비교하는 것이 아니라 문장 전체의 의미를 벡터로 바꿔 비교하므로 prompt 표현이 결과에 영향을 줄 수 있다.

실제 CLIP이 동작하는 경우, 텍스트를 그대로 Encoder에 넣으면 모델은 이미지와 각 문장의 embedding을 만든 뒤 유사도를 비교한다. 이때, probability는 후보 문장들 사이에서 softmax를 취한 값이며, 후보 문장을 어떻게 쓰는지에 따라 결과가 달라질 수 있다. 다시 말해, 같은 의미라도 표현 방식이 달라지면 embedding도 달라진다. 이러한 이유에서 실무에서는 보통 여러 prompt를 비교하고, 안정적인 표현을 찾는다
prompt가 달라짐
→ text embedding이 달라짐
→ image embedding과의 유사도도 달라짐
→ 결과가 바뀔 수 있음
CLIP에서의 학습의 핵심은 핵심은 contrastive learning이다. 이는 한 batch 안에 이미지와 텍스트 쌍이 여러 개 있을 때, 올바른 쌍의 유사도는 높이고 틀린 쌍의 유사도는 낮춘다. 쉽게 말해, 올바른 이미지-텍스트 쌍은 가깝게 만들고, 틀린 쌍은 멀게 만드는 방식이다.

올바른 image-text pair: similarity를 높인다.
틀린 image-text pair: similarity를 낮춘다.
따라서 CLIP 결과는 "정답"이라기보다 이미지와 문장의 의미적 유사도 신호로 보는 것이 좋다.
CLIP의 출력 결과는 출력 점수는 이미지와 문장 사이의 의미적 유사도 신호이지 항상 정답을 의미하는 것은 아니다. 각 후보 문장마다 유사도 점수를 만들고 이 점수를 softmax에 넣어 후보 문장들 사이의 상대적 확률처럼 점수를 볼 수 있긴 하지만, 이는 후보 문장들 중 상대적으로 어떤 문장이 가장 이미지와 가까운가를 보는 값이지 절대적인 신뢰도가 아니다. 이 값은 prompt 표현에 따라 결과가 달라질 수 있고, 학습 데이터의 편향이 결과에 반영될 수 있다. 또한 세밀한 위치 추론, 개수 세기, 복잡한 관계 판단에는 약할 수 있으며, 높은 similarity score가 항상 안전하고 정확한 판단을 보장하지 않는다. 따라서 실제 서비스에서는 CLIP 결과를 그대로 사용하기보다 추가적인 검증, 사람의 확인, 도메인 데이터 기반 평가, 안전성 점검을 거쳐야 한다.