LLM生成文本时,是自回归地生成。那每次是把之前所有的token都输入,还是只输入上一个token?
答:在逻辑层面上,是输入“之前所有的token”;但在物理运算层面,我们通过一种技术手段避免了重复计算。
1. 逻辑层面:为什么需要“全量输入”?
LLM(如 GPT 系列)基于Transformer Decoder架构。为了预测下一个词,模型必须理解上文的语境。
如果只输入“上一个 token”,模型就像一个只有极短记忆的人,它知道当前的词,但不知道之前的逻辑。例如:
- 上文:“巴黎是法国的…”
- 当前输入:“的”
- 逻辑:模型需要看到“巴黎”、“是”、“法国”才能准确预测出“首都”。
因此,在自回归生成(Autoregressive Generation)的定义中,每一步生成的概率公式如下:
P ( x t ∣ x 1 , x 2 , . . . , x t − 1 ) P(x_t | x_1, x_2, ..., x_{t-1})P(xt∣x1,x2,...,xt−1)
这代表第t tt个词的产生,取决于前面所有词的序列。
2. 物理层面:KV Cache(键值缓存)技术
虽然逻辑上需要全量信息,但如果每次都把成千上万个词重新通过模型计算一遍,效率会极其低下(计算量呈平方级增长)。
为了解决这个问题,现代 LLM 使用了KV Cache技术:
- 只“计算”最新 Token:实际上,每一轮推理中,只有最新生成的那个 token 会经过完整的神经网络计算。
- 缓存旧信息:之前所有 token 的计算结果(具体为 Attention 机制中的 Key 和 Value 向量)已经存在显存里了。
- 拼接与注意力:模型通过将“新生成的 KV”与“缓存的旧 KV”进行拼接,让新 token 能够与历史信息产生“注意力(Attention)”连接,从而得出预测结果。