在前面的文章中,我们已经讲过 Transformer、Self-Attention、Encoder、Decoder、Tokenizer、位置编码,以及 MLM、CLM、Seq2Seq LM 等训练目标。
但是在学习大语言模型时,还有一些术语几乎每天都会遇到:
参数
Token
Context
Context Length
Embedding
Logits
Softmax
Temperature
Top-k
Top-p
如果这些概念没有彻底搞清楚,后面学习 GPT、BERT、LLaMA、Qwen、DeepSeek、RAG、微调、推理加速时都会比较吃力。
例如,我们经常听到:
这个模型有 7B 参数
上下文长度是 32K tokens
输入会先被 tokenizer 切成 token
模型输出的是 logits,不是直接输出文字
temperature 越高,生成越随机
top-p 可以控制采样范围
这些话看起来很熟悉,但如果追问:
参数到底是什么?
Token 和单词有什么区别?
Context 是不是等于 prompt?
Logits 为什么不是概率?
Temperature 为什么能控制随机性?
很多初学者就会混乱。
所以这一篇我们专门补一章基础术语,把大语言模型从输入到输出的关键概念串起来。
一、大语言模型的一次完整生成流程
在解释术语之前,我们先看一次完整的大模型生成过程。
用户输入一句话:
请解释一下 Transformer 是什么?
模型不会直接理解这句话的字符串形式。
它通常会经历下面几个步骤:
用户文本
↓
Tokenizer 分词
↓
Token IDs
↓
Embedding 向量
↓
Transformer 网络计算
↓
Logits
↓
Softmax 得到概率分布
↓
根据 temperature / top-k / top-p 采样
↓
得到下一个 token id
↓
转换回文字
↓
继续生成下一个 token
也就是说,大语言模型生成文本的本质是:
一次又一次预测下一个 token。
它不是一次性生成完整答案,而是逐 token 生成。
例如:
Transformer
是
一种
基于
注意力
机制
的
神经网络
结构
。
模型每一步都在做:
给定前面的 context,预测下一个 token。
这就是 GPT 类模型的基本工作方式。
二、参数:模型真正学到的东西
我们经常听到:
GPT-3 有 175B 参数
LLaMA 有 7B、13B、70B 参数
某个模型是 1.8B 小模型
这里的 B 是 billion,也就是十亿。
例如:
7B = 70 亿参数
13B = 130 亿参数
70B = 700 亿参数
那么,参数到底是什么?
简单来说:
参数就是神经网络中可以被训练更新的数值。
在 Transformer 中,参数主要存在于这些地方:
Embedding 矩阵
Q/K/V 投影矩阵
Attention 输出矩阵
Feed Forward Network 权重
LayerNorm 参数
输出词表映射矩阵
例如一个线性层:
nn.Linear(512, 2048)
它内部有一个权重矩阵:
[2048, 512]
也就是大约:
2048 × 512 = 1,048,576
个权重参数。这些参数一开始通常是随机初始化的。训练过程中,模型通过大量文本不断预测 token,然后根据预测错误反向传播,更新这些参数。所以可以这样理解:
模型的知识、语言规律、模式识别能力,都以参数的形式存储在神经网络权重中。
当然,这里要注意一点:
参数多,不一定模型就一定强。
模型能力还取决于:
训练数据质量
训练 token 数
模型结构
训练目标
对齐方法
推理策略
这也是前面 Scaling Law 和 Chinchilla 文章中强调的问题。
三、Token:模型真正处理的基本单位
用户输入的是自然语言文本,但模型不能直接处理字符串。
例如:
我喜欢机器学习。
模型不会直接把这句话作为字符串输入神经网络,而是先通过 tokenizer 切成 token。可能得到:
我
喜欢
机器
学习
。
也可能得到:
我
喜欢
机器学习
。
具体怎么切,取决于 tokenizer。Token 可以理解为:
模型处理文本的基本单位。
它可能是:
一个字
一个词
一个子词
一个标点
一个空格片段
一个特殊符号
例如英文句子:
I love machine learning.
可能被切成:
I
love
machine
learning
.
也可能被切成:
I
Ġlove
Ġmachine
Ġlearning
.
这里的 Ġ 可能表示前面有空格。在 BPE、WordPiece、SentencePiece 等 tokenizer 中,token 通常不是完整单词,而是子词单位。
例如:
unbelievable
可能被切成:
un
believ
able
或者:
un
##believable
这取决于具体 tokenizer。
四、Token ID:把 token 转成数字
模型不能直接处理 token 字符串。所以 tokenizer 会把每个 token 映射成一个数字 id。例如词表中可能有:
<pad> → 0
<bos> → 1
<eos> → 2
我 → 100
喜欢 → 245
机器 → 381
学习 → 492
。 → 17
那么句子:
我 喜欢 机器 学习 。
就会被转换成:
[100, 245, 381, 492, 17]
这就是 token ids。神经网络真正接收的不是文字,而是这些数字 id。完整过程是:
文本
↓ tokenizer
tokens
↓ vocab 映射
token ids
例如:
"我喜欢机器学习。"
↓
["我", "喜欢", "机器", "学习", "。"]
↓
[100, 245, 381, 492, 17]
五、Vocabulary:词表是什么?
词表,也叫 vocabulary。它记录了:
token 和 id 的对应关系
可以理解为一个字典:
{
"<pad>": 0,
"<bos>": 1,
"<eos>": 2,
"我": 100,
"喜欢": 245,
"机器": 381,
"学习": 492
}
一般来说,一个大语言模型的词表大小可能是:
32K
50K
100K
150K
不同模型的 tokenizer 不同,词表也不同。
例如:
BERT 使用 WordPiece
GPT 系列常用 BPE 类 tokenizer
LLaMA 使用 SentencePiece
词表大小会影响模型的输入和输出层。如果词表大小是 50,000,隐藏维度是 4096,那么 embedding 矩阵大致是:
[50000, 4096]
也就是说,每个 token id 都对应一个 4096 维向量。
六、Embedding:把 token id 变成向量
Token id 只是一个整数。
例如:
100
245
381
这些数字本身没有语义。所以模型需要 embedding 层,把 token id 映射成连续向量。
例如:
nn.Embedding(vocab_size, d_model)
如果:
vocab_size = 50000
d_model = 4096
那么 embedding 层就是一个矩阵:
[50000, 4096]
输入 token id:
245
就会查表得到一个 4096 维向量:
[0.12, -0.03, 0.87, ..., 0.21]
这一步可以理解为:
token id
↓
embedding lookup
token vector
在 Transformer 中,输入一般会变成:
[batch_size, seq_len, d_model]
例如:
[2, 8, 4096]
表示:
2 条样本
每条 8 个 token
每个 token 是 4096 维向量
七、Context:模型当前能看到的上下文
Context 可以理解为:
模型当前参与计算的上下文内容。
在 GPT 类模型中,模型生成下一个 token 时,会根据前面已经出现的 token 来预测。
例如:
请解释 Transformer 是
此时模型看到的 context 就是:
请解释 Transformer 是
它会基于这个上下文预测下一个 token,可能是:
一种
然后新的 context 变成:
请解释 Transformer 是一种
模型继续预测下一个 token。所以在生成式大语言模型中:
context = prompt + 已经生成的内容
例如:
用户输入:请解释 Transformer
模型已生成:Transformer 是一种
当前 context:请解释 Transformer Transformer 是一种
模型会根据当前 context 继续生成。
八、Context Length:上下文长度
Context length 指的是:
模型一次最多能处理多少 token。
例如:
2048 tokens
4096 tokens
8192 tokens
32K tokens
128K tokens
注意,这里的长度单位是 token,不是字数。例如中文中,一个汉字可能是一个 token,也可能多个字组成一个 token。英文中,一个单词可能是一个 token,也可能被拆成多个 token。
所以:
1000 个汉字 ≠ 1000 tokens
1000 个英文单词 ≠ 1000 tokens
如果模型上下文长度是 4096 tokens,那么它最多只能在一次推理中看到 4096 个 token。超过这个长度,就需要截断、滑动窗口、长上下文扩展、RAG 检索等方法。Context length 很重要,因为它决定了模型能同时参考多少内容。
例如:
短上下文:适合普通问答
长上下文:适合长文档阅读、代码仓库分析、多轮对话、论文总结
但是上下文越长,计算成本通常越高。标准 Self-Attention 的复杂度大致是:
O(n^2)
其中 (n) 是序列长度。也就是说,长度翻倍,attention 计算量可能接近变成 4 倍。
九、Prompt 和 Context 有什么区别?
Prompt 是用户输入给模型的提示。Context 是模型当前实际看到的完整上下文。在第一轮生成时,它们可能很接近。例如用户输入:
请解释 Transformer 是什么?
此时 prompt 和 context 基本一样。但在多轮对话或长生成中,context 往往更大。
例如:
系统提示
历史对话
用户当前问题
模型已经生成的部分回答
这些合起来才是当前 context。所以可以这样理解:
Prompt:用户提供的任务提示
Context:模型当前用于预测下一个 token 的全部可见内容
在聊天模型中,context 往往包括:
system message
user message
assistant message
tool results
历史对话
当前输入
所以,prompt 是 context 的一部分,但 context 不一定只有 prompt。
十、Logits:模型输出的原始分数
很多初学者会误以为模型直接输出 token。其实模型最后一层输出的是 logits。
Logits 可以理解为:
模型对词表中每个 token 给出的原始分数。
假设目标词表只有 5 个 token:
0: <pad>
1: 我
2: 喜欢
3: 学习
4: 。
模型在某一步输出 logits:
[0.1, 2.3, 0.7, 4.8, 1.2]
这不是概率。
它只是每个 token 的原始分数。
对应关系是:
<pad> → 0.1
我 → 2.3
喜欢 → 0.7
学习 → 4.8
。 → 1.2
分数最高的是:
学习
所以如果使用贪心解码,模型会选择:
学习
但 logits 本身还不是最终 token。
完整过程是:
logits
↓ softmax
概率分布
↓ argmax 或采样
token id
↓ tokenizer decode
文本
十一、Softmax:把 logits 变成概率
为了从 logits 中选择 token,通常会先经过 softmax。
Softmax 的公式是:
其中:
-
:第 (i) 个 token 的 logit;
-
:第 (i) 个 token 的概率;
-
所有 token 的概率加起来等于 1。
例如 logits 是:
[1.0, 2.0, 3.0]
经过 softmax 后可能变成:
[0.09, 0.24, 0.67]
这表示第三个 token 的概率最高。
所以:
logits 是原始分数
softmax 后才是概率
在训练时,CrossEntropyLoss 通常会直接接收 logits,不需要我们手动 softmax。
因为 PyTorch 的 nn.CrossEntropyLoss 内部已经包含了:
log_softmax + negative log likelihood
所以训练时一般写:
loss = criterion(logits, target_ids)
而不是:
loss = criterion(softmax(logits), target_ids)
十二、Temperature:控制生成随机性
Temperature 是生成阶段非常重要的参数。它用于调节 logits 的分布,使模型输出更保守或更随机。
通常做法是:
其中:
-
:第 (i) 个 token 的 logit;
-
T:temperature;
-
T 越小,概率分布越尖锐;
-
T越大,概率分布越平滑。
1. Temperature 较低
如果:
temperature = 0.2
logits 会被除以较小的数,相当于放大差距。高分 token 会更突出。模型输出会更确定、更保守。
适合:
代码生成
数学题
事实问答
结构化输出
严谨任务
2. Temperature 较高
如果:
temperature = 1.2
概率分布会更平滑。低概率 token 也有更多机会被采样到。模型输出会更多样、更有创造性。
适合:
故事创作
头脑风暴
广告文案
开放式写作
多样化回答
3. Temperature 等于 0 是什么?
严格来说,temperature 不能直接等于 0。但很多系统中说:
temperature = 0
通常表示:
使用贪心解码,总是选择概率最高的 token
也就是:
next_token = argmax(logits)
这种方式最稳定,但也最缺少多样性。
十三、Temperature 的直观例子
假设模型对下一个 token 有三个候选:
A: 10 分
B: 9 分
C: 3 分
如果 temperature 很低,A 的概率会非常高,模型几乎总是选 A。如果 temperature 较高,B 也有较大机会被选中,甚至 C 偶尔也可能被选中。所以 temperature 控制的是:
模型是否只相信最高分 token
还是愿意探索其他可能 token
一句话总结:
Temperature 越低,输出越稳定;temperature 越高,输出越随机。
十四、Top-k:只从前 k 个 token 中采样
Top-k 是另一种控制生成的方法。它的思想是:
每一步只保留概率最高的 k 个 token,其他 token 全部丢弃。
例如词表中有 50,000 个 token。如果:
top_k = 50
那么模型只会从概率最高的 50 个 token 中采样。这样可以避免模型采到特别离谱的低概率 token。例如模型预测下一个词:
我 喜欢 吃
高概率 token 可能是:
苹果
米饭
面条
水果
火锅
低概率 token 可能是:
量子
飞机
蓝色
如果
Top-k 会把低概率 token 排除掉。所以 top-k 可以减少胡乱生成。但是如果 k 太小,输出可能过于保守。如果 k 太大,控制效果又不明显。
十五、Top-p:只保留累计概率达到 p 的 token
Top-p 也叫 nucleus sampling,中文常叫核采样。它的思想是:
按概率从高到低排序,只保留累计概率达到 p 的最小 token 集合。
例如:
top_p = 0.9
表示只从累计概率达到 90% 的候选 token 中采样。假设候选概率是:
A: 0.50
B: 0.20
C: 0.12
D: 0.08
E: 0.05
F: 0.03
...
从高到低累加:
A = 0.50
A+B = 0.70
A+B+C = 0.82
A+B+C+D = 0.90
那么 top-p 会保留:
A, B, C, D
后面的 token 被丢弃。Top-p 比 top-k 更灵活。因为它不是固定保留多少个 token,而是根据概率分布动态决定候选集合大小。如果模型很确定,候选集合会很小。如果模型不确定,候选集合会变大。
十六、Greedy、Sampling、Beam Search 的区别
生成时常见解码方式有三类:
Greedy Decoding
Sampling
Beam Search
1. Greedy Decoding
每一步都选择概率最高的 token。
优点:稳定、简单、可复现
缺点:可能缺少多样性,容易陷入局部最优
适合:
翻译测试
代码生成
结构化任务
2. Sampling
按概率分布随机采样。
优点:输出多样,有创造性
缺点:可能不稳定,可能采到不合适 token
通常配合:
temperature
top-k
top-p
适合:
创意写作
开放式对话
头脑风暴
3. Beam Search
同时保留多个候选路径,选择整体概率较高的序列。
优点:适合翻译、摘要等任务
缺点:计算更贵,可能生成模板化文本
在传统机器翻译中,beam search 很常见。在现代聊天模型中,更多使用 sampling 方式生成更自然的回答。
十七、这些术语如何串起来?
现在我们把所有术语串成一个完整流程。用户输入:
请解释 Transformer
第一步,Tokenizer 切分:
["请", "解释", "Transformer"]
第二步,转换成 token ids:
[101, 876, 23541]
第三步,Embedding:
[101, 876, 23541]
↓
[3 个 token,每个 token 是 d_model 维向量]
第四步,加入位置信息,进入 Transformer。
第五步,Transformer 输出最后一个位置的 hidden state。
第六步,通过输出层映射到整个词表:
logits: [vocab_size]
第七步,经过 temperature 调整和 softmax:
概率分布: [vocab_size]
第八步,根据 greedy / top-k / top-p 选择下一个 token id。
第九步,把 token id 解码成文本。
第十步,把新 token 加入 context,继续下一轮预测。
整体流程是:
text
↓
tokens
↓
token ids
↓
embeddings
↓
Transformer
↓
logits
↓
probabilities
↓
next token
↓
new context
↓
repeat
这就是大语言模型生成文本的基本过程。
十八、常见误区总结
误区一:Token 等于单词
不一定。
Token 可能是字、词、子词、标点、空格片段。
例如:
unbelievable
可能被切成多个 token。
误区二:参数越多一定越强
不一定。
参数量只是一个维度。
模型能力还取决于:
数据质量
训练 token 数
训练方法
模型结构
对齐方式
推理策略
误区三:Context length 等于能记住所有内容
不完全是。
Context length 表示模型一次能看到多少 token。
但能看到不代表一定能完美利用。
长上下文还涉及:
位置编码
注意力机制
训练长度
检索策略
上下文压缩
误区四:Logits 是概率
不是。
Logits 是 softmax 之前的原始分数。
经过 softmax 后才是概率。
误区五:Temperature 越高越好
不是。
Temperature 越高,生成越随机。
对于严谨任务,太高会增加错误。
对于创作任务,适当提高可以增加多样性。
十九、术语对照表
| 术语 | 中文理解 | 作用 |
|---|---|---|
| Parameter | 参数 | 模型训练得到的权重 |
| Token | 文本基本单位 | 模型处理文本的最小单位 |
| Token ID | token 编号 | 把 token 转成数字 |
| Vocabulary | 词表 | 记录 token 和 id 的映射 |
| Embedding | 向量表示 | 把 token id 转成连续向量 |
| Context | 上下文 | 模型当前可见的输入内容 |
| Context Length | 上下文长度 | 模型最多能处理多少 token |
| Logits | 原始分数 | 模型对每个 token 的预测分数 |
| Softmax | 概率归一化 | 把 logits 转成概率分布 |
| Temperature | 温度系数 | 控制生成随机性 |
| Top-k | 前 k 采样 | 只从概率最高的 k 个 token 中采样 |
| Top-p | 核采样 | 只从累计概率达到 p 的 token 集合中采样 |