一、自回归模型
自回归模型(Autoregressive Model)
是一种"基于已经生成的内容,逐步预测下一个 token"的模型。
GPT、ChatGPT、LLM 聊天模型,全都是自回归模型
回归(Regression)
用已知信息,预测一个未知值
自回归(Auto + Regression)
用"自己已经生成的结果",继续预测后面的结果
也就是说:
- 模型的输入
- 会不断包含模型刚刚输出的内容
1. GPT 的工作方式
GPT 的本质是不断做这件事:
给定前面的 token
→ 预测下一个 token
→ 把这个 token 接上
→ 再预测下一个
循环到结束
假设句子是: "我 喜欢 吃 苹果"
自回归生成过程是这样的:
1️⃣ 输入:
我
预测:
喜欢
2️⃣ 输入:
我 喜欢
预测:
吃
3️⃣ 输入:
我 喜欢 吃
预测:
苹果
4️⃣ 输入:
我 喜欢 吃 苹果
预测:
<结束>
每一步都依赖之前生成的内容
2. 为什么"流式输出"只能用自回归模型?
因为:
- 模型本身就是 一步一步生成
- 每一步都能立刻返回一个 token
所以:
text
token 1 → token 2 → token 3 → ...
前端才能:
- 边收边渲染
- 像 ChatGPT 一样"打字"
二、非自回归模型
Google 在 2018 年提出的非自回归模型 BERT ,是一个基于 Transformer Encoder 的预训练语言模型。它的核心目标是理解文本,而不是生成文本。
1. 自回归 vs 非自回归
| 对比点 | 自回归模型(GPT) | 非自回归模型(BERT) |
|---|---|---|
| 是否逐 token 生成 | ✅ 是 | ❌ 否 |
| 是否依赖已生成内容 | ✅ 是 | ❌ 否 |
| 是否能流式输出 | ✅ | ❌ |
| 是否适合聊天 | ✅ | ❌ |
| 主要能力 | 生成 | 理解 |
**模型在预测时,一次性"看完整个句子",而不是一个字一个字
2.BERT 的核心结构:Transformer Encoder
Transformer Encoder 是 Google 在 2017 年发表的经典论文《Attention Is All You Need》中提出的 Transformer 模型的一半(前半部分)。
简单来说,它的作用是"理解"输入序列。它接收一串文本(Token 序列),通过复杂的注意力机制,输出这串文本中每个词的上下文相关的向量表示 。
比如 "我吃了一个苹果"和"苹果发布了新手机"中,两个"苹果"对应的输出向量是完全不同的(前者包含水果的语义,后者包含科技公司的语义)
BERT 只使用了 Transformer 的一半结构:
Transformer
├── Encoder ✅(BERT 使用)
└── Decoder ❌(BERT 不用)
Encoder 的特点:
- 可以 同时看到左右上下文
- 使用 双向 Attention
- 更适合做「理解型任务」
📌 GPT 用的是 Decoder(单向)
📌 BERT 用的是 Encoder(双向)
3. BERT 为什么是「双向理解」?
来看一个经典例子:
"我昨天去银行存钱"
这里的 "银行" 是:
- 金融机构?
- 河岸?
GPT(自回归)的问题
GPT 在生成到「银行」时:
- 还没看到后面的"存钱"
- 只能根据左侧上下文猜
BERT 在理解时:
- 同时看到「我 / 昨天 / 去 / 银行 / 存钱」
- 利用前后语义,准确判断
📌 这就是 Bidirectional(双向) 的意义
4. BERT 是如何训练的?
1. Masked Language Model(MLM)
BERT 的核心训练方式:
text
原句:我 喜欢 吃 苹果
处理:我 喜欢 [MASK] 苹果
目标:预测 [MASK] 是 "吃"
特点:
- 不是预测下一个词
- 而是预测"被遮住的词"
2. Next Sentence Prediction(NSP)
让模型判断:
句子 B 是否是句子 A 的下一句?
用于提升:
- 句间关系理解
- 问答 / 推理能力
5. 为什么 BERT 不能用来聊天?
BERT 不是用来"生成文本"的,而是用来"理解文本"的
具体原因:
1️⃣ 非自回归
- 无法逐 token 生成
- 没有"下一步预测"机制
2️⃣ 没有 Decoder
- 没有生成头
- 无法自然续写文本
3️⃣ 训练目标不同
- BERT 训练的是「填空」
- GPT 训练的是「续写」
| 模型 | 定位 |
|---|---|
| BERT | 语言理解引擎 |
| GPT | 语言生成引擎 |