大模型应用入门指北
本文由Gemini3联合创作~
Token
1. 什么是 Token?
简单来说,Token 是模型将文本切分成的最小语义单元。
**英文:** 通常一个单词是一个 Token,或者长单词被拆分为多个 Token(如 `learning` 变为 `learn` + `ing`)。
**中文:** 情况比较复杂。有时一个字是一个 Token,有时一个词(如“电脑”)是一个 Token。
**经验法则:** 在 OpenAI 的模型中,通常 **1000 个 Token 约等于 750 个英文单词**。而中文因为编码效率,1 个汉字通常占用 **1 到 2 个 Token**。
为什么不直接按“字”计算?
如果按“字符”计算,效率太低(模型要处理太多信息);如果按“词”计算,词汇表会无限大(无法处理新词)。Token 化(Tokenization) 是一种折中方案,平衡了计算效率和语义理解。
想象你要用乐高拼出各种单词。
**如果按“字母”给积木:** 你有 26 种积木。虽然能拼出所有词,但拼一个“Supercalifragilisticexpialidocious”要拼 34 次,太慢了。
**如果按“单词”给积木:** 每一个单词都做成一个独立的积木。你会发现积木盒根本装不下(英文有几十万个单词),而且遇到新词(比如拼音或网络热梗)你就没积木用了。
Token 就是“半成品积木”: AI 决定不按字母,也不全按单词。它把常用的词根、前缀、后缀、甚至完整的短词都做成积木。
举个例子:单词 Quickly
模型在处理时,可能并不会把它看作一个整体,而是切分成:
`Quick`(代表含义的词根)
`ly`(代表副词的后缀)
在这里:
`Quick` 是一个 Token。
`ly` 也是一个 Token。
`Quickly` 这个单词是由 **2 个 Token** 组成的。
2. 为什么说它是“最小分割单位”?
当你把一句话喂给 AI 时,它的第一步动作就是分词(Tokenization)。
输入句子: “Learning AI is fun!” 分词结果:
[Learn][ing][ AI][ is][ fun][!]
在这个链条里,Learn 就是模型能识别的最小颗粒度了。它不会再往下拆成 L-e-a-r-n(除非这个词极其罕见,模型不认识)。
结论: 一个 Token 可以是一个完整的单词(如 is)。
一个 Token **也可以**是单词的一部分(如 `ing`)。
模型只认识它“积木盒”(词表)里有的那些片儿。
分词的规律
如果靠人工去制定几万个词、几十种语言的分割规则,这不仅是庞大的工作量,简直是不可能完成的任务。
真相是:Token 的分割规则(词表)确实是在模型训练前就确定的,但它不是由人工制定的,而是由算法“自动学习”出来的。
这个过程叫做 BPE (Byte Pair Encoding,字节对编码)。
算法是如何“偷懒”的?(以 BPE 为例)
算法并不理解语义,它只懂统计频率。想象算法手里有一本巨大的字典,初始状态只有 26 个英文字母和基础符号。
**扫描海量文本:** 算法数一数,发现 `t` 和 `h` 经常挨在一起出现,于是它说:“好,我把 `th` 合并成一个新 Token。”
**继续迭代:** 接下来它发现 `th` 和 `e` 也经常一起出现,于是它又创造了 `the` 这个 Token。
**停止条件:** 这个过程会持续进行,直到 Token 的总数达到了人类预设的一个值(比如 50,000 或 100,000 个)。
结论: 哪些词是完整的 Token,哪些词被切碎,完全取决于这个词在互联网数据中出现的频率。
因为算法是基于统计的,不同语言的统计特征决定了它们的“积木块”形状:
**英文:** 因为有空格自然分隔,算法很容易发现 `ing`、`ed`、`tion` 是高频组合,所以它们常被存为独立 Token。
**中文:** 中文没有空格。算法通过扫描发现“我们”、“中国”、“人工智能”这些词出现的频率极高,于是就把它们整体存为一个 Token。而一些冷僻的字,因为出现频率低,可能就会被拆分成几个**字节(Byte)**级别的 Token。
有趣的事实: 为什么早期的 AI 中文水平差?因为它们的训练数据里英文多、中文少。算法在学 Token 时,把中文当成了“稀有字符”,切得非常碎(一个字拆成 3 个 Token),导致模型处理中文非常吃力且昂贵。
对于确定Token分割规则的时间点,属于预处理阶段:
**确定词表(Vocabulary):** 在正式训练那个聪明的 Transformer 之前,先跑一遍统计算法,生成一个固定的 `tokenizer.json` 文件。
**永久固定:** 一旦模型开始训练,这个词表就**再也不能动了**。如果改了一个 Token 的定义,整个模型看到的数字世界就全乱套了。
**人类的工作:** 编写那段几十行的统计算法代码(BPE 或 SentencePiece),并决定“我想要 10 万个 Token”。
**AI 的工作:** 没日没夜地扫描几万亿字的文本,统计哪些组合最常见,然后自动生成那张庞大的 Token 映射表。
3. Token的概念为什么让人觉得“混乱”?
这是因为在不同的语境下,大家说话的侧重点不同:
**技术实现时:** 我们说“把单词切分成 Token”,这时 Token 指的是**切分后的碎片**。
**算账/限制时:** 我们说“这个模型支持 8k Token 上下文”,这时 Token 指的是**计量的单位**(就像说一篇文章有多少个字一样)。
**模型识别时:** 我们说“Token 是最小单位”,是指模型在数学层面处理的**基本对象**。
4. Token 是如何计算的?
模型在处理信息时,会经历以下三个步骤:
**分词(Tokenization):** 你的输入被切成一串数字。比如 `你好` 变成 `[57032, 230]`。
**向量化(Embedding):** 每个数字对应一个高维空间里的坐标(数学向量),模型通过坐标理解词义。
**预测:** 模型根据前面的 Token 序列,计算出下一个最可能出现的 Token 是什么。
词向量
如果说 Token 是 AI 的单词表,那么词向量就是 AI 的世界观。
前面提到,模型只认识数字(Token ID)。比如“猫”是 123,“狗”是 456。但对计算机来说,123 和 456 只是两个毫无关联的编号。
词向量的作用,就是把每个 Token 映射到一个多维空间里的坐标(一组浮点数)。
**低维视角:** 如果空间只有 2 维,那么“猫”的坐标可能是 `[0.1, 0.5]`。
**高维视角:** 现代大模型(如 GPT-4)的维度通常成千上万。每一个维度都代表了一个潜在的特征(例如:生命力、体型、是否温顺、科属等)。
词向量最神奇的地方在于:语义相近的词,在空间里的距离也更近。
在模型的“脑海”里:
“苹果”和“梨”的坐标挨在一起。
“苹果”和“手机”在另一个维度上可能也会挨在一起。
但“苹果”和“宇宙黑洞”就会离得非常远。
由于词被变成了数字坐标,我们甚至可以对词进行“加减法”。一个最经典的例子是:
$$Vector(\text{King}) - Vector(\text{Man}) + Vector(\text{Woman}) \approx Vector(\text{Queen})$$
这意味着模型通过海量文本学习到了:“国王之于男人,等于女王之于女人”。它理解了“性别”这个抽象维度在数学上的偏移量。
为什么要用词向量?
**处理未见过的关联:** 即使模型没见过“粉红色的独角兽”这个词组,它知道“粉红色”和“红色”很近,“独角兽”和“马”很近,从而能推断出大致意思。
**降维打击:** 将复杂的语言规律压缩成数学规律,让计算机能用线性代数(矩阵运算)飞速处理。
早期的词向量(如 Word2Vec)是静态的。也就是说,无论在什么语境下,“苹果”的向量都一样。
但现在的 AI 使用的是动态词向量:
在“我吃了一个**苹果**”中。
在“我买了一个**苹果**手机”中。
通过 注意力机制(Attention),同一个 Token 会根据周围的词实时改变自己的坐标。这也就是为什么现在的 AI 能分清多义词。
你可能遇到过 AI 话说到一半突然断了,或者不记得之前的对话。这通常是因为触碰了 上下文窗口(Context Window) 的上限。
截断的主要原因:
**内存与计算瓶颈:** 模型在处理每个 Token 时,需要与序列中**所有其他 Token** 进行对比(注意力机制)。这种计算量通常随 Token 数量的平方增长。为了保证响应速度,每个模型都有一个硬性的“容量限制”(如 8k, 32k, 128k Tokens)。
**KV Cache 限制:** 模型运行过程中需要占用显存来存储之前的中间状态。如果对话太长,显存撑不住,就必须扔掉最早的信息。
**输出长度设置:** 有时并非模型不能写,而是你在调用 API 或使用界面时设置了 `max_tokens` 参数。
截断带来的影响
**“失忆”:** 当对话总长度超过模型上限,为了输入新的问题,程序会自动删除最早的对话记录。这也就是为什么聊久了 AI 会忘记它最初的设定。
**逻辑崩坏:** 如果文档太长被强行截断,模型拿到的信息是不完整的,会导致生成的结论断章取义。
注意力机制
注意力机制(Attention Mechanism) 是现代 AI 的“灵魂”。如果没有它,大模型(LLM)充其量只是个死记硬背的复读机;有了它,AI 才具备了理解语境的能力。
我们可以用一个非常直观的例子来切入:读句子。
1. 为什么需要“注意力”?
假设有两句话:
“There’s a lot of money in the bank”
“He was walking on the bank of the river”
在英文中,这两句话里都有 bank 这个单词。如果模型只看 bank 这个 Token,它根本分不清指的是“金融机构”还是“河岸”。当然这里请注意,注意力机制并不是单纯为了区分多义词而作用的,而是将句子中所有的token进行微调,使整个句子中所有的token的向量都朝着符合语境的方向进行偏移。
2.注意力机制的三个核心角色:Q、K、V
在数学实现上,注意力机制通过三个向量来完成“信息匹配”。为了好理解,我们把它类比为“去图书馆找书”**:
**Query (Q - 查询):** 就像你想找的主题。比如:“我想找关于‘bank’的书”。(当前正在处理的 Token)
**Key (K - 键):** 就像书架上每本书的书名标签。模型会拿 Q 去和所有的 K 做对比,看看哪个匹配度最高。(序列中所有 Token 的标签)
**Value (V - 值):** 就像书里的具体内容。一旦匹配成功,就把这本书里的知识拿出来。(序列中所有 Token 携带的实际语义,也就是Token对应的向量值)
运作流程:
我们以第一句话中处理bank这个Token时进行举例,假设模型分词后的token如下:
there、’s、a、lot、of、money、in、the、bank,那么首先将there作为Q,其他所有的token作为K,进行如下步骤,微调there的向量。我们以微调bank这个token时的过程为例:
**打分 (Attention Scores):** `bank`(Q) 与 `money`(K) 计算出一个很高的权重(0.8),与 `there`(K) 计算出一个很低的权重(0.05)。
**提取信息 (Value):** 模型提取 `money` 的 **Value (V)** 向量。
**融合 (Fusion):** 并不是简单地挪动坐标,而是将 **0.8 × `money` 的 V** + **0.05 × `there` 的 V** + …
**更新:** 把这个加权平均后的结果,叠加回 `bank` 本身的向量上。
结果:
bank的向量里现在“吸”进去了大量关于money的数学特征。这个经过“吸星大法”处理后的新向量,就是 Contextualized Embedding(语境化嵌入)。
这里需要注意的是:
1、这种微调并非一次就完成的,在单词推理中,每个token都需要进行多次连续的微调,这与后面介绍的Transformer架构有关。以bank举例,
- 第一层: bank 吸收了 money以及其他token的信息,稍微偏向了“金融”。
- 第二层: 已经带有金融属性的 bank 进一步结合了整个句子的语法结构,理解了它是作为“地点”出现的。
- 第 N 层: 经过层层“精加工”,这个向量已经变得极其精准。
2、刚才的分词列表里:there、's、a… 如果我把句子打乱成:money lot a bank in the… 虽然 Token 没变,但意思全毁了。由于 Attention 机制是同时看全句的(并行计算),它本身其实分不清词的先后顺序。为了解决这个问题,模型在进行QKV 比较之前,会给每个 Token 注入一个“位置信号”。- 计算公式: 最终输入 = 词向量 (Embedding) + 位置向量(Positional Encoding)。
3、模型对于当前Q对其他K的评判权重的标准是通过向量的点积来进行计算的,点积结果大则说明两个向量的相关性高,权重则大。
4、这些对token的微调过程是发生在内存中的,并不会修改词表,Token词表可以当作一本字典,模型只会从字典中取出向量只在内存中做处理,而不会更改字典本身。
3. 自注意力(Self-Attention)
“自”字的意思是:Query、Key、Value 全都来自同一句话。
想象一句话:“机器人因为它没电了所以停止了工作”。 当模型处理到“它”这个词时:
**Query** 是“它”。
它会去扫视整句话(所有的 **Key**)。
计算Q与每个K之间的权重,最终将每个K的权重融入到K的向量中,由于“机器人”的权重最高,因此融合后,“它”和“机器人”的匹配度最高。
于是,“它”这个 Token 的向量里就融入了大量“机器人”的特征。
这就是 AI 能够理解代词指代、长句逻辑的底层秘密。
4. 多头注意力(Multi-Head Attention)
如果只看一个地方,可能会片面。所以大模型通常使用“多头注意力”。
你可以理解为:模型同时派出了 8 个或 16 个不同的“观察员”去看同一句话。
**观察员 A:** 专门看语法结构(动词对应的主语是谁?)。
**观察员 B:** 专门看指代关系(“它”指的是谁?)。
**观察员 C:** 专门看情感色彩。
最后把这些观察员的结论汇总起来,模型对这句话的理解就非常立体了。
5. 总结:注意力机制带来了什么?
**解决长距离依赖:** 哪怕开头和结尾隔了 1000 个词,只要注意力给到位(在维度上离的很近),模型就能把它们关联起来。
**并行计算:** 以前的 AI(如 RNN)必须一个词一个词地读,而注意力机制允许模型**同时**看整句话,也就是说-模型不需要等前面的词算完,它把一整句话(比如 512 个 Token)直接打包成一个巨大的**矩阵 (Matrix)**,然后一次性“喂”给显卡,显卡的几千个核心会同时开工,每个核心负责计算一部分 Token 的 QKV 权重。
Transformer网络
要把 Transformer 讲清楚,我们只需要看懂它解决的核心矛盾:如何让计算机像人一样,一眼扫过去就能理解一整句话,而不是一个字一个字地死抠。
第一层:Transformer 的外壳(它是什么?)
你可以把 Transformer 想象成一个超级黑盒。
**输入:** 一串 Token(比如:`我` `爱` `学习`)。
**输出:** 另一串 Token(比如:`I` `love` `study`)。
它最牛的地方在于:它能够同时处理这一串词,而不是排队处理。
第二层:为什么要发明它?(它的前身是谁?)
在 Transformer 出现之前,AI 主要是靠 RNN(循环神经网络)。
**RNN 的工作方式:** 像排队。先读“我”,再读“爱”,读到“学习”的时候,“我”的信息已经模糊了。
**缺点:** 1. 慢(必须排队);2. 忘性大(句子长了,前面的词就记不住了)。
Transformer 的工作方式: 像拍照片。它一眼看过去,整句话的所有词同时入镜。
第三层:Transformer 的核心结构(两个“加工间”)
Transformer 内部其实只有两种基础的“加工车间”,无论模型多大,都是这两个车间的不断重复。
- 注意力车间 (Attention Layer) —— “建立联系”
这个车间负责解决:这个词在当前环境下到底是什么意思?
比如:
“乒乓球拍卖完了”
- 如果不看周围,AI 不知道是“乒乓球 / 拍卖 / 完了”,还是“乒乓球拍 / 卖完了”。
- **注意力车间的工作:** 它让“球拍”去跟“卖”和“完了”打招呼,发现它们更匹配。
- 思考车间 (Feed-Forward Layer) —— “理解含义”
在“注意力车间”打完招呼、确定了关系后,每个词会进入自己的独立包间进行“思考”。
- 作用: 把刚才得到的“关系信息”转化为更深层的“语义信息”。
第四层:它是怎么堆叠起来的?(乐高模式)
你听到的“GPT-3 有 1750 亿参数”或者“几十层深度”,其实就是把上面这两个车间(注意力+思考)打包成一个标准模块,然后像乐高一样往上叠。
**第一层:** 粗略理解单词意思。
**第十层:** 理解句子语法。
**第五十层:** 理解复杂的逻辑和情感。
第五层:Transformer 的特殊辅助(位置编码)
因为 Transformer 是“拍照片”一眼全看,它会产生一个新问题:它分不清词的顺序! 在它看来,“狗咬人” 和 “人咬狗” 是一模一样的照片。
为了解决这个问题,工程师在输入端给每个 Token 塞了一张**“座位票”**。
`我`(座位 1)
`爱`(座位 2)
这样即使是同时处理,AI 也能通过座位票知道谁先谁后。
总结:Transformer 到底在干嘛?
**贴标签:** 给每个词发一张座位票(位置编码)。
**大合影:** 一眼看完全部词(并行计算)。
**找关系:** 让词与词之间互相对视,确认语境(注意力机制)。
**深加工:** 通过多层叠加,从简单的认字变成理解深层的逻辑。
残差连接 (Residual Connection)
在深度学习中,有一个噩梦叫**“梯度消失”**。如果模型叠了 100 层,信息每经过一层加工,就像玩“传声筒”游戏,传到最后可能就面目全非了,对于这个问题,解决的方法也很简单:
Transformer Block 的公式非常简单:输出 = 原始输入 + 注意力加工后的结果。
作用: 1. 保底机制: 哪怕这一层的注意力机制(Attention)没学好,原始信息也能顺着这条“捷径”流向下一层。 2. 训练更稳: 梯度(学习的信号)可以顺着这条快车道直接传回底层,不会在中间断掉。
这就是为什么现在的模型能叠到上百层,而且每一层都能在上一层的逻辑基础上继续加深,而不会导致逻辑崩溃。
应用预测:它是如何吐出下一个字的?
当 Token 们经过了几十层 Transformer Block 的“洗礼”(互相对视、特征偏移、自我思考)后,它们来到了工厂的出口,我们之前讲的 Token、Embedding、Attention 都是在“数学空间”里算坐标。但最后 AI 必须得给你吐出一个你能看懂的“字”。
此时,模型手里拿着的是一堆极其复杂的坐标(向量)。比如句子是 “人工智能改变了”,最后一个词“了”的输出向量已经包含了全句的精髓。
预测步骤如下:
- 第一步:拿到“全场精华”向量
当你的输入(比如 “床前明月”)经过了几十层 Transformer 的加工,最后一个 Token(也就是“月”字)对应的向量,已经不是原始的“月”了。
这个向量里**融合了**:前面的“床”、“前”、“明”。
这个向量里**理解了**:这大概率是一首唐诗。
这个向量里**预感到了**:接下来该描写动作或意象了。
- 第二步:映射回字符 Linear Layer
现在模型手里攥着一个长度为 768(或者更高)的一排坐标数字。但我们的词表里有 50,000 个 候选 Token(比如“光”、“头”、“饼”、“走”……)。
模型会把这排坐标数字扔进一个巨大的转换矩阵(Linear Layer)。 这个矩阵的作用是:给词表里的 50,000 个词每一个都打个分。
**“光”**:95分(因为“床前明月光”太经典了)
**“饼”**:10分(虽然明月像饼,但在唐诗语境里不合适)
**“头”**:2分(还没到时候)
- 第三步:变成分数概率 Softmax
打完分后,数字可能很大也可能很小。为了方便选择,模型用数学公式把它们压缩到 0% 到 100% 之间,且加起来等于 100%。
**“光”**:98%
**“饼”**:1.5%
**“走”**:0.5%
- 第四步:采样 Sampling
现在概率出来了,“光”占据绝对优势。AI 会根据你的设置(比如 Temperature 温度,该概念会在下一篇文章中讲述)来选:
如果你追求准确,它就选 **98%** 的“光”。
选定之后,屏幕上就蹦出了一个 **“光”** 字。
- 第五步:循环 Autoregressive
这是 AI 能写长文章的秘诀。
刚才输入是:`“床前明月”` -> 输出:`“光”`。
**重点:** AI 会把这个“光”字**拿回来**,贴在刚才的句子后面。
新的输入变成了:`“床前明月光”`。
**重新跑一遍整个 Transformer 流程:** 重新算 Token、重新算位置、重新算 Attention。
这次,最后一个词变成了“光”,它去对视前面的词,预测出下一个字是 **“,”**。
再把“,”接回去,预测出 **“疑”**……
这就是为什么 AI 说话是一个字一个字蹦出来的(Streaming),因为它每吐一个字,都要把前面所有的字加上新出的这个字,重新塞回模型里算一遍!但是可以发现,在实际应用中,我们并不是让模型补全我们的对话,而是提出问题,等模型组织好语言后再回答我们,这就要提到大模型进化的两个关键阶段:底座模型(Base Model)和 指令微调(Instruction Tuning)了。
- 原始阶段:它确实只会“接龙”
早期的 GPT(比如 GPT-1 或刚训练完的 Llama 原始版)确实像我们所担心的那样。如果你问它:
用户输入: “红烧肉怎么做?” 原始模型预测: “红烧肉怎么做才好吃?首先选五花肉,然后准备生抽……”
它并没有在“回答”你,它只是在模仿它读过的菜谱开头,顺着你的话补全。在它眼里,你给它的不是一个“问题”,而是一个“半成品句子”。
- 进化阶段:教它学会“对话的套路”
为了让 AI 变得像个助手,科学家们对它进行了“对话训练”(SFT, Supervised Fine-Tuning)**。
他们给模型看了几百万组“人类对话模板”:
**模板 A:** [问题]“红烧肉怎么做?” -> [回答]“准备五花肉,步骤如下:1…”
**模板 B:** [问题]“你是谁?” -> [回答]“我是由 Google 开发的人工智能……”
模型通过这些模板学会了一个新规则: 当它看到你的输入时,它不再试图“续写”你的问题,而是预测一个看不见的符号(比如 <Answer>),然后开始预测这个符号后面的内容。
- 实际应用中:模型到底在“预测”什么?
在实际应用(比如你现在和我聊天)中,后台的代码其实偷偷给你的问题穿了一层“马甲”。
当你输入 “你是谁?” 时,模型收到的真实 Token 序列可能是这样的:
<System>: 你是一个乐于助人的 AI 助手。 <User>: 你是谁? <Assistant>:
此时,模型的预测任务变成了: 根据前面这一长串(包含系统指令、你的问题、助手标识符),预测下一个最可能的词。
因为模型在训练中见过无数次 <Assistant>: 后面跟着自我介绍,所以它计算出的最高概率词就是 “我”,接着是 “是”……
- 为什么你会觉得它在“组织语言”?
你感觉它在“思考和组织”,其实是因为 Attention(注意力机制) 在起作用:
**关联问题:** 当它写下第一个字“我”的时候,它的注意力(Attention)高度集中在你的问题 `“你是谁”` 上。
**保持逻辑:** 当它写下第十个字的时候,它的注意力不仅在你的问题上,还在它**刚刚写下的前九个字**上。
**结果:** 这种“回头看”的能力,让它输出的每一个词都既符合你的问题要求,又符合它自己前面的逻辑。这种**前后一致性**,让我们产生了它在“有意识地组织语言”的错觉。
- 总结:预测即回答
所以,“预测下一个词” 和 “回答问题” 并不矛盾:
**预测** 是底层引擎的运作方式(就像发动机在转)。
**回答** 是通过训练(对话模板)引导出的表现形式(就像方向盘引导车轮往哪转)。
它依然在做单选题(预测下一个字),只是它已经学会了:在一个问题后面,最合理的“下一个字”应该是答案的开头。
强化学习 (RLHF)
RLHF 的全称是 Reinforcement Learning from Human Feedback(人类反馈强化学习)。
如果说之前的训练(SFT)是让 AI “模仿” 人类说话,那么 RLHF 就是让 AI “认同” 人类的价值观。
它的三个步骤:
**海选(生成):** 模型针对一个问题(如:如何制造炸弹?),吐出四个不同的答案(A, B, C, D)。
**选美(人类打分):** 雇佣大量的人类标注员,给这些答案排序。
答案 A(拒绝回答,礼貌劝导):**第一名** 🥇
答案 B(乱码):**第三名** 🥉
答案 C(给出了真实步骤):**最后一名(不及格)** ❌
**奖惩(奖励模型 Reward Model):**
模型会训练一个专门的“打分机器”。这个机器学会了人类的胃口:**喜欢礼貌的、安全的、有帮助的回答。**
**最后,模型通过算法(如 PPO)不断调整自己的参数,目标只有一个:让那个“打分机器”给自己打高分。**
结果: AI 学会了“讨好”人类。它知道如果它说脏话或提供危险信息,它的“得分”就会变低。所以它变得温顺、礼貌。
幻觉 (Hallucination):为什么它会“一本正经地胡说八道”?
这是很多用户最头疼的问题。既然 AI 这么聪明,为什么要骗人?
真相:AI 根本没有“真理”的概念
我们要回到你最开始理解的原理:模型是根据概率预测下一个 Token。
**概率陷阱:** 模型在训练数据里看过“鲁迅”和“周树人”,也看过“打架”。当你问“鲁迅为什么暴打周树人?”时:
在数学空间里,这几个词的关联度很高。
模型并不知道“鲁迅就是周树人”,它只觉得在“鲁迅”和“周树人”后面接一个“因为…所以…”的解释,**在概率上非常通顺**。
**过度自信(Overconfidence):** Transformer 架构决定了它必须吐出一个 Token。即使它不确定,它也会从概率分布里选一个相对最高的。由于它学过人类那种“自信、专业”的说话口吻,它会用最淡定的语气编造出一个不存在的年份或事实。
**数据混合:** AI 的知识来源是海量网页。如果网上有错误信息、科幻小说、或是讽刺文学,AI 可能会把它们当作事实融合在向量里。
长文本(Long Context)
你可能发现,有的 AI 你发给它一个 5MB 的 PDF 它就死机了,而有的(如 Gemini 或 Claude)能一口气读完 10 本《三国演义》。
核心矛盾:注意力机制的“昂贵”
还记得我们说的 QKV 全员对视吗?
如果有 1,000 个 Token,每个词要看 1,000 个词,计算量是 $1,000 \times 1,000 = 100$ 万。
如果有 100,000 个 Token(一本书),计算量就是 **100 亿**!
为了记住更长的内容,科学家发明了 KV Cache(缓存机制) 和 稀疏注意力(Sparse Attention)。
**KV Cache:** 就像做阅读理解时,把读过的重点记在草稿纸上。下次预测新词时,不用重头读整本书,直接查“草稿纸”(缓存的 K 和 V 向量)就行了。
**线性注意力:** 模型不再“全员对视”,而是通过数学技巧(比如滑动窗口或压缩),让注意力只盯着最重要的部分。
多模态(Multimodal):AI 是怎么“看见”图片的?
你给 AI 发一张猫的照片,问“这是什么?”,它能回答出来。这并不是因为它“看”到了图像,而是它把图像也变成了 Token。
视觉的“分块”技术 (Vision Transformer, ViT):
**切片:** AI 把一张图片切成无数个小方格(比如 16x16 的小块)。
**映射:** 每个小方格通过一个特制的“滤镜”变成一个向量(就像单词的 Embedding 一样)。
**对齐:** 关键的一步来了。通过训练,AI 让“猫的图片向量”在数学空间里,离“猫”这个单词的向量**非常近**。
结果: 在 Transformer 看来,图片切片和文字 Token 没区别,它们都在同一个 QKV 矩阵里互相“对视”。AI 看到图片的过程,本质上和读一段描述图片的文字是一样的。
推理模型(Reasoning Models):AI 的“深思熟虑”
这是目前最火的方向(比如 OpenAI 的 o1 系列)。
普通预测 vs. 推理预测
**普通模型(GPT-4o):** 快思考。它是“直觉反应”,根据概率直接吐出下一个字。
**推理模型(o1):** 慢思考。它引入了 **思维链(Chain of Thought, CoT)**。
在回答你的问题之前,模型会在后台先给自己写一堆“小纸条”(隐藏的思维过程):
“用户问了这个物理题,我先列公式 A… 咦,不对,公式 A 算不出来,换公式 B 试试… 算出来了,结果是 42。”
本质改变: 以前 AI 的预测是“直线型”的,现在是“树状搜索”的。它会自我纠错、自我验证,直到找到概率最高的逻辑路径,再把最终答案告诉你。
Temperature(温度)/ Top-p(核采样)
现在想象 AI 预测下一个字的过程,就是在玩一个转盘游戏。
1. 转盘是怎么画出来的
假设 AI 读完 “床前明月”,现在要预测下一个字。它数了数词表里的 5 万个词,发现有几个词概率很高,它就把这些词画在了一个巨大的转盘上:
**“光”**:占了转盘的 **80%**(大块区域)
**“饼”**:占了转盘的 **15%**(小块区域)
**“头”**:占了转盘的 **5%**(窄缝区域)
在默认情况下,你转一下指针,大概率会指到“光”。
2. 什么是温度
温度(Temperature) 就是一个调节参数(你可以理解为后台的一个滑块按钮)。它的作用是:根据你的喜好,重新分配转盘上每个区域的大小。
情况 A:低温(例如 0.1)——“极度保守”
当你把温度调得很低,AI 就变成了一个非常胆小、死板的人。它会把那个本来就很大的区域(光)变得超级大,几乎占据整个转盘。
**“光”**:占了 **99.9%**
**“饼”**:占了 **0.1%**
**结果:** 指针几乎 100% 停在“光”上。
**为什么要这样?** 因为在写代码、算算术时,我们不需要创意,只需要那个“最正确”的答案。
情况 B:正常温(例如 0.7 - 1.0)——“正常交流”
转盘保持原样,或者微调。AI 有时会选“光”,偶尔也会选个“饼”,说话比较像正常人类,有起伏。
情况 C:高温(例如 1.5 以上)——“疯狂脑洞”
当你把温度调得很高,AI 就像喝醉了。它会强行把那些窄缝区域(饼、头、甚至毫不相关的词)放大,把原本巨大的区域(光)缩小。
**“光”**:占了 **30%**
**“饼”**:占了 **25%**
**“头”**:占了 **20%**
**“猪”**:居然也占了 **10%**(本来是 0%)
**结果:** 指针可能会指到“猪”。AI 会说出:`“床前明月猪”`。
**为什么要这样?** 因为在写诗、写科幻小说时,我们需要这种“意外的惊喜”。
3. 为什么叫温度
这其实是从物理学(热力学)借来的词:
**低温:** 分子不怎么动,整齐划一,非常**有序**。
**高温:** 分子疯狂乱动,到处乱撞,非常**无序(混乱)**。
在 AI 里,“有序”就代表准确、死板;“无序”就代表创意、混乱。
如果说温度是“缩放员”,那么 Top-p 就是一个“剪票员”。
4. Top-p 是干什么的
再回到我们的转盘。假设 AI 在预测下一个词,转盘上有 5 万个词。 除了“光”、“饼”、“头”这些概率大的,后面其实还挤着几万个概率只有 0.00001% 的词,比如“袜子”、“挖掘机”、“恐龙”……
虽然它们概率极低,但在转盘上它们依然占了一根细细的“头发丝”位置。
**问题:** 如果你运气极差,或者温度调得稍微高了一点,指针就有可能正好停在“恐龙”上。结果 AI 就会说出:`“床前明月恐龙”`。
**Top-p 的作用:** 它规定:**“我只在概率最高的、加起来达到 p% 的这几个核心词里选,剩下的那些‘头发丝’全部剪掉,根本不给它们上转盘的机会。”**
5. 它是怎么工作的
这里的 p 是一个从 0 到 1 的数字。
假设 AI 给出的概率排行榜是这样的:
**“光”**:40%
**“饼”**:30%
**“头”**:15%
**“地”**:10%
**“袜子”**:2%
**“恐龙”**:1% … (后面还有几万个词)
如果你设置 Top-p = 0.8(即 80%):
AI 开始算加法:40% (光) + 30% (饼) = 70%(还没到 80%,继续加)。
70% + 15% (头) = 85%(**停!** 已经超过 80% 了)。
**结果:** AI 会把“光”、“饼”、“头”留下。**剩下的所有词(地、袜子、恐龙……)全部踢出局。**
现在的转盘上只有三个选项了。不管你温度怎么调,AI 绝对不会说出“恐龙”。
6. 温度 (Temperature) vs Top-p (核采样)
这两个参数经常被放在一起比喻:
**Temperature(温度):** 决定了你是想**雨露均沾**(高温),还是**独宠一人**(低温)。它改变的是转盘里区域的**比例**。
**Top-p:** 决定了你**候选人的圈子**有多大。它直接把转盘上那些不靠谱的“小角色”给**物理抹除**了。
7. 为什么要同时用这两个
在实际调教 AI 时,我们通常会:
用 **Top-p** 保证 AI **“不乱说”**(把概率极低的词直接杀掉,保证逻辑底线)。
用 **Temperature** 决定 AI **“多有趣”**(在剩下那几个合理的词里,调配它们的出现比例)。
提示词工程(Prompt Engineering)
如果把 AI 比作一个知识渊博但有时有点“呆”的教授,提示词工程就是如何精准地给他下达指令。
1. 基础:提示词的核心框架
一个完美的提示词通常包含四个元素:
**Instruction (指令):** 你想让 AI 具体做什么?(例如:“请总结这段话”)
**Context (背景):** 给 AI 一个身份或场景。(例如:“你是一位专业的生物学家”)
**Output Indicator (输出限制):** 规定格式。(例如:“请用表格形式输出,字数不超过 100 字”)
**Input Data (输入数据):** 你要处理的文本。
错误示范: “帮我写个文案。”(太模糊,AI 会随机发挥)
正确示范: “你是一位资深小红书博主(背景),请针对这款防晒霜(输入),写一篇种草笔记(指令)。要求:多用表情包,强调防水性,并在结尾带上话题(输出限制)。”
2. 进阶一:Few-Shot(少样本提示)
这是利用了 Transformer 的“上下文学习”(In-context Learning)**能力。
**原理:** 别光下指令,给 AI 看几个**例子**。
**为什么有效:** AI 本质是“概率预测机器”。你给它三个例子,它就瞬间捕捉到了这些例子的**模式(Pattern)**,然后顺着这个模式往下写。
例子:将中文成语翻译成英文幽默解释。
输入:
- 守株待兔:Waiting for a rabbit to hit a tree. (Waiting for luck instead of working hard)
- 缘木求鱼:Climbing a tree to catch fish. (Looking in the wrong place)
- 顺手牵羊:AI 此时就会完美模仿上面的格式和语气
3. 进阶二:CoT(思维链 / Chain of Thought)
这是目前最强大的技术,主要用于解决数学、逻辑、推理等难题。
**原理:** 核心指令只有一句话——**“请一步步思考(Let’s think step by step)”**。
对比实验:
普通 Prompt: “池塘里有 10 条鱼,死了 2 条,还剩几条?” AI(可能脑抽): “还剩 8 条。”(它没考虑到死鱼还在水里)
CoT Prompt: “请一步步思考并回答:池塘里有 10 条鱼,死了 2 条,还剩几条?” AI 思考过程:
- 初始鱼量是 10 条。
- 2 条鱼虽然死了,但题目没说它们被捞走了。
- 只要它们还在池塘里,数量就还是 10。 **结论:** 10 条。
4. 终极组合技:Few-Shot + CoT
把这两个结合起来,就是给 AI 几个“带有逻辑推导过程”的例子。
这就像教孩子数学:你不仅给他看“1+1=2”,还要给他展示“因为我有 1 个苹果,妈妈又给了 1 个,所以我现在有 2 个”。
5. 提示词工程的“底层真相”
可以发现,提示词工程并不是在“教”AI 新知识,而是在:
**窄化概率空间:** 通过限定背景和格式,把 5 万个词里那些“不相关”的概率降到最低。
**引导注意力:** 通过 CoT,强迫模型的注意力(Attention)盯住关键的逻辑节点。
Outro
我们从最基础的 Token 出发,一路走过了:
- 微观层: Token(碎片)与 Embedding(向量)。
- 逻辑层: Attention(通过 QKV 矩阵实现语境偏移)。
- 架构层: Transformer(通过残差连接和分层堆叠构建工厂)。
- 行为层: RLHF(通过人类反馈训练礼仪)与 幻觉(概率预测的代价)。
- 前沿层: 长文本、多模态与深度推理。
- 应用层:温度、核采样参数以及提示词工程。