Multimodal Fusion Design
멀티모달 융합 설계
Early/Mid/Late fusion의 선택은 '레이블 데이터 크기', '모달리티 간 의미 거리', '서빙 레이턴시 요구'의 세 변수로 결정되며 — 대부분의 실무 시스템은 Late fusion이나 Cross-modal Attention으로 시작해야 한다.
Overview
멀티모달 AI의 핵심 설계 질문은 '언제, 어떻게 모달리티를 합칠 것인가'다. 너무 일찍 합치면(early fusion) 각 모달리티의 특수한 구조를 잃고, 너무 늦게 합치면(late fusion) 모달리티 간 상호작용을 학습하지 못한다. 이 trade-off를 이해하는 것이 멀티모달 시스템 설계의 핵심이다.
CLIP의 등장 이후 멀티모달 융합의 방식이 바뀌었다. 이전에는 이미지와 텍스트를 처음부터 함께 처리해야 했다. 이제는 CLIP이 이미 이미지와 텍스트를 같은 의미 공간에 정렬시켜 놓았기 때문에, 두 임베딩을 그냥 concatenate하거나 dot product를 계산하는 것만으로도 의미 있는 멀티모달 처리가 가능하다.
실무에서 가장 흔히 마주치는 멀티모달 문제는 정형 데이터 + 이미지의 조합이다. 이커머스 상품 랭킹(상품 이미지 + 가격/카테고리), 의료 진단(방사선 이미지 + 환자 기록), 부동산 평가(주택 사진 + 면적/위치) — 이 모든 경우에 두 모달리티를 어떻게 효과적으로 결합할 것인가가 핵심 설계 결정이다.
- Early, Mid, Late fusion의 장단점과 적합한 사용 조건을 설명할 수 있다
- Cross-modal attention의 작동 원리를 이해한다
- CLIP 임베딩 공간에서 이미지-텍스트-정형 데이터를 결합하는 전략을 설계할 수 있다
- 모달리티 일부가 없을 때의 강건성(robustness) 전략을 설명할 수 있다
Sections
세 가지 융합 전략
Early Fusion (입력 레벨 융합): 두 모달리티를 처리 초기에 결합한다. 이미지 픽셀을 정형 피처와 함께 단일 입력으로 만드는 것. 장점: 모달리티 간 저수준 상호작용을 학습할 수 있다. 단점: 각 모달리티의 전문화된 인코더 없이 처리하기 어렵고, 두 모달리티의 크기/분포가 극히 달라 학습이 불안정하다.
Mid Fusion (피처 레벨 융합): 각 모달리티를 별도 인코더로 처리한 후, 중간 레벨 표현을 결합한다. Concatenation, Element-wise product, Cross-attention이 일반적 방법. 현재 가장 널리 쓰이는 방식.
Late Fusion (예측 레벨 융합): 각 모달리티로 독립적인 예측을 내고, 예측을 결합(평균, 가중 평균, 스태킹)한다. 구현이 가장 단순하고, 모달리티가 일부 없을 때 강건하다. 각 모달리티 예측의 신뢰도를 독립적으로 평가할 수 있다.
| 융합 방식 | 상호작용 학습 | 구현 복잡도 | 모달리티 부재 강건성 | 레이블 효율 |
|---|---|---|---|---|
| Early | 저수준까지 | 높음 | 낮음 | 낮음(많이 필요) |
| Mid | 중간 | 중간 | 중간 | 중간 |
| Late | 예측 수준만 | 낮음 | 높음 | 높음 |
실무 권장: 프로젝트 초기에는 Late fusion으로 시작해 각 모달리티의 독립 성능을 확인한다. 성능 향상이 필요하면 Mid fusion(Concatenation + linear layer)으로 이동하고, 그래도 부족하면 Cross-attention을 고려한다.
Cross-modal Attention: 모달리티 간 상호작용 학습
Cross-modal Attention은 한 모달리티의 표현이 다른 모달리티의 표현에 '질문'을 던지는 메커니즘이다. Transformer의 Cross-attention을 활용한다.
수학적으로: Query를 모달리티 A에서, Key와 Value를 모달리티 B에서 가져온다.
이 메커니즘으로 '이미지의 어떤 부분이 텍스트 설명의 어떤 부분과 연관되는가'를 학습한다.
Flamingo (DeepMind, 2022): 사전학습된 언어 모델과 비전 인코더 사이에 Perceiver Resampler와 Cross-attention 레이어를 삽입해 이미지-텍스트 멀티모달 이해를 가능하게 했다. 언어 모델과 비전 인코더는 동결하고 중간 cross-attention만 학습한다 — LoRA의 멀티모달 버전.
BLIP-2 / LLaVA: 비전 인코더(CLIP/EVA)와 대형 언어 모델(LLaMA/Vicuna)을 가볍게 연결하는 모듈(Q-Former, Linear Projection)만으로 강력한 비전-언어 이해를 달성했다. 이 설계 패턴이 현재 VLM(Vision-Language Model)의 표준이다.
CLIP 임베딩 공간에서의 멀티모달 검색
CLIP은 이미지와 텍스트를 같은 임베딩 공간에 정렬시킨다. 이 속성을 활용하면 매우 강력한 멀티모달 검색 시스템을 구축할 수 있다.
이미지-텍스트 검색 아키텍처:
- 오프라인: 모든 이미지를 CLIP 이미지 인코더로 임베딩하고 벡터 DB(Faiss, Qdrant, Pinecone)에 저장
- 서빙: 텍스트 쿼리를 CLIP 텍스트 인코더로 임베딩하고, 코사인 유사도로 최근접 이미지 검색
이 방식은 텍스트→이미지, 이미지→이미지, 이미지→텍스트 검색 모두 동일한 인프라로 가능하다.
정형 데이터와의 결합: 상품 검색 시스템에서 CLIP 이미지 임베딩과 정형 피처(가격, 카테고리, 평점)를 함께 사용하려면:
- 2단계 검색: 먼저 CLIP으로 의미적으로 유사한 후보(k=1000)를 검색한 후, 정형 피처로 재랭킹(Learning-to-Rank)
- 임베딩 결합: 정형 피처를 임베딩으로 변환해 이미지 임베딩과 concatenate 후 검색
- Hybrid scoring:
모달리티 부재 처리: 강건성 설계
실제 시스템에서는 일부 모달리티가 없는 경우가 흔하다. 이미지가 없는 상품, 인구통계 정보가 누락된 환자, 비디오 없이 텍스트만 있는 뉴스 기사 — 이런 상황에서 시스템이 어떻게 동작해야 하는지 미리 설계해야 한다.
전략 1: 기본값 임베딩 (Zero vector or Mean vector): 없는 모달리티에 영벡터 또는 학습된 'null' 임베딩을 사용. 단순하지만 없는 모달리티가 마치 있는 것처럼 모델에 전달되어 혼란을 줄 수 있다.
전략 2: Mask-based Attention: Cross-attention 시 없는 모달리티에 attention mask를 적용해 무시한다. 모델이 부재 정보를 인식하고 나머지로만 추론하도록 유도.
전략 3: Late Fusion + Fallback: Late fusion 구조에서 있는 모달리티만으로 예측하고, 없는 모달리티는 전체 예측에서 가중치 0으로 처리. 가장 강건하고 직관적.
전략 4: Dropout 기반 학습: 훈련 시 랜덤으로 모달리티를 드롭아웃해 모델이 불완전한 입력에 강건해지도록 학습. Multimodal Imputation 또는 Multimodal Dropout이라 불린다.
프로덕션 시스템에서는 전략 3(Late Fusion + Fallback)으로 시작하고, 성능이 더 필요할 때 전략 4를 추가하는 것이 실용적이다.
멀티모달 융합을 법정 증거 평가로 비유할 수 있다. 피고가 유죄인지 판단하기 위해 판사는 세 가지 증거를 본다: 목격자 진술(텍스트/정형), 현장 사진(이미지), 감시 카메라 영상(비디오).
Late Fusion은 각 증거를 독립적으로 평가한 후 종합하는 것과 같다. 목격자 진술로 70% 유죄, 사진으로 60% 유죄, 영상으로 85% 유죄 → 종합적으로 80% 유죄. 한 증거가 없어도 나머지로 판단 가능하다.
Mid Fusion(Cross-attention)은 세 증거를 교차 검증하는 것과 같다. '이 사진에서 목격자가 말한 빨간 재킷을 입은 사람이 보이는가?' 이미지가 텍스트를 '참조'하며 더 정확한 판단이 가능하다.
Early Fusion은 세 증거를 처음부터 함께 분석하는 것이다. 가장 정밀하지만, 목격자가 영상을 보고 진술을 바꾼다면 오염될 위험이 있다. 증거들이 서로 독립적이지 않을 때 문제가 생긴다 — 이것이 early fusion의 높은 데이터 요구와 오염 위험에 해당한다.
정형 데이터와 이미지 임베딩을 결합하는 Mid Fusion 모델을 PyTorch로 구현해보자. 이 패턴은 이커머스 상품 랭킹, 의료 진단 등 실무에서 가장 흔한 멀티모달 패턴이다.
import torch
import torch.nn as nn
class TabularImageFusion(nn.Module):
"""
정형 피처 + 이미지 임베딩 Mid Fusion 모델.
이커머스: 상품 메타데이터 + CLIP 이미지 임베딩 → 클릭율 예측
"""
def __init__(
self,
tabular_dim: int, # 정형 피처 차원 (예: 50)
image_embed_dim: int, # 이미지 임베딩 차원 (예: 512 for CLIP ViT-B)
hidden_dim: int = 256,
output_dim: int = 1, # CTR 예측이면 1
dropout: float = 0.2,
):
super().__init__()
# 각 모달리티를 같은 차원으로 프로젝션
self.tab_proj = nn.Sequential(
nn.Linear(tabular_dim, hidden_dim),
nn.LayerNorm(hidden_dim),
nn.ReLU(),
nn.Dropout(dropout),
)
self.img_proj = nn.Sequential(
nn.Linear(image_embed_dim, hidden_dim),
nn.LayerNorm(hidden_dim),
nn.ReLU(),
nn.Dropout(dropout),
)
# 융합 후 예측 헤드
self.fusion_head = nn.Sequential(
nn.Linear(hidden_dim * 2, hidden_dim),
nn.ReLU(),
nn.Dropout(dropout),
nn.Linear(hidden_dim, output_dim),
)
def forward(
self,
tabular: torch.Tensor, # (B, tabular_dim)
image_embed: torch.Tensor, # (B, image_embed_dim)
image_mask: torch.Tensor = None, # (B,) True면 이미지 있음
) -> torch.Tensor:
tab_feat = self.tab_proj(tabular)
img_feat = self.img_proj(image_embed)
# 이미지 없으면 영벡터로 대체 (모달리티 부재 처리)
if image_mask is not None:
img_feat = img_feat * image_mask.unsqueeze(-1).float()
fused = torch.cat([tab_feat, img_feat], dim=-1)
return self.fusion_head(fused)
# 사용 예시
model = TabularImageFusion(tabular_dim=50, image_embed_dim=512)
tabular = torch.randn(32, 50)
image_embed = torch.randn(32, 512)
image_mask = torch.ones(32).bool() # 모든 샘플에 이미지 있음
output = model(tabular, image_embed, image_mask)
print(f"출력 shape: {output.shape}") # (32, 1) 핵심은 두 모달리티를 같은 hidden_dim으로 프로젝션한 후 concatenate하는 것이다. image_mask는 이미지가 없는 샘플에서 이미지 피처를 영벡터로 만들어 모달리티 부재를 처리한다. 실무에서는 tab_proj의 첫 Linear 위치에 BatchNorm을 추가하거나, 이미지 없는 샘플을 훈련 시 dropout으로 처리해 강건성을 높인다.
✅ 시니어가 보는 것
- Late fusion으로 시작해 Mid/Early fusion으로 점진적으로 복잡도를 높이는 실용적 접근
- 모달리티 부재 케이스를 훈련 설계 단계부터 고려하는 습관
- CLIP 임베딩 공간을 활용한 멀티모달 검색 아키텍처 설계
- 두 모달리티의 업데이트 주기 차이가 serving 아키텍처에 미치는 영향 이해
⚠️ 레드 플래그
- 항상 Cross-attention을 제안 — 구현 복잡도와 데이터 요구량을 무시한 신호
- 모달리티 부재 케이스를 '에러로 처리'하겠다는 제안 — 실제 데이터의 불완전성 무시
- 이미지 임베딩과 정형 피처를 정규화 없이 직접 concatenate — 스케일 불균형 문제 인식 부족
🎤 예상 인터뷰 질문
- 이커머스 플랫폼에서 상품 이미지(CLIP 임베딩)와 메타데이터(가격, 카테고리, 판매량)를 결합해 클릭율을 예측하는 모델을 설계하세요.
- 멀티모달 모델에서 이미지가 없는 상품이 전체의 30%라면 어떻게 처리하겠습니까?
- CLIP zero-shot 검색과 사용자 행동 기반 정형 피처를 결합한 이미지 검색 시스템을 어떻게 설계하겠습니까?
Key Takeaways
Late fusion으로 시작하라
구현 단순, 모달리티 부재에 강건, 독립 평가 용이. 성능 부족할 때만 Mid fusion으로 이동하라.
CLIP = 멀티모달 공유 공간
이미지와 텍스트가 같은 공간에 있으므로, 멀티모달 검색이 단순 코사인 유사도 비교로 구현된다.
Mid fusion = Concat + Linear가 기본
Cross-attention 전에 단순한 Concat + Linear layer가 얼마나 잘 작동하는지 먼저 확인하라.
모달리티 부재를 설계에서 처음부터 고려
실제 데이터는 항상 불완전하다. 훈련 시부터 dropout으로 모달리티 부재를 처리해야 서빙 강건성이 생긴다.
스케일 정규화는 필수
이미지 임베딩(L2-norm)과 정형 피처(다양한 스케일)를 같은 공간에 결합하려면 별도 프로젝션과 LayerNorm이 필요하다.
업데이트 주기 차이를 아키텍처에 반영
이미지 임베딩은 캐싱(Feature Store), 실시간 변동 정형 피처는 Online Store — 서로 다른 신선도 요구를 분리 처리해야 한다.