# LLaVA与miniGPT4 ## 概述 LLaVA(Large Language and Vision Assistant)和miniGPT4是两阶段训练的视觉-语言模型代表,它们通过连接预训练的视觉编码器和大语言模型,实现了多模态理解能力。本章节深入分析这两个模型的核心架构和训练方法。 ## 1. LLaVA架构详解 ### 1.1 整体架构 LLaVA采用简洁的"视觉编码器 + 投影层 + LLM"架构: ``` 图像 → Vision Encoder (ViT-L/14) → 投影层 (MLP) → LLM (Vicuna/LLaMA) ↓ 文本提示 → Tokenize → 拼接 → LLM → 文本响应 ``` ### 1.2 MLP投影层设计 **投影层的作用:** 将视觉特征映射到语言模型的嵌入空间 **架构:** ```python class ProjectionLayer(nn.Module): def __init__(self, vision_dim, llm_dim): self.linear1 = nn.Linear(vision_dim, llm_dim) self.activation = nn.ReLU() self.linear2 = nn.Linear(llm_dim, llm_dim) def forward(self, x): x = self.linear1(x) x = self.activation(x) x = self.linear2(x) return x ``` **维度对应:** - ViT-L/14输出:257 tokens × 1024维 - 投影后:257 tokens × 4096维(匹配LLaMA维度) ### 1.3 视觉编码器 使用OpenAI的CLIP ViT-L/14作为视觉编码器: | 参数 | 值 | |------|-----| | 图像分辨率 | 224×224 | | Patch Size | 14×14 | | Transformer层数 | 24 | | 隐藏维度 | 1024 | | 注意力头数 | 16 | | 参数量 | ~428M | CLIP预训练使视觉编码器具备良好的语义理解能力。 ### 1.4 大语言模型 使用Vicuna(基于LLaMA的对话模型)作为语言decoder: | 模型 | 参数量 | 上下文长度 | |------|--------|-----------| | LLaVA-1.0 | 7B/13B | 2048 | | LLaVA-1.5 | 7B/13B | 4096 | ## 2. 两阶段训练策略 ### 2.1 第一阶段:语言-图像对齐预训练 **目标:** 让投影层学习将视觉特征映射到语言空间 **数据:** CC3M数据集(约600K图像-文本对) **训练配置:** ```python # 阶段1配置 batch_size: 256 learning_rate: 1e-3 epochs: 1 optimizer: AdamW temperature: for contrastive loss ``` **训练要点:** - 冻结视觉编码器和LLM参数 - 仅训练投影层MLP - 使用对比学习损失(可选) ### 2.2 第二阶段:指令微调 **目标:** 赋予模型多模态对话能力 **数据:** LLaVA-Instruct-150K数据集 **数据构成:** | 类型 | 数量 | 描述 | |------|------|------| | 对话数据 | 90K | 多轮对话 | | 详细描述 | 40K | 图像详细描述 | | 复杂问答 | 20K | 需要推理的问题 | **训练配置:** ```python # 阶段2配置 batch_size: 32 learning_rate: 2e-5 epochs: 3 optimizer: AdamW weight_decay: 0.01 ``` **训练范围:** - 投影层:可训练 - LLM:可训练(LoRA/QLoRA可选) - 视觉编码器:冻结或轻度微调 ## 3. miniGPT4架构详解 ### 3.1 核心设计理念 miniGPT4的目标是用最少的训练成本实现类似GPT-4的多模态能力: ``` 图像 → EVA (ViT) → Q-Former → LLM (Vicuna) ↓ 冻结 EVA 冻结 LLM 仅训练 Q-Former ``` ### 3.2 Q-Former跨模态连接 miniGPT4使用BLIP-2的Q-Former作为跨模态桥梁: **Q-Former结构:** - 12个Transformer层 - Cross-attention层连接视觉特征 - 32个可学习的query tokens **信息流动:** ``` 视觉特征 → Cross-attention → Query features → 线性映射 → LLM嵌入 ``` ### 3.3 EVA视觉编码器 EVA是基于CLIP的大规模视觉Transformer: | 特性 | EVA-B/16 | EVA-L/14 | |------|----------|----------| | 参数量 | 86M | 304M | | 图像分辨率 | 224/448 | 224 | | 预训练数据 | LAION-2B | CLIP | EVA相比CLIP具有更好的视觉理解能力。 ### 3.4 训练策略对比 | 阶段 | LLaVA | miniGPT4 | |------|-------|----------| | 第一阶段 | CC3M + 投影层训练 | BLIP-2预训练权重 + Q-Former训练 | | 第二阶段 | LLaVA-Instruct微调 | 对话数据微调 | ## 4. 对齐策略分析 ### 4.1 模态对齐的核心问题 视觉编码器产生的特征空间与语言模型的嵌入空间存在差异: **问题:** - 视觉特征:连续、高维、空间结构 - 文本特征:离散、语义抽象 ### 4.2 投影方法对比 | 方法 | 代表模型 | 参数量 | 对齐质量 | |------|----------|--------|----------| | MLP投影 | LLaVA | 40M | 中等 | | Q-Former | miniGPT4 | 185M | 较好 | | Adapter | LLaMA-Adapter | 8M | 可接受 | | LoRA | QLoRA-LLaVA | <1M | 较好 | ### 4.3 轻量化对齐技术 **LLaMA-Adapter方法:** ```python # Adapter结构 class AdapterLayer(nn.Module): self.lora_down = nn.Linear(dim, r) self.lora_up = nn.Linear(r, dim) self.alpha = alpha / r # 缩放因子 def forward(self, x): return x + self.alpha * self.lora_up(self.lora_down(x)) ``` ## 5. 训练数据构建 ### 5.1 LLaVA-Instruct数据集 **构建流程:** ``` Step 1: COCO captions → GPT-4扩展 → 详细描述 Step 2: 图像问答对生成 → 质量过滤 Step 3: 多轮对话构造 → 对话角色分配 ``` **数据集统计:** - 图像总数:158K - 对话轮次:610K - 平均对话长度:3.5轮 ### 5.2 miniGPT4数据生成 使用ChatGPT生成围绕图像的对话: **Prompt模板:** ``` Given an image, generate a conversation that includes questions about the image content and detailed descriptions. The conversation should be natural and informative. ``` ## 6. 模型能力对比 | 能力 | LLaVA | miniGPT4 | |------|-------|----------| | 图像描述 | ✓ | ✓ | | 视觉问答 | ✓ | ✓ | | 多轮对话 | ✓ | ✓ | | 复杂推理 | 较弱 | 中等 | | 中文理解 | 一般 | 一般 | | 推理速度 | 快 | 中等 | ## 7. 关键技术总结 | 技术 | LLaVA | miniGPT4 | |------|-------|----------| | 视觉编码器 | CLIP ViT-L/14 | EVA | | 跨模态连接 | MLP | Q-Former | | LLM | Vicuna-7B | Vicuna-7B | | 训练成本 | ~1天(A100) | ~1天(A100) | | 对齐质量 | 中上 | 良好 | ## 8. 应用场景 | 场景 | LLaVA适用性 | miniGPT4适用性 | |------|-------------|----------------| | 图像标注 | 高 | 高 | | 视觉助手 | 中 | 高 | | 内容创作 | 中 | 中 | | 教育问答 | 中 | 中 | ## 9. 未来改进方向 1. **更大规模视觉编码器**:EVA-CLIP、LLaVA-1.6 2. **更长上下文**:支持高分辨率图像 3. **多语言支持**:扩展到中文等多语言 4. **指令遵循增强**:RLHF/CONFLICT训练 5. **实时视觉理解**:视频流输入支持 LLaVA和miniGPT4开创了视觉-语言模型轻量化训练的新范式,为后续多模态大模型的发展奠定了基础。