更多学习路线,参考:《雪梅May的AI学习日记》挑战100天和AI做朋友(持续更新中)
课程学习指南:吴恩达transformer课程怎么学
1.亲测有效,吴恩达transformer的课程我学4遍的过程【抖音:雪梅AI学习日记】

2.吴恩达transformer的课程我学了4遍之后的2个效果【抖音:雪梅AI学习日记】

B站课程链接:

1-Introduction介绍 05:07
图1Transformer 体系里的 3 种常见“形态”

这张图把 Transformer 体系里的 3 种常见“形态”放在一起对比:

怎么记住它们?
1.Encoder=理解器:把一句话压缩成“脑海中的意思”
2.Decoder=表达器:根据脑海里的意思(或已生成的部分),一个字一个字往外说
3.Encoder + Decoder:先理解、再表达 → 适合翻译、摘要到生成等“输入 ≠ 输出”的任务
4.只有 Encoder:理解完就结束 → 适合分类、检索、相似度计算
5.只有 Decoder:拿到提示就往后写 → 适合对话、创作、代码生成
把它想成“读者(Encoder)+ 作者(Decoder)”就很好区分:•只读不写 = 纯 Encoder•只写不读(不需要另一段输入) = 纯 Decoder•又读又写 = 完整 Encoder-Decoder Transformer
有了这个框架,再看到 BERT、GPT、T5 等名字时,先问自己:“它是只读?只写?还是先读再写?”就不会混淆啦。
图2主流 NLP 模型是怎样从 RNN ➜ RNN + Attention ➜ 纯 Transformer 迭代升级的。

这张图用“三连对比”告诉你:主流 NLP 模型是怎样从 RNN ➜ RNN + Attention ➜ 纯 Transformer 迭代升级的。

一句话记住:
这条演进线解释了为什么现代大模型都不再提 RNN,而是直接讲“多层 Transformer Block”。
图3Token = 模型处理文本的最小单位

这页图只想帮你抓住一个关键词:Token = 模型处理文本的最小单位

一句话总结:在进入任何 LLM 之前,文本都要先经过Tokenization——它决定了模型“看见”的粒度,也解释了为什么有时一个单词会分成几段 ID。
图4课程“开场白”+ 一个极简的 LLM 工作示意

这张图 = 课程“开场白”+ 一个极简的 LLM 工作示意

一句话记住:这页就是告诉你——课程会用“提示 → 解码 → 连续吐字”这条主线,手把手拆解大模型。你先别管复杂数学,先知道“我问一句,它像打字机一样回一句”,后面的细节(分词、注意力机制等)都会围绕这个流程展开。
图5整个推理(Inference)流程 串成闭环

把 整个推理(Inference)流程 串成闭环:
1.Prompt:用户输入“The Shawshank”。
2.Tokenizer:把短语切成 tokens →TheShawshank(灰白小块)。
3.Embedding:查表变成稠密向量(灰蓝条)。
4.多层 Transformer Blocks◦每层 =自注意力+前馈网络(右侧蓝框放大示意)。◦逐层融合上下文,输出“带语境”的向量(红条)。
- ◦每层 =自注意力+前馈网络(右侧蓝框放大示意)。
- ◦逐层融合上下文,输出“带语境”的向量(红条)。
5.LM Head:对这些向量做 softmax,挑出概率最高的下一个 token。
6.输出:模型生成了词“Redemption”(紫色 pill);这就是它认为最合理的续写。
7.循环:把新 token 拼回序列,重复 2-6 步,直到写完整句。
整条流程 = “切词 → 向量化 →多层自注意力-前馈模块 → 预测下一个词”。先对一段Prompt做完这 4 步,输出第 1 个新 token;再把它拼回去,重复流程,像回形针一样一环扣一环,直到生成完整回答。
记住这个顺序,你就能把任何 Decoder-only LLM 拆成 “Tokenizer → Embedding → 多层 Transformer Block → LM Head” 四件套,整个黑箱瞬间透明!
模型的魅力:transformer和data
2-理解语言模型:Language作为词袋 05:38 【Bag-of-words】

图62000 年到 2023 年的“语言 AI 进化时间线”

这张图是一条 2000 年到 2023 年的“语言 AI 进化时间线”,用颜色区分了 4 条技术分支,并把标志性模型按出现年份排了座次:

关键节点一览
- •~2000 Bag-of-Words→ 最朴素的词袋向量
- •2013 Word2Vec→ 首批可训练的词向量
- •2017 Attention→ “注意力”概念提出,为 Transformer 奠基
- •2018 BERT (🔵)→ 首个大规模双向 Encoder,刷新多项 NLP 榜单
- •2018 GPT (🔴)→ Transformer 结构被用来单向生成
- •2019 GPT-2 / RoBERTa / DistilBERT→ 参数增大 + 训练技巧改进
- •2020 T5 (🟢) / GPT-3 (🔴)→ Encoder-Decoder 通用任务框架 & 首个百亿参数生成模型
- •2021 Switch (🟢)→ Mixture-of-Experts 路由,稀疏激活提效
- •2022 Flan-T5 (🟢)→ 指令微调,让多任务能力更强
- •2023 ChatGPT (🔴)→ RLHF 对齐,生成结果贴近人类偏好
一句话记住:
词袋 → 词向量 → Attention → Transformer 大爆发,随后三条演化线(理解、生成、读写兼备)并行推进,最终汇聚到今天的百亿参数大模型和对齐技术。
图7同一段文本丢给“语言 AI”,产出 3 种不同形式的结果

这张图告诉你:同一段文本丢给“语言 AI”,大致能产出 3 种不同形式的结果,分别对应最常见的任务类型:

一句话记住:•要“写东西”→生成•要“找到相似/做检索”→向量•要“打标签/做判断”→分类
理解了这 3 种输出形态,你就能快速把任何语言应用归到正确的模型使用场景里。

图8Bag-of-Words(词袋模型)

这张图是在讲Bag-of-Words(词袋模型)的最基础概念,并用一个非常简单的分词方式做例子。
图的流程
1.Input(输入句子)◦例 1:That is a cute dog
- ◦例 1:That is a cute dog
- ◦例 2:My cat is cute
2.Tokenization(分词)◦这里用的是最简单的规则:按空格拆词(Split by whitespace)。◦得到的 token 分别是:▪句子 1:thatisacutedog▪句子 2:mycatiscute
- ◦这里用的是最简单的规则:按空格拆词(Split by whitespace)。
- ◦得到的 token 分别是:▪句子 1:thatisacutedog▪句子 2:mycatiscute
3.Vocabulary(词表)◦把所有句子的 token去重,得到一个词表(Vocabulary)。◦词表里的每个词有唯一的索引,模型后续会用这个索引来表示单词。◦在这个例子里,词表是:thatisacutedogmycat◦Vocabulary size就是词表的总词数,这里是 7。
- ◦把所有句子的 token去重,得到一个词表(Vocabulary)。
- ◦词表里的每个词有唯一的索引,模型后续会用这个索引来表示单词。
- ◦在这个例子里,词表是:thatisacutedogmycat
- ◦Vocabulary size就是词表的总词数,这里是 7。
核心要点
- •词袋模型不关心词序,只统计每个词在句子里出现与否(或出现次数)。
- •本例用的是最简单的分词方法(按空格拆),真实 LLM 会用更复杂的子词(subword)分词。
- •理解词表(Vocabulary)和词表大小(Vocabulary size)非常重要,因为它们决定了后续向量的维度。
要我帮你把Bag-of-Words的工作原理画成一个更易理解的飞书可用 Markdown 图吗?这样你复制过去会直接渲染成表格+流程图。这样你复习的时候会更直观。
图9把“词袋模型”走完最后一步:把一句话转成一条固定长度的数字向量

这页把“词袋模型”走完最后一步:把一句话转成一条固定长度的数字向量。

一句话总结:词袋模型把一句话压成多维0/1 或计数向量——维度 = 词表大小,顺序固定,完全丢失词序信息。这在现代 LLM 面前显得简单而笨重,但它奠定了“把文本数值化再喂给模型”的思路。
图10“词向量(Embeddings)”

这页把故事的最后一块拼图——“词向量(Embeddings)”——补上了:
1.从 0/1 → 连续小数◦上一页的Bag-of-Words 向量只有 0 / 1(或计数),既稀疏又高维。◦这页把同一条向量换成0.12 0.78 0.33 …这样的实数,每个维度都取 0–1 之间的值(示意)。
- ◦上一页的Bag-of-Words 向量只有 0 / 1(或计数),既稀疏又高维。
- ◦这页把同一条向量换成0.12 0.78 0.33 …这样的实数,每个维度都取 0–1 之间的值(示意)。
2.为什么要这样做?

1.怎么得到这些小数?◦把“单词索引”送进一个可学习的查表矩阵E,输出的就是词向量。◦训练过程中E会被不断更新,让相似单词在向量空间里彼此靠近。
- ◦把“单词索引”送进一个可学习的查表矩阵E,输出的就是词向量。
- ◦训练过程中E会被不断更新,让相似单词在向量空间里彼此靠近。
一句话记住:词向量 = 把 “出现 / 不出现” 的稀疏编码,压成能表达语义的稠密坐标。这一步让后面的 Transformer 能更聪明地理解“词与词的关系”。
3-了解语言模型:(Word) 嵌入 05:01 【Word2Vec】
图11 (Word) Embeddings

图12 Word2Vec“最经典的三层神经网络”

这张图用一张“最经典的三层神经网络”来说明:为什么把词转成向量 (Embeddings)比词袋模型更能表达语义。

右侧要点•Bag-of-Words:只会告诉你词出现了没有,完全不懂语义。•Word2Vec / Embeddings:通过神经网络学习权重,让数字坐标本身就带“含义”,从而“捕捉到单词之间的语义距离”。
一句话记住:神经网络用可训练权重,把“稀疏的 0/1 词袋”映射到“小而密的语义向量空间”,这就是Vector Embeddings的核心价值。
图13 Vector embedding(向量嵌入)-Word2Vec
权重,模型参数

这张图用 “cat 🐱” 和 “cute 😺” 举例,说明:词向量让模型量化两词的相似度──不仅看拼写,而是看它们在句子里的“邻居”是否相似。

一句话记住:词向量把“词的语义”转成“坐标距离”——数越接近,模型就判定它们越“邻近”(语义相似或同现频繁)。
这正是现代 NLP 可以用简单的向量运算(比如余弦相似)来做同义词匹配、推荐、聚类的根本原因。
探讨一个例子
图14 猫的属性得分

