从下一个词预测到智能涌现:LLM原理详解

作者:Nicky2026.11.04 05:53浏览量:0

简介:本文从“预测下一个词”这一朴素任务出发,系统拆解大语言模型的核心原理:文本如何转为数字、注意力机制如何捕捉上下文、 Transformer 架构如何堆叠出深层语义,以及规模扩大后翻译、推理、对话等能力为何会“涌现”。读完你将建立一条从分词、嵌入、注意力到生成采样的完整知识链路。

从下一个词预测到智能涌现:LLM原理详解

一、一个朴素到令人怀疑的起点

如果有人告诉你,大语言模型(LLM)的全部工作就是“根据前面的文字,猜下一个字是什么”,你可能会觉得这过于简单,甚至怀疑它凭什么能写代码、做翻译、答问题。但事实恰恰如此:LLM 的核心训练目标就是自回归语言建模——给定前文,预测下一个 token 的概率分布。

用一句话概括:

给我前面的字,我猜下一个字。

这个任务看似朴素,但当它在全网规模的文本上被做到极致时,翻译、总结、写代码、推理、对话等能力便“冒”了出来。这种现象被称为涌现(Emergence):当模型参数量、数据量和计算量跨过某个阈值后,综合能力会出现非线性的跃升。换句话说,规模本身堆出了某种通用性。

下面,我们沿着“文字→数字→向量→注意力→生成”的链路,把原理讲清楚。


二、第一步:把文字变成数字

机器不认识汉字和英语,它只认数字。所以第一步是分词(Tokenization):

  • 把文本切成一串 token(可能是字、词、子词或符号);
  • 每个 token 对应一个整数编号。

例如概念示意:

  1. “我 喜欢 猫” → [314, 52, 998]

注意,这里的编号本身没有语义,只是一个索引。真正的语义信息在下一步——嵌入(Embedding)。

你可以把 embedding 理解成:每个词在模型脑子里都有一组坐标。语义接近的词,坐标也更接近。比如“猫”和“狗”在高维空间中的距离,通常比“猫”和“民主”更近。嵌入层本质上是一个可学习的查找表:输入 token 编号,输出一个稠密向量。

  1. # 概念示意:嵌入查找
  2. embedding_table = nn.Embedding(vocab_size, d_model)
  3. token_ids = torch.tensor([314, 52, 998])
  4. vectors = embedding_table(token_ids) # shape: [3, d_model]

到这里,文本已经变成了模型可以计算的数值矩阵。


三、Transformer 的核心:注意力机制

接下来是关键问题:模型怎么决定一句话里哪些词更重要?

注意力机制做的事很朴素:

  • 对当前这个位置的 token,去看前面所有 token;
  • 给每个历史 token 打一个相关性分数;
  • 然后加权汇总成一个更理解上下文的表示。

用大白话说:你读到 A 时,会回头找 A 指谁。 注意力就是把这种“回头看”写成了矩阵运算。

更具体地说,当前 token 是查询(Query),前面的每个 token 提供两个东西:

  • Key:它是什么内容的标签;
  • Value:它携带的信息本体。

然后 Query 去匹配每个 Key,算相似度。相似度越高,就把对应的 Value 拿更多出来。

注意力机制的经典公式:

[
\text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V
]

拆解一下:

  1. (QK^\top):计算当前 token 与所有历史 token 的相关性分数;
  2. (\sqrt{d_k}):缩放因子,防止点积过大导致 softmax 梯度消失;
  3. softmax:把分数变成权重,且权重之和为 1;
  4. 乘以 (V):用权重把前面那些词的信息混合成一个新的表示。

最终得到的东西可以理解为:这个词在当前语境下应该带着哪些历史信息。

多头注意力:多个视角并行

单个注意力头只能捕捉一种相关性模式。Transformer 使用多头注意力(Multi-Head Attention),让模型同时从多个子空间观察上下文。比如一个头关注语法主谓关系,另一个头关注指代关系,还有一个头关注位置邻近性。多个头的输出拼接后再做线性变换,得到更丰富的表示。

  1. # 概念示意:多头注意力
  2. attn_output = MultiHeadAttention(d_model, num_heads)(query, key, value)

