大语言模型原理详解:从预测下一词到智能涌现

作者:carzy2026.11.04 03:56浏览量:0

简介:大语言模型看似“理解”语言,本质却在做一件朴素的事:根据上文预测下一个 token。本文从分词与词向量讲起,逐步拆解注意力机制、Transformer 架构与训练流程,解释规模化训练为何能催生推理、翻译、代码生成等涌现能力,并附工程实践建议,帮你一次性建立对 LLM 的系统认知。

一、LLM 在做什么:把“语言”变成“猜词”问题

初次使用大语言模型(LLM)的人,往往会被它翻译、总结、写代码、多轮对话甚至一步步推理的表现震撼,进而产生一个疑问:它是不是真的“懂”我在说什么?

从机制层面看,答案出人意料地朴素:LLM 并不先“理解”语义再组织语言,而是把语言这件事压缩成一个可优化的数学任务——给定前文所有 token,预测下一个 token 的概率分布。它做的本质上是概率意义上的“完形填空”,而且每次只填一个空。

这个任务看似简单到有些笨拙,但当它在数万亿 token 的语料上被推到极致时,翻译、摘要、代码生成、推理、对话等能力会自然“长”出来。研究者把这种现象称为涌现:当参数规模、数据规模与算力投入跨过某个阈值后,模型出现小模型所不具备的综合能力,且能力曲线呈非线性跃迁。

可以把一次完整的文本生成拆成五个环节:

  1. 分词:把输入文本切成 token 序列;
  2. 词向量:把每个 token 映射为高维向量;
  3. 注意力计算:让每个 token “回头看”上下文,吸收相关信息;
  4. 层叠的 Transformer 结构:逐层精炼语义表示;
  5. 概率输出与采样:预测并生成下一个 token,循环往复。

下面依次拆解。

二、分词:文本进入模型的第一道工序

计算机不认识汉字,也不认识英文单词,它只认数字。因此文本进入模型前,第一道工序是分词:把连续文本切成一串离散单元,每个单元称为一个 token。token 的粒度介于“字”和“词”之间,可能是单个汉字、完整的词、子词片段,也可能是标点或特殊符号。

以中文为例(概念示意):

  1. "我 喜欢 大 语言 模型" → [314, 52, 88, 120, 455]

工程上普遍采用“子词”方案(典型做法是基于高频字节对逐步合并的统计方法),原因有二:

  • 词表规模可控:既不必为每个词单独建立条目,也不必退化为纯单字处理,在覆盖率与效率之间取得平衡;
  • 抗未登录词:遇到生僻词、专有名词或混合语言文本时,可以拆成子词甚至字节级单元处理,模型不至于“失明”。

分词质量直接影响三件事:词表大小、单条文本的 token 数量(直接关系到上下文长度预算与推理成本),以及模型对代码、公式等非自然语言文本的表达精度。

三、词向量:给每个 token 一张“语义坐标”

每个 token 编号随后会被映射成一个可训练的高维向量,维度从几百到上万不等。可以把它理解为:每个词在模型“脑内”都拥有一组坐标,语义接近的词,坐标也彼此接近。比如“猫”与“狗”在向量空间中距离较近,而“猫”与“显卡”则相距甚远。

更关键的是,向量间的方向与差值还能承载细粒度的语义关系。一个经典的语言学观察是:“男人”与“女人”的差向量,近似平行于“国王”与“女王”的差向量——“男性→女性”这一关系在几何空间中表现为一段相对固定的位移。这说明 embedding 不是随机编码,而是一张可以被几何运算操纵的“语义地图”。

这张地图并非人工标注,而是在训练中自动学得:模型为了更准地预测下一个词,必须把“用法相近的词”放到相近的位置。高质量的语义表示,是整个体系的训练副产品。

四、注意力机制:LLM 的核心引擎

4.1 直觉:读到“它”时,你会回头看