图15 猫的属性得分

图16 词向量 = 把单词放进一个固定维度的坐标系

这张图想让你记住两件事:

一句话总结词向量 = 把单词放进一个固定维度的坐标系;各维度共同编码了“猫是动物、可爱、复数形式”等抽象属性。向量长度固定,具体含义分散在所有维度的组合里。
图17“同一套高维坐标系里,不同单词各占哪个方位”

这张图把“同一套高维坐标系里,不同单词各占哪个方位”形象地摆给你看:

一句话记住Embedding = 把词放进同一个 1000 维左右的坐标系;坐标不同,语义距离就不同。这让模型既能算相似度,又能喂进后续的 Transformer,成为理解和生成的共同“底座”。
图18属性代表什么?

在实际操作中,你不知道这些属性究竟代表什么
图19 可以互相比较单词

1.每个彩色圆点代表一个单词在“词向量空间”中的位置。
1.真正的词向量可能有 hundreds 维;这里为了方便展示,用降维算法(如 t-SNE 或 PCA)把它们压成了 2 维平面。
2.相近的点 = 语义相近的词。◦cats、dog、puppy挤在左上角——它们都是「宠物」「动物」一类。◦apple、banana同在右上角——都属于「水果」。◦building、houses落在左下——偏「建筑物」。◦baby和adult虽同属「人」,但因为年龄概念相反,距离较远。
- ◦cats、dog、puppy挤在左上角——它们都是「宠物」「动物」一类。
- ◦apple、banana同在右上角——都属于「水果」。
- ◦building、houses落在左下——偏「建筑物」。
- ◦baby和adult虽同属「人」,但因为年龄概念相反,距离较远。
3.距离越远 = 语义差异越大。◦例如cats与banana分布在图的对角线两端,说明它们几乎没有共同上下文。
- ◦例如cats与banana分布在图的对角线两端,说明它们几乎没有共同上下文。
4.这张图的核心信息
1.词向量把「语义关系」变成「几何距离」:近=相似,远=无关。这就是为什么只要做一次向量化,就能用简单距离度量来做搜索、聚类或推荐。
图20Representation Model(表征模型)

1.章节过渡◦这页是“Embedding 类型”的小标题页,用来提示:“刚才我们演示了词向量,接下来要讲更大的嵌入模型。”
- ◦这页是“Embedding 类型”的小标题页,用来提示:“刚才我们演示了词向量,接下来要讲更大的嵌入模型。”
2.Representation Model(表征模型)◦这里的浅绿框代表一类Encoder-only 模型(典型如 BERT、Sentence-BERT、Ada-002)。◦目标:把整段文本—无论是一句话、一个段落还是一篇文档—压缩成一条固定长度的向量。◦用途:相似度搜索、召回排序、聚类、推荐系统、RAG 检索等。
- ◦这里的浅绿框代表一类Encoder-only 模型(典型如 BERT、Sentence-BERT、Ada-002)。
- ◦目标:把整段文本—无论是一句话、一个段落还是一篇文档—压缩成一条固定长度的向量。
- ◦用途:相似度搜索、召回排序、聚类、推荐系统、RAG 检索等。
3.与前面“词向量”区别◦词向量是word-level,每个单词一条坐标;◦表征模型输出text-level向量,一次就能给整段文本一个“整体语义坐标”,方便直接比较句子或文档之间的相关性。
- ◦词向量是word-level,每个单词一条坐标;
- ◦表征模型输出text-level向量,一次就能给整段文本一个“整体语义坐标”,方便直接比较句子或文档之间的相关性。
一句话:之前我们只看“单词坐标”,从这一页开始,课程要带你了解“整段文本的语义坐标”——也就是更通用的文本嵌入 (text embeddings)。
图21Token Embeddings/Word Embedding

1.输入句子Her vocalization was melodic
2.分词(sub-word tokenization)句子被切成 5 个 token:Her · vocal · ##ization · was · melodic
1.带 “##” 前缀的##ization表示它是 “vocalization” 的后缀片段,而不是独立单词。
3.送入 Representation Model(如 BERT / Sentence-BERT)该模型会同时输出两种层级的向量:◦Token Embeddings(紫色小条)每个 token 拿到一条向量,长度固定;适合做词级别的高亮、比对等精细任务。
- ◦Token Embeddings(紫色小条)每个 token 拿到一条向量,长度固定;适合做词级别的高亮、比对等精细任务。
- ◦Word Embedding(绿色条)把所有 token 向量经过池化(平均、最大池化,或取[CLS]位)得到一句话的“整体坐标”。这就是常说的句向量 / 文本嵌入,可直接用来做相似度检索、聚类、RAG 检索等。
4.核心 takeawayRepresentation Model 不止能给“单个词片”坐标,也能一次性生成“整段文本”的语义向量;一级模型,两种粒度,满足理解与检索的不同需求。
图22 Types of Embeddings

1.一张图,四种粒度的向量◦Document embedding(整篇文档坐标)◦Sentence embedding(整句坐标)◦Word embedding(整词坐标)◦Token embeddings(子词 / 字符片段坐标)
- ◦Document embedding(整篇文档坐标)
- ◦Sentence embedding(整句坐标)
- ◦Word embedding(整词坐标)
- ◦Token embeddings(子词 / 字符片段坐标)
2.怎么得到?——同一个 Representation Model 一次性算出来◦把任意长度的输入(文档或句子)切成 token,全部送进模型。◦模型内部先生成每个 token 的向量 → 通过池化或特殊位汇聚,便可派生句向量、文档向量。◦所以一份前向推理即可同时拿到多层级的语义表示,不必反复调用。
- ◦把任意长度的输入(文档或句子)切成 token,全部送进模型。
- ◦模型内部先生成每个 token 的向量 → 通过池化或特殊位汇聚,便可派生句向量、文档向量。
- ◦所以一份前向推理即可同时拿到多层级的语义表示,不必反复调用。
3.为什么有用?◦检索:长文档查重时用 document embedding;摘要或相似段落检索用 sentence embedding。◦问答 / RAG:先用句向量快速召回,再回到 token 级别精排、对齐答案。◦可解释性:高亮与查询最相关的词或子词向量,看模型关注了哪部分内容。
- ◦检索:长文档查重时用 document embedding;摘要或相似段落检索用 sentence embedding。
- ◦问答 / RAG:先用句向量快速召回,再回到 token 级别精排、对齐答案。
- ◦可解释性:高亮与查询最相关的词或子词向量,看模型关注了哪部分内容。
4.一句话记住
1.同一 Encoder,一次推理,多粒度向量——这正是现代嵌入模型在搜索、推荐、知识库检索里高效而灵活的根本原因。
4-注意编码和解码上下文 05:46
图23 Encoding and Decoding Context with Attention

图24 早期的RNN Encoder-Decoder结构

1.图示核心
- ◦这是一套早期的RNN Encoder-Decoder结构,用于神经机器翻译:▪上半部Encoder (RNN)顺序读入I → love → llamas,把整句压缩成一个上下文向量。▪下半部Decoder (RNN)依赖这条向量,逐词生成目标语言句子。
2.想强调的对比◦Word2Vec 只能产出“静态”词向量:无论bank出现在 “river bank” 还是 “investment bank”,拿到的 embedding 都一样。◦RNN Encoder-Decoder则让单词的表示随“前后文”变化(因为隐藏状态会累积上下文),能够处理整段序列。
- ◦Word2Vec 只能产出“静态”词向量:无论bank出现在 “river bank” 还是 “investment bank”,拿到的 embedding 都一样。
- ◦RNN Encoder-Decoder则让单词的表示随“前后文”变化(因为隐藏状态会累积上下文),能够处理整段序列。
3.结论提示◦虽然 RNN 比 Word2Vec 更懂上下文,但它仍要逐步串行处理,长句容易遗忘远程信息——后来 Transformer 用并行注意力彻底改进了这一点。
- ◦虽然 RNN 比 Word2Vec 更懂上下文,但它仍要逐步串行处理,长句容易遗忘远程信息——后来 Transformer 用并行注意力彻底改进了这一点。
图25 早期的RNN Encoder-Decoder结构

1.图示动作◦句子I love llamas进入Encoder RNN→ 被压成一句话的上下文向量。◦Decoder RNN读取这条向量后,逐词输出荷兰语翻译:Ik → hou → van → lama’s.
- ◦句子I love llamas进入Encoder RNN→ 被压成一句话的上下文向量。
- ◦Decoder RNN读取这条向量后,逐词输出荷兰语翻译:Ik → hou → van → lama’s.
2.想强调的概念◦Encoder-Decoder 架构让模型既能“理解整句”又能“逐字生成”。◦上下文敏感:每个输出词都依据先前已生成的词和整句语义,再决定下一个词是什么。
- ◦Encoder-Decoder 架构让模型既能“理解整句”又能“逐字生成”。
- ◦上下文敏感:每个输出词都依据先前已生成的词和整句语义,再决定下一个词是什么。
3.与 Word2Vec 的区别
1.Word2Vec 一词只有一向量,而 RNN 翻译模型会根据整段上下文动态变化隐藏状态,从而生成正确的目标语言序列。
图26 自回归(autoregressive)语言模型

“Autoregressive” = 边写边喂回
1.Step 1输入只有源句I love llamas→ 模型预测第一个目标词Ik。
2.Step 2把刚产出的Ik拼回输入队列,变成I love llamas Ik→ 继续预测hou。
3.Step 3再把hou也接上:I love llamas Ik hou→ 预测van。
4.Step 4输入已包含先前所有生成词,模型最终补出lama’s。
每一步都用上一步的输出当作下一步的输入,像递推一样滚动前进──这就是自回归(autoregressive)语言模型的工作方式,也是 GPT-类模型逐字“打字”的核心机制。
图27Encoder–Decoder RNN

