本书从模型的结构和数据基础两个方面解构大语言模型,以便帮助读者理解和搭建类似ChatGPT的系统。在模型的结构方面,大语言模型属于深度神经网络,其设计核心是注意力机制,因此,本书涵盖了多层感知器、卷积神经网络和循环神经网络等经典模型。在模型的数据基础方面,本书既涉及模型训练的工程基础,如反向传播,又涉及数据的使用方式,如迁移学习、强化学习,以及传统的监督学习和无监督学习。此外,本书还阐述了如何从计量经济学和经典机器学习模型中汲取灵感,以提高模型的稳定性和可解释性。本书既适用于希望深入了解大语言模型、通过人工智能技术解决实际问题的读者,也适合作为高等院校计算机及相关专业的师生参考用书。
唐亘,数据科学家,专注于人工智能和大数据,积极参与Apache Spark、scikit-learn等开源项目,曾为华为、复旦大学等多家机构提供过百余场技术培训。曾撰写《精通数据科学:从线性回归到深度学习》一书,并担任英国最大在线出版社Packt的技术审稿人。毕业于复旦大学,获数学和计算机双学士学位,后求学于巴黎综合理工学院,获经济学和数据科学双硕士学位。
第1章 绪论 2
1.1 是数字鹦鹉,还是自我意识 3
1.1.1 电车难题 3
1.1.2 任务分解 4
1.2 数据基础 5
1.3 模型结构 7
1.4 关于本书 9
第2章 数学基础:不可或缺的知识 12
2.1 向量、矩阵和张量 13
2.1.1 标量、向量、矩阵与张量 13
2.1.2 数学记号与特殊矩阵 14
2.1.3 矩阵运算 15
2.1.4 向量夹角 18
2.1.5 矩阵的秩 19
2.1.6 高维张量运算 20
2.2 概率 21
2.2.1 定义概率:事件和概率空间 22
2.2.2 条件概率:信息的价值 23
2.2.3 随机变量 24
2.2.4 正态分布:殊途同归 27
2.2.5 P-value:自信的猜测 28
2.3 微积分 30
2.3.1 导数和积分 30
2.3.2 极限 32
2.3.3 链式法则 33
2.3.4 偏导数与梯度 34
2.3.5 极值与最值 34
2.4 本章小结 35
第3章 线性回归:模型之母 38
3.1 一个简单的例子 39
3.1.1 机器学习的建模方式 40
3.1.2 统计分析的建模方式 43
3.2 模型实现 47
3.2.1 机器学习的代码实现 47
3.2.2 统计分析的代码实现 49
3.3 模型陷阱 52
3.3.1 过拟合:模型越复杂越好吗 53
3.3.2 假设检验:统计分析的解决方案 56
3.3.3 惩罚项:机器学习的解决方案 57
3.3.4 比较两种方案 60
3.4 面向未来的准备 60
3.4.1 图形表示与数学表达 61
3.4.2 模型的生命周期与持久化 62
3.5 本章小结 63
3.5.1 要点回顾 63
3.5.2 常见面试问题 64
第4章 逻辑回归:隐藏因子 68
4.1 二元分类问题:是与否 68
4.1.1 线性回归:为何失效 69
4.1.2 窗口效应:看不见的才是关键 70
4.1.3 逻辑分布 72
4.1.4 似然函数:统计分析的参数估计 74
4.1.5 损失函数:机器学习的参数估计 75
4.1.6 最终预测:从概率到类别 76
4.2 模型实现 76
4.2.1 初步分析数据:直观印象 77
4.2.2 搭建模型 79
4.2.3 理解模型结果 81
4.3 评估模型效果 82
4.3.1 查准率与查全率 83
4.3.2 F-score 85
4.3.3 ROC空间 86
4.3.4 ROC曲线与AUC 88
4.3.5 AUC的概率解释 89
4.4 非均衡数据集 90
4.4.1 准确度悖论 90
4.4.2 模型效果影响 91
4.4.3 解决方案 93
4.5 多元分类问题:超越是与否 94
4.5.1 多元逻辑回归 94
4.5.2 One-vs.-All:从二元到多元 95
4.5.3 模型实现 96
4.6 本章小结 97
4.6.1 要点回顾 97
4.6.2 常见面试问题 98
第5章 计量经济学的启示:他山之石 100
5.1 定量与定性:特征的数学运算合理吗 101
5.2 定性特征的处理 102
5.2.1 虚拟变量 102
5.2.2 定性特征转换为定量特征 104
5.3 定量特征的处理 105
5.3.1 定量特征转换为定性特征 106
5.3.2 基于卡方检验的方法 108
5.4 多重共线性:多变量的烦恼 109
5.4.1 多重共线性效应 110
5.4.2 检测多重共线性 113
5.4.3 解决方法 114
5.4.4 虚拟变量陷阱 116
5.5 本章小结 117
5.5.1 要点回顾 117
5.5.2 常见面试问题 118
第6章 最优化算法:参数估计 120
6.1 算法思路:模拟滚动 121
6.2 梯度下降法 122
6.2.1 算法使用的窍门 124
6.2.2 算法的局限性:局部最优与鞍点 125
6.3 梯度下降法的代码实现 126
6.3.1 PyTorch基础 127
6.3.2 利用PyTorch的封装函数 130
6.4 随机梯度下降法:更优化的算法 133
6.4.1 算法细节 133
6.4.2 代码实现 134
6.4.3 进一步优化 135
6.5 本章小结 137
6.5.1 要点回顾 137
6.5.2 常见面试问题 138
第7章 反向传播:神经网络的工程基础 140
7.1 计算图和向前传播 141
7.1.1 什么是计算图 141
7.1.2 代码实现 142
7.2 链式法则和反向传播 145
7.2.1 拓扑排序 146
7.2.2 代码实现 146
7.2.3 梯度传播过程 148
7.3 参数估计的全流程 151
7.3.1 随机梯度下降法回顾 151
7.3.2 计算图膨胀 152
7.4 动态优化 155
7.4.1 梯度累积 155
7.4.2 参数冻结 158
7.4.3 随机失活 159
7.5 真实世界:针对大规模模型的优化技巧 162
7.5.1 GPU计算 162
7.5.2 混合精度训练 164
7.5.3 梯度检查点 166
7.5.4 分布式计算 167
7.6 本章小结 170
7.6.1 要点回顾 170
7.6.2 常见面试问题 171
第8章 多层感知器:神经网络的“创世记” 174
8.1 感知器模型 175
8.1.1 神经元的数字孪生 175
8.1.2 图示与计算图 177
8.1.3 Sigmoid感知器与逻辑回归 178
8.1.4 Softmax函数 179
8.2 从神经网络的视角重新理解逻辑回归 181
8.2.1 回顾窗口效应 182
8.2.2 代码实现 183
8.2.3 损失函数为模型注入灵魂 185
8.2.4 神经网络的建模文化:搭积木 186
8.3 多层感知器 187
8.3.1 图形表示 187
8.3.2 数学基础 189
8.3.3 令人惊讶的通用性 192
8.3.4 代码实现 193
8.3.5 模型的联结主义 195
8.4 训练优化的关键:激活函数 197
8.4.1 坏死的神经细胞 198
8.4.2 数学基础 200
8.4.3 监控模型训练 201
8.4.4 不稳定的梯度 205
8.4.5 激活函数的改进 206
8.5 从第一步开始优化训练 208
8.5.1 模型损失的预估 208
8.5.2 参数初始化的初步优化 209
8.5.3 参数初始化的进一步优化 212
8.5.4 归一化层 214
8.6 本章小结 218
8.6.1 要点回顾 218
8.6.2 常见面试问题 219
第9章 卷积神经网络:深度学习的“出埃及记” 222
9.1 利用多层感知器识别数字 223
9.1.1 视觉对象的数字化 223
9.1.2 搭建模型 224
9.1.3 代码实现 226
9.1.4 防止过拟合之随机失活 229
9.1.5 防止过拟合之惩罚项 231
9.2 卷积神经网络 233
9.2.1 神经元的组织方式 234
9.2.2 卷积层的网络结构 235
9.2.3 卷积层的细节处理与代码实现 237
9.2.4 池化层 239
9.2.5 完整结构与实现 240
9.2.6 超越图像识别 242
9.3 残差网络 243
9.3.1 残差连接 243
9.3.2 实现要点和小窍门 245
9.3.3 代码实现 247
9.4 本章小结 247
9.4.1 要点回顾 247
9.4.2 常见面试问题 248
第10章 循环神经网络:尝试理解人类语言 250
10.1 自然语言处理的基本要素 251
10.1.1 语言数字化 252
10.1.2 分词器的语言基础 253
10.1.3 英文分词器 254
10.1.4 中文分词的挑战 256
10.1.5 学习框架:迁移学习 258
10.2 利用多层感知器学习语言 260
10.2.1 数据准备 260
10.2.2 文本嵌入 263
10.2.3 代码实现 265
10.2.4 普通神经网络的缺陷 266
10.3 循环神经网络 267
10.3.1 图示与结构 268
10.3.2 模型的关键:隐藏状态 269
10.3.3 利用循环神经网络学习语言 271
10.3.4 模型训练与文本生成 272
10.3.5 模型的学习原理:通过时间的反向传播 274
10.4 深度循环神经网络 275
10.4.1 更优雅的代码实现 275
10.4.2 批量序列数据的处理 277
10.4.3 从单层走向更复杂的结构 278
10.4.4 利用深度循环神经网络学习语言 280
10.5 长短期记忆网络 281
10.5.1 短期记忆 282
10.5.2 模型结构 284
10.5.3 代码实现 285
10.5.4 利用长短期记忆网络学习语言 287
10.6 本章小结 290
10.6.1 要点回顾 290
10.6.2 常见面试问题 291
第11章 大语言模型:是通用人工智能的开始吗 294
11.1 注意力机制 295
11.1.1 设计初衷 296
11.1.2 改进后的注意力机制 297
11.1.3 数学细节与实现技巧 299
11.2 从零开始实现GPT-2 300
11.2.1 模型结构 301
11.2.2 多头单向注意力 303
11.2.3 解码块 304
11.2.4 GPT-2的完整结构与重现 305
11.2.5 Python语言学习任务 307
11.3 从大语言模型到智能助手 308
11.3.1 大语言模型的现状 308
11.3.2 开源模型 310
11.3.3 从GPT到ChatGPT 311
11.3.4 提示工程 313
11.3.5 检索增强生成 314
11.4 模型微调 316
11.4.1 模型微调的4种模式 317
11.4.2 高效调参概述 318
11.4.3 高效调参之增加模型组件 319
11.4.4 高效调参之LoRA 320
11.5 监督微调和评分建模 323
11.5.1 监督微调初体验 323
11.5.2 更优化的监督微调 326
11.5.3 评分建模 327
11.5.4 如果重新构建ChatGPT 330
11.6 超越技术 331
11.6.1 智能的哲学基础 331
11.6.2 血汗工厂 333
11.6.3 碳足迹 334
11.7 本章小结 335
11.7.1 要点回顾 335
11.7.2 常见面试问题 336
第12章 强化学习:在动态交互中进化 338
12.1 大语言模型的持续优化 339
12.1.1 最大化评分:直观但错误的模型 339
12.1.2 为什么行不通:不可微的运算 341
12.1.3 可行的建模方式:调整损失函数 343
12.2 强化学习简介 345
12.2.1 核心概念 345
12.2.2 目标定义 346
12.2.3 两种解决方法 348
12.3 值函数学习 349
12.3.1 MC学习 350
12.3.2 贝尔曼方程与TD学习 352
12.3.3 利用神经网络进行学习 354
12.3.4 n步TD学习与优势函数 356
12.3.5 TD Lambda学习与GAE 357
12.4 策略学习 359
12.4.1 策略梯度定理 360
12.4.2 Reinforce算法 361
12.4.3 基准线算法 362
12.4.4 A2C算法 364
12.5 利用PPO优化大语言模型 365
12.5.1 损失函数与参数更新 366
12.5.2 从A2C到PPO 367
12.5.3 微调游戏奖励 369
12.5.4 代码实现 371
12.6 本章小结 375
12.6.1 要点回顾 375
12.6.2 常见面试问题 376
第13章 其他经典模型:扩展视野 380
13.1 决策树 381
13.1.1 决策规则 381
13.1.2 评判标准 383
13.1.3 决策树的预测与模型的联结 384
13.1.4 剪枝 386
13.2 树的集成 388
13.2.1 随机森林 389
13.2.2 梯度提升决策树 390
13.3 隐马尔可夫模型 393
13.3.1 一个简单的例子 393
13.3.2 马尔可夫链 394
13.3.3 模型架构 395
13.3.4 股票市场的应用 397
13.4 聚类与降维 400
13.4.1 经典聚类模型K-Means 401
13.4.2 如何选择聚类个数 402
13.4.3 经典降维模型主成分分析 404
13.5 奇异值分解 407
13.5.1 数学定义 407
13.5.2 截断奇异值分解 408
13.5.3 潜在语义分析 409
13.5.4 大型推荐系统 410
13.6 本章小结 413
13.6.1 要点回顾 413
13.6.2 常见面试问题 413