标准回答
方式一:Patch 线性投影(ViT 路线,连续 token)
把图像切成固定大小、互不重叠的小块(patch,如 16×16),每个 patch 展平后过一个线性层投影成定长向量,就是一个「图像 token」。再加上位置编码,整张图变成一串 token 送入 Transformer。这类 token 是连续向量,常见于视觉理解和多模态对齐(如把视觉 token 经投影层接入 LLM 输入空间)。
方式二:离散码本量化(VQ-VAE / VQGAN,离散 token)
先用 CNN/Transformer 编码器把图像编码成特征图,再做向量量化:每个位置的特征在一个可学习码本里找最近邻,用码本索引代替它。于是图像被表示成一串离散整数 token,和文本 token 同构,可以直接喂给自回归模型或统一的图文序列模型来生成。
怎么选
理解/对齐任务偏好连续 patch token,信息保留多、易与语言模型拼接;统一生成(一个模型同时处理图文)偏好离散 token,便于用同一套 next-token 目标建模。patch 越小或码本分辨率越高,token 越多、细节越好,但序列变长、算力上升,需要权衡。
常见误区
⚠️ 常见踩坑
图像 token 不一定是离散整数:ViT 的 patch token 是连续向量;只有 VQ-VAE/VQGAN 这类量化方法才得到离散码本索引。两者用途不同,别混为一谈。
追问
追问 1:patch 大小如何影响模型?
patch 越小,token 数量越多,能保留更细的局部细节、利于密集预测,但序列变长、注意力计算量按平方上升,显存和延迟都增加。patch 越大则 token 少、算力省,但细粒度信息损失更多。需在精度与成本间权衡。
追问 2:VQ-VAE 量化为什么需要特殊处理梯度?
「查最近邻取码本索引」这步是不可导的(argmin),无法直接反向传播。常用 straight-through estimator:前向用量化结果,反向时把梯度直接拷贝给编码器输出;同时加码本损失和承诺损失(commitment loss)来对齐编码输出与码本向量,使训练可行。
追问 3:把视觉 token 接入 LLM 通常怎么做?
常见做法是用视觉编码器(如 ViT/CLIP)得到 patch 特征,再经一个投影层或重采样模块(如 MLP、Q-Former、Perceiver Resampler)映射/压缩到 LLM 的词嵌入空间,作为「软提示」token 与文本 token 拼接输入。这样无需改动 LLM 词表即可让其处理图像。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。