1.输入端:静态词向量◦I / love / llamas先各自查word2vec 表,得到灰色小条。◦这些向量不含上下文信息,仅把每个词“翻译成数字”。
- ◦I / love / llamas先各自查word2vec 表,得到灰色小条。
- ◦这些向量不含上下文信息,仅把每个词“翻译成数字”。
2.Encoder RNN:把整句浓缩成一条“上下文向量”◦依次读入三个词向量,内部隐藏状态不断更新。◦最后输出蓝色context embedding——一句话的压缩语义。
- ◦依次读入三个词向量,内部隐藏状态不断更新。
- ◦最后输出蓝色context embedding——一句话的压缩语义。
3.Decoder RNN:拿着这条向量,按序自回归生成◦第 1 步→Ik
- ◦第 1 步→Ik
- ◦第 2 步→hou
- ◦第 3 步→van
- ◦第 4 步→lama’s每生成一个词就反馈给自身,直到句子结束(右侧箭头标了 1→4 的产生顺序)。
4.核心对比◦word2vec提供的是“每个词单独的坐标”。◦Encoder–Decoder RNN用隐藏状态把这些坐标“串”成一句话的整体语义,再逐词译到目标语言。◦这一步弥补了 word2vec“缺上下文”的不足,但仍受 RNN 串行、长依赖衰减的限制——为后面 Transformer 的并行注意力改进埋下伏笔。
- ◦word2vec提供的是“每个词单独的坐标”。
- ◦Encoder–Decoder RNN用隐藏状态把这些坐标“串”成一句话的整体语义,再逐词译到目标语言。
- ◦这一步弥补了 word2vec“缺上下文”的不足,但仍受 RNN 串行、长依赖衰减的限制——为后面 Transformer 的并行注意力改进埋下伏笔。
图28 Attention注意力矩阵(2014)

1.图左:注意力矩阵◦横轴是源句I love llamas,纵轴是目标句Ik hou van lama’s。◦每个方格的深浅表示「这两个词之间的关注权重」,颜色越深 → 权重越高。▪Ik对I最深蓝:翻译时,模型几乎只看源句的主语。▪hou最关注love:准确地把情感动词对齐。▪van同时看love / llamas:介词依赖两侧语义。▪lama’s聚焦llamas:名词直接对名词。
- ◦横轴是源句I love llamas,纵轴是目标句Ik hou van lama’s。
- ◦每个方格的深浅表示「这两个词之间的关注权重」,颜色越深 → 权重越高。▪Ik对I最深蓝:翻译时,模型几乎只看源句的主语。▪hou最关注love:准确地把情感动词对齐。▪van同时看love / llamas:介词依赖两侧语义。▪lama’s聚焦llamas:名词直接对名词。
2.注意力的作用◦动态对齐:在翻译、摘要等任务里,模型不必把整句挤进单一向量,而是边生成边用矩阵找出当前最相关的源词。◦信号放大:相关词彼此“拉高”权重,让梯度更集中,减轻长句子里远程信息被稀释的问题。
- ◦动态对齐:在翻译、摘要等任务里,模型不必把整句挤进单一向量,而是边生成边用矩阵找出当前最相关的源词。
- ◦信号放大:相关词彼此“拉高”权重,让梯度更集中,减轻长句子里远程信息被稀释的问题。
3.一句话记住
1.Attention = 让每个输出词都能“抬头”查看源句中与自己最相关的部分,从而精准对齐并生成。
图29“自回归”+“注意力”拼到一起

这页把前面两件事“自回归”+“注意力”拼到一起,展示完整翻译流程
1.输入仍是I love llamas→ 先查 word2vec 静态向量 → 送进Encoder RNN,得到整句语义表示(灰条)。
2.Decoder升级为Attention Decoder RNN:◦每生成一个荷兰语词,就回头查看源句里最相关的词(右侧蓝色注意力热图)。◦例子里:▪Ik主要看I▪hou主要看love▪van同时看love和llamas
- ◦每生成一个荷兰语词,就回头查看源句里最相关的词(右侧蓝色注意力热图)。
- ◦例子里:▪Ik主要看I▪hou主要看love▪van同时看love和llamas
3.自回归链路◦生成Ik→ 把它拼回输入 → 再用注意力对齐 → 生成hou→ … 直到句子结束。
- ◦生成Ik→ 把它拼回输入 → 再用注意力对齐 → 生成hou→ … 直到句子结束。
一句话:模型一边按序递推(autoregressive),一边用注意力矩阵做“即时对齐”,让每个新词都能聚焦最相关的源词,翻译质量和长句处理能力因此大幅提升。
5-理解语言模型:Transformers 07:38
图30 Transformers

图31 Attention is All You Need论文 (2017)

1.从 RNN → Transformer 的飞跃◦这张图把之前的Encoder RNN / Decoder RNN整块替换成了多层 Transformer encoder + 多层 Transformer decoder。◦每一层都由自注意力 (self-attention)+前馈网络组成,不再依赖时间步串行。
- ◦这张图把之前的Encoder RNN / Decoder RNN整块替换成了多层 Transformer encoder + 多层 Transformer decoder。
- ◦每一层都由自注意力 (self-attention)+前馈网络组成,不再依赖时间步串行。
2.“Attention is All You Need” 的含义◦核心运算只剩注意力:所有单词能一次性互相“看全句”,捕捉长距离依赖。◦并行训练:去掉递归后,整段序列可同时喂进 GPU,大幅提速。◦更深、更宽:层层堆叠(图中灰色薄片)而不会像 RNN 那样因梯度消失而难以扩张。
- ◦核心运算只剩注意力:所有单词能一次性互相“看全句”,捕捉长距离依赖。
- ◦并行训练:去掉递归后,整段序列可同时喂进 GPU,大幅提速。
- ◦更深、更宽:层层堆叠(图中灰色薄片)而不会像 RNN 那样因梯度消失而难以扩张。
3.流程仍是 Encoder-Decoder 翻译◦Encoder 读取I love llamas→ 生成上下文表示。◦Decoder 在生成Ik → hou → van → lama’s的过程中,▪既用自注意力看已生成词的上下文,▪又用交互注意力对齐源句信息。
- ◦Encoder 读取I love llamas→ 生成上下文表示。
- ◦Decoder 在生成Ik → hou → van → lama’s的过程中,▪既用自注意力看已生成词的上下文,▪又用交互注意力对齐源句信息。
4.总结
1.这一页宣告了 Transformer 的出现:完全抛弃循环,纯靠注意力完成序列理解与生成——这也是后来 BERT、GPT、T5 等大型语言模型的共同基座。
背景:
**“Attention Is All You Need”直译就是「只要注意力就够了」。它是 2017 年 Google Brain & Google Translate 团队发表的论文标题,借这句话强调两层含义:
1.技术层面◦在序列任务(机器翻译、文本生成等)里,过去普遍依赖 RNN 或 CNN。◦论文指出:只用自注意力(Self-Attention)和前馈网络,就能同时捕获远距离依赖、并行计算、高效训练——无需循环或卷积。◦这种架构后来被称为Transformer,成为 BERT、GPT、T5 等所有主流大模型的基座。
- ◦在序列任务(机器翻译、文本生成等)里,过去普遍依赖 RNN 或 CNN。
- ◦论文指出:只用自注意力(Self-Attention)和前馈网络,就能同时捕获远距离依赖、并行计算、高效训练——无需循环或卷积。
- ◦这种架构后来被称为Transformer,成为 BERT、GPT、T5 等所有主流大模型的基座。
2.宣言层面◦作者想表达:把复杂度留给注意力机制,其余结构都可以简化或舍弃。◦这句题目本身也像一句“口号”,迅速引发学术和工业界的关注。
- ◦作者想表达:把复杂度留给注意力机制,其余结构都可以简化或舍弃。
- ◦这句题目本身也像一句“口号”,迅速引发学术和工业界的关注。
所以,当人们说 “Attention Is All You Need”,通常既是在引用这篇里程碑论文,也在指代Transformer 架构及其“靠注意力机制即可完成功能”的设计哲学。
图32一层 Encoder = 自注意力 + 前馈网络

1.整体视图◦输入I love llamas→ 通过若干层Transformer encoder(绿色块)。◦编码后得到每个词的“带上下文向量”(右侧蓝色小条)。◦Decoder区域被淡化,表示这页只聚焦 Encoder 内部结构。
- ◦输入I love llamas→ 通过若干层Transformer encoder(绿色块)。
- ◦编码后得到每个词的“带上下文向量”(右侧蓝色小条)。
- ◦Decoder区域被淡化,表示这页只聚焦 Encoder 内部结构。
2.放大一层 Encoder 的“机芯”◦Self-Attention▪每个 token 同时“环视全句”,计算与所有其他词的相关度。▪相关度越高的词,其信息在结果向量中权重越大。◦Feed-Forward Neural Network▪对 Self-Attention 的输出逐 token 做非线性变换,增加表达力。◦残差连接 + LayerNorm(未画出)确保深层堆叠仍能稳定训练。
- ◦Self-Attention▪每个 token 同时“环视全句”,计算与所有其他词的相关度。▪相关度越高的词,其信息在结果向量中权重越大。
- ◦Feed-Forward Neural Network▪对 Self-Attention 的输出逐 token 做非线性变换,增加表达力。
- ◦残差连接 + LayerNorm(未画出)确保深层堆叠仍能稳定训练。
3.关键 takeaway
1.一层 Encoder = 自注意力 + 前馈网络。多层堆叠后,模型就能同时捕捉短程搭配与长程依赖,把纯粹的词向量升格为“句中带语境”的表示,这正是 Transformer 替代 RNN 的核心优势。
图33 Transformer Encoder

1.左侧蓝色热图
- ◦行列都是I love llamas。
- ◦深蓝格表示两个词在Self-Attention里相互“看”得最用力。这里:▪I最关注自己(对角线)▪love既关注自己也强连I▪llamas对love权重最高
- ◦这展示了Self-Attention 矩阵:模型自动为一句话里的每对词分配相关度。
2.放大的一层 Transformer Encoder◦Self-Attention:用上面的矩阵把相关词的信息加权融合。◦Feed-Forward NN:对融合后的向量逐词做非线性变换,进一步提取特征。◦残差 & LayerNorm(图中未标)帮助稳定深层堆叠。
- ◦Self-Attention:用上面的矩阵把相关词的信息加权融合。
- ◦Feed-Forward NN:对融合后的向量逐词做非线性变换,进一步提取特征。
- ◦残差 & LayerNorm(图中未标)帮助稳定深层堆叠。
3.输出向量(蓝条)◦每个词得到一条“带上下文”的新向量;这些向量随后可进入下一层或交给 Decoder。
- ◦每个词得到一条“带上下文”的新向量;这些向量随后可进入下一层或交给 Decoder。
总要点:Transformer Encoder 通过Self-Attention 矩阵让一句话里的词彼此“互看”,把原始词向量升级成包含全局语义的表示——这一步完全并行,不再受 RNN 串行限制。
图34Encoder–Decoder Transformer工作方式

