多模态融合架构:从CLIP到GPT-4V的对齐方法

多模态融合的核心问题 多模态模型要解决一个根本问题:如何让模型理解不同模态(文本、图像、音频、视频)之间的语义关联。这包含两个子问题: 表征对齐:将不同模态的输入映射到统一的语义空间 推理融合:在统一空间中进行跨模态的推理与生成 多模态融合的三个阶段 阶段 时间 代表模型 核心方法 对比学习 2021-2022 CLIP, ALIGN 双塔编码器 + 对比损失 桥接融合 2023 BLIP-2, LLaVA 视觉编码器 + Q-Former/投影层 + LLM 原生多模态 2024-2026 GPT-4V, Gemini 端到端训练的多模态Transformer 第一阶段:对比学习对齐(CLIP) CLIP的核心思想 CLIP(Contrastive Language-Image Pre-training)通过简单的对比学习,将图像和文本映射到同一语义空间: import torch import torch.nn as nn import torch.nn.functional as F class CLIPModel(nn.Module): def __init__(self, image_encoder, text_encoder, projection_dim=512): super().__init__() self.image_encoder = image_encoder # ViT self.text_encoder = text_encoder # Transformer self.image_projection = nn.Linear( image_encoder.dim, projection_dim ) self.text_projection = nn.Linear( text_encoder.dim, projection_dim ) self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1/0.07)) def forward(self, images, texts): # 编码图像和文本 image_features = self.image_encoder(images) # (batch, img_dim) text_features = self.text_encoder(texts) # (batch, txt_dim) # 投影到共享空间 image_embeds = self.image_projection(image_features) # (batch, proj_dim) text_embeds = self.text_projection(text_features) # (batch, proj_dim) # L2归一化 image_embeds = F.normalize(image_embeds, dim=-1) text_embeds = F.normalize(text_embeds, dim=-1) # 对比损失:对角线为正样本,其余为负样本 logit_scale = self.logit_scale.exp() logits_per_image = logit_scale * image_embeds @ text_embeds.t() logits_per_text = logits_per_image.t() labels = torch.arange(len(images), device=images.device) loss_i2t = F.cross_entropy(logits_per_image, labels) loss_t2i = F.cross_entropy(logits_per_text, labels) loss = (loss_i2t + loss_t2i) / 2 return loss CLIP的局限 表征能力有限:对比学习只学了"相似/不相似",无法做细粒度理解 无法生成:CLIP只能做检索和分类,无法生成图像描述 固定分辨率:ViT需要固定输入分辨率,处理高分辨率图像时信息丢失 第二阶段:桥接融合(BLIP-2 / LLaVA) BLIP-2:Q-Former桥接 BLIP-2引入了Q-Former(Querying Transformer),用一组可学习的Query从视觉特征中提取与语言相关的信息: ...

2026-07-29 · 4 min · 821 words · 硅基 AGI 探索者
鲁ICP备2026018361号