读这句话:“小明把报告交给小红,因为她明天要出差。”当你读到“她”时,会不自觉地回看前文,判断“她”指的是小红还是别人。注意力机制做的正是这件事,并把它写成了可训练的矩阵运算。

对当前位置的每个 token,注意力会:

  1. 回看前面所有 token,逐一打一个相关性分数;
  2. 把分数归一化成一组权重(总和为 1);
  3. 按权重把前文信息加权混合,得到该位置更“懂上下文”的新表示。

相关性高的词被多看一眼,相关性低的词被当作背景噪声弱化——这正是人类阅读时注意力分配的计算化版本。

4.2 Q/K/V:句子内部的迷你检索系统

工程实现上,注意力被组织成一场“查询—检索”,可以理解为一个句子内部的小型搜索引擎:

  • Query(查询):当前 token 发出的“我想找什么”;
  • Key(标签):每个历史 token 暴露的“我是关于什么的”索引;
  • Value(内容):每个历史 token 实际携带的信息本体。

当前 token 拿着自己的 query 去和每个 key 做相似度匹配:匹配度越高,就把对应的 value 取出越多。最终输出是所有 value 的加权求和。

4.3 公式与示意代码

注意力的经典公式:

  1. Attention(Q, K, V) = softmax(QKᵀ / √d_k) · V

分母中的 √d_k 是缩放因子:当向量维度较大时,点积数值会随之膨胀,导致 softmax 后的分布过于尖锐、梯度趋近于零,训练难以推进;除以 √d_k 把分数拉回合理区间。

用简化伪代码表达核心计算:

  1. def attention(Q, K, V):
  2. # Q, K: 序列长度 × d_k 的矩阵;V: 序列长度 × d_v 的矩阵
  3. scores = matmul(Q, K.T) / sqrt(d_k) # 1. 打分:当前词与每个历史词算相似度
  4. weights = softmax(scores, axis=-1) # 2. 归一化:分数变成权重,总和为 1
  5. output = matmul(weights, V) # 3. 汇总:按权重混合历史信息
  6. return output

三行代码对应上文的三步直觉:打分、归一化、加权汇总。

4.4 多头注意力与因果掩码

两个关键工程细节值得单独说明:

  • 多头注意力:单独一组注意力只能捕捉一种关系模式(如指代消解、语法依存或主题关联)。把注意力并行拆成多组“头”,每组在自己的子空间里独立计算,模型就能同时从多个视角理解上下文,最后把各头结果拼接融合。
  • 因果掩码:生成式模型只能“偷看左边”。训练时必须把未来位置的注意力遮住,保证位置 t 的预测只依赖 t 之前的内容——否则“预测下一个词”就变成了作弊的“抄答案”。

五、从注意力到完整架构:注意力负责“看”,前馈网络负责“想”

注意力只负责在 token 之间搬运和混合信息,每个位置还需要独立深加工。这个职责由前馈网络(FFN)承担:它对每个位置的向量做非线性变换,参数量通常占模型的很大比重,被认为承载了大量事实与知识的存储。

现代解码器结构由几十个这样的层堆叠而成,每层遵循“多头注意力 + 前馈网络”的组合,并配合两项稳定设计:

  • 残差连接:让梯度可以直达浅层,使深层网络可以被有效训练;
  • 归一化:稳定每一层的数值分布,加速收敛。

数据在层间流动时,语义表示逐层精炼:底层捕捉局部的语法搭配,中层组合出短语与实体关系,高层浮现篇章主题与任务意图,最终在顶层输出对下一个 token 的预测。

六、训练三部曲:从“语料学徒”到“合格助手”

  1. 预训练:在海量文本上做自监督学习,唯一目标是把“下一词预测”做准。这一阶段不需要人工标注,语料规模可达数万亿 token,模型由此习得语法、常识与世界知识的主体。
  2. 监督微调(SFT):用人工编写的高质量“指令—回答”样本训练,让模型从“续写机器”转变为“听指令办事的助手”,学会遵循格式、组织答案。
  3. 偏好对齐(如基于人类反馈的强化学习):让人类对模型的多个候选回答排序打分,再用这些偏好信号微调模型,使输出更符合“有用、诚实、无害”的标准。