1.左侧:Transformer Encoder◦先把源句I love llamas喂进若干层Self-Attention + Feed-Forward。◦每个词得到一条“带全句上下文”的蓝色向量——这就是Encoder Output(蓝砖堆)。
- ◦先把源句I love llamas喂进若干层Self-Attention + Feed-Forward。
- ◦每个词得到一条“带全句上下文”的蓝色向量——这就是Encoder Output(蓝砖堆)。
2.右侧:Transformer Decoder(在生成第三个目标词van时的情景)◦Masked Self-Attention▪只允许看到已生成的词Ik hou,对未来词位做遮挡 ⇒ 保证自回归顺序。
- ◦Masked Self-Attention▪只允许看到已生成的词Ik hou,对未来词位做遮挡 ⇒ 保证自回归顺序。
- ◦Encoder Attention▪粉色查询向量去“对齐”蓝色Encoder Output,找出与van最相关的源词信息。
- ◦Feed-Forward网络▪对融合后的表示再做非线性变换,输出 logits → 采样得到van。
3.关键点回顾◦两段注意力:Decoder 先内部自检(masked),再跨句对齐(encoder attention)。◦并行 + 顺序兼顾:Encoder 全并行处理输入;Decoder 生成时保持一步一步、但每步都能全局对齐源句。◦这正是现代机器翻译、文本摘要等任务常用的Encoder–Decoder Transformer工作方式。
- ◦两段注意力:Decoder 先内部自检(masked),再跨句对齐(encoder attention)。
- ◦并行 + 顺序兼顾:Encoder 全并行处理输入;Decoder 生成时保持一步一步、但每步都能全局对齐源句。
- ◦这正是现代机器翻译、文本摘要等任务常用的Encoder–Decoder Transformer工作方式。
图35Decoder 里的Masked Self-Attention如何工作

这张图展示的是 “Decoder 里的Masked Self-Attention如何工作”——以正在生成第 3 个目标词van为例。
1.左侧蓝色三角矩阵 = Masked Self-Attention 权重◦横轴 / 纵轴都列出已生成或待生成的目标词顺序:Ik houd van lama’s。◦只保留左下三角(未来词位被遮住),保证生成顺序不泄漏未来信息。◦深蓝格说明当前行的词最“关注”那一列的词。▪例:行van最深的是列houd→ 生成van时,模型主要参考前面的houd。
- ◦横轴 / 纵轴都列出已生成或待生成的目标词顺序:Ik houd van lama’s。
- ◦只保留左下三角(未来词位被遮住),保证生成顺序不泄漏未来信息。
- ◦深蓝格说明当前行的词最“关注”那一列的词。▪例:行van最深的是列houd→ 生成van时,模型主要参考前面的houd。
2.右侧粉色框 = Transformer Decoder 单层结构◦Masked Self-Attention:用上面的权重矩阵,把Ik houd的信息融合出来。◦Encoder Attention:再去对齐源句I love llamas的编码向量,获取跨语言对应关系。◦Feed-Forward NN:非线性变换后输出 logits → 采样得到下一个词van。
- ◦Masked Self-Attention:用上面的权重矩阵,把Ik houd的信息融合出来。
- ◦Encoder Attention:再去对齐源句I love llamas的编码向量,获取跨语言对应关系。
- ◦Feed-Forward NN:非线性变换后输出 logits → 采样得到下一个词van。
3.要抓的核心◦Decoder 在每一步只能看见“自己与已生成词”的左侧窗口(靠遮挡实现),因此输出序列是自回归的。◦同时,通过 Encoder Attention 又能随时引用整句源语言语义,实现精准翻译/生成。
- ◦Decoder 在每一步只能看见“自己与已生成词”的左侧窗口(靠遮挡实现),因此输出序列是自回归的。
- ◦同时,通过 Encoder Attention 又能随时引用整句源语言语义,实现精准翻译/生成。
一句话:蓝色三角 = “我只看见历史”,粉色 Decoder = “先自我回顾,再对齐源句”,共同确保 Transformer 可以又规矩地按序生成,又全局地理解上下文。
图36 BERT-Representation Models 表征模型(2018)

1.这是 BERT-base 的骨架◦输入先加上一个特殊起始标记[CLS],后接句子词序列。◦整段序列送进12 层 Transformer Encoder(图中只画出 3 层示意,右侧标 1→12)。
- ◦输入先加上一个特殊起始标记[CLS],后接句子词序列。
- ◦整段序列送进12 层 Transformer Encoder(图中只画出 3 层示意,右侧标 1→12)。
2.双向自注意力◦与翻译模型不同,BERT 只保留Encoder 堆栈,没有 Decoder。◦每层 Self-Attention 同时向左、向右看,全句上下文一次性融合 → “Bidirectional”。
- ◦与翻译模型不同,BERT 只保留Encoder 堆栈,没有 Decoder。
- ◦每层 Self-Attention 同时向左、向右看,全句上下文一次性融合 → “Bidirectional”。
3.输出两种向量◦[CLS] 向量:整句语义的浓缩,常拿来做分类、检索。◦其余词向量:每个词带上下文的“语境化嵌入”(Contextualized Word Embeddings),可做抽取、对齐等细粒度任务。
- ◦[CLS] 向量:整句语义的浓缩,常拿来做分类、检索。
- ◦其余词向量:每个词带上下文的“语境化嵌入”(Contextualized Word Embeddings),可做抽取、对齐等细粒度任务。
4.为什么叫 “Representation Model”
1.BERT 不负责生成文本,而是把输入映射成可下游复用的语义坐标——这正是检索、情感分析、问答等任务用它做特征提取的原因。
背景:
Representation Models(表征模型)= “专门负责把文本转成可用向量表征的模型”
1.核心任务◦输入:一句话、一段文本,甚至整篇文档。◦输出:一条或多条固定长度的向量(Embedding),其中蕴含了语义、语法、主题等信息。◦特点:本身不生成新文本,而是提供可供后续算法直接运算、检索、分类的“语义坐标”。
- ◦输入:一句话、一段文本,甚至整篇文档。
- ◦输出:一条或多条固定长度的向量(Embedding),其中蕴含了语义、语法、主题等信息。
- ◦特点:本身不生成新文本,而是提供可供后续算法直接运算、检索、分类的“语义坐标”。
2.典型架构◦多为Encoder-only Transformer(如 BERT、RoBERTa、Sentence-BERT、OpenAI Ada Embeddings)。◦通过双向自注意力同时吸收左、右上下文,学得更丰富的句子/词语境。
- ◦多为Encoder-only Transformer(如 BERT、RoBERTa、Sentence-BERT、OpenAI Ada Embeddings)。
- ◦通过双向自注意力同时吸收左、右上下文,学得更丰富的句子/词语境。
3.常见使用方式a.预训练 (self-supervised):在海量无标注语料上做遮词预测、对比学习等,获得通用向量。b.微调 (fine-tune):在小规模有标签数据上再训几轮,快速适配具体任务。
a.预训练 (self-supervised):在海量无标注语料上做遮词预测、对比学习等,获得通用向量。
b.微调 (fine-tune):在小规模有标签数据上再训几轮,快速适配具体任务。
4.应用场景◦文本分类(情感分析、垃圾邮件识别)◦相似度检索 & RAG(向量数据库召回、问答检索)◦命名实体识别、关键词抽取(依赖词/子词级向量)◦聚类、主题建模、推荐系统(利用向量距离衡量相关性)
- ◦文本分类(情感分析、垃圾邮件识别)
- ◦相似度检索 & RAG(向量数据库召回、问答检索)
- ◦命名实体识别、关键词抽取(依赖词/子词级向量)
- ◦聚类、主题建模、推荐系统(利用向量距离衡量相关性)
5.与生成式模型的区别◦Representation Model:侧重“理解”,产出向量供别的组件用。◦Generative Model(GPT 类):侧重“生成”,按 token 自回归地写出新文本。
- ◦Representation Model:侧重“理解”,产出向量供别的组件用。
- ◦Generative Model(GPT 类):侧重“生成”,按 token 自回归地写出新文本。
简单记:生成模型写字,表征模型造坐标。后者是许多检索与理解型 NLP 系统的语义底座。
图37Masked Language Modeling (MLM)预训练任务

1.随机遮挡(Mask)输入句子被人为替换掉某个词:
[CLS] I [MASK] llamas
1.训练时,模型并不知道[MASK]原本是什么。
2.送入多层 Transformer Encoder(BERT-base 共 12 层)每个 token—including[MASK]—都通过双向自注意力看到整句上下文。
3.预测被遮挡的词在输出向量上接一个分类头,要求模型把[MASK]位置恢复成原词“am”。◦这就是Masked Language Modeling (MLM)预训练任务。◦模型必须同时利用左侧的 “I” 和右侧的 “llamas” 语境,才能猜中正确动词。
- ◦这就是Masked Language Modeling (MLM)预训练任务。
- ◦模型必须同时利用左侧的 “I” 和右侧的 “llamas” 语境,才能猜中正确动词。
核心 takeaway:通过大量“遮词→还原”练习,BERT 学会了把句子中每个词映射成“含丰富上下文”的向量——这就是它作为表征模型 (Representation Model)的能力来源。
图38BERT 的“第一步”——预训练
预训练:

1.这页只强调 BERT 的“第一步”——预训练◦把海量公开语料(如整套维基百科)喂给模型。◦训练目标是Masked Language Modeling:随机遮掉 15% 单词,要求 BERT 依靠双向上下文把它们预测回来。
- ◦把海量公开语料(如整套维基百科)喂给模型。
- ◦训练目标是Masked Language Modeling:随机遮掉 15% 单词,要求 BERT 依靠双向上下文把它们预测回来。
2.为什么先这样练?◦不需要人工标签,成本低、规模大。◦让模型学到通用的词义、短语搭配、句法关系等“语言常识”,形成通用语义向量底座。
- ◦不需要人工标签,成本低、规模大。
- ◦让模型学到通用的词义、短语搭配、句法关系等“语言常识”,形成通用语义向量底座。
3.隐含的下一步(通常在下一页会出现)◦预训练完毕后,把 BERT 拿去微调 (fine-tune):在小规模、有标签的下游任务上继续训练几轮,就能快速达到高精度。
- ◦预训练完毕后,把 BERT 拿去微调 (fine-tune):在小规模、有标签的下游任务上继续训练几轮,就能快速达到高精度。
一句话:这张图告诉你 ——先用遮词游戏在大语料库上练出“语言感觉”,再去做任何具体任务都会事半功倍。
图39BERT 的第二步:微调 (fine-tune)
微调你预训练的模型:

