动 学深度学习 |
|
定价 |
75.00 |
出版社 |
人民邮电出版社 |
版次 |
dy 版 |
出版时间 |
2018年08月 |
开本 |
16开 |
作者 |
李沐(Mu Li)等 |
装帧 |
平装 |
页数 |
412 |
字数 |
653000 |
ISBN编码 |
9787115490841 |
本书旨在向读者交付有关深度学习的交互式学习体验。书中不仅阐述深度学习的算法原理,还演示它们的实现和运行。与传统图书不同,本书的每一节都是一个可以 并运行的 Jupyter记事本,它将文字、公式、图像、代码和运行结果结合在了一起。此外,读者还可以访问并参与书中内容的讨论。
全书的内容分为3个部分:dy部分介绍深度学习的背景,提供预备知识,并包括深度学习 基础的概念和技术;第二部分描述深度学习计算的重要组成部分,还解释近年来令深度学习在多个领域大获成功的卷积神经网络和循环神经网络;第三部分评价优化算法,检验影响深度学习计算性能的重要因素,并分别列举深度学习在计算机视觉和自然语言处理中的重要应用。
本书同时覆盖深度学习的方法和实践,主要面向在校大学生、技术人员和研究人员。阅读本书需要读者了解基本的Python编程或附录中描述的线性代数、微分和概率基础。
目前市面上有关深度学习介绍的书籍大多可分两类,一类侧重方法介绍,另一类侧重实践和深度学习工具的介绍。本书同时覆盖方法和实践。本书不仅从数学的角度阐述深度学习的技术与应用,还包含可运行的代码,为读者展示如何在实际中解决问题。为了给读者提供一种交互式的学习体验,本书不但提供免费的教学视频和讨论区,而且提供可运行的Jupyter记事本文件,充分利用Jupyter记事本能将文字、代码、公式和图像统一起来的优势。这样不仅直接将数学公式对应成实际代码,而且可以修改代码、观察结果并及时获取经验,从而带给读者全新的、交互式的深度学习的学习体验。
本书面向希望了解深度学习,特别是对实际使用深度学习感兴趣的大学生、工程师和研究人员。本书不要求读者有任何深度学习或者机器学习的背景知识,读者只需具备基本的数学和编程知识,如基础的线性代数、微分、概率及Python编程知识。本书的附录中提供了书中涉及的主要数学知识,供读者参考。
本书的英文版Dive into Deep Learning是加州大学伯克利分校2019年春学期“Introduction to Deep Learning”(深度学习导论)课程的教材。截至2019年春学期,本书中的内容已被 15 所 大学用于教学。本书的学习社区、免费教学资源(课件、教学视频、更多习题等),以及用于本书学习和教学的免费计算资源(仅限学生和老师)的申请方法在本书配套 zh.d2l.ai上发布。读者在阅读本书的过程中,如果对书中某节内容有疑惑,也可以扫一扫书中对应的二维码寻求帮助。
这是一本及时且引人入胜的书。它不仅提供了深度学习原理的全面概述,还提供了具有编程代码的详细算法,此外,还提供了计算机视觉和自然语言处理中有关深度学习的 介绍。如果你想钻研深度学习,请研读这本书!
——韩家炜,ACM 院士、IEEE 院士、美国伊利诺伊大学香槟分校计算机系 Abel Bliss 教授
这是对机器学习文献的一个很受欢迎的补充,重点是通过集成Jupyter 记事本实现的动 经验。深度学习的学生应该能体会到,这对于熟练掌握这一领域是非常宝贵的。
——Bernhard Sch?lkopf,ACM 院士、德国guo家科学院院士、德国马克斯? 普朗克研究所智能系统院院长
这本书基于MXNet 框架来介绍深度学习技术,书中代码可谓“所学即所用”,为喜欢通过Python 代码进行学习的读者了解、接触深度学习技术提供了很大的便利。
——周志华,ACM 院士、IEEE 院士、AAAS 院士、南京大学计算机科学与技术系主任
虽然业界已经有不错的深度学习方面的书籍,但都不够紧密结合工业界的应用实践。 我认为《动 学深度学习》是 适合工业界研发工程师学习的,因为这本书把算法理论、应用场景、代码实例都完美地联系在一起,引导读者把理论学习和应用实践紧密结合,知行合一,在动 中学习,在体会和领会中不断深化对深度学习的理解。 因此我毫无保留地向广大的读者强烈推荐《动 学深度学习》。
——余凯,地平线公司创始人、首席执行官
强烈推荐这本书!它其实远不只是一本书:它不仅讲解深度学习背后的数学原理,更是一个编程工作台与记事本,让读者可以一边动 学习一边收到反馈,它还是个开源社区平台,让大家可以交流。作为在AI 学术界和工业界都长期工作过的人,我特别赞赏这种 脑一体的学习方式,既能增强实践能力,又可以在解决问题中锻炼独立思考和批判性思维。 作者们是算法工程兼强的业界翘楚,他们能奉献出这样的一本好的开源书,为他们点赞!
——漆远,蚂蚁金服副总裁、首席人工智能科学家
这是一本基于Apache MXNet 的深度学习实战书籍,可以帮助读者快速上 并掌握使用深度学习工具的基本技能。本书的几个作者都在机器学习领域有着非常丰富的经验。他们不光有大量的工业界实践经验,也有非常高的学术成就,所以对机器学习领域的前沿算法理解深刻。这使得作者们在提供优质代码的同时,也可以把 前沿的算法和概念深入浅出地介绍给读者。这本书可以帮助深度学习实践者快速提升自己的能力。
——张潼,腾讯人工智能实验室主任
一年前作者开始在将门技术社 中做深度学习的系列讲座,当时我就对动 式讲座的内容和形式感到耳目一新。一年过去,看到《动 学深度学习》在持续精心打磨后终于成书出版,感觉十分欣喜!
深度学习是当前人工智能领域里炙 可热的领域,吸引了大量感兴趣的开发者踊跃学习相关的开发技术。然而对大多数学习者而言,掌握深度学习是一件很不容易的事情,需要相继翻越数学基础、算法理论、编程开发、领域应用、软硬优化等几座大山。因此学习过程不容易一帆风顺,我也看到很多学习者还没进入开发环节就在理论学习的过程中抱憾放弃了。然而《动 学深度学习》却是一本很容易让学习者上瘾的书,它 的特色是强调在动 编程中学习理论和培养实战能力。阅读本书 愉悦的感受是它很好地平衡了理论介绍和编程实 ,内容简明扼要,衔接自然流畅,既反映了现代深度学习的进展,又兼具易学和实用特性,是深度学习爱好者难得的学习材料。特别值得称赞的是本书选择了Jupyter 记事本作为开发学习环境,将教材、文档和代码统一起来,给读者提供了可以立即尝试修改代码和观察运行效果的交互式的学习体验,使学习充满了乐趣。
在过去的一年中,作者和社区成员对《动 学深度学习》进行了大量优化修改才得以成书,可以说这是一本深度学习前沿实践者给深度学习爱好者带来的诚心之作,相信大家都能在阅读和实践中拥有一样的共鸣。
——沈强,将门创投创始合伙人
对本书的赞誉
前言
如何使用本书
资源与支持
主要符号表
第 1 章 深度学习简介 1
1.1 起源 2
1.2 发展 4
1.3 成功案例 6
1.4 特点 7
小结 8
练习 8
第 2 章 预备知识 9
2.1 获取和运行本书的代码 9
2.1.1 获取代码并安装运行环境 9
2.1.2 更新代码和运行环境 11
2.1.3 使用GPU版的MXNet 11
小结12
练习12
2.2 数据 作 12
2.2.1 创建NDArray 12
2.2.2 运算 14
2.2.3 广播机制 16
2.2.4 索引 17
2.2.5 运算的内存开销 17
2.2.6 NDArray和NumPy相互变换18
小结19
练习19
2.3 自动求梯度 19
2.3.1 简单例子 19
2.3.2 训练模式和预测模式 20
2.3.3 对Python控制流求梯度 20
小结21
练习21
2.4 查阅文档 21
2.4.1 查找模块里的所有函数和类 21
2.4.2 查找特定函数和类的使用 22
2.4.3 在MXNet 上查阅 23
小结 24
练习 24
第3 章 深度学习基础 25
3.1 线性回归 25
3.1.1 线性回归的基本要素 25
3.1.2 线性回归的表示方法 28
小结 30
练习 30
3.2 线性回归的从零开始实现 30
3.2.1 生成数据集 30
3.2.2 读取数据集 32
3.2.3 初始化模型参数 32
3.2.4 定义模型 33
3.2.5 定义损失函数 33
3.2.6 定义优化算法 33
3.2.7 训练模型 33
小结 34
练习 34
3.3 线性回归的简洁实现 35
3.3.1 生成数据集 35
3.3.2 读取数据集 35
3.3.3 定义模型 36
3.3.4 初始化模型参数 36
3.3.5 定义损失函数 37
3.3.6 定义优化算法 37
3.3.7 训练模型 37
小结 38
练习 38
3.4 softmax回归 38
3.4.1 分类问题 38
3.4.2 softmax回归模型 39
3.4.3 单样本分类的矢量计算表达式 40
3.4.4 小批量样本分类的矢量计算表达式 40
3.4.5 交叉熵损失函数 41
3.4.6 模型预测及评价 42
小结 42
练习 42
3.5 图像分类数据集(Fashion-MNIST) 42
3.5.1 获取数据集 42
3.5.2 读取小批量 44
小结 45
练习 45
3.6 softmax回归的从零开始实现 45
3.6.1 读取数据集 45
3.6.2 初始化模型参数 45
3.6.3 实现softmax运算 46
3.6.4 定义模型 46
3.6.5 定义损失函数 47
3.6.6 计算分类准确率 47
3.6.7 训练模型 48
3.6.8 预测 48
小结 49
练习 49
3.7 softmax回归的简洁实现 49
3.7.1 读取数据集 49
3.7.2 定义和初始化模型 50
3.7.3 softmax和交叉熵损失函数 50
3.7.4 定义优化算法 50
3.7.5 训练模型 50
小结 50
练习 50
3.8 多层感知机 51
3.8.1 隐藏层 51
3.8.2 激活函数 52
3.8.3 多层感知机 55
小结 55
练习 55
3.9 多层感知机的从零开始实现 56
3.9.1 读取数据集 56
3.9.2 定义模型参数 56
3.9.3 定义激活函数 56
3.9.4 定义模型 56
3.9.5 定义损失函数 57
3.9.6 训练模型 57
小结 57
练习 57
3.10 多层感知机的简洁实现 57
3.10.1 定义模型 58
3.10.2 训练模型 58
小结 58
练习 58
3.11 模型选择、欠拟合和过拟合 58
3.11.1 训练误差和泛化误差 59
3.11.2 模型选择 59
3.11.3 欠拟合和过拟合 60
3.11.4 多项式函数拟合实验 61
小结 65
练习 65
3.12 权重衰减 65
3.12.1 方法 65
3.12.2 高维线性回归实验 66
3.12.3 从零开始实现 66
3.12.4 简洁实现 68
小结 70
练习 70
3.13 丢弃法 70
3.13.1 方法 70
3.13.2 从零开始实现 71
3.13.3 简洁实现 73
小结 74
练习 74
3.14 正向传播、反向传播和计算图 74
3.14.1 正向传播 74
3.14.2 正向传播的计算图 75
3.14.3 反向传播 75
3.14.4 训练深度学习模型 76
小结 77
练习 77
3.15 数值稳定性和模型初始化 77
3.15.1 衰减和爆炸 77
3.15.2 随机初始化模型参数 78
小结 78
练习 79
3.16 实战Kaggle比赛:房价预测 79
3.16.1 Kaggle比赛 79
3.16.2 读取数据集 80
3.16.3 预处理数据集 81
3.16.4 训练模型 82
3.16.5 k 折交叉验证 82
3.16.6 模型选择 83
3.16.7 预测并在Kaggle提交结果 84
小结 85
练习 85
第4 章 深度学习计算 86
4.1 模型构造 86
4.1.1 继承Block类来构造模型 86
4.1.2 Sequential类继承自Block类 87
4.1.3 构造复杂的模型 88
小结 89
练习 90
4.2 模型参数的访问、初始化和共享 90
4.2.1 访问模型参数 90
4.2.2 初始化模型参数 92
4.2.3 自定义初始化方法 93
4.2.4 共享模型参数 94
小结 94
练习 94
4.3 模型参数的延后初始化 95
4.3.1 延后初始化 95
4.3.2 避免延后初始化 96
小结 96
练习 97
4.4 自定义层 97
4.4.1 不含模型参数的自定义层 97
4.4.2 含模型参数的自定义层 98
小结 99
练习 99
4.5 读取和存储 99
4.5.1 读写NDArray 99
4.5.2 读写Gluon模型的参数 100
小结 101
练习 101
4.6 GPU计算 101
4.6.1 计算设备 102
4.6.2 NDArray的GPU计算 102
4.6.3 Gluon的GPU计算 104
小结 105
练习 105
第5 章 卷积神经网络 106
5.1 二维卷积层 106
5.1.1 二维互相关运算 106
5.1.2 二维卷积层 107
5.1.3 图像中物体边缘检测 108
5.1.4 通过数据学习核数组 109
5.1.5 互相关运算和卷积运算 109
5.1.6 特征图和感受野 110
小结 110
练习 110
5.2 填充和步幅 111
5.2.1 填充 111
5.2.2 步幅 112
小结 113
练习 113
5.3 多输入通道和多输出通道 114
5.3.1 多输入通道 114
5.3.2 多输出通道 115
5.3.3 1×1卷积层 116
小结 117
练习 117
5.4 池化层 117
5.4.1 二维 池化层和平均池化层 117
5.4.2 填充和步幅 119
5.4.3 多通道 120
小结 120
练习 121
5.5 卷积神经网络(LeNet) 121
5.5.1 LeNet模型 121
5.5.2 训练模型 122
小结 124
练习 124
5.6 深度卷积神经网络(AlexNet) 124
5.6.1 学习特征表示 125
5.6.2 AlexNet 126
5.6.3 读取数据集 127
5.6.4 训练模型 128
小结 128
练习 129
5.7 使用重复元素的网络(VGG) 129
5.7.1 VGG块 129
5.7.2 VGG网络 129
5.7.3 训练模型 130
小结 131
练习 131
5.8 网络中的网络(NiN) 131
5.8.1 NiN块 131
5.8.2 NiN模型 132
5.8.3 训练模型 133
小结 134
练习 134
5.9 含并行连结的网络(GoogLeNet) 134
5.9.1 Inception块 134
5.9.2 GoogLeNet模型 135
5.9.3 训练模型 137
小结 137
练习 137
5.10 批量归一化 138
5.10.1 批量归一化层 138
5.10.2 从零开始实现 139
5.10.3 使用批量归一化层的LeNet 140
5.10.4 简洁实现 141
小结 142
练习 142
5.11 残差网络(ResNet) 143
5.11.1 残差块 143
5.11.2 ResNet模型 145
5.11.3 训练模型 146
小结 146
练习 146
5.12 稠密连接网络(DenseNet) 147
5.12.1 稠密块 147
5.12.2 过渡层 148
5.12.3 DenseNet模型 148
5.12.4 训练模型 149
小结 149
练习 149
第6 章 循环神经网络 150
6.1 语言模型 150
6.1.1 语言模型的计算 151
6.1.2 n 元语法 151
小结 152
练习 152
6.2 循环神经网络 152
6.2.1 不含隐藏状态的神经网络 152
6.2.2 含隐藏状态的循环神经网络 152
6.2.3 应用:基于字符级循环神经网络的语言模型 154
小结 155
练习 155
6.3 语言模型数据集(歌词) 155
6.3.1 读取数据集 155
6.3.2 建立字符索引 156
6.3.3 时序数据的采样 156
小结 158
练习 159
6.4 循环神经网络的从零开始实现 159
6.4.1 one-hot向量 159
6.4.2 初始化模型参数 160
6.4.3 定义模型 160
6.4.4 定义预测函数 161
6.4.5 裁剪梯度 161
6.4.6 困惑度 162
6.4.7 定义模型训练函数 162
6.4.8 训练模型并创作歌词 163
小结 164
练习 164
6.5 循环神经网络的简洁实现 165
6.5.1 定义模型 165
6.5.2 训练模型 166
小结 168
练习 168
6.6 通过时间反向传播 168
6.6.1 定义模型 168
6.6.2 模型计算图 169
6.6.3 方法 169
小结 170
练习 170
6.7 门控循环单元(GRU) 170
6.7.1 门控循环单元 171
6.7.2 读取数据集 173
6.7.3 从零开始实现 173
6.7.4 简洁实现 175
小结 176
练习 176
6.8 长短期记忆(LSTM) 176
6.8.1 长短期记忆 176
6.8.2 读取数据集 179
6.8.3 从零开始实现 179
6.8.4 简洁实现 181
小结 181
练习 182
6.9 深度循环神经网络 182
小结 183
练习 183
6.10 双向循环神经网络 183
小结 184
练习 184
第7 章 优化算法 185
7.1 优化与深度学习 185
7.1.1 优化与深度学习的关系 185
7.1.2 优化在深度学习中的挑战 186
小结 188
练习 189
7.2 梯度下降和随机梯度下降 189
7.2.1 一维梯度下降 189
7.2.2 学习率 190
7.2.3 多维梯度下降 191
7.2.4 随机梯度下降 193
小结 194
练习 194
7.3 小批量随机梯度下降 194
7.3.1 读取数据集 195
7.3.2 从零开始实现 196
7.3.3 简洁实现 198
小结 199
练习 199
7.4 动量法 200
7.4.1 梯度下降的问题 200
7.4.2 动量法 201
·6· 目 录
7.4.3 从零开始实现 203
7.4.4 简洁实现 205
小结 205
练习 205
7.5 AdaGrad算法206
7.5.1 算法 206
7.5.2 特点 206
7.5.3 从零开始实现 208
7.5.4 简洁实现 209
小结 209
练习 209
7.6 RMSProp算法 209
7.6.1 算法 210
7.6.2 从零开始实现 211
7.6.3 简洁实现 212
小结 212
练习 212
7.7 AdaDelta算法 212
7.7.1 算法 212
7.7.2 从零开始实现 213
7.7.3 简洁实现 214
小结 214
练习 214
7.8 Adam算法 215
7.8.1 算法 215
7.8.2 从零开始实现 216
7.8.3 简洁实现 216
小结 217
练习 217
第8 章 计算性能 218
8.1 命令式和符号式混合编程 218
8.1.1 混合式编程取两者之长 220
8.1.2 使用HybridSequential类构造模型 220
8.1.3 使用HybridBlock类构造模型 222
小结 224
练习 224
8.2 异步计算 224
8.2.1 MXNet中的异步计算 224
8.2.2 用同步函数让前端等待计算结果 226
8.2.3 使用异步计算提升计算性能 226
8.2.4 异步计算对内存的影响 227
小结 229
练习 229
8.3 自动并行计算 229
8.3.1 CPU和GPU的并行计算 230
8.3.2 计算和通信的并行计算 231
小结 231
练习 231
8.4 多GPU计算 232
8.4.1 数据并行 232
8.4.2 定义模型 233
8.4.3 多GPU之间同步数据 234
8.4.4 单个小批量上的多GPU训练 236
8.4.5 定义训练函数 236
8.4.6 多GPU训练实验 237
小结 237
练习 237
8.5 多GPU计算的简洁实现 237
8.5.1 多GPU上初始化模型参数 238
8.5.2 多GPU训练模型 239
小结 241
练习 241
第9 章 计算机视觉 242
9.1 图像增广242
9.1.1 常用的图像增广方法 243
9.1.2 使用图像增广训练模型 246
小结 250
练习 250
9.2 微调 250
热狗识别 251
小结 255
练习 255
目 录 ·7·
9.3 目标检测和边界框 255
边界框 256
小结 257
练习 257
9.4 锚框 257
9.4.1 生成多个锚框 257
9.4.2 交并比 259
9.4.3 标注训练集的锚框 260
9.4.4 输出预测边界框 263
小结 265
练习 265
9.5 多尺度目标检测 265
小结 268
练习 268
9.6 目标检测数据集(皮卡丘) 268
9.6.1 获取数据集 269
9.6.2 读取数据集 269
9.6.3 图示数据 270
小结 270
练习 271
9.7 单发多框检测(SSD) 271
9.7.1 定义模型 271
9.7.2 训练模型 275
9.7.3 预测目标 277
小结 278
练习 278
9.8 区域卷积神经网络(R-CNN)系列280
9.8.1 R-CNN 280
9.8.2 Fast R-CNN 281
9.8.3 Faster R-CNN 283
9.8.4 Mask R-CNN 284
小结 285
练习 285
9.9 语义分割和数据集 285
9.9.1 图像分割和实例分割 285
9.9.2 Pascal VOC2012语义分割数据集 286
小结 290
练习 290
9.10 全卷积网络(FCN) 290
9.10.1 转置卷积层 291
9.10.2 构造模型 292
9.10.3 初始化转置卷积层 294
9.10.4 读取数据集 295
9.10.5 训练模型 296
9.10.6 预测像素类别 296
小结 297
练习 297
9.11 样式迁移 298
9.11.1 方法 298
9.11.2 读取内容图像和样式图像 299
9.11.3 预处理和后处理图像 300
9.11.4 抽取特征 301
9.11.5 定义损失函数 302
9.11.6 创建和初始化合成图像 303
9.11.7 训练模型 304
小结 306
练习 306
9.12 实战Kaggle比赛:图像
分类(CIFAR-10)306
9.12.1 获取和整理数据集 307
9.12.2 图像增广 310
9.12.3 读取数据集 310
9.12.4 定义模型 311
9.12.5 定义训练函数 312
9.12.6 训练模型 312
9.12.7 对测试集分类并在Kaggle
提交结果 313
小结 313
练习 313
9.13 实战Kaggle比赛:狗的品种
识别(ImageNet Dogs) 314
9.13.1 获取和整理数据集 315
9.13.2 图像增广 316
9.13.3 读取数据集 317
9.13.4 定义模型 318
9.13.5 定义训练函数 318
9.13.6 训练模型 319
·8· 目 录
9.13.7 对测试集分类并在Kaggle提交结果 319
小结 320
练习 320
第 10 章 自然语言处理 321
10.1 词嵌入(word2vec) 321
10.1.1 为何不采用one-hot向量 321
10.1.2 跳字模型 322
10.1.3 连续词袋模型 323
小结 325
练习 325
10.2 近似训练325
10.2.1 负采样 325
10.2.2 层序softmax 326
小结 327
练习 328
10.3 word2vec的实现328
10.3.1 预处理数据集 328
10.3.2 负采样 331
10.3.3 读取数据集 331
10.3.4 跳字模型 332
10.3.5 训练模型 333
10.3.6 应用词嵌入模型 335
小结 336
练习 336
10.4 子词嵌入(fastText) 336
小结 337
练习 337
10.5 全局向量的词嵌入(GloVe)337
10.5.1 GloVe模型 338
10.5.2 从条件概率比值理解GloVe模型 339
小结 340
练习 340
10.6 求近义词和类比词340
10.6.1 使用预训练的词向量 340
10.6.2 应用预训练词向量 341
小结 343
练习 343
10.7 文本情感分类:使用循环神经网络 343
10.7.1 文本情感分类数据集 343
10.7.2 使用循环神经网络的模型 345
小结 347
练习 347
10.8 文本情感分类:使用卷积神经网络(textCNN) 347
10.8.1 一维卷积层 348
10.8.2 时序 池化层 349
10.8.3 读取和预处理IMDb数据集 350
10.8.4 textCNN模型 350
小结 353
练习 353
10.9 编码器-解码器(seq2seq)353
10.9.1 编码器 354
10.9.2 解码器 354
10.9.3 训练模型 355
小结 355
练习 355
10.10 束搜索 355
10.10.1 贪婪搜索 356
10.10.2 穷举搜索 357
10.10.3 束搜索 357
小结 358
练习 358
10.11 注意力机制 358
10.11.1 计算背景变量 359
10.11.2 更新隐藏状态 360
10.11.3 发展 361
小结 361
练习 361
10.12 机器翻译 361
10.12.1 读取和预处理数据集 361
10.12.2 含注意力机制的编码器-解码器 363
10.12.3 训练模型 365
10.12.4 预测不定长的序列 367
10.12.5 评价翻译结果 367
小结 369
练习 369
附录A 数学基础 370
附录B 使用 Jupyter 记事本 376
附录C 使用 AWS 运行代码 381
附录D GPU 购买指南 388
附录E 如何为本书做贡献 391
附录F d2lzh 包索引 395
附录G 中英文术语对照表 397
参考文献 402
索引 407