多模态学习基础

多模态学习(Multimodal Learning)是指同时处理和理解来自多种感知模态(如文本、图像、音频、视频等)的信息,并学习跨模态的关联和统一表示的机器学习范式。1 与传统的单模态学习相比,多模态学习更接近人类感知世界的真实方式——人类通过视觉、听觉、触觉等多种感官协同工作来理解复杂环境。

多模态学习定义与挑战

定义

多模态学习可以定义为:联合解释和生成跨多种模态的内容,包括但不限于:

模态类型典型数据特征
视觉图像、视频空间结构、时序变化
文本自然语言、代码语义、语法、结构
音频语音、音乐、环境声时序、频率、情感
触觉压力、温度、纹理物理交互信息
传感器LiDAR、深度相机、IMU3D几何、运动信息

多模态学习的核心目标是建模模态间的对应关系和交互模式,实现跨模态的理解、推理和生成。

核心挑战

多模态学习面临以下核心挑战2

1. 模态异质性(Heterogeneity)
不同模态的数据具有截然不同的特征空间分布:

  • 图像是高维稠密的像素矩阵
  • 文本是离散的符号序列
  • 音频是时序波形信号

这种异质性使得直接比较和融合不同模态变得困难。

2. 跨模态对齐(Cross-modal Alignment)
从海量数据中找到语义一致的跨模态对应关系:

  • 图像区域与文本描述的对齐
  • 视频片段与语音转录的对齐
  • 动作与指令的对齐

3. 语义融合(Semantic Fusion)
如何有效地整合来自不同模态的互补信息:

  • 丢弃冗余信息
  • 保留互补信息
  • 保持语义一致性

与单模态学习的对比

方面单模态学习多模态学习
输入数据单一模态多种模态
表示学习单一特征空间需建立跨模态统一表示
数据需求单模态标注需跨模态对齐标注
模型复杂度相对较低显著增加
表达能力受限于单一模态可利用模态互补性
鲁棒性单点故障风险模态冗余提高鲁棒性

多模态表示学习

多模态表示学习的核心问题是如何将不同模态的数据映射到一个统一且有意义的表示空间。根据表示方式的不同,可以分为以下几种范式。

联合表示空间(Joint Representation Space)

联合表示将所有模态通过统一的神经网络编码器映射到同一个语义空间,使得语义相关的跨模态样本在该空间中距离接近。3

设模态集合为 ,联合表示学习的目标是学习映射函数:

使得:

典型模型:早期多模态模型如 VGG4、ResNet5 用于视觉编码,TextCNN、LSTM 用于文本编码,通过拼接或注意力机制融合。

协调表示空间(Coordinated Representation Space)

协调表示保持各模态的独立编码器,但通过额外的约束或损失函数使不同模态的表示在某个空间中保持协调关系。6

与联合表示不同,协调表示的关键特征是:

  • 各模态拥有独立的编码器
  • 通过跨模态损失约束表示关系
  • 可以实现模态间的零样本迁移

典型应用CLIP7InfoNCE 对比学习框架。

跨模态映射(Cross-modal Mapping)

跨模态映射学习从一种模态到另一种模态的转换函数:

典型任务包括:

  • 图像描述生成(Image Captioning):视觉 文本
  • 视觉问答(VQA):视觉 + 文本 文本
  • 文本到图像生成:文本 视觉
  • 语音识别:音频 文本

多模态编码器设计原则

设计高效的多模态编码器需要考虑以下原则:

1. 模态特定编码(Modality-specific Encoding)
每种模态应使用适合其特性的编码器:

  • 视觉:CNN、Vision Transformer (ViT)8
  • 文本:Transformer、SSM
  • 音频:1D CNN、Wav2Vec9

2. 统一tokenization
将不同模态转换为统一的token序列:

  • 图像:patch embedding
  • 文本:subword/word embedding
  • 音频:mel-spectrogram patches

3. 模态对齐(Modality Alignment)
确保不同模态的表示在同一语义空间中可比较。


模态融合策略

多模态融合是决定不同模态信息如何交互和组合的关键环节。根据融合发生的阶段和方式,主要分为以下三类策略。

Early Fusion(早期融合)