1.第二步:微调 (fine-tune)◦先前在维基百科等大语料上做过“遮词自学”,得到了一个通用版BERT。◦把这份预训练权重作为“起跑线”,再在小规模、有标签的数据集上继续训练几轮。
- ◦先前在维基百科等大语料上做过“遮词自学”,得到了一个通用版BERT。
- ◦把这份预训练权重作为“起跑线”,再在小规模、有标签的数据集上继续训练几轮。
2.下游任务示例◦文本分类:判断评论正负、邮件是否垃圾等。◦命名实体识别 (NER):在句子里标出人名、公司、地名。◦语义匹配 / 句子同义检测:判断两句话是否表达同一意思。
- ◦文本分类:判断评论正负、邮件是否垃圾等。
- ◦命名实体识别 (NER):在句子里标出人名、公司、地名。
- ◦语义匹配 / 句子同义检测:判断两句话是否表达同一意思。
3.为什么这么做◦预训练让模型掌握通用语言知识;◦微调只需很少标注数据,就能把这种能力快速迁移到具体业务场景,显著节省标注成本和训练时间。
- ◦预训练让模型掌握通用语言知识;
- ◦微调只需很少标注数据,就能把这种能力快速迁移到具体业务场景,显著节省标注成本和训练时间。
一句话:BERT 先用“大海捞针式”无监督学习奠基,再用“小而精”的有监督数据微调,就能在各种 NLP 任务上取得高精度。
Representation Models
图40 对比 “生成式模型” 和 “表征模型” 的核心差异
生成式模型如GPT 表征模型如嵌入模型

这张图对比 “生成式模型” 和 “表征模型” 的核心差异
1.左边:Generative Models(以 GPT-1 为例)◦堆栈:12 层Transformer Decoder,没有 Encoder。◦Attention 方向:Masked Self-Attention——只能看见自己左边的已生成词,保证按顺序自回归。◦输出:一次只预测下一个词(这里是llamas),然后把新词拼回去继续生成。◦用途:写作、对话、补全代码、翻译等「接着写」场景。
- ◦堆栈:12 层Transformer Decoder,没有 Encoder。
- ◦Attention 方向:Masked Self-Attention——只能看见自己左边的已生成词,保证按顺序自回归。
- ◦输出:一次只预测下一个词(这里是llamas),然后把新词拼回去继续生成。
- ◦用途:写作、对话、补全代码、翻译等「接着写」场景。
2.右边:Representation Models(以 BERT 为例)◦堆栈:12 层Transformer Encoder,没有 Decoder。◦Attention 方向:双向 Self-Attention——同时看左、右上下文,获得全句语义。◦输出:为每个 token生成一条“带上下文”的向量;[CLS] 位还可作为整句向量。◦用途:文本分类、向量检索、命名实体识别、RAG 召回等「理解 / 检索」场景。
- ◦堆栈:12 层Transformer Encoder,没有 Decoder。
- ◦Attention 方向:双向 Self-Attention——同时看左、右上下文,获得全句语义。
- ◦输出:为每个 token生成一条“带上下文”的向量;[CLS] 位还可作为整句向量。
- ◦用途:文本分类、向量检索、命名实体识别、RAG 召回等「理解 / 检索」场景。
3.一句话总结◦GPT-类 = 只写不读:单向注意力,自回归生成。◦BERT-类 = 只读不写:双向注意力,语义表征。
- ◦GPT-类 = 只写不读:单向注意力,自回归生成。
- ◦BERT-类 = 只读不写:双向注意力,语义表征。
图41 Generative Models
模型上下文长度:8,最大长度512

这页图把 GPT-类生成模型的“打字循环”拆成 4 步:
1.初始输入(绿色)◦Prompt:Tell me something about llamas.◦句子被分成 8 个 token(编号 1-8)。◦当前上下文长度 = 8 / 最大可用窗口 = 512。【模型上下文长度】
- ◦Prompt:Tell me something about llamas.
- ◦句子被分成 8 个 token(编号 1-8)。
- ◦当前上下文长度 = 8 / 最大可用窗口 = 512。【模型上下文长度】
2.模型前向◦把这 8 个 token 丢进Generative LLM。
- ◦把这 8 个 token 丢进Generative LLM。
- ◦LLM 只用已有上下文,预测「下一个最合适的 token」。
3.输出一个新 token(粉色)◦例子中模型生成domesticated。◦这就是自回归的Step 9——一次只吐 1 个 token。
- ◦例子中模型生成domesticated。
- ◦这就是自回归的Step 9——一次只吐 1 个 token。
4.拼回输入并继续◦把domesticated接到序列尾部,新的上下文长度 = 9。◦将更新后的序列再喂给模型,重复步骤 2-4,直至满足长度、停止符或温度采样条件。
- ◦把domesticated接到序列尾部,新的上下文长度 = 9。
- ◦将更新后的序列再喂给模型,重复步骤 2-4,直至满足长度、停止符或温度采样条件。
一句话:生成式 LLM = Prompt + 已生成文本 → 预测下一词 → 拼回 → 循环。窗口大小(如 512 或 8k token)决定了模型能“记住”多长的上下文。
图42 GPT 系列模型参数规模的指数级跃迁

这张图用三个不同大小的圆点,展示了 GPT 系列模型参数规模的指数级跃迁:
1.GPT-1◦1.17 亿(117 Million)参数◦只是验证「纯 Decoder + 语言建模目标」的可行性。
- ◦1.17 亿(117 Million)参数
- ◦只是验证「纯 Decoder + 语言建模目标」的可行性。
2.GPT-2
- ◦15 亿(1.5 Billion)参数
- ◦体量提升约 ×13,已经具备连贯写作与多任务“零样本”能力,公开后引起广泛关注。
3.GPT-3◦175 亿(175 Billion)参数◦再次放大 ×100+,大幅提升在推理、对话、少样本学习上的表现,奠定今天大语言模型浪潮的基础。
- ◦175 亿(175 Billion)参数
- ◦再次放大 ×100+,大幅提升在推理、对话、少样本学习上的表现,奠定今天大语言模型浪潮的基础。
要点:随着参数量从千万级 → 十亿级 → 百亿级激增,模型涌现出更复杂、更通用的语言与推理能力,但也对训练算力、数据和能耗提出了巨大的要求。
图43 Year of Generative AI(2023)
GPT3.5成功后,又出来了很多模型。也有很多开源模型,甚至可以用于商业用途

图示关键信息
1.时间轴:2023 → 2024◦图中横线代表近两年,突出被称为 “Year of Generative AI” 的时间段。◦每个黑点是发布节点,粗略按月份顺序排列。
- ◦图中横线代表近两年,突出被称为 “Year of Generative AI” 的时间段。
- ◦每个黑点是发布节点,粗略按月份顺序排列。
2.上下分区:闭源 vs. 开源◦上半区(蓝底)— Proprietary Models▪商业闭源产品/API:ChatGPT、GPT-4、Bard、PaLM 2、Claude 2、Grok、Gemini等。◦下半区(黄底)— Open-Source Models▪公开权重社区项目:Llama(1/2)、MPT、Falcon、Qwen、Mistral、Mixtral、Yi、Phi-2、DeciLM等。
- ◦上半区(蓝底)— Proprietary Models▪商业闭源产品/API:ChatGPT、GPT-4、Bard、PaLM 2、Claude 2、Grok、Gemini等。
- ◦下半区(黄底)— Open-Source Models▪公开权重社区项目:Llama(1/2)、MPT、Falcon、Qwen、Mistral、Mixtral、Yi、Phi-2、DeciLM等。
3.模型名字下的小字◦标示主要参数规模(如 7B、34B、70B)或家族多版本(7B/13B/70B)。◦帮你快速感知同一品牌在“轻量-大规模”上的布局。
- ◦标示主要参数规模(如 7B、34B、70B)或家族多版本(7B/13B/70B)。
- ◦帮你快速感知同一品牌在“轻量-大规模”上的布局。
4.可读出的趋势
- ◦密集迭代:从 2023 初到 2024 初,闭源与开源阵营几乎每月都有新发布。
- ◦参数多档位:7B-70B 成常见区间,既便于本地推理,也能继续扩充到百亿级。
- ◦竞合并存:大厂闭源(追求性能、对齐、安全)与社区开源(追求可控、可定制)双线加速。
一句话概括:这张时间轴把 2023-2024 的生成式 AI 爆发期按“闭源-开源”对簇,展示了主流大模型的密集登场和多规格并进的版图态势。
6-Tokenizers分词器 11:52

图44 LLM 的最小流水线:切词 → 数值化 → 语言模型 → 语境化向量

1.输入句子Have the bards who…
2.Tokenization(分词)◦把整句拆成最小处理单元:Have | the | b | ards | who◦其中b+ards显示了子词拆分的例子。
- ◦把整句拆成最小处理单元:Have | the | b | ards | who
- ◦其中b+ards显示了子词拆分的例子。
3.Embeddings(映射成数字向量)◦每个 token 查表得到一串数字(稠密向量)。◦这一步把文本变成机器可计算的形式。
- ◦每个 token 查表得到一串数字(稠密向量)。
- ◦这一步把文本变成机器可计算的形式。
4.Language Model 处理◦将所有 token 向量同时送入 Transformer 等语言模型。◦通过多层自注意力,模型让每个词“看到”上下文。
- ◦将所有 token 向量同时送入 Transformer 等语言模型。
- ◦通过多层自注意力,模型让每个词“看到”上下文。
5.输出:Contextualized Embeddings◦每个词得到一条“含语境”的新向量。◦这些向量现在既包含词义,也包含它在句中扮演的角色,可供后续任务(检索、分类、生成等)使用。
- ◦每个词得到一条“含语境”的新向量。
- ◦这些向量现在既包含词义,也包含它在句中扮演的角色,可供后续任务(检索、分类、生成等)使用。
这张图总结了 LLM 的最小流水线:切词 → 数值化 → 语言模型 → 语境化向量。
图45生成模式:切词 → 嵌入 → 模型 → 预测下一个 token → 拼回 → 循环

