Foundations

从 token 到多模态

MiniMind-V 的关键不是把一个巨大的视觉系统硬塞进语言模型,而是把图片转成语言模型能处理的一串向量,再让原本的自回归生成流程继续工作。

1. LLM 本质上在预测 token

语言模型看到的是 token 序列,不是自然语言本身。文本会先被 tokenizer 切成 token id,再查 embedding 表得到向量,送入 Transformer。训练时,模型学习在当前位置预测下一个 token;推理时,模型把刚生成的 token 接回输入,继续预测后面的 token。

这个视角很重要:如果图片、声音或动作也能被转换成一串向量,并且这些向量落在语言模型能够融合的空间里,它们就可以参与同一个“预测下一个 token”的流程。

MiniMind-V 的直觉:图像是语言模型没学过的“外语”,SigLIP2 像读图词典,MLP Projection 像翻译器,把视觉特征翻进 MiniMind 的语义空间。

2. VLM 的最小配方

图像输入一张 RGB 图片,统一预处理到视觉编码器期望的尺寸。
视觉编码器ViT / SigLIP2 把图片切成 patch token 并输出视觉特征。
Projector把视觉特征维度映射到 LLM hidden size。
占位替换用投影后的视觉 token 替换文本里的图像占位符 embedding。
自回归输出LLM 像处理文本一样生成回答。

MiniMind-V 采用非常克制的实现:视觉编码器全程冻结,核心可训练模块是 vision_proj,SFT 阶段再解冻 LLM 首尾层,让视觉 token 进入模型后能被吸收,同时尽量保留中间层的语言能力。

3. 为什么是 64 个视觉 token

当前项目使用 siglip2-base-p32-256-ve 作为视觉编码器。输入图像按 256×256 处理,patch size 为 32,因此会形成 8×8 共 64 个 patch token。每个 token 的视觉隐藏维度是 768,随后进入 MMVisionProjector

MiniMind-V 输入占位符示意图

文本 prompt 中的 <image> 会被展开成 64 个 <|image_pad|>,模型再把这些位置的 embedding 替换为视觉特征。

4. 术语速查

术语在 MiniMind-V 里的含义对应位置
Tokenizer把聊天文本、特殊 token 和回答模板转换成 token id。model/tokenizer.json
Embeddingtoken id 对应的向量表示,视觉 token 最终也要进入这个空间。model.model.embed_tokens
Visual Encoder冻结的 SigLIP2 视觉模型,负责从图片提取 patch 特征。MiniMindVLM.get_vision_model
ProjectorLayerNorm + Linear + GELU + Linear,把视觉特征对齐到 LLM hidden size。MMVisionProjector
SFT监督微调,让模型按指令围绕图片回答问题。trainer/train_sft_vlm.py
MoEMixture of Experts,每个 token 只激活部分专家,区分总参数与激活参数。use_moe=1
-100 label交叉熵忽略的标签值,用来只训练 assistant 回复部分。VLMDataset.generate_labels

5. 需要补齐的基础

机器学习与 PyTorch

张量维度、反向传播、optimizer、loss、mixed precision、DataLoader、DDP 是训练脚本里最常出现的概念。

Transformers 生态

AutoTokenizerAutoModelForCausalLMsave_pretrainedtrust_remote_code 影响推理、格式转换和 WebUI。

视觉模型

ViT 把图片切成 patch,SigLIP 系列通过图文对比学习获得图像语义特征,MiniMind-V 使用它的 encoder 输出。

数据工程

项目数据用 parquet 存 conversationsimage_bytes,避免大量零碎图片文件导致读取和解压缓慢。