一.核心原理
1.1工作机制:预测下一个词
概念:大语言模型的核心工作原理是“预测下一个词”,抛开复杂的算法,其底层运行机制极其简单:给定一段前文(提示词 Prompt),模型会计算下一个最可能出现的词(Token)。直白点说,它就像一个极其强大的“文字接龙”高手,你给它开头,它根据学到的经验(权重)算出后面跟着什么词最合理。
什么是权重?
在大模型语境下,权重(Weight)和参数(Parameter)基本上是同一个意思。我们常说“70B模型”,意思就是它有 700 亿个参数,也就是 700 亿个权重数字。
权重(参数)的规模决定了模型的“智商上限”,但训练数据的质量和算法的效率,决定了模型能不能达到这个上限。现在的顶级 AI 追求的是:用尽可能少的参数,激活尽可能高的智商!
例子:假设我们正在使用一个已经训练好的大语言模型,当我们将提示词“西红柿炒”输入进去时,算法会基于庞大的语料库计算后续词汇出现的概率,最终在输出端给出最高概率的词——“鸡蛋”;同理,输入“这件衣服很”,它会接上“漂亮”;输入“深度”,它会接上“学习”。模型就是通过这样一次又一次地预测并输出 Token,最终连成了一段完整流畅的回复。
1.2完整的工作过程
概念:大语言模型生成一个完整回答的过程,本质上是“逐字预测、文字接龙”的过程,它并不是像人一样先想好整句话再写出来,而是根据已有文本,一步步预测下一个最可能出现的 Token,直到预测出结束符认为回答已经完整。
例子:假设我们向大语言模型提问“中国的首都是哪里?”,算法首先会根据这句话预测出下一个字是“北”;接着,它会将刚输出的“北”和原问题拼在一起作为新的输入,再次预测出下一个字“京”;然后继续把“北京”加上去,预测出标点符号“。”;最后,当模型看到完整的句子“中国的首都是哪里?北京。”时,它终于预测出了终止符<|end_of_sentence|>,至此,一次像接龙一样的完整回答才正式结束。
1.3如何决定下一个token
概念:大语言模型决定下一个 Token 的核心机制叫作自回归生成(Autoregressive Generation),即基于前文上下文,计算出词表中所有 Token 出现的概率分布,再通过采样策略选出概率最高的一个输出。直白点说,就是“用自己刚刚生成的结果,作为预测下一个结果的依据,像滚雪球一样,一步一步往外推”。
例子:假设我们向模型提问“中国的首都是哪里?”,算法首先会计算出下一个词的概率分布,发现“北”的概率最高(占 0.5),于是输出“北”;接着,模型把“北”和原问题拼在一起再次计算,此时“京”的概率飙升至最高(占 0.7),于是输出“京”;最后,模型把“北京”带上再去算,发现标点“。”的概率最高(占 0.9),直到最终输出结束符,完成整个生成过程。
二.Token
概念:Token(词元)是大语言模型理解和处理文本的最小基本单位。大模型不看完整的句子,而是把句子拆成一个一个的 Token 来“理解”和“生成”,这个将文本切分的过程在人工智能领域叫做分词(Tokenization),直白点说,Token 就像是 AI 认识世界的“偏旁部首”或“积木块”。
例子:假设我们将“我爱大模型开发”这句话输入给系统,分词算法会根据预设的词表对这句话进行切分,最终在输出端将其拆解成了四个独立的 Token:“我”、“爱”、“大模型”和“开发”。大模型在后续的运算中,就是把这些拆解出来的 Token 依次送进大脑去理解,并基于它们去预测下一个可能出现的 Token 组合。
2.1定义
概念:大语言模型需要 Token,是因为计算机本质上只能处理数字和数学运算,无法直接理解人类文本,必须通过分词将文本切分为最小计算单元并转化为向量,同时以此解决按“字母”切分粒度过细或按“单词”切分导致词表爆炸的问题,直白点说,Token 就是让计算机既能看懂文本,又能高效计算的“桥梁”和“最优折中方案”。
例子:假设我们将英文单词 "unhappiness" 输入系统
- 第一步,系统将其切分为子词 ["un", "happi", "ness"] 并分配整数 ID [432, 891, 256](解决怎么拆);
- 第二步,因为纯数字无法表达语义,系统会将这三个 ID 映射成一串高维浮点数向量(如将表示开心的 "happi" 向量,加上带有否定方向的 "un" 向量,合成后推向表示难过的 "sad" 方向,解决语义表达)。这种介于字和词之间的子词切分法,既避免了按字母切分带来的计算效率低下,又避免了按完整单词切分导致遇到新造词(如 cryptocurrency)无法识别的问题。
2.2常见形态
Token 的常见的形态:
- 一个完整的单词:Hello 可能是 1 个 Token。
- 单词的一部分:unbelievable 可能会被拆成 un + believe + able(3 个 Token)。
- 标点符号:逗号、句号、感叹号通常各占 1 个 Token。
- 中文情况:中文里,一个汉字通常占 1 到 2 个 Token(视具体词汇频率而定),而不是一个字对应一个 Token。
2.3估算工具
2.4为什么需要Token
概念:大语言模型需要 Token,核心原因有两个:一是计算机只能处理数字和矩阵运算,必须将文本切分(Tokenization)并转化为向量(Embedding)才能让 AI 理解语义;二是为了在“按字母切分”和“按单词切分”之间寻找平衡,解决词汇爆炸和计算效率低的问题,直白点说,Token 就是人类语言转化为机器可懂、且计算高效的“中间语言”。
例子:假设我们将 "unhappiness" 输入系统。第一步,系统将其切分为子词 ["un", "happi", "ness"] 并赋予数字 ID [432, 891, 256],让计算机拿到可以处理的数据;第二步,因为纯数字没有语义,系统将这三个 ID 映射为高维向量(比如 "happi" 在空间中靠近 "happy",而加上带有反向坐标的 "un" 后,合成向量就推向了 "sad")。通过这种介于字和词之间的“子词切分”,既避免了按字母切分导致序列过长、算力爆炸,又避免了按完整单词切分遇到新词(如 cryptocurrency)时模型直接傻眼的问题。
2.5输入token和输出token
什么会是输入token?
输入 token 你发送给模型的提示词所消耗的 token 数量。
- 包含内容:
- 用户输入的文本。
- 如果开启了联网搜索,搜索引擎返回的相关内容也会被计入输入 token。
什么是输出token?
输出 token 模型生成回答所消耗的 token 数量,包含模型返回的完整回复文本。
2.6为什么输出token贵?
以deepseek为例,可以看出输出token是最贵的!
概念:大模型在推理(生成回复)时存在三个致命的硬件瓶颈,核心矛盾在于显存容量大但读取慢(带宽瓶颈),而SRAM速度极快但容量极小(缓存太小)。这导致在输出阶段,GPU算力只能干等数据从显存搬运到SRAM,无法发挥真正实力。
例子:假设我们要让模型生成1000个字的回复。
算力闲置:输入整段提示词时,算力满载;但输出是一个字一个字往外蹦,每次算1个词,GPU算力有95%的时间都在“干等”。
带宽瓶颈:每次算新词,都要把之前所有的历史数据(KV Cache)从显存这个大仓库,搬运到SRAM这个小工作台上。算力再强,搬运速度(显存带宽)跟不上,也会卡死。
显存吃紧:生成的词越多,KV Cache 就越大,一直死死占用着显存不放,导致一块显卡能同时服务的用户数锐减,云厂商成本飙升。
显存 (VRAM):GPU 的外部存储(如 80GB),用于存放模型参数和对话历史(KV Cache)。
SRAM:GPU 内部的缓存区(仅几十 MB),速度极快,是计算单元(Tensor Core)直接读取数据进行计算的地方。
带宽:数据从显存传输到 SRAM 的速度。
三.Vocabulary(词表)
3.1定义
词表是模型预定义的一个映射字典。它包含了模型 “认识” 的所有词元(Token)。
- 每个词元都有一个唯一的数字 ID(索引)。
- 当输入文本时,分词器(Tokenizer)会查阅词表,将句子切割成词表中存在的片段,并转换为 ID 列表输入模型;模型输出的 ID 再通过词表映射回文本。
| Id | Token |
|---|---|
| 0 | ! |
| 1 | # |
| … | … |
在大型语言模型(LLM)的架构中,Vocabulary(词表)是模型理解人类语言的 “字典”。它定义了模型能 “看见” 和 “写出” 的所有基本单位。
3.2常见的此表大小
3.3生成词范围
概念:大模型无法生成词表(Vocabulary)之外的新 Token(无法创造新编号),但可以通过拼接词表内现有的 Token 来组合出任意词表外的新“词(Word)”。如果遇到连 Token 都无法表示的单个字符(如某些 Emoji),则会触发底层的字节级回退,直白点说,就是模型虽然不能造新“积木”,但能用现有的“积木”拼出任何新图案,只是拼的过程会更繁琐。
例子:假设我们将生僻词 "unbelievable" 输入系统。因为词表中没有这个完整的单词,算法会将其拆解为 "un"、"believe"、"able" 三个子词(Token)进行组合输出。原本如果词表里有,只需输出 1 个 Token,现在却需要输出 3 个。这就解释了为什么在处理冷门专业术语或罕见语言时,模型需要生成更多的 Token 来拼凑,从而导致推理速度变慢且计算成本变高。
3.4什么是字节级回退?
概念:字节级回退(Byte-fallback)是现代大模型分词器(如 BPE 算法)采用的一种底层容错机制,为了确保“100%不漏掉任何字符”,当遇到词表(Vocabulary)中不存在的生僻字或罕见 Emoji 时,它不会像传统分词器那样直接抛出[UNK](未知标记)让模型抓瞎,而是降级退回到底层,将这些字符按 UTF-8 编码拆解为多个独立的字节,并映射为词表中的专用字节 Token 送入模型,从而在保证常规词汇处理效率的同时,极大提升了模型处理极端情况的鲁棒性。
例子:假设我们将一个词表里没有的罕见 Emoji “😊” 输入系统,传统分词器发现词表没收录,直接输出[UNK]导致模型丢失语义;触发字节级回退机制后,系统在底层将“😊”的 UTF-8 编码拆解为0xF0、0x9F、0x98、0x8A这 4 个字节,并分别映射成专用的字节 Token(如<byte_0xF0>)送入模型运算,最终成功让模型理解并处理了这个原本不认识的生僻表情。
为什么说这是一个 “极其精妙” 的设计? 在 Byte-fallback 出现之前,为了不让模型遇到生僻字就变 “瞎子”,早期的 GPT-2 采用了 纯字节级 BPE(Byte-level BPE)。也就是说,它的词表干脆完全由最基础的 256 个字节组合而成。
但纯字节级有一个致命缺点:效率太低。英文单词 apple 就要占 5 个 Token,中文 苹果 在 UTF-8 下有 6 个字节,要占 6 个 Token。这会导致大模型的上下文窗口(Context Window)迅速被吃满。
而 Byte-fallback(字节级回退) 则是两者的完美结合(Best of Both Worlds):
- 正常情况下: 词表里有高频的 “苹果”、“apple”、“Hello”,那就直接用大 Token,保证效率。
- 极端情况下: 遇到冷门字、火星文、罕见 Emoji,不报错、不丢弃,而是降级回退到字节模式,保证鲁棒性。