1.输入仍是同一句 PromptHave the bards who…
2.分词 ➜ 向量化◦绿色:Tokenization→ 切成Have | the | b | ards | who◦橙色:Embeddings→ 查表得到稠密数字向量
- ◦绿色:Tokenization→ 切成Have | the | b | ards | who
- ◦橙色:Embeddings→ 查表得到稠密数字向量
3.送入语言模型◦这一次模型的目标不是返回整句向量,而是预测下一个 token。
- ◦这一次模型的目标不是返回整句向量,而是预测下一个 token。
4.输出(红色小 pill)◦模型认为最有概率接在当前上下文后面的词是“Or”。◦若继续生成,“Or” 会被拼回输入,再次走同样流程,形成自回归序列。
- ◦模型认为最有概率接在当前上下文后面的词是“Or”。
- ◦若继续生成,“Or” 会被拼回输入,再次走同样流程,形成自回归序列。
这张图把生成模式的最后一步补全:切词 → 嵌入 → 模型 → 预测下一个 token → 拼回 → 循环。 前面的图着重“理解”,而这里展示了 LLM 怎样一步步“写”出新文本。
图46 整个闭环:文字 → token → ID → 模型 → 新 ID → 新 token → 新文字

1.Tokenizer → encode◦文本Have the b ards who被切成 5 个 token。◦每个 token 查字典得到一个整数 ID(如Have → 6,975,the → 912…)。◦这些Token IDs就是喂给模型的输入序列。
- ◦文本Have the b ards who被切成 5 个 token。
- ◦每个 token 查字典得到一个整数 ID(如Have → 6,975,the → 912…)。
- ◦这些Token IDs就是喂给模型的输入序列。
2.Language model 推断◦模型读取一串数字 6,975,912,278,3,163,1,0586{,}975, 912, 278, 3{,}163, 1{,}058 并预测下一个数字。◦此例输出的ID = 1,394。
- ◦模型读取一串数字 6,975,912,278,3,163,1,0586{,}975, 912, 278, 3{,}163, 1{,}058 并预测下一个数字。
- ◦此例输出的ID = 1,394。
3.Tokenizer → decode◦再用同一本字典把 1,394 映射回单词“Or”。◦生成流程完成第 1 步:模型成功续写了一个词。
- ◦再用同一本字典把 1,394 映射回单词“Or”。
- ◦生成流程完成第 1 步:模型成功续写了一个词。
整个闭环就是:文字 → token → ID → 模型 → 新 ID → 新 token → 新文字,周而复始地把数字世界和文字世界相互转换。
图47 同一句文本可以按4 种粒度切分

一句话:同一句文本可以按4 种粒度切成 token,层层向下,直到最底层的字节。
1.Word tokens(完整单词)Have | the | 🎵 | bards | who | preceded | …◦最直观,但遇到生僻符号或新词会 OOV(词表爆炸)。
- ◦最直观,但遇到生僻符号或新词会 OOV(词表爆炸)。
2.Sub-word tokens(子词/BPE)Have | the | 🎵 | b | ards | who | preced | ed | …◦用 BPE/SentencePiece 把长词拆成常见片段,兼顾词表大小与覆盖率,是主流 LLM 的选择。
- ◦用 BPE/SentencePiece 把长词拆成常见片段,兼顾词表大小与覆盖率,是主流 LLM 的选择。
3.Character tokens(逐字符)H | a | v | e | … | 🎵 | b | a | r | d | s | …◦词表极小、不怕生僻字符,但序列更长,学习效率低。
- ◦词表极小、不怕生僻字符,但序列更长,学习效率低。
4.Byte tokens(逐字节)◦把每个字符转成 UTF-8 字节,再映射成 0-255 的整数。◦彻底无 OOV,任何符号都能处理;缺点是序列更长、语义跨度更大。
- ◦把每个字符转成 UTF-8 字节,再映射成 0-255 的整数。
- ◦彻底无 OOV,任何符号都能处理;缺点是序列更长、语义跨度更大。
核心 takeaway:•词越大 → 语义密度高、词表大;
图48最常用的 “子词(Sub-word)分词” 方案

这一帧专门强调最常用的 “子词(Sub-word)分词” 方案:
1.句子Have the 🎵 bards who preceded …
2.子词切分结果
Have | the | 🎵 | b | ards | who | preced | ed | …
罕见符号 🎵 保持整体;
长词 bards、preceded 被拆成更高频的片段 b + ards、preced + ed。
- ◦罕见符号 🎵 保持整体;
- ◦长词bards、preceded被拆成更高频的片段b + ards、preced + ed。
1.为什么选子词?◦稳妥:可同时覆盖高频整词和任何新人造词 / 生僻字符。◦高效:词表规模≈30 K,不会像字节级那样序列过长,也不必像整词级那样动辄百万词表。◦泛化:模型见过ard / ed等后缀,可推断新词形。
- ◦稳妥:可同时覆盖高频整词和任何新人造词 / 生僻字符。
- ◦高效:词表规模≈30 K,不会像字节级那样序列过长,也不必像整词级那样动辄百万词表。
- ◦泛化:模型见过ard / ed等后缀,可推断新词形。
现代大模型(GPT-n、T5、Llama 等)几乎都采用这一粒度,因为它在词表大小、序列长度、OOV 处理三者之间取得最佳平衡。

图49用Transformers 快速把一句话变成 BERT token ID”的完整最小流程

这段 Jupyter 代码演示了“用Transformers 快速把一句话变成 BERT token ID”的完整最小流程:
1.from transformers import AutoTokenizer导入万能分词器,可自动下载并加载指定模型对应的 tokenizer。
2.sentence = "Hello world!"定义一句待处理文本。
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
- ◦下载 / 载入BERT-base-cased的词表与分词规则。
- ◦“cased” 版本区分大小写,因此H和h会得到不同 token。

- ◦运行分词器 → 输出整型 ID 列表。
- ◦结果[101, 8667, 1362, 106, 102]分别对应

2.print(token_ids)在控制台打印出这串 ID,验证编码成功。
代码块下方的标题“Visualizing Tokenizers”暗示教程下一节会把这些 ID 反解或可视化,帮助读者直观理解分词器的工作。
图50「文本 → ID → 文本」的双向映射

- •上一格打印的是 token ID 序列
[101, 8667, 1362, 106, 102]
- •你已经看到分词器把 “Hello world!” 变成了 5 个整数。
- •这一格再做一次“反向操作”
for token_id in token_ids:
print(tokenizer.decode(token_id))
- •tokenizer.decode()会把单个 ID 还原成对应的子词符号,于是依次输出
代码块Plain Text
- •这验证了encode ↔ decode是一一对应的闭环:◦[CLS]/[SEP]是 BERT 约定的句首、句尾特殊标记。◦其他行正好是我们熟悉的 “Hello”、 “world”、感叹号。
通过这两行小代码,你就亲手完成了「文本 → ID → 文本」的双向映射,掌握了使用 🤗 Tokenizer 的最基本技巧。
图51Visualizing Tokenizers

1.进入“Visualizing Tokenizers”章节这一段代码准备把分好词的 token 以彩色块的形式渲染出来,方便人眼查看每个子词的切分情况与顺序。
2.colors = [...]
colors = [
'102,194,165', # 绿色系
'252,141,98', # 橙色系
'141,160,203', # 蓝紫系
'231,138,195', # 粉紫系
'166,216,84', # 草绿色
'255,217,47' # 亮黄色
]
- ◦列出了 6 组RGB 值(用逗号分隔的字符串)。
- ◦后面会循环使用这些颜色给不同 token 上色,让 Notebook 输出更直观。
1.下方一排空白输出框◦这是 Jupyter 预留的展示区域。◦运行后续可视化代码时,每个框会被填充成带背景色的 token 方块,颜色按上述列表循环分配。
- ◦这是 Jupyter 预留的展示区域。
- ◦运行后续可视化代码时,每个框会被填充成带背景色的 token 方块,颜色按上述列表循环分配。
小结:作者先设定一组颜色调色板,接着会把 token 和颜色绑定,生成一目了然的 “彩虹分词” 视图,帮助你快速理解子词分割效果。
图52show_tokens函数

这段show_tokens函数做了什么?
1.加载分词器并编码句子
tokenizer = AutoTokenizer.from_pretrained(name)
token_ids = tokenizer(sentence).input_ids
name 传入如 "bert-base-cased"、"gpt2" 等模型名。
得到对应的 token ID 列表。
- ◦name传入如"bert-base-cased"、"gpt2"等模型名。
- ◦得到对应的token ID 列表。
1.打印词表大小(Vocabulary length)
print(f"Vocab length: {len(tokenizer)}")
方便你了解所用模型的词表规模(比如 30 K、50 K)。
- ◦方便你了解所用模型的词表规模(比如 30 K、50 K)。
1.把每个 token 彩色输出
for idx, t in enumerate(token_ids):
print(
f'\x1b[0;30;48;2;' # ANSI 转义序列起始
f'{colors[idx % len(colors)]}m' # 取颜色表循环上色
+ tokenizer.decode(t) # 把 ID 反解成子词
+ '\x1b[0m', # 重置颜色
end=' '
)
利用 ANSI 转义序列,给终端文本加背景色。
颜色取自之前定义的 colors 列表,idx % len(colors) 实现循环。
tokenizer.decode(t) 把 ID 还原为可读的子词。
- ◦利用ANSI 转义序列,给终端文本加背景色。
- ◦颜色取自之前定义的colors列表,idx % len(colors)实现循环。
- ◦tokenizer.decode(t)把 ID 还原为可读的子词。
运行后,你会在控制台看到一个带彩虹色块的分词结果,直观展示句子被切成了哪些 token 以及它们的顺序。
图53分词可视化结果

