前言
大语言模型(英语:Large Language Model,简称LLM)
几乎所有人都有和 DeepSeek、Kimi 这类大语言模型(LLM)对话,却很少有人真正想明白:当你敲下一行文字,点击发送,到模型一字一句吐出回复,这中间到底发生了什么?
其实,抛开那些动辄千亿参数的复杂模型不谈,LLM 的本质非常简单:它就是一个永不停歇的 “文字接龙” 大师,通过一次又一次预测 “下一个字是什么”,最终拼出一整段完整的回复。
整个过程可以拆解为一个清晰的循环流水线,我们用一张图先看懂全貌:
接下来,我们一步步把这个过程拆解开,讲透每一个环节。
第一步:把你的文字,拆成模型能懂的 “积木”——Tokenization
你输入的是一串人类能看懂的字符串,比如:"你好,大模型",但计算机和大模型根本看不懂文字,它们只认识数字。
所以第一步,模型要先把你的文本,拆成一个个最小的、标准化的 “文本积木”,我们称之为Token(词元) 。这个过程就叫做分词(Tokenization) 。
注:这里我使用到了openai的分词网站:platform.openai.com/tokenizer[]
你可能会问,为什么不直接按字或者按词拆分?
这是因为现代 LLM 普遍采用了子词(Subword)分词算法(比如 BPE),它的好处是:
- 兼顾效率与覆盖:用有限的几万种 Token,就能组合出几乎所有的词语,不管是常用词还是生僻词、甚至是你造的新词。
- 解决未登录词问题:比如你输入一个模型没见过的专业术语,它也能把它拆成几个子词来理解,而不是直接报错。
举个例子:
- 英文单词
unhappiness,可能会被拆成un、h、appiness三个 Token; - 中文句子
你好,大模型,可能会被拆成你好、,、大、模型四个 Token。
简单来说,Token 就是模型处理文本的最小单位,1 个 Token 大概对应 0.75 个英文单词,或者 1.5 至 2 个左右的中文字符。
第二步:把积木变成数字 ——Token 到 Token ID 的映射
拆完 Token 之后,模型还是不能直接处理这些字符串,它需要把每一个 Token,转换成一个唯一的整数,这个整数就是Token ID。
这个过程其实就是查表:模型自带了一个预训练好的词汇表(Vocabulary) ,里面记录了每一个 Token 对应的唯一 ID。比如:
你好→ 177519,→ 11大→ 1640模型→ 184232
经过这一步,你输入的整段文字,就从一串字符串,变成了一串纯数字的数组:[177519, 11, 1640, 184232]。
到这里,文本的预处理就完成了,这串数字数组,就是大模型真正的输入。
第三步:大模型的 “思考”—— 编码与上下文理解
现在,这串 Token ID 数组被送入了大模型的核心,开始了模型的Transformer “思考” 过程。
首先,这些 ID 会被转换成向量:
1. 词嵌入:本质是查表操作
词嵌入的底层实现非常直观,就是一个超大的查找表(Lookup Table) :
-
模型会维护一个形状为
[词表大小 |V|, 隐藏维度 d]的权重矩阵,每一行就对应一个Token的语义向量——比如“国王”和“女王”的行向量会非常接近,因为它们的语义相似。 -
当你拿到Token ID之后,直接把这个ID作为索引,从矩阵里取出对应的那一行,就得到了这个Token的嵌入向量,整个过程就是一次简单的数组索引。
-
绝大多数主流大模型(比如GPT、LLaMA系列)都会做权重共享:这个嵌入矩阵,和最后预测下一个Token的输出层权重是同一个,这样可以减少近一半的参数,同时提升模型的泛化能力。
2. 位置编码:给向量注入顺序信息
因为Transformer是并行处理所有Token的,天生不认识序列顺序,所以需要给每个Token注入位置信息,现在主流的实现有两种:
- 传统正弦位置编码(原始Transformer) :用三角函数预计算出位置向量,直接加到词嵌入上,公式是:
这种方式不需要训练,但是处理超长序列的时候泛化能力很差。
- 旋转位置编码(RoPE,当前事实标准) :现在LLaMA、GPT-NeoX等主流模型都用这个,它不是直接加向量,而是通过旋转词嵌入的向量,让两个Token的点积自动带上它们的相对位置信息。这种方式天生支持长度外推,哪怕训练的时候只见过4k的序列,推理的时候也能处理128k甚至百万级的长序列。
3. 自注意力:理解上下文依赖的核心
这是模型理解词与词之间关系的核心,底层的计算流程是:
- 生成Q、K、V向量:每个Token的向量,通过三个独立的可训练权重矩阵,分别投影出三个向量:
- Q(查询):当前Token想要“查找”什么信息
- K(键):当前Token能“提供”什么信息
- V(值):当前Token的实际内容
- 计算注意力分数:用当前的Q,和所有Token的K做点积,点积的结果就代表两个Token的相似度,然后除以√d_k来缩放,避免点积太大导致Softmax饱和、梯度消失。
- 归一化与加权求和:把分数过Softmax,转换成0-1之间的注意力权重,然后用这些权重对所有的V做加权求和,就得到了当前Token的上下文向量——比如当处理“它”的时候,就会自动给前面的“球”或者“机器人”分配很高的权重,实现指代消解。
- 多头注意力:上面的过程会并行做很多次(比如8头、32头),每个头关注不同的依赖关系,比如有的头关注语法结构,有的头关注语义关联,最后把所有头的结果拼起来,再做一次线性变换,就得到了自注意力层的输出。 另外,因为是Decoder-only的生成式模型,这里还会加一个因果掩码:把未来位置的注意力分数设为负无穷,这样Softmax之后权重就是0,保证模型在处理的时候,看不到未来的Token,不会泄露信息。
4. Prefill与KV Cache:推理加速的核心
这一步是把所有输入的Prompt一次性处理完,同时为后面的生成阶段做准备:
-
Prefill阶段:模型会一次性把所有输入的Token都过一遍Transformer层,为每个Token都计算出对应的K和V向量,然后把这些K和V都缓存起来,这就是KV Cache。这个阶段的时间复杂度是O(n²),所以如果你的Prompt很长,这一步会比较慢,也就是你感觉“第一个字出来很慢”的原因。
-
KV Cache的作用:后面生成新Token的时候,就不需要重新计算之前所有Token的K和V了,只需要计算新Token的K和V,拼到缓存里就行。这样生成阶段的时间复杂度就从O(n²)降到了O(n),每生成一个新Token都非常快。
KV Cache工作流程示意图
经过这一步,模型已经完全理解了你输入的内容,接下来就要开始生成回复了。
第四步:预测下一个 Token—— 接龙的第一步
理解了你的问题之后,模型要做的第一件事,就是预测:在我现在的上下文后面,最可能出现的下一个 Token 是什么?
这就是 LLM 最核心的任务:下一个 Token 预测(Next Token Prediction) 。
模型会输出一个概率分布:对应词汇表里所有几万种 Token,每个 Token 出现在下一个位置的概率是多少。比如,在你问了 “你好,请问 LLM 到底是什么?” 之后,模型可能会算出:
我:35% 的概率这:20% 的概率大:15% 的概率- ... 其他所有 Token 的概率
然后,模型会根据你设置的采样策略(比如贪心、Top-P、温度系数等),从这个概率分布里选出一个最合理的 Token ID,作为它生成的第一个回复的 ID。
第五步:解码 —— 把数字变回你能看懂的文字
拿到了预测出来的 Token ID 之后,模型要做的就是把它变回你能看懂的文字,这个过程就是解码(Decoding) 。
其实就是反过来查词汇表:刚才我们是 Token 查 ID,现在是 ID 查 Token。比如预测出来的 ID 是 56568,那对应的 Token 就是我,这样你就能看到模型输出的第一个字了。
这就是为什么你会看到模型是一个字一个字往外吐的 —— 因为它本来就是一个 Token 一个 Token 生成的。
第六步:自回归循环 —— 这就是 LLM 的本质
到这里,模型只生成了一个字,还没完。
接下来,最关键的一步来了:模型会把刚刚生成的这个新的 Token ID,拼到之前的输入序列的末尾,形成一个新的、更长的输入序列。
然后,重复上面的过程:
- 把新的输入序列送入大模型,处理上下文
- 预测下一个 Token 的概率分布
- 采样得到新的 Token ID
- 解码成文字,输出给你
- 再把新的 ID 拼到输入后面,继续循环...
这个循环,我们称之为自回归生成(Autoregressive Generation) ,这就是 LLM 的本质!
它就像玩文字接龙:
- 你出了开头:
你好,请问LLM到底是什么? - 模型接了第一个字:
我 - 然后它把
我加到句子后面,变成:你好,请问LLM到底是什么?我,然后接下一个字:是 - 再加进去,变成:
你好,请问LLM到底是什么?我是,再接:一 - 再加进去,再接:
个 - ...
- 就这样一个字一个字接下去,直到它预测到了结束符(比如
<|endoftext|>),或者生成的内容足够长了,这个循环才会停止。
总结
看到这里你应该明白了,不管是和你聊天、写代码、写论文、还是做推理,所有 LLM 能做的事情,本质上都是这个简单的循环:
预测下一个 Token,把它加到输入里,再预测下一个,循环往复。
那些看似复杂的逻辑、推理、创造力,本质上都是模型在海量的文本数据里,学会了人类语言的规律,然后用这个规律,一次一次地接龙,最终拼出了一段段看似智能的文字。
那么这就是 LLM 的本质:循环预测 “下一个字是什么” 。
感谢你看到这里,如果喜欢的话可以点个关注支持一下吧!欢迎各位在评论区留言!