멀티모달(Multimodal)은 한 모델이 형태가 다른 데이터를 함께 다루는 것이다. 데이터의 형태 하나하나를 모달리티(Modality)라고 부른다. 텍스트, 이미지, 음성, 영상이 각각 모달리티다. 텍스트만 받는 LLM은 싱글모달이다. 사진을 올리고 "이 그래프에서 어느 달 매출이 가장 높아?"라고 물을 수 있는 모델은 멀티모달이다.
할 수 있는 일
| 입력 → 출력 | 예 |
|---|---|
| 이미지 + 텍스트 → 텍스트 | 스크린샷의 에러 읽기, 디자인 시안을 보고 HTML·CSS 짜기, 영수증 내용 뽑기 |
| 음성 → 텍스트·음성 | 받아쓰기, 말로 묻고 말로 듣는 음성 대화 |
| 텍스트 → 이미지·영상 | 설명을 주고 그림 만들기 |
| 이미지 ↔ 텍스트 검색 | "해변의 강아지"라는 문장으로 사진 찾기 |
"멀티모달 모델"이라는 말은 대개 첫 줄처럼 여러 모달리티를 이해해 텍스트로 답하는 모델을 가리킨다. 이런 모델을 VLM(Vision Language Model, 비전 언어 모델)이라고도 부른다. 그림을 그리는 생성 모델은 따로 만드는 경우가 많다.
어떻게 이미지를 읽나
트랜스포머는 벡터 나열을 입력으로 받는다. 그래서 핵심은 이미지나 소리를 텍스트 토큰과 같은 모양의 벡터로 바꾸는 것이다.
이미지 → 작은 조각(패치)으로 자름 → 이미지 인코더가 조각마다 벡터로 바꿈
→ 프로젝션(투영) 층이 LLM의 토큰 벡터 공간에 맞춤
→ 텍스트 토큰 벡터들과 이어 붙여 LLM에 넣음 → 텍스트로 답함- 이미지를 패치로 잘라 토큰처럼 트랜스포머에 넣는 방식은 ViT(Vision Transformer)가 널리 알렸다
- 이미 학습된 이미지 인코더와 LLM을 작은 연결 층으로 잇는 방식이 흔하다. LLaVA는 학습된 CLIP 이미지 인코더와 LLM을 선형 프로젝션 층 하나로 잇는다
- 처음부터 여러 모달리티를 섞어 함께 학습하는 모델도 있다. 이를 "네이티브 멀티모달"이라고 부르기도 한다
멀티모달 임베딩 (CLIP)
CLIP(Contrastive Language-Image Pre-training)은 이미지와 그 설명 문장 쌍을 대량으로 학습한다. 짝이 맞는 이미지와 문장의 벡터는 가깝게, 짝이 아닌 쌍은 멀게 놓이도록 학습한다. 그러면 이미지와 텍스트가 같은 좌표계에 놓인다. 텍스트 임베딩에서 문장끼리 가까움을 재던 방법을 그대로 써서 문장으로 사진을 찾을 수 있다. 이미지까지 검색하는 RAG (검색 증강 생성)가 이 원리를 쓴다.
쓸 때 알아 둘 것
- 이미지도 토큰을 쓴다. 이미지 한 장은 해상도에 따라 수십에서 수천 토큰이 된다. 그만큼 비용이 들고 컨텍스트 윈도우도 차지한다. 필요한 부분만 잘라 보내면 토큰이 줄고 작은 글씨도 더 잘 읽힌다
- 보이는 것을 다 정확히 읽지는 못한다. 작은 글씨, 물건 개수 세기, 정밀한 위치·좌표, 표의 칸 맞추기에서 자주 틀린다. 숫자는 원본과 대조한다
- 이미지 속 글자도 지시문이 될 수 있다. 이미지에 적힌 문장을 모델이 명령으로 받아들이는 프롬프트 인젝션(Prompt Injection)이 있다. 외부에서 받은 이미지는 외부 텍스트와 마찬가지로 믿을 수 없는 입력으로 다룬다
출처: Learning Transferable Visual Models From Natural Language Supervision (CLIP) Radford et al.(2021) · An Image is Worth 16x16 Words (ViT) Dosovitskiy et al.(2020) · Visual Instruction Tuning (LLaVA) Liu et al.(2023)
참고: Vision Anthropic 문서(이미지 토큰 수)