这一格展示了show_tokens()函数对一段“混合大小写 + 表情符号 + 代码片段”文本的分词可视化结果(使用bert-base-casedtokenizer):
1.词表大小
Vocab length: 28996
1.说明 BERT-base-cased 的子词词表有 28 996 个条目。
2.彩色 token 输出
[CLS] English and CA ##PI ##TA ##LI ##ZA ##TI ON [UNK] [UNK] show ...
[CLS] … [SEP] → 句首、句尾特殊标记。
词首区分大小写:CAPITALIZATION 被拆成 CA ##PI ##TA …(BPE 子词,保留大写 C、A)。
[UNK] → 未知符号;这里音乐符号 “🎵” 和 “🎷” 不在词表中,因而映射为 [UNK]。
子词拆分:token##s、tab##s、##if 等展示 “##” 前缀的后缀片段。
标点与数字单独成 token::、>、=、12、600 等保持独立。
- ◦[CLS] … [SEP]→ 句首、句尾特殊标记。
- ◦词首区分大小写:CAPITALIZATION被拆成CA ##PI ##TA …(BPE 子词,保留大写 C、A)。
- ◦[UNK]→ 未知符号;这里音乐符号 “🎵” 和 “🎷” 不在词表中,因而映射为[UNK]。
- ◦子词拆分:token##s、tab##s、##if等展示 “##” 前缀的后缀片段。
- ◦标点与数字单独成 token::、>、=、12、600等保持独立。
1.可视化意义◦直观观察大小写敏感、BPE 拆词、OOV (Out-of-Vocab)的处理方式。◦发现如果想让模型识别 🎵 等 emoji,需要换用byte-level tokenizer或额外扩展词表。
- ◦直观观察大小写敏感、BPE 拆词、OOV (Out-of-Vocab)的处理方式。
- ◦发现如果想让模型识别 🎵 等 emoji,需要换用byte-level tokenizer或额外扩展词表。
小结:彩色分词视图让你一眼看清“复杂文本 → 子词 ID”的整个映射过程,帮助调试特殊符号、大小写及未知词在模型中的表现。
图54"Xenova/gpt-4"对应的tiktoken分词器

**这一格把同一段文本喂给了"Xenova/gpt-4"对应的tiktoken分词器,和前面的bert-base-cased形成了鲜明对比:
1.词表规模
Vocab length: 100 263
1.GPT-4 家族采用的 tiktoken 词表≈100 k,远大于 BERT 的 29 k。——原因是它走Byte-Level BPE路线:对所有 Unicode 字节都做过合并训练,确保几乎没有 OOV。
2.可视化观察到的差异◦没有[CLS] / [SEP]之类的特殊开头结尾标记;GPT 是纯 Decoder,不需要额外位置符号来做分类。◦音乐符号 🎵🎷 被拆成多个彩色小方块:▪这些方块代表Unicode 字节序列(在终端渲染成 “�” 占位符),说明分词器按字节粒度吞下了 emoji,而不是用[UNK]。◦大小写合并:▪CAPITAL和IZATION被拆成两个常见片段,颜色一致说明它们在词表里是高频 merge 结果。◦标点与空格:▪GPT 的词表里把“空格+词”作为常见组合,因此▁English(可视化时用彩色块表现)与单独 “English” 可能用到两个不同 token;这里脚本把首词切成English(无前导空格),后续空格被单独编码或合并到下一个 token。
- ◦没有[CLS] / [SEP]之类的特殊开头结尾标记;GPT 是纯 Decoder,不需要额外位置符号来做分类。
- ◦音乐符号 🎵🎷 被拆成多个彩色小方块:▪这些方块代表Unicode 字节序列(在终端渲染成 “�” 占位符),说明分词器按字节粒度吞下了 emoji,而不是用[UNK]。
- ◦大小写合并:▪CAPITAL和IZATION被拆成两个常见片段,颜色一致说明它们在词表里是高频 merge 结果。
- ◦标点与空格:▪GPT 的词表里把“空格+词”作为常见组合,因此▁English(可视化时用彩色块表现)与单独 “English” 可能用到两个不同 token;这里脚本把首词切成English(无前导空格),后续空格被单独编码或合并到下一个 token。
3.实用启示◦Byte-Level → 万物可编:无需扩展词表也能处理 emoji、罕见符号、甚至二进制片段。◦更大词表 ≠ 更长序列:虽然 100 k 听起来多,但因为常见“空格+词”已合并,整体 token 数常比子词 BPE 还短。◦不同模型、不同分词器:切分方式直接影响 prompt 长度计费、位置窗口消耗,写长 prompt 时最好用同一 tokenizer 估算。
- ◦Byte-Level → 万物可编:无需扩展词表也能处理 emoji、罕见符号、甚至二进制片段。
- ◦更大词表 ≠ 更长序列:虽然 100 k 听起来多,但因为常见“空格+词”已合并,整体 token 数常比子词 BPE 还短。
- ◦不同模型、不同分词器:切分方式直接影响 prompt 长度计费、位置窗口消耗,写长 prompt 时最好用同一 tokenizer 估算。
一句话对比:BERT→ 29 k 子词表,遇到 🎵 →[UNK];GPT-4→ 100 k 字节级词表,🎵 分成若干字节 token,无未知符号,一切皆可分。
7-架构概述 06:28
图55 How Transformer LLMs Work - Architectural Overview架构概览

图56生成式 LLM 的工作方式

这张图用最简单的流程图示意生成式 LLM 的工作方式:
1.Prompt(上框):用户给出自然语言指令——「写一封向 Sarah 道歉并说明经过的邮件」。
2.Transformer LLM(中框):模型读取提示,在内部按自回归方式一步步预测下一个词。
3.Generation(下框):模型输出完整邮件正文,起句如 “Dear Sarah, I’m writing to apologize…”。
核心概念:自然语言提示 → LLM → 连贯文本输出——整个链路只靠一条 Prompt 驱动。
图57生成式 LLM每次只生成 1 个 token

这张图补充了一个关键细节:生成式 LLM 不是一次吐出整段邮件,而是“一口一口”**地写——每次只生成 1 个 token。
1.输入仍是原来的 Prompt“Write an email apologizing to Sarah for the tragic gardening mishap. Explain how it happened.”
2.模型内部逻辑◦先用 Prompt 建立上下文。◦预测第 1 个 token →Dear◦把Dear拼回序列,再预测第 2 个 token →Sarah◦再回写 → 预测.◦再回写 → 预测换行\n◦…如此循环,直至生成完整邮件或遇到停止符。
- ◦先用 Prompt 建立上下文。
- ◦预测第 1 个 token →Dear
- ◦把Dear拼回序列,再预测第 2 个 token →Sarah
- ◦再回写 → 预测.
- ◦再回写 → 预测换行\n
- ◦…如此循环,直至生成完整邮件或遇到停止符。
3.为什么要这样做?◦自回归(autoregressive)机制可让模型在写作过程中不断利用已生成文本,保持上下文一致性。◦便于控制长度、温度采样、多样性等生成策略。
- ◦自回归(autoregressive)机制可让模型在写作过程中不断利用已生成文本,保持上下文一致性。
- ◦便于控制长度、温度采样、多样性等生成策略。
一句话:Transformer LLM = Prompt → 逐 token 生成 → 拼回再生成 → …,像“智能打字机”一样完成整篇输出。
图58生成式 LLM 拆开成 3 个关键部件

这张图把一个生成式 LLM 拆开成 3 个关键部件,串起完整的“打一字流程”:
1.Tokenizer◦接收 Prompt(写信给 Sarah 的指令)。◦把文字切成 token 并映射成 ID 向量,作为模型的数字入口。
- ◦接收 Prompt(写信给 Sarah 的指令)。
- ◦把文字切成 token 并映射成 ID 向量,作为模型的数字入口。
2.Stack of Transformer Blocks◦多层「自注意力 + 前馈」模块对整串 token 进行上下文融合。◦经过 N 层后,每个 token 都带上了句内语义。
- ◦多层「自注意力 + 前馈」模块对整串 token 进行上下文融合。
- ◦经过 N 层后,每个 token 都带上了句内语义。
3.LM Head
- ◦线性层 + Softmax 把最后一层向量转换为词表上的概率分布。
- ◦采样或取最大概率,输出“下一个 token”。示例里选出“Dear”。
一句话:Prompt →Tokenizer(切词/编码)→Transformer Blocks(理解上下文)→LM Head(挑出下一词)→ 把生成词拼回去后,再重复这三步,直到邮件写完。
图59Tokenizer = 字典 / Model = 参数
The tokenizer holds a vocabulary, the model contains token embeddings

要点只有两个字:分 工
1.Tokenizer 负责“字典”◦它保存一张Token Vocabulary代码块Plain TextID Token0 !1 .… …
- ◦它保存一张Token Vocabulary
ID Token
0 !
1 .
… …
2.50 000 Zyzzyva
- 作用:把文字查成数字 ID,或把数字反解回文字。
- 这张表在训练后通常**不再变化**,只和分词规则绑定。
1.模型本体存“权重”
- ◦ID 进到模型后,会去查一块Token Embeddings矩阵:
行数 = 词表大小(50 001 行…)
列数 = 向量维度(如 768 列)
- ◦每行是该 token 的可训练向量,会在预训练 / 微调中不断更新。
- ◦后面所有 Transformer Block 都在加工这些向量。
一句话记住•Tokenizer = 词典:固定映射「字符↔ID」。•模型 = 参数:把 ID 变向量,再通过多层注意力完成理解或生成。
把二者分离的好处:词典可复用、模型可迭代;更新权重不会破坏老数据的分词兼容性。
背景:
这句话在区分分词器(tokenizer)和模型本身在大语言模型中的职责:

简而言之:
- •Tokenizer = 字典,负责“词 ↔ 数字”映射。
- •Model = 参数,负责把数字 ID 变成可学习的向量并做后续计算。
图60LM Head 如何把隐向量变成“下一个词”的概率表

这页聚焦在最后一环——LM Head 如何把隐向量变成“下一个词”的概率表:
1.向量进 LM Head◦前面 N 层 Transformer 已产出当前光标位置的隐藏向量。◦这条向量送入 LM Head(线性层 + Softmax)。
- ◦前面 N 层 Transformer 已产出当前光标位置的隐藏向量。
- ◦这条向量送入 LM Head(线性层 + Softmax)。
2.打分全过程◦线性层把向量同词表中每个 token 的权重做点积,得到一排logits。◦Softmax 把 logits 转成 0–1 间的概率分布,总和为 1。
- ◦线性层把向量同词表中每个 token 的权重做点积,得到一排logits。
- ◦Softmax 把 logits 转成 0–1 间的概率分布,总和为 1。
3.示例输出

1.生成循环◦选出的 token 拼回序列→ 再次经过 Transformer Blocks → LM Head → 继续预测下一词,直至结束符或长度上限。
- ◦选出的 token 拼回序列→ 再次经过 Transformer Blocks → LM Head → 继续预测下一词,直至结束符或长度上限。
一句话:LM Head = 把隐藏向量映射到整张词表概率,取最高(或按温度采样)得到下一 token。
图61模型算出概率分布后,究竟用什么策略挑出下一个词
温度=0