Early Fusion(特征级融合)在模型的早期阶段将所有模态的原始或浅层特征拼接在一起,然后通过统一的网络进行联合学习。

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Vision     │    │   Text      │    │   Audio     │
│  Features   │    │   Features  │    │   Features  │
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       │                  │                  │
       └──────────────────┼──────────────────┘
                          ▼
                   ┌─────────────┐
                   │ Concat/Add  │
                   │ (Early)     │
                   └──────┬──────┘
                          ▼
                   ┌─────────────┐
                   │   Joint     │
                   │   Encoder   │
                   └──────┬──────┘
                          ▼
                   ┌─────────────┐
                   │   Task      │
                   │   Head      │
                   └─────────────┘

优点

  • 可以在早期学习模态间的复杂交互
  • 端到端优化,简单直接
  • 充分利用低层特征的互补性

缺点

  • 需要处理同步和对齐问题
  • 容易受到模态缺失影响
  • 不同模态特征分布差异可能影响学习

代码示例

import torch
import torch.nn as nn
 
class EarlyFusionModel(nn.Module):
    """
    Early Fusion: 拼接各模态特征后联合编码
    """
    def __init__(self, vision_dim, text_dim, audio_dim, joint_dim):
        super().__init__()
        # 模态特定投影层(将不同模态映射到相同维度)
        self.vision_proj = nn.Linear(vision_dim, joint_dim)
        self.text_proj = nn.Linear(text_dim, joint_dim)
        self.audio_proj = nn.Linear(audio_dim, joint_dim)
        
        # 联合编码器
        self.joint_encoder = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(d_model=joint_dim, nhead=8),
            num_layers=4
        )
        
        self.classifier = nn.Linear(joint_dim, 1)
    
    def forward(self, vision_feat, text_feat, audio_feat, padding_mask=None):
        # 各模态特征投影到统一空间
        v = self.vision_proj(vision_feat)  # (B, N_v, D)
        t = self.text_proj(text_feat)       # (B, N_t, D)
        a = self.audio_proj(audio_feat)    # (B, N_a, D)
        
        # 早期拼接
        fused = torch.cat([v, t, a], dim=1)  # (B, N_v+N_t+N_a, D)
        
        # 联合编码
        encoded = self.joint_encoder(fused, src_key_padding_mask=padding_mask)
        
        # 池化后分类
        pooled = encoded.mean(dim=1)
        return self.classifier(pooled)

Late Fusion(晚期融合)

Late Fusion(决策级融合)在各模态独立编码和决策后,通过加权投票或元学习器融合各模态的输出。

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Vision     │    │   Text      │    │   Audio     │
│  Encoder    │    │   Encoder   │    │   Encoder   │
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       ▼                  ▼                  ▼
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Vision     │    │   Text      │    │   Audio     │
│  Classifier │    │   Classifier│    │   Classifier│
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       │                  │                  │
       └──────────────────┼──────────────────┘
                          ▼
                   ┌─────────────┐
                   │   Fusion    │
                   │   (Late)    │
                   └──────┬──────┘
                          ▼
                   ┌─────────────┐
                   │   Final     │
                   │   Decision  │
                   └─────────────┘

优点

  • 模态独立训练,灵活性高
  • 可以处理模态缺失问题
  • 便于解释各模态的独立贡献

缺点

  • 无法学习模态间的深层交互
  • 可能错过低层特征的互补信息
  • 融合策略设计较为关键

代码示例

class LateFusionModel(nn.Module):
    """
    Late Fusion: 各模态独立编码后加权融合
    """
    def __init__(self, vision_dim, text_dim, audio_dim, num_classes):
        super().__init__()
        # 各模态独立编码器
        self.vision_encoder = VisionEncoder(vision_dim, 512)
        self.text_encoder = TextEncoder(text_dim, 512)
        self.audio_encoder = AudioEncoder(audio_dim, 512)
        
        # 各模态独立分类器
        self.vision_classifier = nn.Linear(512, num_classes)
        self.text_classifier = nn.Linear(512, num_classes)
        self.audio_classifier = nn.Linear(512, num_classes)
        
        # 模态重要性学习器
        self.fusion_weights = nn.Sequential(
            nn.Linear(512 * 3, 128),
            nn.ReLU(),
            nn.Linear(128, 3),
            nn.Softmax(dim=-1)
        )
    
    def forward(self, vision_x, text_x, audio_x):
        # 各模态独立处理
        v_feat = self.vision_encoder(vision_x)
        t_feat = self.text_encoder(text_x)
        a_feat = self.audio_encoder(audio_x)
        
        # 各模态独立预测
        v_logit = self.vision_classifier(v_feat)
        t_logit = self.text_classifier(t_feat)
        a_logit = self.audio_classifier(a_feat)
        
        # 学习融合权重
        concat_feat = torch.cat([v_feat, t_feat, a_feat], dim=-1)
        weights = self.fusion_weights(concat_feat)
        
        # 加权融合
        logits = weights[:, 0:1] * v_logit + \
                 weights[:, 1:2] * t_logit + \
                 weights[:, 2:3] * a_logit
        
        return logits