三步走完,一个可对外服务的模型才算真正成型。

七、推理:一段文字是如何被“逐字”写出来的

推理阶段是一个自回归循环:输入前文 → 模型输出整个词表上的概率分布 → 按策略选出一个 token → 拼接回输入 → 继续预测下一个,直到触发停止条件。

  1. def generate(model, prompt_ids, max_new_tokens):
  2. ids = list(prompt_ids)
  3. for _ in range(max_new_tokens):
  4. logits = model(ids) # 预测下一个 token 的概率分布
  5. next_id = sample(logits, temperature=0.7, top_p=0.9)
  6. ids.append(next_id) # 拼回输入,进入下一轮
  7. return decode(ids)

采样策略决定模型的“性格”:

  • 贪心解码:永远取概率最高者,稳定但容易呆板重复;
  • 温度:调节分布的尖锐程度,低温保守精确,高温发散有创意;
  • 截断采样:只在累积概率达到阈值的头部候选中随机抽取,在质量与多样性之间折中。

工程上还普遍配合键值缓存:缓存已计算过的注意力中间结果,避免每生成一个词都重算全部前文,把生成成本从平方级增长降到接近线性增量。

八、涌现:为什么“猜词”能长出推理与代码

这可能是最反直觉的一环:任务如此简单,复杂能力从何而来?

第一,语料本身是“任务的海洋”。互联网文本天然包含翻译对照、问答、代码、数学推导、论证与反驳。模型为了把下一词预测准,被迫隐式学习这些任务的模式——把一段代码的下一行预测得足够准,本质上就是在“写代码”。

第二,统一的任务形式逼出通用能力。所有任务被压平成同一格式后,模型无法针对某个单一任务过拟合,只能发展出可迁移的语言规律与推理路径。

第三,规模跨过阈值后的非线性跃迁。参数量、数据量与训练算力共同作用,当规模跨过临界点,多步推理、上下文学习(仅在提示中给出少量示例即可执行新任务)等能力以远超线性外推的速度出现。

九、清醒地使用:局限与工程实践建议

理解原理的另一半是理解边界:

  • 幻觉:模型优化的是“像不像合理文本”,而非“是不是事实”,因此可能一本正经地编造细节;
  • 知识时效:参数中的知识冻结在训练截止点,对之后的世界一无所知;
  • 长文本成本:注意力计算量随序列长度平方增长,超长上下文成本高昂,且存在“中段信息利用不足”的现象;
  • 精确计算与严格逻辑仍有短板,关键数值与逻辑链需要外部工具或校验兜底。

对应的工程建议:

  1. 提示工程:任务描述具体、输出格式明确,必要时附少量示例;
  2. 检索增强:把最新事实与私有知识以检索方式注入上下文,而非依赖参数记忆;
  3. 采样与校验:事实型任务使用较低温度,并配合规则或程序化校验兜底关键输出;
  4. 体系化接入:企业落地时,可借助百度智能云等平台提供的大模型通用服务能力完成部署、调用与治理,结合内容安全审核、日志与评测集形成质量闭环,而不是把模型当作不可验证的“黑盒神谕”。

十、结语

LLM 的震撼之处,恰恰在于它把“智能”这个最复杂的问题,简化成了一件最朴素的事:看前文、猜下一词,并在全网语料上把这件事做到极致。分词与词向量解决“语言如何进入数学世界”,注意力解决“上下文里该重视谁”,层叠结构与预训练解决“知识与能力从哪里来”,采样与对齐解决“如何输出得像样”。

理解了这条主线,再去看待 LLM 的强与弱便不再神秘:它的强大来自规模与任务的统一,它的局限也来自同一处——它毕竟只是在概率意义上,把“下一个字”猜得足够好。