**这张图补充了“模型算出概率分布后,究竟用什么策略挑出下一个词”——示例里展示的是最简单的一种:贪婪解码 (greedy decoding)。
1.模型输出一张概率表
Dear 40 %
Title 13 %
To 9 %
Hi 2 %
… …
1.选择策略:Temperature = 0 → 贪婪◦Temperature = 0等同于“把随机性关掉”。◦直接取概率最高的 token(这里是Dear)。◦好处:结果可重复、速度最快;缺点:容易千篇一律、缺乏多样性。
- ◦Temperature = 0等同于“把随机性关掉”。
- ◦直接取概率最高的 token(这里是Dear)。
- ◦好处:结果可重复、速度最快;缺点:容易千篇一律、缺乏多样性。
2.其他常见策略(图上没画,但你常会用到)◦Temperature > 0→ 调高温度增添随机性,文本更丰富。◦Top-k / Top-p (nucleus) sampling→ 只在概率最高的前 k 个或累计 p %的候选里随机挑选。◦Beam search→ 同时保留多个最优候选序列,最终选得分最高的一条。
- ◦Temperature > 0→ 调高温度增添随机性,文本更丰富。
- ◦Top-k / Top-p (nucleus) sampling→ 只在概率最高的前 k 个或累计 p %的候选里随机挑选。
- ◦Beam search→ 同时保留多个最优候选序列,最终选得分最高的一条。
一句话记住:模型给出概率,你再决定怎么抽。•贪婪(temperature 0)= 保守稳妥•调温度、Top-k/p、Beam search = 增加创意或确保全局最优。
图62Top-p 采样 + 温度策略

这页把上一张“贪婪解码”换成了更常用、也更灵活的Top-p 采样 + 温度策略:
1.模型先给出完整概率表
Dear 40 %
Title 13 %
To 9 %
Hi 2 %
… …
1.Top-p(又叫Nucleus)采样◦设一个累计阈值p(常见 0.85 或 0.9)。◦从最高概率往下累加,直到总和 ≥p。◦只在这“一核”候选里随机抽取下一个 token。◦这样既避免把概率极低的怪词选进来也保留一定多样性。
- ◦设一个累计阈值p(常见 0.85 或 0.9)。
- ◦从最高概率往下累加,直到总和 ≥p。
- ◦只在这“一核”候选里随机抽取下一个 token。
- ◦这样既避免把概率极低的怪词选进来也保留一定多样性。
2.温度temperature > 0◦在抽签前先用温度重新拉伸概率分布:▪温度↑→ 分布更平坦,随机性更高;▪温度↓→ 分布更尖锐,更接近贪婪。◦两者一起用,可精细控制“创意 vs. 连贯”的平衡点。
- ◦在抽签前先用温度重新拉伸概率分布:▪温度↑→ 分布更平坦,随机性更高;▪温度↓→ 分布更尖锐,更接近贪婪。
- ◦两者一起用,可精细控制“创意 vs. 连贯”的平衡点。
3.结果◦这次随机抽到的仍然是“Dear”(因为它在 Top-p 区间内且本身概率最大),◦但如果再生成多次,就可能得到 “Hi” / “To” 等不同开头,提升文本多样性。
- ◦这次随机抽到的仍然是“Dear”(因为它在 Top-p 区间内且本身概率最大),
- ◦但如果再生成多次,就可能得到 “Hi” / “To” 等不同开头,提升文本多样性。
关键 takeaway:Top-p + 温度= 大模型最常用的生成策略:限制候选范围防走偏,再用温度注入随机性,让回答既合理又不千篇一律。
图63Transformer 在推理前会把整段提示并行送入所有层

这页图延续上一张,强调Transformer 在推理前会把整段提示并行送入所有层:
1.Tokenization提示被切成子词:Write | … | Explain | how | it | happen | ##ed | .
2.并行流入红色竖箭头表示:◦每个 token 的嵌入同时进入同一堆 Transformer Block。◦自注意力让它们彼此“互看”整句,上下文信息一次性到位。
- ◦每个 token 的嵌入同时进入同一堆 Transformer Block。
- ◦自注意力让它们彼此“互看”整句,上下文信息一次性到位。
3.准备生成经过 N 层后,所有 token 都变成“带上下文”的向量。这批向量将喂给LM Head,模型才开始预测第一个输出词。
关键点:在 LLM 写任何字之前,它先“并行理解”完整 Prompt——这正是 Transformer 高效捕捉长程依赖的秘诀。
图64LLM 在“第二步”生成时发生了两件重要的事

这张图演示了 LLM 在“第二步”生成时发生了两件重要的事:
1.把上一步生成的Dear拼回序列◦新输入序列 = 原 Prompt 的 8 个 token +Dear。◦Tokenizer 再次编码,但只增加 1 个新 token,其它 8 个 token 不变。
- ◦新输入序列 = 原 Prompt 的 8 个 token +Dear。
- ◦Tokenizer 再次编码,但只增加 1 个新 token,其它 8 个 token 不变。
2.利用「缓存」避免重复计算◦浅蓝色框标着Cached calculation:第一次前向时,模型已经算好了 8 个历史 token 的Q/K/V(键值对)向量。◦第二步只需增量计算:
- ◦浅蓝色框标着Cached calculation:第一次前向时,模型已经算好了 8 个历史 token 的Q/K/V(键值对)向量。
- ◦第二步只需增量计算:
- ◦这样 GPU 只为新增 token做工作,速度随生成长度几乎线性。
3.LM Head 输出下一词◦经过堆叠层与 LM Head,模型判定最合适的下一个 token 是Sarah。◦Sarah又会被拼回去,进入第三步循环,周而复始直到邮件写完。
- ◦经过堆叠层与 LM Head,模型判定最合适的下一个 token 是Sarah。
- ◦Sarah又会被拼回去,进入第三步循环,周而复始直到邮件写完。
一句话:增量解码 =「生成一个→缓存→再添一个」。KV 缓存让模型生成长文本时不必反复重算整个上下文,既省时也省显存。
图65总结流程

这帧回到生成循环的 “第 1 步”,用直观箭头总结流程:
1.Prompt 进入 Tokenizer“Write an email apologizing to Sarah for the tragic gardening mishap. Explain how it happened.”→ 切成 8 个子词Write · … · Explain · how · it · happen · ##ed · .
2.并行通过所有 Transformer Blocks红色竖箭头=8 条 token 嵌入同时进入堆叠的自注意力层,整句一次性被“理解”。
3.LM Head 计算概率对最后一个位置(句尾.后)输出词表概率分布。
4.采样/贪婪 → 生成首个 token最高概率词是“Dear”,于是模型把它作为邮件的开头吐出。
接下来 “Dear” 会被拼回序列,模型开启增量解码循环,一步步写完整封道歉邮件。
8-The Transformer Block变压器块 06:50
图66 How Transformer LLMs Work - The Transformer Block

图67LLM 的“内部流水线”

这张图把 LLM 的“内部流水线”完整展开,并标出两处关键“中间结果”:
1.Tokenizer → Embeddings◦例句“The Shawshank”被切成子词The、Shawshank,再查表变成灰色向量条。
- ◦例句“The Shawshank”被切成子词The、Shawshank,再查表变成灰色向量条。
2.多层 Transformer Block(蓝框)◦每层结构:上半块Self-Attention把词与词互相关注;下半块Feed-Forward NN做非线性变换。◦Block 1 Output(浅红):第一层就让两个词的向量开始交换信息。◦Block N Output(深红):经过 N 层后,每个向量已融入全句上下文,语义最丰富。
- ◦每层结构:上半块Self-Attention把词与词互相关注;下半块Feed-Forward NN做非线性变换。
- ◦Block 1 Output(浅红):第一层就让两个词的向量开始交换信息。
- ◦Block N Output(深红):经过 N 层后,每个向量已融入全句上下文,语义最丰富。
3.LM Head◦读取最底层(Block N)输出,计算词表概率,决定下一步生成什么 token。
- ◦读取最底层(Block N)输出,计算词表概率,决定下一步生成什么 token。
一句话概括:切词 → 向量化 → 层层“注意+变换” → 语境化向量 → LM Head 出词。中途任何一层的输出都能可视化,以分析模型在不同深度学到了哪些语义特征。
图68 Feed-Forward NN 前馈神经网络层

图示关键信息(Feed-Forward NN 在 Transformer 中的角色)
1.上下文回顾◦词The Shawshank已经通过Self-Attention彼此“看过”,得到携带上下文的向量。◦这些向量现在进入每一层Transformer Block的下半部分——前馈神经网络 (FFN)。
- ◦词The Shawshank已经通过Self-Attention彼此“看过”,得到携带上下文的向量。
- ◦这些向量现在进入每一层Transformer Block的下半部分——前馈神经网络 (FFN)。
2.FFN 做了什么?
a.逐 token 独立处理(不再和别的词交互)
b.token_vec →W1, ReLU 高维 →W2 原维度 \text{token\_vec} \;\xrightarrow{W_1,\;ReLU}\; \text{高维}\; \xrightarrow{W_2}\; \text{原维度}
c.“膨胀-压缩”结构先把向量维度放大 4 倍左右 → 加非线性 → 再压回原大小。
d.作用直观▪注入非线性,使模型能表达复杂变换。▪像把每个词的语义特征做一次“重组 + 精炼”。
- ▪注入非线性,使模型能表达复杂变换。
- ▪像把每个词的语义特征做一次“重组 + 精炼”。
3.为何必须与 Self-Attention 搭配?◦Attention负责“信息交换”——谁应该和谁沟通。◦FFN负责“信息加工”——在每个词内部做深度特征变换。◦两者交替堆叠 N 层后,语义表达能力显著增强。
- ◦Attention负责“信息交换”——谁应该和谁沟通。
- ◦FFN负责“信息加工”——在每个词内部做深度特征变换。
- ◦两者交替堆叠 N 层后,语义表达能力显著增强。
4.从图到输出◦经过多层 “Attention → FFN” 处理后,The Shawshank的最终向量到LM Head,预测下一个词“Redemption”,完成电影标题续写。
- ◦经过多层 “Attention → FFN” 处理后,The Shawshank的最终向量到LM Head,预测下一个词“Redemption”,完成电影标题续写。
一句话记住:在每层 Transformer 里,Self-Attention 建立联系,Feed-Forward 精修每个词——两者交替,让模型既能看远又能想深。
图69Transformer 块里那条“前馈小 MLP”在单个 token 内部做的事
Transformer Block: Feedforward Neural Network Intuituion
![](/content/images/images/waytoagi/wt