动手学深度学习

动手学深度学习
作 者: 阿斯顿·张 李沐 扎卡里·C 立顿
出版社: 人民邮电出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  阿斯顿·张(Aston Zhang) 美亚应用科学家,美国伊利诺伊大学香槟分校计算机科学博士,统计学和计算机科学双硕士。他专注于机器学习的研究,并在数个顶ji学术会议发表过论文。他担任过NeurIPS、ICML、KDD、WWW、WSDM、SIGIR、AAAI 等学术会议的程序委员或审稿人以及Frontiers in Big Data 期刊的编委。 李沐(Mu Li) 美亚首席科学家(Principal Scientist),加州大学伯克利分校客座助理教授,美国卡内基梅隆大学计算机系博士。他专注于分布式系统和机器学习算法的研究。他是深度学习框架MXNet 的作者之一。他曾任机器学习创业公司Marianas Labs 的CTO 和百度深度学习研究院的主任研发架构师。他在理论、机器学习、应用和操作系统等多个领域的顶ji学术会议(包括FOCS、ICML、NeurIPS、AISTATS、CVPR、KDD 、WSDM、OSDI)上发表过论文。扎卡里·C. 立顿(Zachary C. Lipton) 美亚应用科学家,美国卡内基梅隆大学助理教授,美国加州大学圣迭戈分校博士。他专注于机器学习算法及其社会影响的研究,特别是在时序数据与序列决策上的深度学习。这类工作有着广泛的应用场景,包括医疗诊断、对话系统和产品推荐。他创立了博客“Approximately Correct”(approximatelycorrect.com)。亚历山大·J. 斯莫拉(Alexander J. Smola) 美亚副总裁/ 杰出科学家,德国柏林工业大学计算机科学博士。他曾在澳大利亚国立大学、美国加州大学伯克利分校和卡内基梅隆大学任教。他发表了超过200 篇学术论文,并著有5 本书,其论文及书被引用超过10 万次。他的研究兴趣包括深度学习、贝叶斯非参数、核方法、统计建模和可扩展算法。

内容简介

本书旨在向读者交付有关深度学习的交互式学习体验。书中不仅阐述深度学习的算法原理,还演示它们的实现和运行。与传统图书不同,本书的每一节都是一个可以下载并运行的 Jupyter记事本,它将文字、公式、图像、代码和运行结果结合在了一起。此外,读者还可以访问并参与书中内容的讨论。 全书的内容分为3个部分:第一部分介绍深度学习的背景,提供预备知识,并包括深度学习基础的概念和技术;第二部分描述深度学习计算的重要组成部分,还解释近年来令深度学习在多个领域大获成功的卷积神经网络和循环神经网络;第三部分评价优化算法,检验影响深度学习计算性能的重要因素,并分别列举深度学习在计算机视觉和自然语言处理中的重要应用。 本书同时覆盖深度学习的方法和实践,主要面向在校大学生、技术人员和研究人员。阅读本书需要读者了解基本的Python编程或附录中描述的线性代数、微分和概率基础。

图书目录

对本书的赞誉

前言

如何使用本书

资源与支持

主要符号表

第 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 FastR-CNN 281

9.8.3 FasterR-CNN 283

9.8.4 MaskR-CNN 284

小结 285

练习 285

9.9 语义分割和数据集 285

9.9.1 图像分割和实例分割 285

9.9.2 PascalVOC2012语义分割数据集 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