设:
- 原始上下文:3 个固定 tokenX=[x1,x2,x3]
- 原始上下文跑完,基础 KV 完全固定冻结,记:K0,V0
- 草稿一次性预测 4 个候选:y^1,y^2,y^3,y^4
后一个位置的 K/V,必须依赖前一个生成的 Token + 前面全部 KV,强链式依赖。
第 1 轮:输入X,用K0V0y1=Model(X),生成K1V1KV 变为:K0V0+K1V1
第 2 轮:输入X+y1,依赖新 KVy2=Model(X+y1),生成K2V2
第 3 轮:输入X+y1+y2y3=Model(X+y1+y2)
第 4 轮:输入X+y1+y2+y3y4=Model(X+y1+y2+y3)
4 个 Token = 4 次独立完整前向每一步必须累加 KV、更新 KV、依赖上一步输出,串行锁死。
验证全程,K0,V0永久冻结,不追加、不更新、不递归
把原始上下文 + 4 个草稿 token,拼成一条长序列:S=[x1,x2,x3,y^1,y^2,y^3,y^4]
普通自回归是递进掩码;投机验证做静态三角因果掩码:
- 位置y^1:只能看见x1x2x3
- 位置y^2:只能看见x1x2x3+y^1
- 位置y^3:只能看见x1x2x3+y^1y^2
- 位置y^4:只能看见前面全部
[h1,h2,h3,h4]=TransformerForward(S,K0,V0,MultiCausalMask)
- 只执行1 次大矩阵前向传播
- 一次性并行算出 4 个位置的原生隐藏向量h1∼h4
- 直接投影得到 4 个位置模型标准答案 Logits:y1∗=Head(h1),y2∗=Head(h2),y3∗=Head(h3),y4∗=Head(h4)
⎩⎨⎧y^1=?y1∗y^2=?y2∗y^3=?y3∗y^4=?y4∗前缀连续相等直接全收,错则截断。
y^2逻辑上必须依赖y^1,不先生成y^1怎么算y^2?
计算依赖 ≠ 运行时序依赖
- 自回归:运行时序串行,先算y1写入 KV,再算y2
- 投机验证:掩码模拟依赖,矩阵并行一次性算
把 7 个位置拼成一个大矩阵:
x1x2x3y^1y^2y^3y^4注意力矩阵用掩码强制:
- 第 4 行 (y^1) 只和 1-3 行做注意力
- 第 5 行 (y^2) 只和 1-4 行做注意力
- 第 6 行 (y^3) 只和 1-5 行做注意力
整个大矩阵只做一次多头注意力 + 一次 FFNGPU 矩阵乘法天生并行,一次性把 4 个位置的依赖全部算完,不需要分步等、不需要逐次写 KV。
自回归每算出 1 个 token → 立刻生成新 KV 并入全局 KV下一轮计算必须用更新后的 KV,递归绑定。
投机验证全程只用原始固定K0V04 个草稿 token 只做序列占位 + 掩码构建,不写入主 KV、不更新主 KV跑完一次性比对,合格才批量写入 KV,不合格直接丢弃。
- 自回归:4Token = 4 次前向,KV 逐次叠加递归
- 投机验证:4Token = 1 次大矩阵前向,掩码模拟依赖,KV 全程冻结GPU 一次大矩阵运算,远快于四次小递归运算,就是加速根源。