读书笔记：图解大模型——生成式AI原理与实战
书籍信息原书名：Hands-On Large Language Models中文名：图解大模型：生成式AI原理与实战作者：Jay Alammar（沙特）、Maarten Grootendorst（荷兰）出版：O'Reilly, 2024页数：~400 页，数百张原创插图定位：从零到实战的 LLM 全景指南，图解驱动，代码可跑推荐人：Andrew Ng、Nils Reimers（sentence-transformers 作者）、Josh Starmer（StatQuest）为什么读这本书作为数据研发工程师，大模型已经从「论文里的概念」变成了「每天都在用的工具」。但用归用，很多核心机制——Transformer 的注意力到底在算什么、Embedding 空间为什么能捕捉语义、RAG 的检索链路怎么设计——一直停留在「大概知道」的阶段。Jay Alammar 是写出 The Illustrated Transformer 的人，他的可视化能力是业界公认的。这本书延续了他一贯的图解风格，把抽象的数学过程拆成直觉可理解的视觉流程。对我来说，这不是一本「入门书」，而是一本「把模糊认知变成清晰认知」的书。读完之后，我和 Jarvis 一起把书中第 8 章（语义搜索与 RAG）的理论落地成了一个真实项目——siyuan-rag：思源笔记联动，为自己的思源笔记构建了混合检索系统（BM25 + Vector + RRF）。理论到实践的闭环，是这本书最大的价值。全书骨架三部分，十二章，一条清晰的递进线：Part I 理解语言模型（Ch 1-3） → 语言模型是什么、词元化、嵌入向量、Transformer 架构 Part II 使用预训练模型（Ch 4-9） → 分类、聚类、Prompt Engineering、文本生成、语义搜索/RAG、多模态 Part III 训练与微调（Ch 10-12） → 构建嵌入模型、微调分类模型、微调生成模型递进逻辑：先建立「是什么」的认知基础 → 再学「怎么用」的实战技能 → 最后掌握「怎么改」的深度能力。Part I：理解语言模型Ch 1 语言模型导论这一章建立了全书的概念地图。核心区分：表示模型（Representation Models） ：BERT 系，双向上下文，擅长理解（分类、检索、相似度）生成模型（Generative Models） ：GPT 系，自回归，擅长生成（续写、对话、翻译）关键洞察：这两类模型不是对立的，而是同一个 Transformer 架构在不同训练目标下的产物。BERT 用 MLM（掩码语言模型），GPT 用 CLM（因果语言模型）。训练目标决定了模型的「视野」——BERT 能看到前后文，GPT 只能看到前文。Ch 2 词元与嵌入这是全书最基础也最重要的一章。两个核心概念：词元化（Tokenization） ：文本不是以「词」为单位进入模型的，而是以「子词（subword）」为单位BPE（Byte Pair Encoding）：从字符级开始，统计最高频的相邻对，逐步合并。优雅地解决了 OOV（未登录词）问题WordPiece、SentencePiece：变体，核心思想一致实际影响：tokenizer 的选择直接决定了模型的「视力」——同一段中文，不同 tokenizer 切出的 token 数量可能差 2-3 倍，直接影响上下文窗口的有效利用率嵌入向量（Embeddings） ：Token Embedding：每个 token 映射到一个高维向量（如 768 维）Position Embedding：注入位置信息，让模型知道词序嵌入空间的几何意义：语义相近的词在向量空间中距离更近这不是隐喻，是数学事实——余弦相似度可以量化语义距离个人体会：在做 siyuan-rag 项目时，选择 embedding 模型是第一个关键决策。我们最终用了 Qwen3-Embedding-0.6B（1024 维），它在中文语义捕捉上的表现明显优于通用的多语言小模型。维度越高不一定越好，但对于中文这种信息密度高的语言，1024 维比 512 维确实能保留更多语义细节。Ch 3 深入 Transformer全书技术密度最高的一章，也是 Jay Alammar 最擅长的领域。自注意力机制（Self-Attention） ：Q（Query）、K（Key）、V（Value）三个矩阵的直觉：Q 是「我在找什么」，K 是「我能提供什么」，V 是「我的实际内容」$\text{Attention}(Q,K,V) = \text{softmax}(QK^T / \sqrt{d_k}) \cdot V$$\sqrt{d_k}$ 的缩放：防止点积过大导致 softmax 梯度消失，这个细节在很多教程里被一笔带过，但它对训练稳定性至关重要多头注意力：不同的头关注不同的语义维度（有的关注语法关系，有的关注语义关联，有的关注位置模式）前馈网络（FFN） ：注意力层负责「信息交互」，FFN 负责「信息加工」两层线性变换 + 激活函数，中间维度通常是隐藏维度的 4 倍可以理解为模型的「知识存储层」——大量的世界知识编码在 FFN 的参数中层归一化与残差连接：Pre-Norm vs Post-Norm：现代模型普遍采用 Pre-Norm（先归一化再进子层），训练更稳定残差连接：保证梯度流通，让深层网络可训练注意力的计算复杂度——为什么上下文窗口有限：自注意力的核心运算是 $QK^T$，这是两个 $(n \times d)$ 矩阵的乘法，结果是 $(n \times n)$ 的注意力矩阵。因此：时间复杂度：$O(n^2 \cdot d)$，n 是序列长度空间复杂度：$O(n^2)$，需要存储完整的注意力矩阵当 n=4096 时，注意力矩阵有 1600 万个元素；n=128K 时，暴涨到 160 亿。这就是为什么上下文窗口不能无限扩大——不是模型不想看更多，是算不过来。工程上的解决方案（书中未深入，补充）：Flash Attention（Dao et al., 2022）：不显式构造 $n \times n$ 矩阵，用分块计算 + IO 感知算法，显存从 $O(n^2)$ 降到 $O(n)$，速度提升 2-4x。现在几乎所有主流框架都默认启用Sparse Attention：只计算部分位置对的注意力（局部窗口 + 全局 token），复杂度降到 $O(n\sqrt{n})$ 或 $O(n \cdot \log n)$线性注意力（Linear Attention）：用核函数近似 softmax，复杂度降到 $O(n \cdot d^2)$，但效果通常有损Sliding Window + Sink Token（Mistral 的方案）：固定窗口大小 + 保留开头几个 token，实现无限长度推理理解这个 $O(n^2)$ 瓶颈，才能理解为什么 RAG（Ch 8）如此重要——与其把所有信息塞进上下文窗口，不如只检索最相关的片段。Part II：使用预训练模型Ch 4 文本分类从 BERT 的 [CLS] token 出发，展示了表示模型最经典的应用：零样本分类：利用 NLI（自然语言推理）模型，把分类问题转化为「前提-假设」的蕴含判断少样本分类：SetFit 框架，用对比学习 + 少量标注数据微调 sentence-transformer实际启示：在数据稀缺的场景下，零样本和少样本方法的性价比远高于从头训练Ch 5 文本聚类与主题建模BERTopic：Maarten Grootendorst 自己的作品，embedding → UMAP 降维 → HDBSCAN 聚类 → c-TF-IDF 提取主题词这条管线的设计哲学：每一步都用最适合的工具，而不是端到端黑箱对我的启发：模块化设计比端到端更可控、可调试、可解释BERTopic 管线流程图：每一步都可以独立替换：换 embedding 模型、换降维算法（t-SNE）、换聚类算法（K-Means），这就是模块化的威力。Ch 6 Prompt Engineering系统提示、少样本示例、思维链（CoT）、输出格式约束核心观点：prompt 不是「咒语」，而是对模型注意力的精确引导温度（temperature）和 top-p 的直觉：温度控制概率分布的「锐度」，top-p 控制候选集的「宽度」Ch 7 高级文本生成Beam Search vs Sampling：确定性 vs 多样性的权衡重复惩罚、长度惩罚：生成质量的工程细节工具调用（Function Calling）的概念在本书中未涉及，但它是 LLM 从「文本生成器」变成「行动执行器」的关键转变（OpenAI 2023 年中推出）。理解 Ch 7 的生成机制是理解 Function Calling 的前置知识。这一章的实际价值：理解这些参数，才能在生产环境中调出稳定的生成效果Ch 8 语义搜索与 RAG ⭐这是全书对我影响最大的一章，也是 siyuan-rag 项目的理论基础。语义搜索的核心链路：文档分块（Chunking）→ 2. 向量化（Embedding）→ 3. 索引存储（Vector Store）→ 4. 查询向量化 → 5. 相似度检索 → 6. 结果排序RAG（Retrieval-Augmented Generation） ：动机：LLM 的知识有截止日期，且会产生幻觉。RAG 通过「先检索再生成」，让模型基于真实文档回答架构：Query → Retriever → Top-K Documents → LLM(Query + Context) → Answer关键设计决策：分块策略：块太大则噪声多，块太小则上下文断裂检索方式：纯向量 vs 纯关键词 vs 混合检索重排序（Reranking）：粗检索 + 精排序的两阶段范式书中的理论 vs 我的实践（siyuan-rag） ：维度书中建议实际落地分块固定大小 + 重叠利用思源笔记的天然块结构，按标题层级分块（200-500 token），保留层级上下文EmbeddingOpenAI text-embedding-3Qwen3-Embedding-0.6B（ModelScope 免费 API，1024 维）向量存储Pinecone / WeaviateChromaDB（文件级，零运维，适合个人项目）检索策略纯向量检索BM25 + 向量 + RRF 融合（混合检索，兼顾精确匹配和语义理解）部署Cloud API本地 systemd 服务（端口 8002），集成到 invest-platform混合检索的 RRF 融合：公式：$\text{score}(d) = \sum \frac{1}{k + \text{rank}_i(d)}$，$k=60$直觉：不看绝对分数，只看排名。两个检索器都排在前面的文档，融合后排名更高实测效果：对于中文笔记，纯向量检索在同义词场景强，纯 BM25 在精确术语场景强，混合检索两者兼得踩过的坑：ModelScope 的内容审查会拦截含敏感词的 embedding 请求 → 解决方案：batch 失败时逐条重试，单条被拦返回空向量embedding API 必须显式传 encoding_format: "float"，否则返回格式错误ChromaDB 的维度一旦建库就不能改，从 512 维切到 1024 维需要重建索引Ch 9 多模态大模型CLIP：文本和图像共享嵌入空间的开创性工作LLaVA：视觉编码器 + 语言模型的桥接架构趋势：从「文本理解」到「世界理解」，多模态是必然方向Part III：训练与微调Ch 10 构建嵌入模型对比学习（Contrastive Learning）：正样本拉近，负样本推远损失函数：InfoNCE / Triplet Loss / Multiple Negatives Ranking Loss硬负样本挖掘：训练质量的关键——太简单的负样本学不到东西，太难的负样本会误导模型与 siyuan-rag 的关联：理解了嵌入模型的训练原理，才能理解为什么不同模型在不同场景下表现差异巨大对比学习的直觉（书中概念的展开补充）：想象一个向量空间，"猫"和"小猫"应该靠近，"猫"和"汽车"应该远离。对比学习就是不断调整这个空间，让语义相近的点聚拢、语义无关的点散开。三种损失函数的区别（书中提及名称，以下为展开补充）：InfoNCE：给定一个 anchor，从 1 个正样本 + N 个负样本中识别正样本。N 越大，训练信号越强，但计算成本也越高Triplet Loss：每次只看 (anchor, positive, negative) 三元组，margin 参数控制正负样本之间的最小距离。简单直观但收敛慢Multiple Negatives Ranking Loss：batch 内的其他样本自动作为负样本，不需要显式构造负样本对。sentence-transformers 默认使用，效率最高硬负样本的"金发姑娘区间" （书中概念的直觉补充）：太简单的负样本（猫 vs 汽车）→ 模型轻松区分，学不到东西 太难的负样本（猫 vs 豹） → 可能本身就有语义关联，误导模型 刚好的负样本（猫 vs 狗） → 迫使模型学习细粒度的语义差异实际工程中，BM25 检索 top-K 但不在 top-1 的结果，往往是很好的硬负样本来源。Ch 11 微调分类模型在预训练 BERT 上加分类头，冻结底层、微调顶层学习率调度：warmup + linear decay，避免灾难性遗忘LoRA 的思想：不改原始权重，只训练低秩增量矩阵，参数效率极高LoRA 的低秩分解直觉（书中提及概念，以下为数学展开补充）：原始权重矩阵 $W$ 是 $d \times d$（比如 $768 \times 768 = 59$ 万参数）。LoRA 的核心思想：微调时权重的变化量 $\Delta W$ 是低秩的，可以分解为两个小矩阵的乘积：ΔW = A × B 其中 A: d×r, B: r×d, r << d（通常 r=4~16） 当 r=8 时： 原始微调：768×768 = 589,824 参数 LoRA 微调：768×8 + 8×768 = 12,288 参数（仅 2%）推理时 $W_{new} = W + AB$，可以合并回原始权重，零额外推理开销。这就是为什么 LoRA 能做到「训练时省内存，推理时零成本」。灾难性遗忘（Catastrophic Forgetting） ：微调时如果学习率太大或训练太久，模型会「忘记」预训练学到的通用知识。解决方案：Warmup：前几百步用极小学习率，让模型「热身」Linear Decay：学习率逐步衰减，避免后期过拟合冻结底层：底层编码通用语言特征（语法、词法），只微调顶层的任务特定特征Ch 12 微调生成模型SFT（Supervised Fine-Tuning）：用指令-回答对微调RLHF（Reinforcement Learning from Human Feedback）：奖励模型 + PPO 优化DPO（Direct Preference Optimization）：绕过奖励模型，直接从偏好数据优化QLoRA：量化 + LoRA，让微调在消费级 GPU 上可行从 SFT 到 RLHF 到 DPO 的演进逻辑（书中简要介绍了这三种方法，以下为展开补充）：SFT（监督微调） → 用「指令-回答」对直接训练，简单有效 → 问题：模型学会了格式，但不知道什么是「好回答」 RLHF（人类反馈强化学习） → 训练一个奖励模型（Reward Model）来打分 → 用 PPO 算法让生成模型最大化奖励分数 → 问题：训练不稳定，需要同时维护 4 个模型（policy/ref/reward/critic），显存爆炸 DPO（直接偏好优化）[Rafailov et al., 2023] → 核心洞察：奖励模型可以被数学等价地消除 → 直接从人类偏好数据（A 比 B 好）优化策略模型 → 只需要 2 个模型（policy + reference），训练稳定，效果相当 → 公式本质：增大好回答的概率，降低差回答的概率，用 reference model 做正则化防止偏离太远DPO 为什么能绕过奖励模型：Bradley-Terry 偏好模型下，最优策略和奖励函数之间存在解析解关系。把这个关系代入 RLHF 的目标函数，奖励模型就被消掉了，变成了一个纯监督学习问题。数学上等价，工程上简单得多。QLoRA = 量化 + LoRA：4-bit 量化（NF4）：把模型权重从 FP16（2 bytes）压缩到 4-bit（0.5 bytes），显存占用直接降 75%在量化后的模型上做 LoRA 微调：只训练低秩增量矩阵（FP16 精度）双重分页：GPU 显存不够时自动 offload 到 CPU 内存实际效果：65B 参数的模型可以在单张 48GB GPU 上微调（A6000），而全参数微调需要 >780GB7B 模型甚至可以在 RTX 3090（24GB）上跑 QLoRA 微调训练范式总结：方法训练数据模型数量显存需求效果SFT指令-回答对1中基础RLHF偏好排序4极高最好但不稳定DPO偏好对 (A>B)2高接近 RLHF，更稳定QLoRA+DPO偏好对2（量化）低消费级 GPU 可行核心收获与反思三个认知升级Embedding 不是黑箱，是可设计的语义空间。选择什么模型、什么维度、什么训练数据，直接决定了下游任务的天花板。在 siyuan-rag 中，从 512 维切到 1024 维，检索相关性有可感知的提升。RAG 不是「检索 + 生成」的简单拼接，是一个需要精心设计的系统工程。分块策略、检索方式、重排序、上下文窗口管理，每一环都影响最终效果。书中给了理论框架，实践中还需要根据数据特点反复调优。Transformer 的优雅在于「注意力即计算」 。不需要手工设计特征提取器，让模型自己学习「该关注什么」。这个设计哲学影响了整个深度学习的发展方向。从理论到实践的桥梁这本书最大的价值不在于某个具体知识点，而在于它提供了一条从「理解原理」到「动手实现」的完整路径。读完第 8 章后，我能够：设计 siyuan-rag 的混合检索架构（BM25 + Vector + RRF）选择合适的 embedding 模型和维度理解为什么某些查询检索效果好、某些不好针对性地优化分块策略和检索参数这种「知其然且知其所以然」的能力，是纯粹调 API 永远无法获得的。局限与补充（Jarvis 的建议）书出版于 2024 年，部分内容已被更新的技术部分取代：RLHF → DPO（Rafailov et al., 2023, "Direct Preference Optimization"）：更简单、更稳定DPO → GRPO（DeepSeek 提出）：Group Relative Policy Optimization，进一步简化，不需要 reference model对中文场景的覆盖较少，tokenizer 和 embedding 的中文适配需要额外研究中文 tokenizer 效率差异大：GPT-4 的 cl100k 对中文约 1.5 token/字，Qwen 的 tokenizer 约 0.7 token/字，直接影响上下文利用率中文 embedding 推荐：Qwen3-Embedding（我们在用）、BGE-M3、Jina-v3缺少对推理优化（量化、蒸馏、推测解码）的深入讨论推荐补充：vLLM 文档（PagedAttention 推理加速）、HuggingFace TGI（生产级推理服务）推测解码（Speculative Decoding）：用小模型草拟、大模型验证，加速 2-3x 且输出分布不变缺少对 Attention 优化的讨论（Flash Attention、Sparse Attention 等），已在 Ch 3 笔记中补充建议补充阅读：Lilian Weng - "Attention? Attention!"：注意力机制最佳综述Lilian Weng - "LLM Powered Autonomous Agents"：Agent 架构综述Andrej Karpathy - "Let's build GPT from scratch"：2 小时从零实现 GPT，强烈推荐Andrej Karpathy - nanoGPT：最简 GPT 实现，适合动手理解 TransformerSebastian Raschka - "Build a Large Language Model From Scratch"：另一本优秀的动手书推荐阅读路径如果时间有限，建议按以下优先级：必读：Ch 2（词元与嵌入）→ Ch 3（Transformer）→ Ch 8（语义搜索与 RAG）推荐：Ch 6（Prompt Engineering）→ Ch 10（构建嵌入模型）→ Ch 12（微调生成模型）按需：Ch 4-5（分类/聚类）→ Ch 7（高级生成）→ Ch 9（多模态）→ Ch 11（微调分类）核心三章（2、3、8）读透，就能建立起对 LLM 的系统性理解。其余章节根据实际需求选读。2026-02-22 · 读后整理