符号表 标量(变量) 标量(常量) 集合 向量 ai 向量a的第i个元素 [a1,a2,,aw 序列 A 矩阵 ai 矩阵A的第i行 AT 矩阵A的转置 A-1 矩阵A的逆 diag(a) 将向量a转换为对角矩阵 2 向量、矩阵的2范数 0 向量、矩阵逐元素相乘(哈达玛积) ⊕ 向量、矩阵拼接 批次矩阵乘法 卷积 梯度 ( 从N个不同元素中取出K个元素的组合数 P 概率分布 0) 渐进上界符号 实数集 期望
符号表 𝑎 标量(变量) 𝐴 标量(常量) A 集合 𝒂 向量 𝑎𝑖 向量 𝒂 的第 𝑖 个元素 [𝑎1, 𝑎2, . . . , 𝑎𝑁 ] 序列 𝑨 矩阵 𝒂𝑖 矩阵 𝑨 的第 𝑖 行 𝑨 ⊺ 矩阵 𝑨 的转置 𝑨 −1 矩阵 𝑨 的逆 diag(𝒂) 将向量 𝒂 转换为对角矩阵 ∥·∥2 向量、矩阵的 2 范数 ⊙ 向量、矩阵逐元素相乘(哈达玛积) ⊕ 向量、矩阵拼接 ⊗ 批次矩阵乘法 ∗ 卷积 ∇ 梯度 𝑁 𝐾 从 𝑁 个不同元素中取出 𝐾 个元素的组合数 𝑃(·) 概率分布 𝑂(·) 渐进上界符号 R 实数集 E 期望
目录 第一部分背景与基础知识 1 第一章引言 2 1.1语言模型的发展历程 2 12大语言模型的能力特点···········。··· 5 1.3大语言模型关键技术概览 1.4大语言模型对科技发展的影响 15本书的内容组织。…··················…······· 第二章基础介绍 15 2.1大语言模型的构建过程 15 211大规模预训练·。····.·········.··。。·, 16 212指令微调与人类对济...·..·.··17 22扩展法则.·.·.....。 2.21KM扩展法则…18 2.2.2 Chinchilla扩展法则........................ 20 2.2.3关于扩展法则的讨论 21 22 2.3.1代表性的涌现能力 ,。,,。。·,+。·4”4。”·””…”” 22 2.3.2涌现能力与扩展法则的关系··.·····.·.···.····24 2.4GPT系列模型的技术演变.。·,.,·,···.。·.,.·····., 26 2.4.1早期探索.··· 26 2.4.2规模扩展 28 243能力增强···················· 29 2.4.4性能跃升 第三章大语言模型资源 妇 31公开可用的模型检查点或AP·。,················· 32
目录 第一部分 背景与基础知识 1 第一章 引言 2 1.1 语言模型的发展历程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 大语言模型的能力特点 . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3 大语言模型关键技术概览 . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 大语言模型对科技发展的影响 . . . . . . . . . . . . . . . . . . . . . . . 11 1.5 本书的内容组织 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 第二章 基础介绍 15 2.1 大语言模型的构建过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.1 大规模预训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.1.2 指令微调与人类对齐 . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 扩展法则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.1 KM 扩展法则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.2 Chinchilla 扩展法则 . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2.3 关于扩展法则的讨论 . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 涌现能力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.1 代表性的涌现能力 . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.2 涌现能力与扩展法则的关系 . . . . . . . . . . . . . . . . . . . . 24 2.4 GPT 系列模型的技术演变 . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4.1 早期探索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4.2 规模扩展 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.4.3 能力增强 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.4.4 性能跃升 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 第三章 大语言模型资源 32 3.1 公开可用的模型检查点或 API . . . . . . . . . . . . . . . . . . . . . . . 32
3.11公开可用的通用大语言模型检查点········。·······32 3.1.2 LLaMA变体系列········ 36 3.13大语言模型的公共API.················ 3.2常用的预训练数据集 40 3.2.1网页 。4。。4。。4。g。。·。。。。。4。。。。4。。 40 322书籍..,.,· 323维基百科· 324代码·,·。·,。 5 3.2.5混合型数据集· 33常用微调数据集。·················…········ 47 3.3.1指令微调数据集 47 3.3.2人类对齐数据集 ,·。”·,。,。·。·。。…。。。··。。。 50 3.4代码库资源...·. 3.4.1 Hugging Face开源社区...,..........·......,52 3.4.2 DeepSpeed·· 53 3.4.3 Megatron-LM 34.4本书配套资源说明·······。······。····…· 54 第二部分预训练 56 第四章数据准备 57 4.1数据来源. 57 4.11通用文本数据··· 4.12专用文本数据 4.2数据预处理··· 60 4.2.1质量过滤 60 4.2.2敏感内容过滤 63 423数据去重.....64 4.2.4数据对预训练效果的影响····。。······。··。····· 425数据预处理实践.··· 6 4.3词元化(分词).... ....70
3.1.1 公开可用的通用大语言模型检查点 . . . . . . . . . . . . . . . . 32 3.1.2 LLaMA 变体系列 . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.1.3 大语言模型的公共 API . . . . . . . . . . . . . . . . . . . . . . . 39 3.2 常用的预训练数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.2.1 网页 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.2.2 书籍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.2.3 维基百科 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.2.4 代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.2.5 混合型数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.3 常用微调数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.3.1 指令微调数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.3.2 人类对齐数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.4 代码库资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.4.1 Hugging Face 开源社区 . . . . . . . . . . . . . . . . . . . . . . . 52 3.4.2 DeepSpeed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.4.3 Megatron-LM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.4.4 本书配套资源说明 . . . . . . . . . . . . . . . . . . . . . . . . . 54 第二部分 预训练 56 第四章 数据准备 57 4.1 数据来源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.1.1 通用文本数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.1.2 专用文本数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.2 数据预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.2.1 质量过滤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.2.2 敏感内容过滤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.2.3 数据去重 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.2.4 数据对预训练效果的影响 . . . . . . . . . . . . . . . . . . . . . 65 4.2.5 数据预处理实践 . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.3 词元化(分词) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
431BPE分词.···········.71 4.3.2 WordPiece分词 74 4.3.3 Unigram分词 4.3.4分词器的选用 6 4.4数据调度. 4.4.1数据混合 76 4.4.2数据课程。······…·……···…·…···· 77 4.4.3预训练数据准备概述—以YuLan模型为例.·····.··· 79 第五章模型架构 81 5.Transformer模型....,........................ 5.1.1输入编码... 512多头自注意力机制·········,····· 5.1.3前馈网络层 电 5.1.4编码器 85 5.1.5解码器 5.2详细配置.······ 5.2.1归一化方法 86 5.2.2归一化模块位置 即 5.2.3激活函数.... 5.2.4位置编码 90 5.2.5注意力机制 5.2.6混合专家模型 96 5.2.7 LLaMA的详细配置 97 5.3主流架构. 5.3.1编码器-解码器架构.·.·..·.··.....··.·.·.100 5.3.2因果解码器架构 ···.101 5.3.3前缀解码器架构 .101 5.4长上下文模型 .101 5.4.1扩展位置编码 102 5.4.2调整上下文窗口 ,。:。。,。,。。。。。。。。,。。。,。,。 .105 5.4.3长文本数据
4.3.1 BPE 分词 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.3.2 WordPiece 分词 . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.3.3 Unigram 分词 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.3.4 分词器的选用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.4 数据调度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.4.1 数据混合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.4.2 数据课程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.4.3 预训练数据准备概述——以 YuLan 模型为例 . . . . . . . . . . . 79 第五章 模型架构 81 5.1 Transformer 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 5.1.1 输入编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 5.1.2 多头自注意力机制 . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.1.3 前馈网络层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.1.4 编码器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.1.5 解码器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.2 详细配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.2.1 归一化方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.2.2 归一化模块位置 . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.2.3 激活函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.2.4 位置编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.2.5 注意力机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.2.6 混合专家模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 5.2.7 LLaMA 的详细配置 . . . . . . . . . . . . . . . . . . . . . . . . . 97 5.3 主流架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5.3.1 编码器-解码器架构 . . . . . . . . . . . . . . . . . . . . . . . . . 100 5.3.2 因果解码器架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5.3.3 前缀解码器架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5.4 长上下文模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5.4.1 扩展位置编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5.4.2 调整上下文窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 5.4.3 长文本数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.5新型模型架构····· 5.51参数化状态空间模型··········.108 5.5.2状态空间模型变种 第六章模型预训练 112 6.1预训练任务 611语言建模········.112 6.1.2去噪自编码 6.1.3混合去噪器 6.2优化参数设置.··. …·.116 6.2.1基于批次数据的训练 .116 6.2.2学习率 6.2.3优化器 6.2.4稳定优化技术 6.3可扩展的训练技术 6.3.13D并行训练.· ....119 6.3.2零冗余优化器 .121 6.3.3激活重计算 .122 6.3.4混合精度训练 122 6.4模型参数量计算与效率分析 123 6.4.1参数量计算 123 6.42训练运算量估计.······.·.·········.·.·.124 6.4.3训练时间估计 。。 .126 6.4.4训练显存估计 .126 65预训练代码实践.······。········… ,130 第三部分微调与对齐 13s 第七章指令微调 136 71指令数据的构建。····…··········…········· ,136 7.1.1基于现有的NLP任务数据集构建...............136 7.12基于日常对话数据构建..... ......138
5.5 新型模型架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 5.5.1 参数化状态空间模型 . . . . . . . . . . . . . . . . . . . . . . . . 108 5.5.2 状态空间模型变种 . . . . . . . . . . . . . . . . . . . . . . . . . 109 第六章 模型预训练 112 6.1 预训练任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.1.1 语言建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.1.2 去噪自编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 6.1.3 混合去噪器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.2 优化参数设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.2.1 基于批次数据的训练 . . . . . . . . . . . . . . . . . . . . . . . . 116 6.2.2 学习率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 6.2.3 优化器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 6.2.4 稳定优化技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6.3 可扩展的训练技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6.3.1 3D 并行训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6.3.2 零冗余优化器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 6.3.3 激活重计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 6.3.4 混合精度训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 6.4 模型参数量计算与效率分析 . . . . . . . . . . . . . . . . . . . . . . . . 123 6.4.1 参数量计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 6.4.2 训练运算量估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 6.4.3 训练时间估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 6.4.4 训练显存估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 6.5 预训练代码实践 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 第三部分 微调与对齐 135 第七章 指令微调 136 7.1 指令数据的构建 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 7.1.1 基于现有的 NLP 任务数据集构建 . . . . . . . . . . . . . . . . . 136 7.1.2 基于日常对话数据构建 . . . . . . . . . . . . . . . . . . . . . . . 138