# Summary
[[斐波那契数列]]:
$fib(n) = fib(n-1) + fib(n-2)$
# 1, 1, 2, 3, 5, 8, 13, 21..
GPT 自回归生成:
$token(n) = f(token(0), token(1),..., token(n-1))$
# "The" → "cat" → "sat" → "on" →..
# Cues
# Notes
自回归 (Autoregressive) 的含义
自回归指的是:用自己之前的输出作为下一步的输入,形成一个循环依赖的过程。
在 GPT 中的具体体现:
看 `model.py` 中的 `generate` 函数 (`mingpt/model.py:283-310`):
```python
def generate(self, idx, max_new_tokens, temperature=1.0, do_sample=False, top_k=None):
for _ in range(max_new_tokens):
# 1. 用当前序列预测下一个token
logits, _ = self(idx_cond)
# 2. 获取最后一个位置的预测
logits = logits[:, -1, :]
# 3. 采样或选择下一个token
idx_next = torch.multinomial(probs, num_samples=1)
# 4. 把预测的token追加到序列末尾,作为下一轮的输入
idx = torch.cat((idx, idx_next), dim=1) # ← 关键:自己的输出变成输入
```
举例说明:
生成 "The cat sat on the mat"
1. 输入: "The" → 预测: "cat"
2. 输入: "The cat" → 预测: "sat"
3. 输入: "The cat sat" → 预测: "on"
4. 输入: "The cat sat on" → 预测: "the"
5. 输入: "The cat sat on the" → 预测: "mat"
每一步都依赖之前所有生成的内容,这就是"自回归":
- 自 = 使用自己生成的结果
- 回归 = 循环反馈到输入中
为什么叫"回归"?
在统计学中,自回归模型 (AR) 用过去的值预测当前值:
$y(t) = f(y(t-1), y(t-2),..., y(t-n))$
GPT 类似:
$token(t) = f(token(0), token(1),..., token(t-1))$
这种逐个生成、依次累积的方式让模型能生成连贯的长文本,但也意味着生成速度较慢(必须串行生成,不能并行)。