Cross Fusion(跨模态融合)

Cross Fusion(层次化跨模态交互)通过多轮交叉注意力实现模态间的深层交互,是当前主流多模态大模型采用的策略。10

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Vision     │    │   Text      │    │   Audio     │
│  Tokens     │    │   Tokens    │    │   Tokens    │
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       │                  │                  │
       ▼                  ▼                  ▼
┌─────────────────────────────────────────────────┐
│              Cross-Modal Attention              │
│  ┌─────────────────────────────────────────┐   │
│  │ V ← T: Vision attends to Text           │   │
│  │ T ← V: Text attends to Vision           │   │
│  │ A ← V/T: Audio attends to V and T       │   │
│  └─────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘
                          │
                          ▼
                   ┌─────────────┐
                   │   Unified   │
                   │   LLM       │
                   └─────────────┘

典型架构:LLaVA11、InstructBLIP12、Qwen-VL13

优点

  • 支持深层模态交互
  • 灵活处理多模态输入
  • 便于利用预训练语言模型能力

缺点

  • 计算复杂度较高
  • 对齐质量影响最终效果
  • 训练复杂度增加

融合策略对比

策略融合阶段交互深度计算复杂度模态缺失处理典型应用
Early Fusion特征级浅层中等困难早期多模态模型
Late Fusion决策级无直接交互灵活多专家系统
Cross Fusion层次化深层中等VLM、LMM

跨模态对齐方法

跨模态对齐(Cross-modal Alignment)是将不同模态的表示映射到统一语义空间的核心技术,是多模态学习的基础。14

Contrastive Learning for Alignment

对比学习通过拉近正样本对、推远负样本对实现跨模态对齐,是当前最重要的对齐方法。

CLIP(Contrastive Language-Image Pre-training)

CLIP7 由 OpenAI 提出,通过大规模图像-文本对学习通用的视觉-语言表示:

import torch
import torch.nn as nn
import torch.nn.functional as F
 
class CLIPLoss(nn.Module):
    """
    CLIP 对比损失:图像-文本双塔结构
    """
    def __init__(self, temperature_init=0.07):
        super().__init__()
        self.temperature = nn.Parameter(torch.tensor(temperature_init))
    
    def forward(self, image_features, text_features):
        """
        Args:
            image_features: (B, D) 图像特征
            text_features: (B, D) 文本特征
        Returns:
            对比损失(双向)
        """
        # L2 归一化
        image_features = F.normalize(image_features, dim=-1)
        text_features = F.normalize(text_features, dim=-1)
        
        # 计算相似度矩阵
        logits = (image_features @ text_features.T) * torch.exp(self.temperature)
        
        # 对角线为正样本
        labels = torch.arange(len(logits), device=logits.device)
        
        # 双向损失
        loss_i2t = F.cross_entropy(logits, labels)  # 图像到文本
        loss_t2i = F.cross_entropy(logits.T, labels)  # 文本到图像
        
        return (loss_i2t + loss_t2i) / 2

CLIP 的关键设计:

  • 双塔结构:图像和文本独立编码
  • 大规模预训练:4亿图像-文本对
  • 零样本能力:可泛化到新分类任务

SigLIP

SigLIP15 由 Google 提出,使用 Sigmoid 损失替代 Softmax,实现了更好的规模化性能:

其中 当且仅当 构成正样本对。

Alignment Losses

InfoNCE Loss

InfoNCE 是对比学习中最常用的损失函数,详见 对比学习与InfoNCE

其中 是样本 的相似度, 是温度参数。

Triplet Loss

Triplet Loss16 通过三元组 约束表示空间:

其中 是间隔(margin)参数。

对齐的数学表示

跨模态对齐可以形式化为优化问题。设 分别表示视觉和文本模态,对齐的目标是学习映射函数使得:

