type
Post
status
Published
date
Jan 10, 2026
slug
llm-23
summary
tags
碎笔
category
LLM
icon
password
📎
对多模态的知识分散又模糊,想系统性的学习一下,做下记录。
以下的例子为 qwen3-vl

第一部分:视觉编码器 (Vision Encoder) —— “眼睛”

其核心任务是将高维度的像素流(Image/Video)压缩为低维度的语义特征向量(Feature Embeddings)。

1. visual.patch_embed (图像块嵌入层)

  • 功能: 这是视觉处理的第一步(预处理)。它将输入的二维图像(比如 的像素矩阵)“切”成一个个小的正方形块(Patch)。
  • 【技术细节与实例】:
    • 动态分辨率机制(Naive Dynamic Resolution): Qwen-VL 系列通常不强制将图片缩放为固定的 。假设输入一张 的高清图,Patch Size 为
    • 操作: 使用步长(stride)为 14,卷积核大小(kernel)为 14 的 Conv3dConv2d
    • 张量变化: 输入 [B, 3, 1120, 1120] 输出 [B, N_patches, Embed_Dim]。这里 个 Token。

2. visual.blocks (视觉 Transformer 块)

  • 功能: 这是视觉编码器的主体(Backbone),通常由多个 Transformer Encoder 层堆叠而成。
  • 作业:
    • 自注意力机制(Self-Attention): 让图片中的不同 Patch 之间进行交互。
    • 特征提取: 从底层的线条、颜色逐渐提取出高层的语义特征。
    • 旋转位置编码(RoPE): 加入位置编码,确保模型知道每个 Patch 的相对位置。
  • 【技术细节与实例】:
    • 3D-RoPE (mRoPE): Qwen3-VL 极大概率延续了 Qwen2-VL 的设计,使用 3D 旋转位置编码。它不仅编码 空间坐标,还编码时间 (如果是视频输入)。
    • 内部计算: 输入是 [6400, 1280] (假设 hidden_size=1280)。经过 LayerNorm -> QKV Projection -> Window Attention (为了降低计算量,通常不是全局 Attention) -> MLP,输出形状保持 [6400, 1280] 不变,但不仅包含了像素信息,还包含了上下文关系(例如:知道白色的块是“云”而不是“棉花”)。

3. visual.deepstack_merger_list (深度堆叠合并器)

  • 功能: 这是一个专门用于特征降维和压缩的组件。
  • 作业:
    • 空间池化/合并(Spatial Pooling): 将相邻的视觉 Token 合并。
    • 降低计算量: 减少视觉 Token 的总数量,减轻后续语言模型的计算压力。
  • 【技术细节与实例】:
    • C-Abstractor / 2x2 Pooling: 假设前面的 Vision Block 输出了 个 Token。如果直接进 LLM,序列太长,显存会爆。
    • 操作: 执行 的池化操作。将相邻的 (即 4 个)Token 的特征向量进行拼接或平均。
    • 张量变化: Token 数量减少 4 倍。 个 Token。特征维度可能会暂时增加(如果是拼接)然后通过 MLP 降维。这使得模型能处理更高分辨率的图像而不会导致 LLM 的上下文窗口溢出。.
数据集构成:
  • 海量图像-文本对(Image-Text Pairs): 视觉编码器主要基于类似 LAION-5B 的大规模数据集进行预训练,但经过了严格的清洗(Filtering),剔除了低质量、水印严重或描述不符的样本。
  • 交错图文数据(Interleaved Image-Text): 为了支持多图推理,训练数据包含了类似 MMMC4 的交错网页数据。
  • 视频-文本对(Video-Text Pairs): 用于训练时序感知能力,数据来源包括 YouTube 等平台的视频片段及其自动生成的详细描述(Caption)。
训练策略:
  • NaFlex 训练: 并非使用固定 Batch Size,而是使用固定 Token 数量的 Batch。这意味着一个 Batch 里可能包含 5 张大图,也可能包含 100 张小图,通过 Packing 技术填满显存,极大提高了训练效率。
  • Sigmoid Loss 优化: 采用了 Sigmoid 损失代替 Softmax,解决了多标签分类问题(一张图可能对应多个文本描述),并允许更大的 Batch Size 以加速收敛。

