在人工智能时代,如何尽快掌握人工智能的核心—深度学习呢?相信这是每个欲进入此领域的人面临的主要问题。目前,深度学习框架很多,如TensorFlow、PyTorch、Keras、FastAI、CNTK等。
面对众多的深度学习框架,初学者应如何选择?哪个框架既易于上手,又在工业界有广泛应用?毫无疑问,PyTorch是不二之选。一方面,PyTorch天然与Python结合,大大降低了深度学习的门槛;另一方面,它的流行度仅次于TensorFlow,而且有赶超之势,但是上手难度却比TensorFlow低很多。如果你是一位初学者,建议你选择PyTorch,待有了一定的基础之后,可以学习其他框架,如TensorFlow、CNTK等。
这是一本能指导读者快速掌握PyTorch和深度学习的著作,从PyTorch的原理到应用,从深度学习到强化学习,本书提供了全栈解决方案。本书还涉及AIGC技术的核心内容,本书第8章、第14重点介绍了注意力机制及Transformer架构及其应用,第10章、第16章介绍了生成式网络核心架构(如AE、VAE、GAN等),这些架构包括降噪、重参数化等技术,此外,本书还包括目标检测、强化学习等内容。除理论、原理介绍外,还包括大量可动手实践的实例。
第1版上市后销量和口碑俱佳,是深度学习领域的畅销书,被誉为PyTorch领域的标准著作。第2版在第1版的基础上,去芜存菁,与时俱进,根据PyTorch新版本全面升级,技术性、实战性、丰富性、针对性、易读性均得到了进一步提升,必能帮助读者更轻松、更高效地进入深度学习的世界。帮助读者低门槛进入深度学习领域,轻松掌握深度学习的理论知识和实践方法,快速实现从入门到进阶的转变”是这本书的核心目标。
自本书第1版第1次于2019年10月印刷至今,已累计印刷了9次。在这3年的时间里,深度学习的发展可谓日新月异,其应用范围得到进一步拓展,同时出现了很多新的框架、新的方向。
在众多创新中,注意力机制是一个典型代表。注意力机制,尤其是以Transformer为基础的一些模型,在自然语言处理(NLP)领域取得了目前最好的效果(如SOTA),近几年研究人员把这种模型(如ViT模型、Swin-T模型等)应用到计算机视觉领域,也取得了巨大成功。
为此,本书第2版增强了注意力机制的相关内容,把注意力机制单独列为一章(即第8章),同时增加了注意力机制的应用实例,详细内容请参考第14章。
人工智能广泛应用于图像、视频、语音等诸多领域,比如人工智能在目标检测、语义分割等任务中的应用日益受到大家的关注,所以在第2版中我们增加了这方面的内容,具体可参考第9章和第15章。
除了这些新增内容外,第2版对很多原有内容进行了补充和完善,如PyTorch基础、优化算法、视觉处理基础、自然语言处理基础等内容。
为便利大家更好理解本书,特提供PPT文档
PPT文档对书中内容进行提炼,并包括很多gif动画,便于更直观理解相关原理和概念,此外,作为不少拓展,包括GPT-3、ChatGPT、Diffusion Model等内容。
吴茂贵,资深大数据和人工智能技术专家,在BI、数据挖掘与分析、数据仓库、机器学习等领域工作超过20年。在基于Spark、TensorFlow、PyTorch等的机器学习和深度学习方面有大量的工程实践经验。著有《Python深度学习:基于TensorFlow》《深度实践Spark机器学习》《自己动手做大数据系统》《深入浅出Embedding原理解析与应用实践》等畅销书。
郁明敏,资深商业分析师,从事互联网金融算法研究工作,专注于大数据、机器学习以及数据可视化的相关领域,擅长 Python、Hadoop、Spark 等技术,拥有丰富的实战经验。曾获“江苏省TI杯大学生电子竞技大赛”二等奖和“华为杯全国大学生数学建模大赛”二等奖。
杨本法,高级算法工程师,工业表面缺陷检测设备开发架构师,在机器学习、文本挖掘、可视化等领域有多年实践经验。做过大型电商的推荐系统,知名手机厂商外壳表面检测设备。熟悉Hadoop、Spark生态圈的相关技术,对Python有丰富的实战经验。
李 涛 ,资深AI技术工程师,任职于携程(上海)科技有限公司,负责酒店排序推荐相关项目的数据分析和算法开发,对计算机视觉技术和搜索推荐系统有深刻的理解和丰富的实践经验。
张粤磊 ,国云大数据学院院长,飞谷云创始人,毕业于中国科技大学,原平安壹钱包大数据架构师。业内知名大数据专家,多部大数据畅销书作者。2016年以来每年都以高级专家和咨询顾问身份深入参与大数据、人工智能技术在行业的落地应用。
第
1
版前言
第一部分 PyTorch基础
第
1
章 NumPy基础知识
2
1.1
生成NumPy数组
3
1.1
.1
数组属性
4
1.1
.2
利用已有数据生成数组
4
1.1
.3
利用 random 模块生成数组
5
1.1
.4
生成特定形状的多维数组
7
1.1
.5
利用arange、linspace
函数生成数组
8
1.2
读取数据
9
1.3
NumPy的算术运算
11
1.3
.1
逐元素操作
11
1.3
.2
点积运算
12
1.4
数组变形
13
1.4
.1
修改数组的形状
13
1.4
.2
合并数组
16
1.5
批处理
19
1.6
节省内存
20
1.7
通用函数
21
1.8
广播机制
23
1.9
小结
24
第
2
章 PyTorch基础知识
25
2.1
为何选择PyTorch25
2.2
PyTorch的安装配置
26
2.2
.1
安装CPU版PyTorch26
2.2
.2
安装GPU版PyTorch28
2.3
Jupyter Notebook环境配置
30
2.4
NumPy与Tensor31
2.4
.1
Tensor概述
31
2.4
.2
创建Tensor32
2.4
.3
修改Tensor形状
34
2.4
.4
索引操作
35
2.4
.5
广播机制
35
2.4
.6
逐元素操作
36
2.4
.7
归并操作
37
2.4
.8
比较操作
37
2.4
.9
矩阵操作
38
2.4
.10
PyTorch与NumPy比较
39
2.5
Tensor与autograd39
2.5
.1
自动求导要点
40
2.5
.2
计算图
40
2.5
.3
标量反向传播
41
2.5
.4
非标量反向传播
42
2.5
.5
切断一些分支的反向传播
45
2.6
使用NumPy实现机器学习任务
47
2.7
使用Tensor及autograd实现机器
学习任务
49
2.8
使用优化器及自动微分实现机器
学习任务
51
2.9
把数据集转换为带批量处理功能的
迭代器
52
2.10
使用TensorFlow
2
实现机器
学习任务
54
2.11
小结
55
第
3
章 PyTorch神经网络工具箱
56
3.1
神经网络核心组件
56
3.2
构建神经网络的主要工具
57
3.2
.1
nn.Module57
3.2
.2
nn.functional58
3.3
构建模型
59
3.3
.1
继承nn.Module基类构建模型
59
3.3
.2
使用nn.Sequential按层
顺序构建模型
60
3.3
.3
继承nn.Module基类并应用
模型容器来构建模型
63
3.3
.4
自定义网络模块
66
3.4
训练模型
68
3.5
实现神经网络实例
69
3.5
.1
背景说明
69
3.5
.2
准备数据
70
3.5
.3
可视化源数据
71
3.5
.4
构建模型
72
3.5
.5
训练模型
72
3.6
小结
74
第
4
章 PyTorch数据处理工具箱
75
4.1
数据处理工具箱概述
75
4.2
utils.data76
4.3
torchvision78
4.3
.1
transforms78
4.3
.2
ImageFolder79
4.4
可视化工具
81
4.4
.1
TensorBoard简介
81
4.4
.2
用TensorBoard可视化
神经网络
82
4.4
.3
用TensorBoard可视化损失值
83
4.4
.4
用TensorBoard可视化特征图
84
4.5
小结
85
第二部分 深度学习基础
第
5
章 机器学习基础
88
5.1
机器学习的基本任务
88
5.1
.1
监督学习
89
5.1
.2
无监督学习
89
5.1
.3
半监督学习
90
5.1
.4
强化学习
90
5.2
机器学习的一般流程
90
5.2
.1
明确目标
91
5.2
.2
收集数据
91
5.2
.3
数据探索与预处理
91
5.2
.4
选择模型及损失函数
91
5.2
.5
评估及优化模型
92
5.3
过拟合与欠拟合
93
5.3
.1
权重正则化
93
5.3
.2
dropout正则化
94
5.3
.3
批量归一化
97
5.3
.4
层归一化
99
5.3
.5
权重初始化
99
5.4
选择合适的激活函数
100
5.5
选择合适的损失函数
101
5.6
选择合适的优化器
103
5.6
.1
传统梯度优化算法
104
5.6
.2
批量随机梯度下降法
105
5.6
.3
动量算法
106
5.6
.4
Nesterov动量算法
108
5.6
.5
AdaGrad算法
109
5.6
.6
RMSProp算法
111
5.6
.7
Adam算法
112
5.6
.8
Yogi算法
113
5.6
.9
使用优化算法实例
114
5.7
GPU加速
116
5.7
.1
单GPU加速
116
5.7
.2
多GPU加速
117
5.7
.3
使用GPU时的注意事项
120
5.8
小结
121
第
6
章 视觉处理基础
122
6.1
从全连接层到卷积层
122
6.1
.1
图像的两个特性
123
6.1
.2
卷积神经网络概述
124
6.2
卷积层
125
6.2
.1
卷积核
127
6.2
.2
步幅
129
6.2
.3
填充
130
6.2
.4
多通道上的卷积
131
6.2
.5
激活函数
134
6.2
.6
卷积函数
135
6.2
.7
转置卷积
136
6.2
.8
特征图与感受野
137
6.2
.9
全卷积网络
138
6.3
池化层
139
6.3
.1
局部池化
140
6.3
.2
全局池化
140
6.4
现代经典网络
142
6.4
.1
LeNet-
5
模型
142
6.4
.2
AlexNet模型
143
6.4
.3
VGG模型
143
6.4
.4
GoogLeNet模型
144
6.4
.5
ResNet模型
145
6.4
.6
DenseNet模型
146
6.4
.7
CapsNet模型
148
6.5
使用卷积神经网络实现CIFAR10
多分类
149
6.5
.1
数据集说明
149
6.5
.2
加载数据
149
6.5
.3
构建网络
151
6.5
.4
训练模型
151
6.5
.5
测试模型
152
6.5
.6
采用全局平均池化
153
6.5
.7
像Keras一样显示各层参数
154
6.6
使用模型集成方法提升性能
156
6.6
.1
使用模型
156
6.6
.2
集成方法
157
6.6
.3
集成效果
158
6.7
使用现代经典模型提升性能
158
6.8
小结
159
第
7
章 自然语言处理基础
160
7.1
从语言模型到循环神经网络
160
7.1
.1
链式法则
161
7.1
.2
马可夫假设与N元语法模型
161
7.1
.3
从N元语法模型到隐含
状态表示
161
7.1
.4
从神经网络到有隐含状态的
循环神经网络
162
7.1
.5
使用循环神经网络构建
语言模型
164
7.1
.6
多层循环神经网络
164
7.2
正向传播与随时间反向传播
165
7.3
现代循环神经网络
167
7.3
.1
LSTM168
7.3
.2
GRU169
7.3
.3
Bi-RNN169
7.4
循环神经网络的PyTorch实现
170
7.4
.1
使用PyTorch实现RNN170
7.4
.2
使用PyTorch实现LSTM172
7.4
.3
使用PyTorch实现GRU174
7.5
文本数据处理
175
7.6
词嵌入
176
7.6
.1
Word2Vec原理
177
7.6
.2
CBOW模型
177
7.6
.3
Skip-Gram模型
178
7.7
使用PyTorch实现词性判别
179
7.7
.1
词性判别的主要步骤
179
7.7
.2
数据预处理
180
7.7
.3
构建网络
180
7.7
.4
训练网络
181
7.7
.5
测试模型
182
7.8
用LSTM预测股票行情
183
7.8
.1
导入数据
183
7.8
.2
数据概览
183
7.8
.3
预处理数据
184
7.8
.4
定义模型
185
7.8
.5
训练模型
185
7.8
.6
测试模型
186
7.9
几种特殊架构
187
7.9
.1
编码器-解码器架构
187
7.9
.2
Seq2Seq架构
189
7.10
循环神经网络应用场景
189
7.11
小结
190
第
8
章 注意力机制
191
8.1
注意力机制概述
191
8.1
.1
两种常见注意力机制
192
8.1
.2
来自生活的注意力
192
8.1
.3
注意力机制的本质
192
8.2
带注意力机制的编码器-解码器架构
194
8.2
.1
引入注意力机制
194
8.2
.2
计算注意力分配概率分布值
196
8.3
Transformer198
8.3
.1
Transformer的顶层设计
198
8.3
.2
编码器与解码器的输入
200
8.3
.3
自注意力
200
8.3
.4
多头注意力
203
8.3
.5
自注意力与循环神经网络、
卷积神经网络的异同
204
8.3
.6
加深Transformer网络层的
几种方法
205
8.3
.7
如何进行自监督学习
205
8.3
.8
Vision Transformer207
8.3
.9
Swin Transformer208
8.4
使用PyTorch实现Transformer213
8.4
.1
Transformer背景介绍
214
8.4
.2
构建EncoderDecoder214
8.4
.3
构建编码器
215
8.4
.4
构建解码器
218
8.4
.5
构建多头注意力
219
8.4
.6
构建前馈神经网络层
221
8.4
.7
预处理输入数据
222
8.4
.8
构建完整网络
224
8.4
.9
训练模型
225
8.4
.10
实现一个简单实例
228
8.5
小结
230
第
9
章 目标检测与语义分割
231
9.1
目标检测及主要挑战
231
9.1
.1
边界框的表示
232
9.1
.2
手工标注图像的真实值
233
9.1
.3
主要挑战
236
9.1
.4
选择性搜索
236
9.1
.5
锚框
237
9.1
.6
RPN239
9.2
优化候选框的几种算法
240
9.2
.1
交并比
240
9.2
.2
非极大值抑制
240
9.2
.3
边框回归
241
9.2
.4
SPP-Net243
9.3
典型的目标检测算法
244
9.3
.1
R-CNN244
9.3
.2
Fast R-CNN245
9.3
.3
Faster R-CNN245
9.3
.4
Mask R-CNN246
9.3
.5
YOLO247
9.3
.6
各种算法的性能比较
248
9.4
语义分割
249
9.5
小结
250
第
10
章 生成式深度学习
251
10.1
用变分自编码器生成图像
251
10.1
.1
自编码器
251
10.1
.2
变分自编码器
252
10.1
.3
用变分自编码器生成图像实例
253
10.2
GAN简介
256
10.2
.1
GAN的架构
256
10.2
.2
GAN的损失函数
257
10.3
用GAN生成图像
257
10.3
.1
构建判别器
258
10.3
.2
构建生成器
258
10.3
.3
训练模型
258
10.3
.4
可视化结果
259
10.4
VAE与GAN的异同
260
10.5
CGAN260
10.5
.1
CGAN的架构
261
10.5
.2
CGAN的生成器
261
10.5
.3
CGAN的判别器
262
10.5
.4
CGAN的损失函数
262
10.5
.5
CGAN的可视化
262
10.5
.6
查看指定标签的数据
263
10.5
.7
可视化损失值
263
10.6
DCGAN264
10.7
提升GAN训练效果的技巧
265
10.8
小结
266
第三部分 深度学习实战
第
11
章 人脸检测与识别实例
268
11.1
人脸检测与识别的一般流程
268
11.2
人脸检测
269
11.2
.1
目标检测
269
11.2
.2
人脸定位
269
11.2
.3
人脸对齐
270
11.2
.4
MTCNN算法
270
11.3
特征提取与人脸识别
271
11.4
使用PyTorch实现人脸检测与识别
276
11.4
.1
验证检测代码
277
11.4
.2
检测图像
277
11.4
.3
检测后进行预处理
278
11.4
.4
查看检测后的图像
278
11.4
.5
人脸识别
279
11.5
小结
279
第
12
章 迁移学习实例
280
12.1
迁移学习简介
280
12.2
特征提取
281
12.2
.1
PyTorch提供的预处理模块
282
12.2
.2
特征提取实例
283
12.3
数据增强
285
12.3
.1
按比例缩放
286
12.3
.2
裁剪
286
12.3
.3
翻转
287
12.3
.4
改变颜色
287
12.3
.5
组合多种增强方法
287
12.4
微调实例
288
12.4
.1
数据预处理
288
12.4
.2
加载预训练模型
289
12.4
.3
修改分类器
289
12.4
.4
选择损失函数及优化器
289
12.4
.5
训练及验证模型
290
12.5
清除图像中的雾霾
290
12.6
小结
293
第
13
章 神经网络机器翻译实例
294
13.1
使用PyTorch实现带注意力的
解码器
294
13.1
.1
构建编码器
294
13.1
.2
构建解码器
295
13.1
.3
构建带注意力的解码器
295
13.2
使用注意力机制实现中英文互译
297
13.2
.1
导入需要的模块
297
13.2
.2
数据预处理
298
13.2
.3
构建模型
300
13.2
.4
训练模型
302
13.2
.5
测试模型
303
13.2
.6
可视化注意力
304
13.3
小结
305
第
14
章 使用ViT进行图像分类
306
14.1
项目概述
306
14.2
数据预处理
306
14.3
生成输入数据
308
14.4
构建编码器模型
310
14.5
训练模型
313
14.6
小结
314
第
15
章 语义分割实例
315
15.1
数据概览
315
15.2
数据预处理
316
15.3
构建模型
319
15.4
训练模型
322
15.5
测试模型
325
15.6
保存与恢复模型
326
15.7
小结
326
第
16
章 生成模型实例
327
16.1
Deep Dream模型
327
16.1
.1
Deep Dream原理
327
16.1
.2
Deep Dream算法的流程
328
16.1
.3
使用PyTorch实现
Deep Dream329
16.2
风格迁移
331
16.2
.1
内容损失
332
16.2
.2
风格损失
333
16.2
.3
使用PyTorch实现神经
网络风格迁移
335
16.3
使用PyTorch实现图像修复
339
16.3
.1
网络结构
339
16.3
.2
损失函数
340
16.3
.3
图像修复实例
340
16.4
使用PyTorch实现DiscoGAN342
16.4
.1
DiscoGAN架构
343
16.4
.2
损失函数
344
16.4
.3
DiscoGAN实现
345
16.4
.4
使用PyTorch实现
DiscoGAN实例
346
16.5
小结
348
第
17
章 AI新方向:对抗攻击
349
17.1
对抗攻击简介
349
17.1
.1
白盒攻击与黑盒攻击
350
17.1
.2
无目标攻击与有目标攻击
350
17.2
常见对抗样本生成方式
350
17.2
.1
快速梯度符号算法
351
17.2
.2
快速梯度算法
351
17.3
使用PyTorch实现对抗攻击
351
17.3
.1
实现无目标攻击
351
17.3
.2
实现有目标攻击
354
17.4
对抗攻击和防御方法
355
17.4
.1
对抗攻击
355
17.4
.2
常见防御方法分类
355
17.5
小结
356
第
18
章 强化学习
357
18.1
强化学习简介
357
18.2
Q-Learning算法原理
359
18.2
.1
Q-Learning算法的主要流程
359
18.2
.2
Q函数
360
18.2
.3
贪婪策略
360
18.3
使用PyTorch实现Q-Learning算法
361
18.3
.1
定义Q-Learning主函数
361
18.3
.2
运行Q-Learning算法
362
18.4
SARSA 算法
362
18.4
.1
SARSA算法的主要步骤
362
18.4
.2
使用PyTorch实现SARSA
算法
363
18.5
小结
364
第
19
章 深度强化学习
365
19.1
DQN算法原理
365
19.1
.1
Q-Learning方法的局限性
366
19.1
.2
用深度学习处理强化学习
需要解决的问题
366
19.1
.3
用DQN算法解决问题
366
19.1
.4
定义损失函数
366
19.1
.5
DQN的经验回放机制
367
19.1
.6
目标网络
367
19.1
.7
网络模型
367
19.1
.8
DQN算法实现流程
367
19.2
使用PyTorch实现 DQN算法
368
19.3
小结
371
附录A PyTorch
0.4
版本变更
372
附录B AI在各行业的最新应用
377
附录C einops及einsum简介
383
复制代码