VLM은 텍스트만 이해하던 LLM에게 ‘눈(Vision Encoder)‘을 달아주어, 이미지를 보고 대화할 수 있게 만든 모델이다.
핵심은 “이미지의 픽셀 정보를 언어 모델이 이해할 수 있는 단어(토큰) 벡터 공간으로 변환(Projection)하여 주입하는 것”이다.
핵심 파이프라인
Input Image Visual Embeddings Text Embeddings Answer
2. 메인 아키텍처 (LLaVA Style)
가장 표준적인 구조(LLaVA, GPT-4V 등)는 Vision Encoder + Connector + LLM의 3단 합체 로봇 형태다.
graph LR
Img["Input Image<br/>(Pixels)"] --> ViT["Vision Encoder<br/>(CLIP/SigLIP)"]
ViT --> Feat["Visual Features<br/>(Patch Embeddings)"]
subgraph "The Connector (Bridge)"
Feat --> Proj["Projection Layer<br/>(Linear / MLP / Q-Former)"]
end
Proj --> VisTok["Visual Tokens<br/>(Mapped to Text Space)"]
Txt["User Prompt<br/>'What is this?'"] --> Tok["Text Tokens"]
VisTok & Tok --> Concat["Concat & Input"]
Concat --> LLM["LLM Backbone<br/>(Transformer Decoder)"]
LLM --> Out["Response<br/>'It is a cat.'"]
style ViT fill:#E1F5FE,stroke:#0277BD
style Proj fill:#FFF9C4,stroke:#FBC02D,stroke-width:2px
style LLM fill:#E8F5E9,stroke:#2E7D32
구성 요소
Vision Encoder: 이미지를 처리하여 특징(Feature)을 추출한다. (예: ViT, CLIP-ViT, SigLIP)
Connector (Adapter): 이미지 특징 벡터의 차원을 LLM의 텍스트 임베딩 차원과 맞추고, 언어적 공간으로 변환한다.
LLM Backbone: 변환된 이미지 토큰을 텍스트 프롬프트와 함께 입력받아 답변을 생성한다. (예: Vicuna, Llama-3, Qwen)
3. Vision Encoder: CLIP의 역할
단순히 이미지를 분류하는 모델(ResNet 등)보다는, 이미지와 텍스트의 관계를 이미 알고 있는 모델을 인코더로 쓰는 것이 유리하다. 그래서 CLIP을 주로 사용한다.
3.1. 왜 CLIP인가?
CLIP(Contrastive Language-Image Pre-training)은 인터넷상의 수억 쌍의 (이미지, 캡션) 데이터를 대조 학습(Contrastive Learning)하여, **이미지 벡터와 텍스트 벡터를 같은 공간에 정렬(Alignment)**시켜 둔 모델이다.
장점: CLIP을 통과한 이미지 임베딩은 이미 어느 정도 언어적 의미를 함유하고 있다.
구조: 보통 CLIP의 Visual Encoder(ViT) 부분만 떼어내서 VLM의 ‘눈’으로 사용한다.
3.2. 핵심 수식 (Contrastive Loss)
CLIP이 학습한 원리다. 개의 이미지-텍스트 쌍이 있을 때, 정답 쌍의 내적(유사도)은 최대화하고 오답 쌍은 최소화한다.
: 이미지 임베딩, : 텍스트 임베딩
: 코사인 유사도 ()
: Temperature parameter
4. The Connector: 내부 연결 방식
Vision Encoder에서 나온 벡터(ViT의 Patch Embedding)를 LLM에 어떻게 넣어줄 것인가?
이 연결 부위가 VLM 기술의 핵심이다.
graph TD
subgraph "Type A: MLP / Linear (LLaVA)"
V1["ViT Features<br/>(256 tokens)"] --> Lin["Linear Layer<br/>(W * x)"]
Lin --> L1["Mapped Tokens<br/>(256 tokens)"]
L1 --> LLM1["To LLM Input"]
end
subgraph "Type B: Q-Former / Resampler (BLIP-2)"
V2["ViT Features<br/>(256 tokens)"]
Q["Learnable Queries<br/>(32 tokens)"]
Q & V2 --> CA["Cross Attention<br/>(Queries attend to Image)"]
CA --> L2["Compressed Tokens<br/>(32 tokens)"]
L2 --> LLM2["To LLM Input"]
end
style Lin fill:#FFF9C4,stroke:#FBC02D
style CA fill:#E1BEE7,stroke:#8E24AA
4.1. Linear Projection (LLaVA 방식)
가장 단순하고 강력한 방식이다. 이미지 벡터 에 학습 가능한 행렬 를 곱해 LLM 차원으로 변환한다.
특징: 단순하지만 성능이 매우 뛰어나다. 이미지 토큰을 마치 “외국어 단어”처럼 취급하여 LLM에 넣어버리는 방식이다.
4.2. Q-Former (BLIP-2 방식)
단순 투영은 이미지 정보 손실이 크거나 토큰 수가 너무 많을 수 있다. Learnable Query를 이용해 핵심 정보만 추출한다.
구조: 별도의 작은 Transformer(Q-Former)를 두고, 고정된 개수(예: 32개)의 Query 벡터가 이미지 인코더의 출력과 Cross Attention 을 수행한다.
장점: 긴 이미지 토큰 시퀀스를 짧고 압축된 형태로 요약하여 LLM에 전달한다.
4.3. Cross-Attention (Flamingo 방식)
이미지 토큰을 LLM 입력(프롬프트)에 직접 붙이지 않고, LLM 내부의 Attention 레이어 사이에 새로운 Gated Cross-Attention 레이어를 끼워 넣는다.