- 一、BPE分词器
-
- [1.1 学词表vs用词表](#1.1 学词表vs用词表)
- [1.2 具体流程详解](#1.2 具体流程详解)
-
- [1.2.1 训练流程伪代码](#1.2.1 训练流程伪代码)
- [1.2.2 具体流程](#1.2.2 具体流程)
- 二、三种注意力机制详解
-
- [2.1 注意力机制计算整体流程](#2.1 注意力机制计算整体流程)
- [2.2 三种Attention的Mask视图](#2.2 三种Attention的Mask视图)
- [2.3 Mask的具体数值计算及原理分析](#2.3 Mask的具体数值计算及原理分析)
- [2.4 Mask最终计算公式卡](#2.4 Mask最终计算公式卡)
- 三、Decoder编码器解析
-
- [3.1 Decoder是怎么生成下一个单词的](#3.1 Decoder是怎么生成下一个单词的)
- [3.2 贪心算法](#3.2 贪心算法)
- [3.3 Beam Search](#3.3 Beam Search)
- [3.4 Label Smoothing--让模型不要太过自信](#3.4 Label Smoothing--让模型不要太过自信)
- [四、拓展:Encoder and Decoder Based Models](#四、拓展:Encoder and Decoder Based Models)
-
- [4.1 Build LLMs with Decoder Only](#4.1 Build LLMs with Decoder Only)
- [4.2 BERT](#4.2 BERT)
- [五、Advanced Topics](#五、Advanced Topics)
-
- [5.1 Absolute Position Embedding一 存在的问题](#5.1 Absolute Position Embedding一 存在的问题)
- [5.2 旋转位置编码](#5.2 旋转位置编码)
- [5.3 Attention的问题](#5.3 Attention的问题)
- [5.4 Attention的改进--Flash Attention](#5.4 Attention的改进--Flash Attention)
一、BPE分词器
先进行整体流程概览

- 左侧:从原始文本出发,展示 BPE 先把词拆成字符/byte 级片段。
- 中间:突出核心算法:统计相邻片段频率,反复合并最高频 pair,形成 subword。
- 右侧:把 BPE 词表和 Embedding 矩阵连接起来,说明 token id 如何查表得到向量。
- 底部:对比词级分词、字符级分词和 BPE 子词分词,强调 BPE 的优势是词表可控、无 OOV、序列长度适中。
1.1 学词表vs用词表

左侧阶段 1:用大规模语料离线训练 tokenizer,统计相邻 pair,反复合并最高频片段。
中间输出 :训练完成后得到 Vocabulary + Merge Rules,也就是词表和有序合并规则。
右侧阶段 2:用冻结词表对任意新文本 tokenize,得到 token IDs,再查 Embedding。
底部重点 :词表 V 一旦确定,就会影响 Embedding 矩阵 V × d,也影响输出端 Softmax 的词汇维度。
1.2 具体流程详解
1.2.1 训练流程伪代码

左侧:展示初始化阶段,语料先被拆成字符/byte 序列,初始词表由最小符号组成。
中间:用伪代码形式表达 BPE 核心循环:统计 pair 频率 → 选择最高频 pair → 加入词表 → 改写语料。
右侧 :用 fastest / newest / widest 示例说明 -est 如何通过频率合并自然形成。
底部 :串联完整链路:语料字符序列 → k 次贪心合并 → 冻结词表和 merge rules → tokenize 新文本 → Embedding → Transformer。

左侧伪代码 :突出 BYTE-PAIR ENCODING(C, k) → V 的函数形式,明确输入是语料 C 和合并次数 k。
核心循环 :每轮选择最高频相邻对 (t_L, t_R),生成 t_NEW,扩充词表并改写语料。
右侧示例 :用 fastest / newest / widest 演示两轮合并后如何自然得到 est。
底部实践点 :强调真实 BPE 不只保存 Vocab,还要保存有序 merge rules,后续 tokenize 新文本时按规则顺序贪心切分。
1.2.2 具体流程

顶部流水线 :展示 原始语料 → 按空格分词 → 加词尾符号 _ → 拆成字符 的第 0 步流程。
中部重点 :解释为什么要加 _:保留词边界、可逆还原、防止跨词合并、区分 est_ 与 est。
右侧示例 :用三轮合并说明 est_ 如何形成,强调词尾信息会被合并进 token。
底部串联 :把第 0 步接回前面的 BPE 训练流程:预处理后再进入 k 次合并,最终得到 Vocab + merge rules。

左上:展示原始语料,共 18 个词 token,并统计出 5 个词型及频数。
右上 :把语料折叠成 词型 + 频数 + 词尾符 _,说明 BPE 实际按频数加权统计。
左下 :给出初始词表 V,由语料中去重字符加词尾符 _ 构成,共 11 个基符号。
右下 :预演第 1 轮 pair 频率,突出 (e,r) 与 (r,_) 并列最高,说明 er / er_ 这类后缀 token 会由频率自然合并出来。

左侧 :把原始语料整理成正式的 词型 + 频数 + 词尾符 _ 表,合计 18 个 token。
右侧 :给出初始词表 V = {_, d, e, i, l, n, o, r, s, t, w},共 11 个基符号。
中下部 :预演第 1 轮 pair 计数,突出 (e,r) 和 (r,_) 并列最高频。
右下提示 :标出 wider_ 的下划线勘误,并说明下一步会进入 for i=1..k 合并循环。

上半部分 :展示合并前状态,词表中已有 er、er_,说明前两轮合并已经完成。
中间部分 :把本轮决策形式化为 (t_L,t_R)=(n,e) → t_NEW=ne,并执行 V ← V ∪ {ne}。
下半部分 :展示合并后语料同步改写,newer_ / new_ 变成 ne w er_ / ne w_,词表从 13 增至 14。
右侧预告 :下一轮最高频将是 (ne,w)=8,会继续合并出 new,体现 BPE 自下而上的逐层拼装过程。

左上 :用压缩表格展示第 4--8 轮合并:new、lo、low、newer_、low_ 依次进入词表。
右上 :用三条链说明 BPE 的层级拼装机制:er → er_ → newer_,ne → new,lo → low → low_。
左下:展示 8 轮后的语料状态,高频词已经整词化,低频词仍保持细粒度拆分。
右下:强调有序 merge rules 就是最终分词器,推理时可按规则贪心套用到未见词。
二、三种注意力机制详解

左侧 Encoder :标出 A/B 两处 Encoder Self-Attention,说明 Q/K/V 都来自编码器,无 Mask,负责源句上下文化。
右侧 Decoder:展示 Masked Self-Attention、Encoder-Decoder Attention、FFN 三个子层,并标注自回归回灌。
中间虚线桥 :突出 Encoder 输出作为 K/V 送入 Decoder 的 Cross-Attention,这是两个栈之间的关键连接。
顶部输出头 :把 Linear + Softmax 和 BPE 词表 |V| 联系起来,说明输入 token 与输出词表共享同一套 Vocabulary。
2.1 注意力机制计算整体流程

左上 :说明输入矩阵 X 如何分别乘 W^Q / W^K / W^V 得到 Q / K / V。
中间 :突出核心公式 Z = softmax((QKᵀ + Mask) / √d_k) V,并标出各矩阵维度。
右上 :用 I like this book 的 len × len 热力矩阵解释"谁看谁"。
底部 :强调 QKᵀ 是所有 token 两两比较,所以复杂度是 O(N²)。
2.2 三种Attention的Mask视图

左侧 Encoder Self-Attention :n×n 全 ✓ 矩阵,表示每个 token 都能看全句。
中间 Decoder Masked Self-Attention:下三角 ✓、上三角 ✗,表示只能看自己和过去,不能看未来。
右侧 Cross-Attention :m×n 矩形全 ✓,表示 Decoder 的每个目标 token 都能查询 Encoder 的全部源 token。
底部总结表 :统一对比三种注意力的 Q 来源、K/V 来源、Mask 形状和作用。
2.3 Mask的具体数值计算及原理分析
重点:为什么要选择负无穷&Padding Mask

顶部公式 :把 Mask 写进注意力计算:Z = softmax(QKᵀ/√d_k + M) · V。
左侧矩阵 :展示三种 M:Encoder 全 0、Decoder 下三角 0/上三角 -∞、Cross-Attn 矩形全 0。
中间推导 :用 softmax 展开式说明 -∞ 会让对应权重变成 0。
右侧工程补充 :加入 padding mask,说明 <PAD> 作为 Key 时也要被屏蔽,并可与结构 mask 叠加。
2.4 Mask最终计算公式卡

顶部统一公式 :用 Z = Softmax(QKᵀ/√d_k + M) · V 收束三种注意力。
三张公式卡:分别对应 Encoder Self-Attn、Decoder Masked Self-Attn、Encoder-Decoder Cross-Attn。
右侧判断法 :只看两个问题:Q/K/V 是否同源,以及 M 是全 0、下三角还是矩形。
底部闭环 :把 BPE token + PE → Q/K/V → Attention + M → Z → Linear + Softmax → 下一个 token 串成完整流程。
三、Decoder编码器解析
3.1 Decoder是怎么生成下一个单词的

3.2 贪心算法

中心流程 :Decoder 对当前输入序列输出多个词表概率分布,每个分布通过 argmax 选出下一个 token。
回灌机制 :被圈出的 y₂ 表示上一轮输出已经变成当前输入,y₄ 会继续追加到输入序列。
错位预测 :图中明确标出 输入 y₁,y₂,y₃ → 输出 y₂,y₃,y₄,即位置 t 预测 t+1。
策略对比:右下角补充 Greedy、Beam Search、Sampling、Top-k/Top-p 的差异,突出 Greedy 快但容易局部最优。
3.3 Beam Search

核心设定 :beam size k=3,每条存活序列扩展 Top-3,全局排序后只保留 3 条。
中心搜索树 :展示从 I 出发,第一步保留 am / Like / hate,第二步扩展成 9 条候选。
打分方式 :用累积 log 概率排序,例如 am + a = -0.7 + -0.1 = -0.8。
剪枝机制 :框住保留的前三条,划掉其余路径;说明 Beam Search 比 Greedy 更稳,但剪枝不可逆、成本随 k² 增长。
3.4 Label Smoothing--让模型不要太过自信

核心设定 :beam size k=3,每条存活序列扩展 Top-3,全局排序后只保留 3 条。
中心搜索树 :展示从 I 出发,第一步保留 am / Like / hate,第二步扩展成 9 条候选。
打分方式 :用累积 log 概率排序,例如 am + a = -0.7 + -0.1 = -0.8。
剪枝机制 :框住保留的前三条,划掉其余路径;说明 Beam Search 比 Greedy 更稳,但剪枝不可逆、成本随 k² 增长。
四、拓展:Encoder and Decoder Based Models
4.1 Build LLMs with Decoder Only

左侧用 GPT-1 案例串起三点:语料、任务、结果。
中间把 Encoder 打叉,并标出 Cross-Attention 随之作废。
右侧保留 Decoder-only 主干:Masked Self-Attention → FFN → Linear + Softmax。
底部总结核心:单一堆栈、自回归目标、最容易扩展到大模型。





4.2 BERT

底部展示 BERT 的输入:随机把约 15% tokens 替换成 [MASK]。
中间 BERT Encoder 使用双向 Self-Attention,被遮住的位置可以看左右上下文。
顶部只取 [MASK] 位置的输出向量,经 FFNN + Softmax 预测原词。
右下角对比 GPT 和 BERT:GPT 擅长生成,BERT 擅长理解。
BERT更适合做完形填空,不适合做预测
五、Advanced Topics
5.1 Absolute Position Embedding一 存在的问题

左侧表格展示位置 m=0~8 在 sin 和 cos 两个维度上的离散采样值。
右侧曲线展示同一组数的连续波形,黄色点对应表格中 m=8 的数值。
公式说明:偶数维用 sin,奇数维用 cos,维度越高波长越长。
底部总结作用:给不识顺序的 Attention 注入位置信息,同时数值稳定、可外推。

左侧表格把每个位置 m 写成二维向量 [sin(m), cos(m)]。
右侧单位圆把这些二维数画成箭头,m=0 指向 12 点钟方向。
相邻位置之间相当于固定旋转 1 弧度,位置差可以理解成角度差。
这页补充了上一页波形视角:上一页看"数值如何振荡",本页看"位置之间的几何关系"。
5.2 旋转位置编码

左侧展示 RoPE 的高维矩阵形式:一个大的分块对角旋转矩阵。
右侧展示 q 向量被两两分组:(q0,q1)、(q2,q3)、...... 每组独立旋转。
中间公式说明:q_m = R_m q、k_n = R_n k,最终内积只保留相对位置 n-m。
底部强调工程实现:实际不用真的乘大矩阵,而是拆偶数/奇数维做向量化旋转。
5.3 Attention的问题

中央用三层金字塔展示 GPU SRAM / GPU HBM / CPU DRAM 的速度与容量差异。
红圈突出 19 TB/s 与 1.5 TB/s,并标出 ×13 的带宽差距。
右上对比传统 Attention:保存 N×N 中间矩阵,反复在 HBM 和 SRAM 间读写。
右下展示 Flash Attention:通过 Tiling + Online Softmax 减少 HBM 访问,仍保持 Exact Attention。

总结下来就是1:计算问题2:数据传输问题
5.4 Attention的改进--Flash Attention
