VAR:预测下一尺度,而非下一个 patch
交互教程
如果生成器先确定粗略图像,再并行填入更细空间信息呢?VAR 改变了自回归预测的顺序与目标。
前置阅读:VQGAN · VQ-VAE-2 · 注意力与自回归
之前已经能做什么
Section titled “之前已经能做什么”VQGAN 将网格展平后逐码预测。VQ-VAE-2 已使用粗细网格,但各网格的先验仍逐位置生成。VAR 使用多尺度残差 tokenizer,让 Transformer 一次预测下一尺度的全部位置。
改变了什么,为什么
Section titled “改变了什么,为什么”从编码特征与零重建开始。每个尺度缩放剩余残差、用共享字典量化、上采样并变换选中向量,再累加到重建中。下一残差就是尚未解释的部分。共享码 ID 不代表每尺度具有相同空间含义。
阅读顺序从左到右。点击模块,将它与计算和代码对应。代码为教学伪代码;来源链接提供论文方法或已核查的实现。
编码特征
卷积编码器产生最终 latent 特征网格。
f = encoder(x)
residual = f
f_hat = zeros_like(f)残差量化
各尺度表示之前尺度之后的残差。
q = lookup(quantize(resize(residual, s_k)))
contribution = phi_k(upsample(q))
f_hat += contribution
residual -= contribution下一尺度 Transformer
teacher forcing 输入只能包含先前目标尺度的信息。
next_input = resize(f_hat_coarser, s_k)
logits_k = transformer(next_input, level=k)解码累计网格
最终图像解码器读取各尺度贡献之和。
image = decoder(f_hat)逐步理解机制
Section titled “逐步理解机制”小演示计算边长 1、2、3、4 的网格。公开默认边长为 1、2、3、4、5、6、8、10、13、16,平方和为 680 个码位置。十次尺度预测不等于十个 token;token 数也不独立决定延迟。
改变参数,查看计算值,再把它与上方的真实模型说明对照。
解析教学模型 · 控件改变的是例子,不是训练后的研究模型。
教学尺度边长为 1、2、3、4;VAR 的公开尺度序列更长。
| 量 | 值 |
|---|---|
| 教学累计 token 数 | 5 |
| 独立级数的名义 bits | 10.000 |
训练与采样的区别
Section titled “训练与采样的区别”尺度 k 的输入由已累计的粗尺度重建缩放而来。块因果 mask 允许看到截至本尺度的输入,但不暴露本尺度的真实目标码。因此模型可在尺度内部交互,而不读取答案。
训练使用真实粗尺度信息,采样则由先前生成尺度构造。公开 train.py 训练第二阶段并加载 tokenizer,没有提供原始第一阶段的完整配方。代码使用可学习位置与尺度 embedding,而非 RoPE。
论文证据(并非本地复现)
Section titled “论文证据(并非本地复现)”| 条件 | 指标 | 数值 | 解释 |
|---|---|---|---|
| ImageNet 256²;d30-re;论文表 1 | 生成 FID ↓ | 1.73 | 包含拒绝采样;不是 tokenizer rFID。 |
| 默认 tokenizer 尺度序列 | 编码位置数 | 680 | 10 个尺度边长平方之和。 |
这些结果不能证明什么
Section titled “这些结果不能证明什么”最佳生成指标不是重建指标。VAR 比较还涉及参数量与采样选择。并行预测的依赖结构不同于完全逐码模型,这是设计取舍,而非违背概率链式法则。
为什么同尺度 attention 在这里不泄漏目标?
输入来自粗尺度重建;真实同尺度 ID 是标签,而非可见输入值。
来源与后续阅读
Section titled “来源与后续阅读”本页图形与伪代码为教学重绘。论文报告、固定实现观察和解析示例分别标记;未运行研究模型。