其中:

  • 是正样本对(语义相关)的联合分布
  • 是负样本对的分布
  • 是距离函数(如余弦距离)
  • 是平衡参数

关键挑战

表示对齐(Representation Alignment)

不同模态的表示空间具有不同的几何特性:

  • 文本表示往往呈现类别不均衡的分布
  • 视觉表示呈现长尾分布
  • 音频表示受采集设备影响大

解决方法

  • 对比学习正则化
  • 模态无关特征提取
  • 对齐损失约束

语义融合(Semantic Fusion)

如何有效融合互补信息而非冗余信息:

互补信息:某一模态独有的语义
冗余信息:多模态共享的语义

理想的多模态系统应:

  • 保留互补信息
  • 高效处理冗余信息
  • 避免噪声放大

跨模态推理(Cross-modal Reasoning)

基于多模态信息进行复杂推理:

  • 视觉问答中的多跳推理
  • 图文理解的隐式关联
  • 视频理解中的时序推理

模态不平衡(Modality Imbalance)

不同模态在训练时可能存在:

  • 数据量不平衡:文本数据远多于图像
  • 学习速度不平衡:某些模态收敛更快
  • 表示能力不平衡:某些模态表达能力更强

解决方法

  • 模态特定学习率调整
  • 对抗性训练
  • 知识蒸馏

分布迁移(Distribution Shift)

多模态模型在实际部署时面临的分布变化:

  • 训练集与测试集模态分布差异
  • 模态缺失或噪声
  • 领域适配问题

理论基础

信息瓶颈视角

从信息瓶颈(Information Bottleneck, IB)17 的角度,多模态学习可以建模为优化以下目标:

约束:

其中 是融合表示, 是标签。该框架表明:

  • 压缩:丢弃模态特定的冗余信息
  • 预测:保留与任务相关的信息
  • 约束:控制模态间信息泄露

多模态学习理论分析

从泛化理论角度,多模态学习的样本复杂度与单模态学习存在差异。18

是模态 的样本数, 是表示维度, 是期望误差上界:

其中 是模态 的权重。理论上,多模态学习的泛化误差可以比单模态更低,因为:

  • 冗余学习:多个模态提供冗余信息
  • 互补学习:不同模态捕获不同特征

泛化理论

从 PAC-Bayes 框架19 分析多模态学习的泛化界:

其中 是后验分布, 是先验分布。该界表明:

  • 更紧的先验(跨模态知识)可以改善泛化
  • 表示对齐减少了需要学习的自由参数
  • 模态多样性提供了更强的正则化

代码实践:多模态融合模块

以下是一个完整的 PyTorch 实现,展示了 Early Fusion、Late Fusion 和 Cross Fusion 三种策略:

import torch
import torch.nn as nn
import torch.nn.functional as F
from typing import Dict, List, Optional
 
