新書推薦:
《
积极心理学
》
售價:NT$
254.0
《
自由,不是放纵
》
售價:NT$
250.0
《
甲骨文丛书·消逝的光明:欧洲国际史,1919—1933年(套装全2册)
》
售價:NT$
1265.0
《
剑桥日本戏剧史(剑桥世界戏剧史译丛)
》
售價:NT$
918.0
《
中国高等艺术院校精品教材大系:材料的时尚表达??服装创意设计
》
售價:NT$
347.0
《
美丽与哀愁:第一次世界大战个人史
》
售價:NT$
653.0
《
国家豁免法的域外借鉴与实践建议
》
售價:NT$
857.0
《
大单元教学设计20讲
》
售價:NT$
347.0
|
編輯推薦: |
?本书基本覆盖大语言模型开发的多个方面。整体上可以参照OpenAI的安德烈?卡帕西(Andrej Karpathy)在微软的2023年Build大会报告中介绍的GPT助手训练流程。
?本书的内容来源不仅包含网络上的各类教程和文章,也包括原始论文和源代码。
?本书不但适用于大型语言模型应用开发人员,而且对于渴望深度探究ChatGPT背后的运行机制,更高效地运用和优化其功能的实践者,同样具有极高的参考价值。
|
內容簡介: |
本书旨在帮助读者理解开源大语言模型的架构、训练和推理过程,以及相关的源代码。主要研究对象是Meta开源的Llama模型。本书从Python Numpy实现单层感知机和神经网络开始,逐步讲解了如何实现Transformer模型和Llama模型。此外,本书还介绍了增量预训练模型、监督微调和人类反馈强化学习等模型训练过程。对于私有知识的加入,书中重点介绍了监督微调,也介绍了RAG中词向量的计算。本书采用循序渐进的方式,通过功能框图、代码分解执行、执行结果显示、背景知识补充等手段帮助读者理解模型和算法。
本书的核心读者群体定位为大语言模型应用的开发人员,特别适合那些想从计算机视觉转向自然语言处理的人。此外,本书还适合作为大学本科生及研究生相关课程的参考教材使用。
|
關於作者: |
范煜,江苏南通人,毕业于南京航空航天大学,研究员级高级工程师,中国商业联合会数据分析专业委员会专家组成员,南通理工学院教师,上海范思软件有限公司创始人,中国移动集团、51CTO外聘讲师经常在全国各地讲授大数据、数据分析人工智能、大语言模型等方面课程。研发了Fancy Q&A大语言模型应用开发平台。著有《人工智能与ChatGPT》《数据革命:大数据价值实现方法、技术与案例》。兼具人工智能、大数据、软件、工业控制(嵌入式系统和软PLC)技术背景。目前主要从事基于大语言模型的知识库建设与知识问答应用的研究和开发。
|
目錄:
|
第1章 自然语言处理
1.1人工智能的技术构成 002
1.1.1 机器学习和深度学习的区别 002
1.1.2 表示学习与深度学习的关系 003
1.2自然语言处理的发展阶段 004
1.3规则驱动的方法 005
1.4统计方法 005
1.4.1 隐马尔可夫模型 006
1.4.2 条件随机场 007
1.5深度学习方法 008
1.5.1 Word2Vec词嵌入 008
1.5.2 循环神经网络 009
1.5.3 长短时记忆网络模型 009
1.5.4 门控循环单元模型 010
1.6序列到序列模型 011
1.7注意力机制 011
1.8Transformer模型 012
1.9预训练模型 012
1.10大语言模型 014
1.10.1 根据架构分类 014
1.10.2 根据训练方式和预测方式
分类 015
第2章 深度学习基础
2.1深度学习 017
2.2感知机 017
2.2.1 前馈网络 018
2.2.2 权重更新 019
2.2.3 反向传播 021
2.3激活函数 022
2.3.1 常用激活函数 023
2.3.2 新型激活函数 024
2.4优化函数(算法) 026
2.4.1 梯度下降法 026
2.4.2 动量优化算法 027
2.4.3 AdaGrad优化算法 027
2.4.4 RMSProp优化算法 028
2.4.5 Adam优化算法 029
2.4.6 AdamW优化算法 030
2.5权值初始化 030
2.5.1 批归一化 031
2.5.2 层归一化 031
2.5.3 RMSNorm 032
2.6损失函数 033
2.6.1 均方误差 034
2.6.2 均方根误差 034
2.6.3 交叉熵损失 035
2.7模型评估 036
2.7.1 偏差/方差 036
2.7.2 过拟合与欠拟合 037
2.8正则化 038
2.9SoftMax函数 039
2.10简易神经网络搭建 039
2.11模型优化 042
2.11.1 梯度消失 042
2.11.2 梯度爆炸 043
2.11.3 优化手段 043
2.11.4 调参技巧 044
第3章 PyTorch开发基础
3.1深度学习框架 046
3.2PyTorch简介 046
3.3PyTorch安装 047
3.3.1 CUDA安装 047
3.3.2 阿里云GPU云服务器 049
3.3.3 安装PyTorch 049
3.3.4 安装其他库 050
3.3.5 检查开发环境 050
3.4张量 050
3.4.1 张量创建函数定义 050
3.4.2 张量创建函数清单 051
3.4.3 随机张量:torch.randn() 052
3.4.4 张量操作 054
3.4.5 CUDA张量 055
3.5梯度计算 055
3.5.1 导数与偏导数 055
3.5.2 导数规则 056
3.5.3 梯度 056
3.5.4 公式推导 056
3.5.5 自动梯度计算 057
3.5.6 代码解析 058
3.6反向传播 058
3.7torch.nn模块构建神经网络 060
3.7.1 nn.Linear层 060
3.7.2 nn.Sigmoid激活函数 061
3.7.3 nn.BCELoss损失函数 062
3.8torch.optim优化器 062
3.9训练、验证和测试过程 063
3.10用PyTorch实现神经网络 064
3.10.1 实现单层感知机 064
3.10.2 实现简单神经网络 065
3.10.3 用torch.nn实现简单神经
网络 067
3.11源代码常用模块 068
3.11.1 nn.Parameter类 068
3.11.2 typing模块 069
3.11.3 logging模块 070
3.11.4 dataclasses 071
3.11.5 Fire库 073
第4章 Transformer模型详解
4.1大语言模型的简介和分类 076
4.1.1 简介 076
4.1.2 分类 076
4.2Transformer模型 078
4.2.1 模型构成 078
4.2.2 因果解码器结构 080
4.3分词 081
4.3.1 词汇表 082
4.3.2 词汇表的生成 083
4.3.3 分词算法 083
4.3.4 字节对编码 084
4.3.5 句子片段 084
4.3.6 分词过程 085
4.3.7 词汇索引 085
4.4词嵌入 086
4.4.1 标记嵌入 087
4.4.2 位置编码 089
4.4.3 词汇索引和词嵌入向量关系 090
4.5位置编码方法 090
4.5.1 原生位置编码 090
4.5.2 旋转位置编码 092
4.5.3 位置编码的实现 093
4.5.4 Llama位置编码 094
4.5.5 长度扩展 097
4.6自注意力机制 098
4.6.1 原理 098
4.6.2 注意力分数的计算 099
4.6.3 多头注意力机制 101
4.6.4 分组查询注意力 102
4.6.5 Llama 2源代码分析 103
4.7残差连接和层归一化 106
4.7.1 预归一化 106
4.7.2 RMSNorm 107
4.7.3 Llama 2源代码分析 107
4.8前馈网络 108
4.8.1 激活函数 109
4.8.2 前馈网络隐藏层维度 110
4.8.3 Llama 2源代码分析 110
4.8.4 演示代码 112
4.9损失函数 113
4.10掩码 114
4.11PyTorch的nn.Transformer模块 115
4.11.1 模块组件 115
4.11.2 __call__函数 116
4.11.3 最简单的标准Transformer
模型 116
4.11.4 纯解码器模型 117
4.11.5 Llama 2模型 118
第5章 大语言模型
5.1什么是大语言模型 125
5.2GPT简介 125
5.3Llama简介 126
5.4Llama的训练 128
5.4.1 训练数据 128
5.4.2 预训练 129
5.5Llama 2 chat 130
5.5.1 监督微调 130
5.5.2 基于人类反馈的强化学习 130
5.6Llama 2模型结构 132
5.7Llama 2权重文件夹 134
5.8参数量计算 136
5.8.1 标准Transformer解码器模型 136
5.8.2 Llama 2模型 137
5.8.3用Transformers模块计算 139
5.8.4 直接解析模型文件 139
第6章 模型训练
6.1模型训练的种类 146
6.2Hugging Face训练环境 146
6.3Transformers库 147
6.3.1 主要功能 147
6.3.2 函数 148
6.4训练程序 149
6.5分词处理 149
6.5.1 相关名词 149
6.5.2 input IDs 150
6.5.3 特殊标记 150
6.5.4 AutoTokenizer 152
6.5.5 分词 153
6.5.6 下划线 154
6.5.7 填空 154
6.6量化技术 155
6.6.1 8位量化技术 155
6.6.2 LLM.int8() 156
6.6.3 NF4和QLoRA 157
6.6.4 BitsAndBytes模型 159
6.7优化技术 161
6.7.1 LoRA 161
6.7.2 PEFT库 162
6.8训练代码示例 164
6.8.1 导入库和函数 164
6.8.2 参数定义 164
6.8.3 加载模型 165
6.8.4 加载分词器 165
6.8.5 数据预处理 165
6.8.6 用LoRA权重调整模型 168
6.8.7 LoRA模型训练 168
6.8.8 模型的合并 170
6.8.9 模型推理 172
6.8.10 加载多个LoRA并随时切换 173
6.9加速技术和工具 175
6.9.1 DeepSpeed 176
6.9.2 FairScale 176
6.9.3 GPTQ 177
6.9.4 FSDP 177
6.10超长上下文 178
6.10.1 外推能力 178
6.10.2 外推手段 179
6.10.3 StreamingLLM 179
第7章 模型微调
7.1监督微调 182
7.2开源数据集 182
7.3数据集访问 182
7.3.1 datasets库 182
7.3.2 datasets常用的函数和类 183
7.3.3 加载数据集 183
7.3.4 数据集的处理 184
7.4开源微调数据集 186
7.4.1 主要数据集 186
7.4.2 数据集格式 186
7.4.3SQuAD 187
7.4.4 OSSIST1数据集格式 189
7.4.5 格式转换代码及分析 190
7.5主要的微调模型 193
7.5.1 Alpaca羊驼 193
7.5.2 Vicuna小羊驼 193
7.5.3 LLaMA.cpp 194
7.5.4 Guanco 194
第8章 人类反馈强化学习
8.1强化学习架构 196
8.2演员-评论家架构 197
8.3近端策略优化架构 197
8.4DeepSpeed Chat 198
8.5开源RLHF数据集 199
8.6训练数据读取 205
8.6.1 第1步:SFT监督微调数据 206
8.6.2 第2步:奖励模型微调数据 207
8.6.3 第3步:RLHF微调数据 209
8.7监督微调 210
8.8奖励模型微调 212
8.9RLHF微调 217
8.9.1 代码运行环境 218
8.9.2 准备训练数据 219
8.9.3 建立模型 221
8.9.4 演员模型、参考模型生成对数
概率 221
8.9.5 计算对数概率 223
8.9.6 计算期望奖励 225
8.9.7 KL散度 226
8.9.8 计算实际奖励 226
8.9.9 优势函数 228
8.9.10 计算优势和回报 228
8.9.11 损失函数 229
第9章 模型推理
9.1模型文件 233
9.2推理 233
9.2.1 单轮推理 235
9.2.2 多轮推理 235
9.3GPU推理 235
9.3.1 单卡 235
9.3.2 多卡 235
9.3.3 多机 236
9.4Hugging Face Transformers库 237
9.4.1 简介 237
9.4.2 Pipeline API 237
9.4.3 Model and Tokenizer API 239
9.4.4 单轮推理 240
9.4.5 多轮推理 242
9.4.6 LoRA推理 245
9.4.7 vLLM 245
9.5LLaMA.cpp 248
9.5.1 特色与优势 248
9.5.2 模型量化 249
9.5.3 k-quant量化 249
9.5.4 开发环境安装 250
9.5.5 构建执行程序 252
9.5.6 转换模型 252
9.5.7 推理 252
9.6Gradio 254
9.6.1 简介 254
9.6.2 基本用法 255
9.6.3 复杂交互 255
9.6.4 聊天机器人 257
9.6.5 Gradio多轮推理 258
9.7解码策略 261
9.7.1 常见解码策略 261
9.7.2 推理超参数 262
9.7.3 温度 262
9.7.4 top-k 263
9.7.5 top-p 264
9.7.6 重复惩罚 265
9.7.7 代码实现 266
9.8推理加速技术 270
9.8.1 简介 270
9.8.2 纯C推理 271
9.8.3 投机采样 271
9.8.4 Medusa 272
9.8.5 流式推理 272
第10章 中文私有模型开发
10.1基本思路 275
10.2中文词汇表 276
10.3模型下载 277
10.3.1 安装Git LFS 277
10.3.2 获取下载链接 277
10.3.3 直接单击链接分文件逐一
下载 278
10.4开发方案 279
10.4.1 演示系统开发 279
10.4.2 生产系统开发 280
10.4.3 实训系统开发 280
10.5中文语料 280
10.5.1 预训练语料 282
10.5.2 微调数据集 285
第11章 模型评估
11.1大语言模型评估 292
11.2评估指标 293
11.2.1 困惑度 293
11.2.2 HellaSwag 293
11.2.3 BLEU 294
11.2.4 ROUGE 294
11.2.5 METEOR 294
11.3基于上下文的学习 294
11.4Llama 2预训练模型的评估 296
11.5MMLU 299
11.6标准基准测试 299
11.7代码生成 300
11.7.1 Human-Eval代码生成基准
测试 300
11.7.2 MBPP程序生成基准测试 300
11.8考试AGI Eval 301
11.9GSM8K 302
11.10世界知识 302
11.10.1 NaturalQuestions 302
11.10.2 TriviaQA 303
11.11通义千问评测 303
11.12BBH 304
第12章 用于RAG的词向量计算
12.1信息整合 306
12.2向量数据库 307
12.3词向量 307
12.4嵌入向量生成模型 308
12.5池化技术 309
12.6计算词向量 310
12.6.1 使用OpenAI 310
12.6.2 使用Hugging Face 310
12.6.3 使用Llama 2 312
12.7批量生成嵌入向量 313
12.8池化算法 315
12.9词向量文档检索 317
12.10示例 318
12.10.1 PGVector简介 318
12.10.2 PGVector安装 318
12.10.3 向量数据库操作 319
参考文献 320
|
內容試閱:
|
在ChatGPT的成功推动下,人工智能(artificial intelligence,AI)技术的主要研究焦点已从计算机视觉逐渐转向自然语言处理(natural language processing,NLP)。这使得原本相对边缘的自然语言处理技术逐渐走向了舞台中心。尽管自然语言处理的研究者相较于计算机视觉(computer vision,CV)领域来说少,但经过几十年的发展,其积累的技术成果也十分丰富。以ChatGPT及其背后的GPT(Generative Pretrained Transformer)模型为代表的大语言模型(LLM)技术的成功,不是一夜之间的突变,而是基于多年技术积累取得的一次重大突破。
但是,并非所有的自然语言处理技术都被大语言模型的开发所采用。一些技术路线已被放弃,一些虽然得到了发展,但已被更优秀的技术所取代。在大语言模型技术的后续发展中,这些被抛弃或替代的技术仍有可能被重新研究和改进。本书旨在是让读者了解主流大语言模型所采用的技术,而不是去开发新的大语言模型。因此,我们主要介绍了GPT系列及开源Llama 2模型所采用的技术,对其他技术并未进行探讨,例如知名的词嵌入(word embeddings)技术Word2Vec。
现在的大语言模型基本上都是基于Transformer架构。相较于标准的编码器-解码器(Encoder-Decoder)结构,如今的GPT系列产品及Llama 1、Llama 2都采用了单解码器结构。本书以Transformer模型架构为基础,重点关注了纯解码器技术方向,并对相关技术进行了详细的阐述。
由于GPT-3.5、GPT-4的技术并未开源,且基于其API(应用程序接口)的开发并不适合本地部署,因此本书的开发技术主要基于开源的大语言模型,尤其是Meta的Llama 2模型。对于新技术,我们主要介绍那些可以通过源代码进行验证和借鉴,且可以在Llama 2模型上运行的技术,其他技术则不做介绍,如混合专家系统(Mixture of Experts,MoE)。
本书基本覆盖大语言模型开发的多个方面。整体上可以参照OpenAI的安德烈·卡帕西(Andrej Karpathy)在微软的2023年Build大会报告中介绍的GPT助手训练流程。报告中指出:要训练一个ChatGPT,需要经过表0-1中的几个阶段:预训练(Pretraining,PT)、监督微调(Supervised Finetuning,SFT)、奖励模型(Reward Modeling,RM)以及基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF)。
表0-1 GPT助手训练流程
阶段 预训练 监督微调 奖励模型 基于人类反馈的强化学习
数据集 原始语料
数万亿字
质量低、数量大 示例
理想助手回答
约10~100K(输入提示,回复)由合约工人编写
数量较少,质量较高 比较
100K到1M个比较
由合约工人编写
数量较少,质量较高 提示
约10~100K提示
由合约工人编写
数量少,质量高
算法 语言模型
预测下一个标记 语言模型
预测下一个标记 二分类
根据偏好预测回报 强化学习
生成最大化回报的标记
模型 基础模型 SFT模型 RM模型 RL模型
备注 1 000GPU
数月训练
GPT、Llama、PaLM
模型可发布 1~100GPU
数天训练
Vicuna-13B
模型可发布 1~100GPU
数天训练 1~100GPU
数天训练
ChatGPT、Claude
模型可发布
图0-1是书中涉及知识的框图。除白色外,都是需要学习的内容。
图0-1 知识框图
构建可本地部署且拥有私有知识的大语言模型具有高度市场需求。这种模型主要通过两种技术实现私有知识的加入:检索增强生成(RAG)和监督微调。其中,RAG技术适用于开源和闭源模型,而SFT技术只适用于开源模型。对于私有知识的加入,书中主要讲述了监督微调,并结合大型语言模型详细介绍了RAG中词向量(word embeddings)的计算。通过学习本书,开发人员可以利用开源预训练模型研发在本地环境中独立部署,并以自身独特知识库为依托构建专业化垂直领域模型。
本书的内容来源不仅包含网络上的各类教程和文章,也包括原始论文和源代码。许多内容来自对原始论文的阅读与理解,对开源代码的详细分析和程序运行输出。对书中所有引用的源代码,作者都已经亲自运行并确保其有效性,书中提供了下载链接,便于读者继续研究。部分基础知识和源代码分析借助了ChatGPT,后期少部分内容使用了阿里云的通义千问,效果不错。
本书不但适用于大型语言模型应用开发人员,而且对于渴望深度探究ChatGPT背后的运行机制,更高效地运用和优化其功能的实践者,同样具有极高的参考价值。换言之,若想在ChatGPT应用领域成为佼佼者,掌握提示的规则和技巧固然重要,深入掌握其内在机制才是关键。
我们预期读者具有Python编程的基础知识,并对深度学习(deep learning)有一定了解,但并不要求读者具备自然语言处理的基础知识。
由于作者水平有限和技术发展的迅速性,本书内容难免存在不足之处。在此,恳请读者批评指正。
获取书中示例源代码及资源访问网址请扫封底的二维码。
范煜
2024年3月
|
|