← 返回题目列表

视觉 Token 是怎么进入大模型的?

高频 中等 第 9 / 25 题 更新于 2026/09/18
多模态视觉TokenViTProjector

简化版

图像通常先被切成 patch,经视觉编码器变成一串视觉特征,再由 projector 或 resampler 映射到语言模型的隐藏维度,并作为前缀、占位符替换内容或交叉注意力的键值参与推理。视觉 Token 不是文本 tokenizer 切出的“词”,其数量由分辨率、patch 大小和压缩策略决定,位置编码与多模态训练负责让模型理解空间及图文对应关系。

详细版

以 ViT 路径为例:H×W×3 图像按 P×P 切块,每个 patch 展平后线性投影,得到约 (H/P)×(W/P) 个向量;加二维位置编码后送入视觉 Transformer。视觉输出维度通常与 LLM 不同,因此用 MLP/线性 projector 对齐,或由 Q-Former、Perceiver Resampler 用固定数量查询压缩,再通过特殊图像边界 Token 插到文本序列中。

训练会用图文对比、Caption、自回归问答和指令微调建立语义对齐。设计取舍包括:保留多少视觉 Token、是否冻结视觉塔、采用早融合还是 cross-attention,以及如何支持动态分辨率。面试应能算 Token 数,并说明高分辨率为何提高细节但增加 prefill 成本和上下文占用。

pixels -> patch embedding -> vision encoder -> projector/resampler -> LLM hidden states
                                              + text embeddings -> attention -> answer

完整版教学

一、像素为什么不能直接当文字输入

语言模型接收的是固定隐藏维度的一串向量,而原始图像是高宽和颜色通道组成的稠密数组。即使把每个像素当 Token,1024×1024 图也会产生一百多万个位置,计算不可承受,而且单个像素语义太弱。视觉 Token 化的作用是把局部像素聚合成可学习的表示。

它与文本 tokenizer 不同:文本 Token 通常是离散 ID,通过词表查 embedding;视觉 patch 是连续像素,经线性层或卷积得到向量。二者最终形状都可以是 [序列长度, 隐藏维度],这才让统一注意力计算成为可能。

二、Patch Embedding 怎样计算

设输入尺寸 H×W,patch 边长 P,不考虑 padding 时 Token 数为:

N = (H / P) × (W / P)
patch vector dimension = P × P × 3

例如 224×224 RGB 图片用 16×16 patch,会得到 14×14=196 个 patch;每块原始维度为 16×16×3=768。线性投影把 768 维映射到视觉隐藏维度,也可用 kernel 和 stride 都为 16 的卷积一次完成同等切块投影。

patch 越小,空间细节越好,但序列越长。把 P 从 16 降到 8,横纵方向各多一倍,Token 变为四倍。这是多模态推理成本对分辨率和 patch 大小敏感的根源。

记忆钩子:文字是“查表得到向量”,图像是“切块投影成向量”;形式最后相似,来源和数量规律完全不同。

三、视觉编码器补上语义与上下文

裸 patch 只包含局部颜色,无法知道它属于猫耳还是背景。视觉 Transformer 加入位置编码并通过多层自注意力交换信息,逐渐形成物体、场景和关系特征。预训练可来自图像分类、图文对比或大规模图文生成,不同目标会影响细粒度能力。

位置表示非常关键,因为自注意力本身对排列没有天然空间概念。固定二维位置、可学习位置和相对位置各有取舍;动态分辨率时还要处理训练网格之外的长宽比和位置插值。若裁成多个 tile,应额外告诉模型每块在原图的位置。

四、Projector 为什么不可省略

视觉编码器可能输出 1024 维,LLM 隐藏维度可能是 4096,二者不能直接相加或拼入同一序列。Projector 用线性层或 MLP 把视觉特征映射到 LLM embedding 空间,并在多模态训练中学习“视觉概念如何被语言模型消费”。它不仅改维度,也是跨模态接口。

接口Token 数特点
线性/MLP Projector通常保持简单、保留细节,序列长
Q-Former固定查询数用查询从视觉特征提取信息
Perceiver Resampler固定或可调适合压缩可变长度输入
池化/卷积压缩规则减少快,但可能损失小目标

如果 1024 个视觉 Token 被 64 个查询压缩,LLM prefill 显著下降,但压缩瓶颈可能丢失文档小字。接口设计必须与目标任务共同训练和评测。

五、视觉序列怎样与文本融合

最直接的早融合把视觉向量放在特殊 <image> 边界中,与文本 embedding 拼成一条序列,由 LLM 自注意力统一处理。另一类架构在若干语言层加入 cross-attention,文本作为 Query,视觉特征作为 Key/Value;视觉 Token 不必完全占据语言上下文,但模型结构需要改造。

早融合:[BOS][IMG_START][v1]...[vN][IMG_END][问题Token...] -> LLM
交叉注意力:文本隐藏状态 --Query--> 视觉 K/V;再回到语言层

早融合容易复用现有 decoder-only LLM,跨模态交互充分;cross-attention 可隔离两类序列并缓存视觉特征。没有绝对最优,取决于训练成本、上下文预算和是否需要多轮复用图像。

六、模型怎样学会图文对齐

仅把视觉向量插进去,未训练的 LLM 不知道这些向量表示什么。常见过程先固定视觉塔和 LLM,只训练 projector 做图文 Caption 对齐;再用图文问答、OCR、定位和多轮数据指令微调;最后可解冻部分模块提升上限。分阶段训练减少破坏语言能力和显存需求。

对比学习让匹配图文靠近,生成损失则直接优化下一个文字 Token:

L_generation = - Σ_t log p(y_t | y_<t, visual_tokens)

如果训练数据只含概括性 Caption,模型可能会识别主体,却不会读小字或输出坐标。能力来自数据目标,而不是视觉 Token 接口自动产生。

七、动态分辨率与工程代价

固定尺寸会拉伸或丢细节,动态分辨率可保留长宽比并生成不同数量 Token。代价是 batch padding、位置编码和显存调度更复杂。系统常设置最大像素或 tile 数,用全局缩略图加局部块兼顾场景与细节。

视觉 Token 会增加首 Token 前的 prefill,但生成阶段新增每个文字 Token 的成本还取决于 KV Cache。线上应记录输入分辨率、视觉 Token 数、视觉编码耗时、LLM prefill 和解码时间,才能知道该优化 patch、压缩器还是语言模型。

八、常见误区与追问

  • 误区:图片经过文本 tokenizer 变成视觉词。 通常是连续像素经 patch embedding 和视觉编码器得到向量。
  • 误区:Projector 只负责改维度,没有学习价值。 它也是视觉空间到语言空间的可训练接口。
  • 误区:视觉 Token 越多效果一定越好。 冗余会增大成本,过多无关区域还可能干扰注意力。
  • 追问:为什么要加位置编码? patch 序列本身不表达二维位置,定位和空间关系依赖位置信号。
  • 追问:Q-Former 的价值是什么? 用有限可学习查询从长视觉序列提取与语言相关的紧凑表示。
  • 追问:冻结视觉塔有什么利弊? 训练稳定且便宜,但领域图像差异大时会限制适应能力。

九、加强记忆

视觉 Token 的旅程可记成“切、编、投、融、训”:切 patch 控制序列长度,视觉编码器加入空间语义,projector/resampler 对齐维度并压缩,再与文本早融合或交叉注意力交互,最后靠图文目标学会对应关系。能算出 224/16 得到 196 个 patch,并讲清 Token 数、细节和 prefill 的取舍,就真正掌握了这条链路。