第二部分:多模态投影器 (Multi-modal Projector) —— “视神经/桥梁”

核心任务为模态对齐(Modality Alignment)。将视觉特征的“方言”翻译成语言模型能听懂的“通用语”。

1. visual.merger (视觉-语言映射层)

  • 功能: 连接 Vision Encoder 和 Language Model 的桥梁。
  • 作业:
    • 维度转换: 视觉编码器输出的特征维度与语言模型的输入维度不一致,负责投影对齐。
    • 语义对齐: 迫使视觉特征在数学空间上与相关的文本特征靠得更近。
  • 【技术细节与实例】:
    • MLP 结构: 这通常是一个两层或三层的多层感知机(MLP),中间夹带 GELU 激活函数。
    • 维度变换: 假设 Vision Encoder 输出维度是 1280,而 Qwen 语言模型的 Hidden Size 是 3584。
    • 操作:
    • 最终输出: 得到 [B, 1600, 3584] 的张量。这些向量现在被称为 "Visual Embeddings",在数值分布上已经模拟了文本 Embedding 的分布。

3.4 DeepStack 部分的训练细节

数据集构成: DeepStack 的参数是与 LLM 联合训练的。其训练数据严重依赖于高精度对齐数据,例如:
  • OCR 坐标数据(OCR Grounding): 文本内容及其对应的 Bounding Box 坐标。
  • 细粒度图像描述(Fine-grained Captioning): 对图像中微小物体(如手表表盘的数字、背景中的文字)的描述。
训练策略:
  • 联合优化: DeepStack 的投影层参数(Projector Weights)在训练的早期阶段(Stage 1)就开始更新。
  • 梯度流引导: 为了让 ViT 的中间层特征能适应 LLM 的语义空间,训练过程中使用了辅助损失(Auxiliary Loss)来强制 ViT 的中间层输出具有语义可解释性。

第三部分:语言模型 (Language Model) —— “大脑”

核心任务为接收视觉 Token 和文本 Token,进行推理、理解并生成回答。

1. language_model (语言模型主体)

  • 功能: 理解上下文并进行推理。
  • 作业:
    • 接收输入: 它接收混合序列:[视觉Token序列, 用户文本Prompt序列]
    • 注意力处理: 文本 Token 关注前面的视觉 Token。
    • 推理: 计算出应该回答什么内容。
  • 【技术细节与实例】:
    • 输入拼接 (Concatenation):
      • 用户文本:"描述这张图。" Tokenize 得到 [15164, 102, ...] (假设 10 个 Token)。
      • 视觉特征:1600 个 Visual Tokens。
      • LLM 实际输入长度: 个 Token。
    • Attention Mask 策略:
      • 视觉部分: 通常采用双向注意力(Bidirectional Attention),因为看图时,像素之间是全图关联的(左上角的像素应该能看见右下角的像素)。
      • 文本部分: 采用因果掩码(Causal Mask),即 Token $t$ 只能看 $t$ 之前的 Token,不能看未来。
      • 这是 Qwen-VL 架构的一个关键特性,混合了双向和单向注意力。

2. lm_head (语言模型输出头)

  • 功能: 生成最终的文本输出。
  • 作业:
    • 线性层(Linear Layer),映射到词表大小。
    • 概率预测: 计算下一个字是词表中每一个词的概率(Logits)。
  • 【技术细节与实例】:
    • 张量变化: [B, Sequence_Length, 3584] lm_head [B, Sequence_Length, 152064] (Qwen 的词表通常很大,约 15万)。
    • 采样(Sampling): 最后一帧的 Logits 经过 Softmax,配合 Temperature(温度)参数进行采样,选出 ID 为 8921 的 Token(假设对应汉字“猫”),然后将“猫”加回输入序列,继续预测下一个字。

 
MoE 模型的路由重放 → R3创业灵感挖掘与验证指南
Loading...