资料库

动手学深度学习.pdf

第1页 / 共530页
第2页 / 共530页
第3页 / 共530页
第4页 / 共530页
第5页 / 共530页
第6页 / 共530页
第7页 / 共530页
第8页 / 共530页
资料共530页,剩余部分请下载后查看
引言
前言
深度学习简介
如何使用本书
预备知识
获取和运行本书代码
数据操作
自动求梯度
查阅 MXNet 文档
深度学习基础
线性回归
线性回归的从零开始实现
线性回归的 Gluon 实现
Softmax 回归
图像分类数据集(Fashion-MNIST)
Softmax 回归的从零开始实现
Softmax 回归的 Gluon 实现
多层感知机
多层感知机的从零开始实现
多层感知机的 Gluon 实现
模型选择、欠拟合和过拟合
权重衰减
丢弃法
正向传播、反向传播和计算图
数值稳定性和模型初始化
实战 Kaggle 比赛:房价预测
深度学习计算
模型构造
模型参数的访问、初始化和共享
模型参数的延后初始化
自定义层
读取和存储
GPU 计算
卷积神经网络
二维卷积层
填充和步幅
多输入通道和多输出通道
池化层
卷积神经网络(LeNet)
深度卷积神经网络(AlexNet)
使用重复元素的网络(VGG)
网络中的网络(NiN)
含并行连结的网络(GoogLeNet)
批量归一化
残差网络(ResNet)
稠密连接网络(DenseNet)
循环神经网络
语言模型
循环神经网络
语言模型数据集(周杰伦专辑歌词)
循环神经网络的从零开始实现
循环神经网络的 Gluon 实现
通过时间反向传播
门控循环单元(GRU)
长短期记忆(LSTM)
深度循环神经网络
双向循环神经网络
优化算法
优化与深度学习
梯度下降和随机梯度下降
小批量随机梯度下降
动量法
Adagrad
RMSProp
Adadelta
Adam
计算性能
命令式和符号式混合编程
异步计算
自动并行计算
多 GPU 计算
多 GPU 计算的 Gluon 实现
计算机视觉
图像增广
微调
目标检测和边界框
锚框
多尺度目标检测
目标检测数据集(皮卡丘)
单发多框检测(SSD)
区域卷积神经网络(R-CNN)系列
语义分割和数据集
全卷积网络(FCN)
样式迁移
实战 Kaggle 比赛:图像分类(CIFAR-10)
实战 Kaggle 比赛:狗的品种识别 (ImageNet Dogs)
自然语言处理
词嵌入(word2vec)
近似训练
Word2vec 的实现
子词嵌入(fastText)
全局向量的词嵌入(GloVe)
求近义词和类比词
文本情感分类:使用循环神经网络
文本情感分类:使用卷积神经网络(textCNN)
编码器—解码器(seq2seq)
束搜索
注意力机制
机器翻译
附录
主要符号一览
数学基础
使用 Jupyter 记事本
使用 AWS 运行代码
GPU 购买指南
如何为本书贡献
gluonbook包索引
动⼿学深度学习 A. Zhang, M. Li, Z. C. Lipton, and A. J. Smola 2018年 12⽉ 23⽇
⽬录 1 引⾔ 1.1 前⾔ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 深度学习简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 如何使⽤本书 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 预备知识 2.1 获取和运⾏本书代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 数据操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 ⾃动求梯度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 查阅 MXNet⽂档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 深度学习基础 3.1 线性回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 线性回归的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 线性回归的 Gluon实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Softmax回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 图像分类数据集(Fashion-MNIST) . . . . . . . . . . . . . . . . . . . . . . . . Softmax回归的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . Softmax回归的 Gluon实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8 多层感知机 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6 3.7 3.4 1 1 6 16 21 21 25 33 36 41 41 47 53 57 62 66 71 73 i
81 83 84 93 3.9 多层感知机的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10 多层感知机的 Gluon实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11 模型选择、⽋拟合和过拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12 权重衰减 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13 丢弃法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 3.14 正向传播、反向传播和计算图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 3.15 数值稳定性和模型初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 3.16 实战 Kaggle⽐赛:房价预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 4 深度学习计算 4.1 模型构造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.2 模型参数的访问、初始化和共享 . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 4.3 模型参数的延后初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 4.4 ⾃定义层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 4.5 读取和存储 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 4.6 GPU计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 5 卷积神经⽹络 5.1 ⼆维卷积层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 5.2 填充和步幅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.3 多输⼊通道和多输出通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 5.4 池化层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 5.5 卷积神经⽹络(LeNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 5.6 深度卷积神经⽹络(AlexNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 5.7 使⽤重复元素的⽹络(VGG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 5.8 ⽹络中的⽹络(NiN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 5.9 含并⾏连结的⽹络(GoogLeNet) . . . . . . . . . . . . . . . . . . . . . . . . . . 181 5.10 批量归⼀化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 5.11 残差⽹络(ResNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 5.12 稠密连接⽹络(DenseNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 6 循环神经⽹络 6.1 语⾔模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 6.2 循环神经⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 6.3 语⾔模型数据集(周杰伦专辑歌词) . . . . . . . . . . . . . . . . . . . . . . . . 210 203 121 145 ii
6.4 循环神经⽹络的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 6.5 循环神经⽹络的 Gluon实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 6.6 通过时间反向传播 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 6.7 ⻔控循环单元(GRU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 6.8 ⻓短期记忆(LSTM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 6.9 深度循环神经⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 6.10 双向循环神经⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 7 优化算法 7.1 优化与深度学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 7.2 梯度下降和随机梯度下降 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 7.3 小批量随机梯度下降 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 7.4 动量法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 249 7.5 Adagrad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 7.6 RMSProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 7.7 Adadelta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 7.8 Adam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 8 计算性能 8.1 命令式和符号式混合编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 8.2 异步计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 8.3 ⾃动并⾏计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 8.4 多 GPU计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 8.5 多 GPU计算的 Gluon实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 9 计算机视觉 9.1 图像增⼴ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 9.2 微调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 9.3 ⽬标检测和边界框 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 9.4 锚框 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 9.5 多尺度⽬标检测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 9.6 ⽬标检测数据集(⽪卡丘) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 9.7 单发多框检测(SSD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 9.8 区域卷积神经⽹络(R-CNN)系列 . . . . . . . . . . . . . . . . . . . . . . . . . . 371 9.9 语义分割和数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 293 323 iii
423 9.10 全卷积⽹络(FCN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 9.11 样式迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 9.12 实战 Kaggle⽐赛:图像分类(CIFAR-10) . . . . . . . . . . . . . . . . . . . . . 404 9.13 实战 Kaggle⽐赛:狗的品种识别 (ImageNet Dogs) . . . . . . . . . . . . . . . . . 413 10 ⾃然语⾔处理 10.1 词嵌⼊(word2vec) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 10.2 近似训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 10.3 Word2vec的实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 10.4 ⼦词嵌⼊(fastText) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 10.5 全局向量的词嵌⼊(GloVe) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 10.6 求近义词和类⽐词 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 10.7 ⽂本情感分类:使⽤循环神经⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . 452 10.8 ⽂本情感分类:使⽤卷积神经⽹络(textCNN) . . . . . . . . . . . . . . . . . . 458 10.9 编码器—解码器(seq2seq) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 10.10 束搜索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 10.11 注意⼒机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 10.12 机器翻译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 11 附录 11.1 主要符号⼀览 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 11.2 数学基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 11.3 使⽤ Jupyter记事本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 11.4 使⽤ AWS运⾏代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 11.5 GPU购买指南 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 11.6 如何为本书贡献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 11.7 gluonbook包索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 487 iv
1 引⾔ 深度学习在近年来发展极为迅速。它在智能时代深刻改变着⼈类的⽣产⽣活⽅式。本章将简要介 绍什么是深度学习,以及如何使⽤本书。 1.1 前⾔ 就在⼏年前,不管在⼤公司还是创业公司,都鲜有⼯程师和科学家来将深度学习应⽤到智能产品 与服务中。作为深度学习前⾝的神经⽹络,才刚刚摆脱被机器学习学术界认为是过时⼯具的印象。 那个时候,即使是机器学习也⾮新闻头条的常客。它仅仅被看作是⼀⻔具有前瞻性,并拥有⼀系 列小范围实际应⽤的学科。在包含计算机视觉和⾃然语⾔处理在内的实际应⽤通常需要⼤量的相 关领域知识:这些实际应⽤被视为相互独⽴的领域,而机器学习只占其中⼀小部分。 然而仅仅在这⼏年之内,深度学习便令全世界⼤吃⼀惊。它⾮常有⼒地推动了计算机视觉、⾃然 语⾔处理、⾃动语⾳识别、强化学习和统计建模等多个领域的快速发展。随着这些领域的不断进 步,我们现在可以制造⾃动驾驶的汽⻋,通过短信、邮件甚⾄电话的⾃动回复系统,以及在围棋 中击败最优秀⼈类选⼿的软件。这些由深度学习带来的新⼯具也正产⽣着⼴泛的影响:它们改变 1
了电影制作和疾病诊断的⽅式,并在从天体物理学到⽣物学等各个基础科学中扮演越来越重要的 ⻆⾊。 与此同时,深度学习也给它的使⽤者们带来了独⼀⽆⼆的挑战:任何单⼀的应⽤都汇集了各学科 的知识。具体来说,应⽤深度学习需要同时理解: 1. 问题的动机和特点; 2. 将⼤量不同类型神经⽹络层通过特定⽅式组合在⼀起的模型背后的数学原理; 3. 在原始数据上拟合极复杂的深层模型的优化算法; 4. 有效训练模型、避免数值计算陷阱以及充分利⽤硬件性能所需的⼯程技能; 5. 为解决⽅案挑选合适的变量(超参数)组合的经验。 同样,我们⼏位作者也⾯临前所未有的挑战:我们需要在有限的篇幅⾥糅合深度学习的多⽅⾯知 识,从而使读者能够较快理解并应⽤深度学习技术。本书代表了我们的⼀种尝试:我们将教给读 者概念、背景知识和代码;我们将在同⼀个地⽅阐述剖析问题所需的批判性思维、解决问题所需 的数学知识,以及实现解决⽅案所需的⼯程技能。 1.1.1 包含代码、数学、⽹⻚、讨论的统⼀资源 我们在 2017年 7⽉启动了写作这本书的项⽬。当时我们需要向⽤⼾解释 Apache MXNet在那时 的新接口 Gluon。不幸的是,我们并没有找到任何⼀个资源可以同时满⾜以下⼏点需求: 1. 包含较新的⽅法和应⽤,并不断更新; 2. ⼴泛覆盖现代深度学习技术并具有⼀定的技术深度; 3. 既是严谨的教科书,⼜是包含可运⾏代码的⽣动的教程。 那时,我们在博客和 Github上找到了⼤量的演⽰特定深度学习框架(例如⽤ TensorFlow进⾏ 数值计算)或实现特定模型(例如 AlexNet、ResNet等)的⽰例代码。这些⽰例代码的⼀⼤价值 在于提供了教科书或论⽂往往省略的实现细节,⽐如数据的处理和运算的⾼效率实现。如果不了 解这些,即使能将算法倒背如流,也难以将算法应⽤到⾃⼰的项⽬中去。此外,这些⽰例代码还 使得⽤⼾能通过观察修改代码所导致的结果变化而快速验证想法、积累经验。因此,我们坚信动 ⼿实践对于学习深度学习的重要性。然而可惜的是,这些⽰例代码通常侧重于如何实现给定的⽅ 法,却忽略了有关算法设计的探究或者实现细节的解释。虽然在像 Distill这样的⽹站和某些博客 上出现了⼀些有关算法设计和实现细节的讨论,但它们常常缺少⽰例代码,并通常仅覆盖深度学 习的⼀小部分。 2 1. 引⾔
分享到:
收藏