11.1 시각-언어 브릿지 (Vision-Language Bridges)
순수한 텍스트 기반의 대규모 언어 모델(LLMs)에서 멀티모달 파운데이션 모델(Multimodal Foundation Models)로 전환하려면 서로 다른 모달리티(Modality) 간의 격차를 해소해야 합니다. 특히 시각적 이해(이미지/비디오)를 텍스트 생성과 연결해야 합니다. 이 페이지에서는 시각과 언어를 연결하는 “브릿지(Bridge)” 역할을 하는 핵심 아키텍처인 CLIP, Flamingo, 그리고 널리 사용되는 프로젝션 레이어 (Projection Layer) 에 대해 깊이 있게 다룹니다. 우리는 이들의 수학적 공식, 아키텍처 선택, 그리고 관련된 엔지니어링 트레이드오프를 파헤쳐 봅니다.
과제: 모달리티 정렬 (Aligning Modalities)
시각 데이터(픽셀)와 텍스트 데이터(토큰)는 완전히 다른 벡터 공간에 살고 있습니다. 모델은 픽셀을 텍스트 토큰으로 처리하여 이미지를 직접 이해할 수 없습니다. 우리는 시각적 특징(Visual Features)을 언어 모델이 처리할 수 있는 표현으로 변환하는 메커니즘이 필요합니다. 이것이 시각-언어 브릿지의 역할입니다. 목표는 이러한 공간을 정렬하여, 픽셀에서 매핑된 “고양이”의 시각적 개념이 토큰에서 매핑된 “고양이”의 언어적 개념과 일치함을 모델이 이해하도록 하는 것입니다.
브릿지 설계는 단순한 구현 디테일이 아닙니다. 어떤 종류의 멀티모달 행동이 가능한지를 결정하는 핵심 요소입니다. 약한 브릿지는 검색이나 거친 수준의 캡셔닝에는 충분할 수 있지만, 여러 이미지를 넘나드는 grounded dialogue에는 부족할 수 있습니다. 반대로 표현력이 강한 브릿지는 추론 성능을 높여 줄 수 있지만, 더 많은 시각 토큰과 더 많은 교차 어텐션 레이어를 요구하고 최적화도 어려워집니다. 실제 제품 수준의 멀티모달 시스템에서는 결국 “언어 모델이 시각 정보를 얼마나 많이, 어떤 형태로 보게 할 것인가”가 가장 중요한 설계 질문이 됩니다.
1. CLIP: 대조 학습 브릿지 (Representation Alignment)
OpenAI가 2021년에 발표한 CLIP(Contrastive Language-Image Pre-training) [1] 은 많은 멀티모달 모델의 기초가 되는 브릿지입니다. 이는 텍스트를 생성하는 것이 아니라, 공유된 잠재 공간(Shared Latent Space)에서 이미지와 텍스트 표현을 정렬 하는 법을 배웁니다.
아키텍처: 듀얼 인코더 (Dual Encoders)
CLIP은 듀얼 인코더 아키텍처를 사용합니다:
- 이미지 인코더 (): 일반적으로 Vision Transformer (ViT) 또는 ResNet을 사용하여 이미지 를 차원 시각 임베딩 로 매핑합니다.
- 텍스트 인코더 (): Transformer를 사용하여 텍스트 설명 를 차원 텍스트 임베딩 로 매핑합니다.
두 임베딩 모두 단위 길이()를 갖도록 정규화(Normalize)됩니다.
대칭적 대조 학습 목표 (Symmetric Contrastive Objective)
CLIP의 핵심 혁신은 훈련 목표에 있습니다. 개의 이미지-텍스트 쌍으로 구성된 배치가 주어지면, 모델은 유사도 행렬 를 계산합니다. 여기서 는 이미지 와 텍스트 사이의 코사인 유사도입니다.
CLIP은 로짓(Logits)의 크기를 조정하기 위해 학습 가능한 온도 파라미터(Temperature Parameter) 를 적용합니다: . 손실(Loss)은 두 가지 크로스 엔트로피 손실(Cross-Entropy Loss)의 평균입니다: 하나는 이미지-텍스트 검색을 위한 것이고, 다른 하나는 텍스트-이미지 검색을 위한 것입니다.
이미지-텍스트 손실 (): 각 이미지에 대해 올바른 텍스트를 찾습니다.
텍스트-이미지 손실 (): 각 텍스트에 대해 올바른 이미지를 찾습니다.
총 손실:
이 목표는 모델이 개의 올바른 쌍(대각선)의 유사도를 극대화하는 동시에 개의 잘못된 쌍(대각선 외부)의 유사도를 최소화하도록 강제합니다.
PyTorch 구현 (CLIP Loss)
다음은 CLIP에서 사용되는 대칭적 대조 학습 손실을 구현한 깔끔한 PyTorch 코드입니다.
import torch
import torch.nn as nn
import torch.nn.functional as F
class CLIPLoss(nn.Module):
def __init__(self, init_temperature=0.07):
super().__init__()
self.temperature = nn.Parameter(torch.tensor(init_temperature))
def forward(self, image_embeddings, text_embeddings):
"""
대칭적 대조 학습 손실을 계산합니다.
Args:
image_embeddings: (batch_size, embed_dim) 형태의 텐서
text_embeddings: (batch_size, embed_dim) 형태의 텐서
"""
# 임베딩을 단위 길이로 정규화
image_embeddings = F.normalize(image_embeddings, p=2, dim=-1)
text_embeddings = F.normalize(text_embeddings, p=2, dim=-1)
batch_size = image_embeddings.size(0)
# 코사인 유사도 행렬 계산
logits = torch.matmul(image_embeddings, text_embeddings.t()) / self.temperature
# 타겟은 단위 행렬 (올바른 쌍은 대각선에 있음)
labels = torch.arange(batch_size, device=image_embeddings.device)
# 대칭적 크로스 엔트로피 손실
loss_i = F.cross_entropy(logits, labels)
loss_t = F.cross_entropy(logits.t(), labels)
return (loss_i + loss_t) / 2
# 예제 사용법
batch_size = 32
embed_dim = 512
img_emb = torch.randn(batch_size, embed_dim)
text_emb = torch.randn(batch_size, embed_dim)
criterion = CLIPLoss()
loss = criterion(img_emb, text_emb)
print(f"CLIP Loss: {loss.item():.4f}")
2. Flamingo: 교차 어텐션 브릿지 (Generative Alignment)
CLIP은 표현을 정렬하지만, 생성 중에 시각과 언어 간의 깊은 상호 작용을 허용하지는 않습니다. DeepMind의 Flamingo(2022) [2] 는 고정된 LLM에 시각 정보를 직접 주입함으로써 Few-shot 멀티모달 학습을 위한 획기적인 아키텍처를 도입했습니다.
핵심 구성 요소
Flamingo는 고정된(Frozen) 시각 인코더와 고정된 LLM을 두 가지 새로운 구성 요소를 사용하여 연결합니다:
A. Perceiver Resampler
시각 인코더(예: ViT)는 이미지 해상도나 비디오 프레임에 따라 가변적인 수의 특징을 출력합니다. 수백 개의 시각 토큰을 LLM에 직접 전달하면 시퀀스 길이와 연산 비용이 폭발하게 됩니다 (셀프 어텐션에서 ).
Perceiver Resampler는 이러한 가변적인 수의 시공간적 시각 특징을 고정된 수의 시각 토큰 (예: 64개 토큰)으로 매핑하여 이 문제를 해결합니다.
- 개의 학습 가능한 레이턴트 쿼리 (Latent Queries) 세트를 사용합니다.
- 이 쿼리들은 교차 어텐션(Cross-Attention)을 사용하여 시각적 특징에 어텐션을 수행합니다.
- 출력은 입력 크기에 관계없이 항상 개의 토큰이며, 이 토큰들이 LLM에 입력됩니다.
B. 게이트 교차 어텐션 (Gated Cross-Attention, Gated xAttn)
LLM이 이러한 시각 토큰을 이해할 수 있도록, Flamingo는 고정된 LLM의 기존 레이어 사이에 새로운 게이트 교차 어텐션 레이어를 삽입합니다.
새로운 레이어가 훈련 초기에 LLM의 사전 훈련된 지식을 파괴하는 것을 방지하기 위해, Flamingo는 tanh 게이팅 (tanh gating) 메커니즘을 사용합니다:
여기서:
- 는 이전 LLM 레이어의 텍스트 특징입니다.
- 는 Perceiver Resampler의 시각 토큰입니다.
- 는 0 으로 초기화되는 학습 가능한 스칼라입니다.
이기 때문에, 모델은 처음에 원래의 고정된 LLM과 똑같이 동작하기 시작합니다. 훈련이 진행됨에 따라 가 0에서 벗어나고, 모델은 점진적으로 시각 정보를 통합하는 법을 배웁니다.
3. 프로젝션 레이어: 단순한 브릿지 (Simple Bridge)
LLaVA [3] 와 같은 현대적인 시각-언어 모델은 훨씬 단순하지만 매우 효과적인 접근 방식인 직접 프로젝션 레이어를 사용합니다.
작동 방식
LLM 전반에 걸쳐 삽입되는 복잡한 교차 어텐션 메커니즘 대신, 이러한 모델들은 다음을 사용합니다:
- 이미지에서 특징을 추출하기 위한 사전 훈련된 시각 인코더 (종종 CLIP의 ViT).
- 이러한 특징을 LLM의 텍스트 임베딩 공간으로 직접 매핑하기 위한 프로젝션 레이어 (Projection Layer) (일반적으로 단순한 Linear Layer 또는 다층 퍼셉트론, MLP).
LLM은 이러한 투영된 시각적 특징을 마치 특별한 “시각적 토큰” 인 것처럼 처리하고 입력 시퀀스에서 일반 텍스트 토큰과 단순히 연결(Concatenate)합니다.
LLM에 대한 입력 시퀀스 =
이 접근 방식은 구현이 매우 간단하며 최소한의 변경으로 기존 LLM 훈련 인프라를 재사용할 수 있게 해줍니다. 이는 오픈소스 대규모 멀티모달 모델(LMMs)의 지배적인 패러다임이 되었습니다.
4. 실제 시스템에서의 엔지니어링 트레이드오프
논문 밖의 실제 시스템에서는 브릿지 선택이 단순한 아키텍처 취향이 아니라 시스템 설계의 트레이드오프로 바뀝니다.
토큰 예산과 시각 정보 보존
시각 토큰 하나하나는 텍스트 토큰과 동일한 컨텍스트 윈도우 예산과 어텐션 연산 비용을 놓고 경쟁합니다. 브릿지가 너무 많은 토큰을 내보내면 모델은 비싸지고 중요한 텍스트 지시가 묻힐 수 있습니다. 반대로 너무 적은 토큰만 내보내면 이미지 속 작은 글씨, 공간적 관계, 비디오 프레임 간의 미묘한 변화 같은 정보가 압축 과정에서 사라집니다.
고정된 백본과 end-to-end 적응
실무에서는 비전 인코더를 고정하고, LLM 대부분도 고정한 채, 브릿지나 프로젝터만 학습하는 경우가 많습니다. 이렇게 하면 훈련 비용을 크게 줄이고 언어 모델의 일반 능력을 보존할 수 있습니다. 대신 브릿지가 표현 변환의 많은 부담을 혼자 떠안게 됩니다. 목표 도메인이 사전학습 데이터와 많이 다르면, 병목이 바로 브릿지에서 발생합니다.
인터리빙과 다중 이미지 추론
프로젝션 레이어 방식은 “이미지 하나 + 프롬프트” 같은 단순한 입력 패턴에서는 매우 잘 작동합니다. 하지만 시각 대화, 다중 이미지 비교, 긴 비디오 이해처럼 이미지와 텍스트가 여러 번 얽히는 작업에서는 브릿지에 더 큰 압력이 걸립니다. 모델이 시간 순서를 유지하고, 시각적 근거를 서로 대조하고, 언제 이전 프레임이나 이미지로 다시 돌아가야 하는지를 알아야 하기 때문입니다. 그래서 오픈소스에서는 프로젝션 방식이 대세가 되었더라도, 더 깊은 융합 방식을 계속 연구하는 이유가 여기에 있습니다.
트레이드오프 요약
| 기능 | CLIP | Flamingo | 프로젝션 레이어 (LLaVA) |
|---|---|---|---|
| 주요 목표 | 표현 정렬 | 생성형 Few-Shot | 생성형 인스트럭션 튜닝 |
| 융합 유형 | Late Fusion (Dot Product) | Deep Fusion (Cross-Attention) | Early Fusion (Concatenation) |
| 연산 비용 | 낮음 | 높음 (새로운 레이어 필요) | 낮음 (단순한 MLP) |
| 유연성 | 검색 및 Zero-shot | 텍스트/이미지 혼합 입력 | 고정된 이미지 입력 |
Quizzes
Quiz 1: CLIP이 한 방향이 아닌 대칭적 손실( 및 )을 사용하는 이유는 무엇인가요?
한 방향(예: 텍스트를 이미지에 매칭)만 사용하면 비대칭 공간이 생성됩니다. 예를 들어, 여러 다른 텍스트가 동일한 이미지에 가깝게 매핑될 수 있지만, 그 이미지는 해당 텍스트들에 가깝게 매핑되지 않을 수 있습니다. 대칭적 손실은 두 관점 모두에서 표현 공간이 정렬되도록 보장하여 이미지-텍스트(캡셔닝/검색) 및 텍스트-이미지(생성/검색) 작업 모두에서 더 나은 일반화로 이어집니다.
Quiz 2: 모든 시각적 특징을 텍스트 입력에 단순히 연결하는 것에 비해 Flamingo의 Perceiver Resampler가 갖는 주요 이점은 무엇인가요?
모든 시각적 특징(고해상도 이미지나 비디오의 경우 수백 또는 수천 개의 토큰이 될 수 있음)을 연결하면 시퀀스 길이가 급격히 증가합니다. Transformer 셀프 어텐션 복잡도는 이므로 훈련과 추론이 극도로 비싸집니다. Perceiver Resampler는 시각적 특징을 고정된 작은 수의 토큰(예: 64개)으로 줄여 입력 해상도나 비디오 길이에 관계없이 연산 비용을 제한합니다.
Quiz 3: Flamingo의 Gated Cross-Attention에서 tanh 게이팅이 0으로 초기화되는 이유는 무엇인가요?
게이팅 파라미터 를 0으로 초기화하면 이 됩니다. 이는 훈련 시작 시 시각 정보가 완전히 무시되고 모델이 사전 훈련된 LLM과 똑같이 동작함을 의미합니다. 이는 “치명적 망각(Catastrophic Forgetting)“을 방지하고, 모델이 학습함에 따라 시각 정보를 천천히 도입하여 안정적인 학습을 보장합니다.
References
- Radford, A., et al. (2021). Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020.
- Alayrac, J. B., et al. (2022). Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198.
- Liu, H., et al. (2023). Visual Instruction Tuning. arXiv:2304.08485.