位置编码:让模型知道顺序

注意力本身对位置不敏感——打乱输入顺序,结果可能一样。但语言是有顺序的。因此需要位置编码(Positional Encoding),把位置信息注入到 token 表示中。常见做法包括正弦余弦编码和可学习的位置嵌入。


四、从注意力到完整模型:堆叠与残差

一个 Transformer 层通常包含:

  1. 多头自注意力;
  2. 前馈网络(Feed-Forward Network,通常是两层 MLP);
  3. 残差连接(Residual Connection);
  4. 层归一化(Layer Normalization)。

残差连接让梯度可以绕过深层网络直接回传,使得堆叠几十层甚至上百层成为可能。层归一化则稳定训练过程。

  1. class TransformerBlock(nn.Module):
  2. def __init__(self, d_model, num_heads):
  3. super().__init__()
  4. self.attn = MultiHeadAttention(d_model, num_heads)
  5. self.ffn = FeedForward(d_model)
  6. self.norm1 = nn.LayerNorm(d_model)
  7. self.norm2 = nn.LayerNorm(d_model)
  8. def forward(self, x):
  9. x = x + self.attn(self.norm1(x))
  10. x = x + self.ffn(self.norm2(x))
  11. return x

堆叠 N 个这样的块,就得到了 Transformer 的主体。输入 token 序列经过嵌入和位置编码后,逐层向上传递,每一层都在前一层的基础上提炼更抽象的语义。


五、生成阶段:如何“猜下一个词”

模型最后一层输出每个位置上的隐藏状态,经过一个线性层映射到词表大小,再经 softmax 得到下一个 token 的概率分布。

生成时,模型根据概率分布采样:

  • 贪心搜索:每次选概率最大的 token;
  • 温度采样:通过温度参数调节分布的陡峭程度;
  • Top-k / Top-p 采样:从概率最高的 k 个或累计概率达到 p 的 token 中采样。
  1. logits = model(input_ids)
  2. probs = softmax(logits[:, -1, :] / temperature)
  3. next_token = torch.multinomial(probs, num_samples=1)

然后把这个 token 拼接到输入后面,重复上述过程,就完成了自回归生成。


六、训练目标:为什么“猜下一个词”能学到这么多

训练时,模型在大量文本上做下一 token 预测,损失函数是交叉熵:

[
\mathcal{L} = -\sum{t} \log P(x_t \mid x{<t})
]

梯度下降调整所有参数,使得模型对真实下一个 token 的预测概率越来越高。

这个目标看似简单,但要真正做好,模型必须隐式地学会:

  • 语法规则;
  • 事实知识;
  • 逻辑推理;
  • 指代消解;
  • 甚至代码结构。

因为只有理解了这些,才能更准确地预测下一个词。这就是为什么“猜下一个词”能催生出通用能力。


七、涌现:规模带来的质变

当模型规模(参数量、数据量、计算量)较小时,能力提升是线性的。但当跨过某个阈值后,某些能力会突然出现,比如:

  • 多步推理;
  • 跨语言翻译;
  • 代码生成;
  • 上下文学习(In-Context Learning)。

这被称为涌现能力。目前学术界对涌现的机制仍在研究中,但一个直观解释是:大规模模型学到了更通用的表示,使得原本需要专门训练的任务,可以通过提示(Prompt)直接完成。


八、总结:一条完整链路

回顾全文,LLM 的原理可以浓缩为一条链路:

  1. 分词:文本 → token 序列;
  2. 嵌入:token → 稠密向量;
  3. 位置编码:注入顺序信息;
  4. 多头注意力:捕捉上下文相关性;
  5. 前馈网络 + 残差 + 归一化:逐层提炼语义;
  6. 输出层:预测下一个 token 的概率分布;
  7. 自回归生成:逐步采样,生成完整文本;
  8. 规模扩大:涌现出翻译、推理、对话等综合能力。

所以,LLM 并不是真的“懂”你在说什么。它只是把语言这件事,变成了一个最朴素的任务:给我前面的字,我猜下一个字。但把这个任务在全网文本上做到极致,就足以让机器表现出令人惊讶的智能。