class MultimodalFusion(nn.Module):
    """
    多模态融合框架:支持 Early、Late 和 Cross Fusion
    """
    def __init__(
        self,
        vision_dim: int = 768,
        text_dim: int = 768,
        audio_dim: int = 512,
        hidden_dim: int = 512,
        num_classes: int = 10,
        fusion_type: str = "cross"  # "early", "late", "cross"
    ):
        super().__init__()
        self.fusion_type = fusion_type
        
        # 模态特定编码器
        self.vision_encoder = nn.Sequential(
            nn.Linear(vision_dim, hidden_dim),
            nn.LayerNorm(hidden_dim),
            nn.GELU()
        )
        
        self.text_encoder = nn.Sequential(
            nn.Linear(text_dim, hidden_dim),
            nn.LayerNorm(hidden_dim),
            nn.GELU()
        )
        
        self.audio_encoder = nn.Sequential(
            nn.Linear(audio_dim, hidden_dim),
            nn.LayerNorm(hidden_dim),
            nn.GELU()
        )
        
        if fusion_type == "early":
            self.fusion_layer = self._build_early_fusion(hidden_dim)
        elif fusion_type == "late":
            self.fusion_layer = self._build_late_fusion(hidden_dim, num_classes)
        elif fusion_type == "cross":
            self.fusion_layer = self._build_cross_fusion(hidden_dim)
    
    def _build_early_fusion(self, hidden_dim):
        """Early Fusion: 拼接后联合编码"""
        return nn.Sequential(
            nn.Linear(hidden_dim * 3, hidden_dim * 2),
            nn.LayerNorm(hidden_dim * 2),
            nn.GELU(),
            nn.Linear(hidden_dim * 2, hidden_dim),
            nn.LayerNorm(hidden_dim),
            nn.Linear(hidden_dim, 1)
        )
    
    def _build_late_fusion(self, hidden_dim, num_classes):
        """Late Fusion: 各模态独立预测后加权"""
        self.modality_classifiers = nn.ModuleDict({
            'vision': nn.Linear(hidden_dim, num_classes),
            'text': nn.Linear(hidden_dim, num_classes),
            'audio': nn.Linear(hidden_dim, num_classes)
        })
        self.fusion_weights = nn.Sequential(
            nn.Linear(hidden_dim * 3, 64),
            nn.ReLU(),
            nn.Linear(64, 3),
            nn.Softmax(dim=-1)
        )
        return None  # 使用独立分类器
    
    def _build_cross_fusion(self, hidden_dim):
        """Cross Fusion: 跨模态注意力"""
        self.cross_attention = nn.MultiheadAttention(
            embed_dim=hidden_dim,
            num_heads=8,
            batch_first=True,
            dropout=0.1
        )
        self.fusion_encoder = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(
                d_model=hidden_dim,
                nhead=8,
                dim_feedforward=hidden_dim * 4,
                dropout=0.1,
                activation='gelu'
            ),
            num_layers=4
        )
        return nn.Linear(hidden_dim, 1)
    
    def forward_early(
        self,
        vision_feat: torch.Tensor,
        text_feat: torch.Tensor,
        audio_feat: torch.Tensor
    ) -> torch.Tensor:
        """Early Fusion 前向传播"""
        v = self.vision_encoder(vision_feat)
        t = self.text_encoder(text_feat)
        a = self.audio_encoder(audio_feat)
        
        # 拼接并融合
        fused = torch.cat([v, t, a], dim=-1)
        output = self.fusion_layer(fused)
        return output
    
    def forward_late(
        self,
        vision_feat: torch.Tensor,
        text_feat: torch.Tensor,
        audio_feat: torch.Tensor
    ) -> torch.Tensor:
        """Late Fusion 前向传播"""
        v = self.vision_encoder(vision_feat)
        t = self.text_encoder(text_feat)
        a = self.audio_encoder(audio_feat)
        
        # 各模态独立预测
        logits = {
            'vision': self.modality_classifiers['vision'](v),
            'text': self.modality_classifiers['text'](t),
            'audio': self.modality_classifiers['audio'](a)
        }
        
        # 学习融合权重
        concat_feat = torch.cat([v, t, a], dim=-1)
        weights = self.fusion_weights(concat_feat)
        
        # 加权融合
        output = (
            weights[:, 0:1] * logits['vision'] +
            weights[:, 1:2] * logits['text'] +
            weights[:, 2:3] * logits['audio']
        )
        return output
    
    def forward_cross(
        self,
        vision_feat: torch.Tensor,
        text_feat: torch.Tensor,
        audio_feat: torch.Tensor,
        padding_mask: Optional[torch.Tensor] = None
    ) -> torch.Tensor:
        """Cross Fusion 前向传播"""
        v = self.vision_encoder(vision_feat)
        t = self.text_encoder(text_feat)
        a = self.audio_encoder(audio_feat)
        
        # 拼接所有模态 tokens
        # 假设输入已经是 (B, N, D) 格式
        tokens = torch.cat([v, t, a], dim=1)
        
        # 跨模态注意力交互
        attended, _ = self.cross_attention(
            query=tokens,
            key=tokens,
            value=tokens,
            key_padding_mask=padding_mask
        )
        
        # 后续 Transformer 编码
        encoded = self.fusion_encoder(attended)
        
        # 全局池化
        pooled = encoded.mean(dim=1)
        return self.fusion_layer(pooled)
    
    def forward(
        self,
        vision_feat: torch.Tensor,
        text_feat: torch.Tensor,
        audio_feat: torch.Tensor,
        padding_mask: Optional[torch.Tensor] = None
    ) -> torch.Tensor:
        if self.fusion_type == "early":
            return self.forward_early(vision_feat, text_feat, audio_feat)
        elif self.fusion_type == "late":
            return self.forward_late(vision_feat, text_feat, audio_feat)
        elif self.fusion_type == "cross":
            return self.forward_cross(vision_feat, text_feat, audio_feat, padding_mask)
        else:
            raise ValueError(f"Unknown fusion type: {self.fusion_type}")
 
 
