更多学习路线,参考:​《雪梅May的AI学习日记》挑战100天和AI做朋友(持续更新中)

课程学习指南:吴恩达transformer课程怎么学​

1.亲测有效,吴恩达transformer的课程我学4遍的过程【抖音:雪梅AI学习日记】​

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

B站课程链接:​

https://www.bilibili.com/video/BV1K3QAY9E1F?spm_id_from=333.788.player.switch&vd_source=4635a9015e41611a3328c0bf4258ebf5&p=11

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.核心 takeaway​Representation 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)​

论文链接:https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf

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.输入仍是同一句 Prompt​Have 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 Token​0 !​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