# 使用示例
if __name__ == "__main__":
    batch_size = 4
    vision_feat = torch.randn(batch_size, 197, 768)
    text_feat = torch.randn(batch_size, 77, 768)
    audio_feat = torch.randn(batch_size, 100, 512)
    
    # 测试三种融合方式
    for fusion_type in ["early", "late", "cross"]:
        model = MultimodalFusion(fusion_type=fusion_type)
        output = model(vision_feat, text_feat, audio_feat)
        print(f"{fusion_type}: output shape = {output.shape}")

总结

多模态学习是实现通用人工智能的关键技术路径,其核心问题包括:

  1. 表示学习:建立跨模态的统一语义空间
  2. 融合策略:选择适合任务的融合方式(Early/Late/Cross)
  3. 跨模态对齐:通过对比学习等技术实现语义对齐
  4. 理论与实践:从信息论和泛化理论角度理解多模态学习的本质

随着大语言模型和视觉-语言模型的发展,多模态学习正在从理论探索走向实际应用,未来将在多模态对话、多模态推理、具身智能等领域发挥越来越重要的作用。

相关主题

Footnotes

  1. Baltrušaitis T, Ahuja C, Morency L P. Multimodal machine learning: A survey and taxonomy[J]. IEEE transactions on pattern analysis and machine intelligence, 2018, 41(2): 423-443.

  2. Ramachandram D, Taylor G W. Deep multimodal learning: A survey on recent advances and trends[J]. IEEE Signal Processing Magazine, 2017, 34(6): 96-108.

  3. Ngiam J, Khosla A, Kim M, et al. Multimodal deep learning[C]//Proceedings of the 28th international conference on machine learning (ICML-11). 2011: 689-696.

  4. Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.

  5. He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.

  6. Frome A, Corrado G S, Shlens J, et al. DeViSE: A deep visual-semantic embedding model[J]. Advances in neural information processing systems, 2013, 26.

  7. Radford A, Kim J W, Hallacy C, et al. Learning transferable visual models from natural language supervision[C]//International conference on machine learning. PMLR, 2021: 8748-8763. 2

  8. Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16x16 words: Transformers for image recognition at scale[J]. arXiv preprint arXiv:2010.11929, 2020.

  9. Baevski A, Zhou Y, Mohamed A, et al. wav2vec 2.0: A framework for self-supervised learning of speech representations[J]. Advances in neural information processing systems, 2020, 33: 12449-12460.

  10. Liu Y, Han T, Ma S, et al. Summary of chatgpt-related research and perspective towards the future of large language models[J]. Meta-Radiology, 2023: 100017.

  11. Liu H, Li C, Wu Q, et al. Visual instruction tuning[J]. Advances in neural information processing systems, 2024.

  12. Li J, Li D, Savarese S, et al. BLIP-2: Bootstrapping language-image pre-training with frozen image encoders and large language models[J]. arXiv preprint arXiv:2301.12597, 2023.

  13. Bai J, Bai S, Yang S, et al. Qwen-vl: A frontier large vision-language model with versatile abilities[J]. arXiv preprint arXiv:2308.12966, 2023.

  14. Zhou L, Liu H, Bau O, et al. Why are visually grounded linguistic models poor at out-of-distribution object localization?[J]. arXiv preprint arXiv:2309.02747, 2023.

  15. Zhai X, Mustafa B, Kolesnikov A, et al. Sigmoid loss for language-image pre-training[J]. arXiv preprint arXiv:2303.15343, 2023.

  16. Schroff F, Kalenichenko D, Philbin J. FaceNet: A unified embedding for face recognition and clustering[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 815-823.

  17. Tishby N, Pereira F C, Bialek W. The information bottleneck method[J]. arXiv preprint physics/0004057, 2000.

  18. Luo H, Shan Q, Wang C. A theoretical study on multi-modal learning: Representation, fusion, and generalization[J]. arXiv preprint arXiv:2205.07234, 2022.

  19. McAllester D A. A PAC-Bayesian tutorial with a dropout bound[J]. arXiv preprint arXiv:1307.2118, 2013.