深度学习基础与实践.pdf [JAVA]
深度学习基础与实践.pdf [JAVA]
PDF: https://github.com/jash-git/Jash-good-idea-20200304-001
所有代码示例:https://github.com/deeplearning4j/oreilly-book-dl4j-examples
第1 章 机器学习回顾 ………………………………………………………………………………………………………..1
1.1 学习的机器 ………………………………………………………………………………………………………………..1
1.1.1 机器如何学习 ………………………………………………………………………………………………….2
1.1.2 生物学的启发 ………………………………………………………………………………………………….4
1.1.3 什么是深度学习 ………………………………………………………………………………………………5
1.1.4 钻进奇幻的兔子洞 …………………………………………………………………………………………..5
1.2 提出问题 ……………………………………………………………………………………………………………………6
1.3 机器学习背后的数学:线性代数 …………………………………………………………………………………7
1.3.1 标量 ……………………………………………………………………………………………………………….7
1.3.2 向量 ……………………………………………………………………………………………………………….7
1.3.3 矩阵 ……………………………………………………………………………………………………………….8
1.3.4 张量 ……………………………………………………………………………………………………………….8
1.3.5 超平面 …………………………………………………………………………………………………………….8
1.3.6 相关数学运算 ………………………………………………………………………………………………….8
1.3.7 将数据转换成向量 …………………………………………………………………………………………..9
1.3.8 方程组求解 ……………………………………………………………………………………………………10
1.4 机器学习背后的数学:统计学 …………………………………………………………………………………..12
1.4.1 概率 ………………………………………………………………………………………………………………12
1.4.2 条件概率 ……………………………………………………………………………………………………….14
1.4.3 后验概率 ……………………………………………………………………………………………………….14
1.4.4 分布 ………………………………………………………………………………………………………………15
1.4.5 样本与总体 ……………………………………………………………………………………………………16
1.4.6 重采样方法 ……………………………………………………………………………………………………16
vi | 目录
1.4.7 选择性偏差 ……………………………………………………………………………………………………17
1.4.8 似然 ………………………………………………………………………………………………………………17
1.5 机器学习如何工作 …………………………………………………………………………………………………….17
1.5.1 回归 ………………………………………………………………………………………………………………17
1.5.2 分类 ………………………………………………………………………………………………………………19
1.5.3 聚类 ………………………………………………………………………………………………………………19
1.5.4 欠拟合与过拟合 …………………………………………………………………………………………….20
1.5.5 优化 ………………………………………………………………………………………………………………20
1.5.6 凸优化 …………………………………………………………………………………………………………..21
1.5.7 梯度下降 ……………………………………………………………………………………………………….22
1.5.8 SGD ………………………………………………………………………………………………………………24
1.5.9 拟牛顿优化方法 …………………………………………………………………………………………….24
1.5.10 生成模型与判别模型 ……………………………………………………………………………………25
1.6 逻辑回归 ………………………………………………………………………………………………………………….25
1.6.1 逻辑函数 ……………………………………………………………………………………………………….26
1.6.2 理解逻辑回归的输出 ……………………………………………………………………………………..26
1.7 评估模型 ………………………………………………………………………………………………………………….27
1.8 建立对机器学习的理解 ……………………………………………………………………………………………..30
第2 章 神经网络基础与深度学习 …………………………………………………………………………………..31
2.1 神经网络 ………………………………………………………………………………………………………………….31
2.1.1 生物神经元 ……………………………………………………………………………………………………33
2.1.2 感知器 …………………………………………………………………………………………………………..34
2.1.3 多层前馈网络 ………………………………………………………………………………………………..37
2.2 训练神经网络 ……………………………………………………………………………………………………………42
2.3 激活函数 ………………………………………………………………………………………………………………….49
2.3.1 线性函数 ……………………………………………………………………………………………………….49
2.3.2 sigmoid 函数…………………………………………………………………………………………………..49
2.3.3 tanh 函数………………………………………………………………………………………………………..50
2.3.4 hard tanh 函数 ………………………………………………………………………………………………..51
2.3.5 softmax 函数…………………………………………………………………………………………………..51
2.3.6 修正线性函数 ………………………………………………………………………………………………..51
2.4 损失函数 ………………………………………………………………………………………………………………….53
2.4.1 损失函数的符号 …………………………………………………………………………………………….53
2.4.2 用于回归的损失函数 ……………………………………………………………………………………..54
2.4.3 用于分类的损失函数 ……………………………………………………………………………………..56
2.4.4 用于重建的损失函数 ……………………………………………………………………………………..57
2.5 超参数 ……………………………………………………………………………………………………………………..58
2.5.1 学习率 …………………………………………………………………………………………………………..58
2.5.2 正则化 …………………………………………………………………………………………………………..59
目录 | vii
2.5.3 动量 ………………………………………………………………………………………………………………59
2.5.4 稀疏 ………………………………………………………………………………………………………………59
第3 章 深度网络基础 ………………………………………………………………………………………………………60
3.1 定义深度学习 ……………………………………………………………………………………………………………60
3.1.1 什么是深度学习 …………………………………………………………………………………………….60
3.1.2 本章结构 ……………………………………………………………………………………………………….67
3.2 深度网络的通用构建原则 ………………………………………………………………………………………….67
3.2.1 参数 ………………………………………………………………………………………………………………68
3.2.2 层 …………………………………………………………………………………………………………………68
3.2.3 激活函数 ……………………………………………………………………………………………………….69
3.2.4 损失函数 ……………………………………………………………………………………………………….70
3.2.5 优化算法 ……………………………………………………………………………………………………….71
3.2.6 超参数 …………………………………………………………………………………………………………..73
3.2.7 小结 ………………………………………………………………………………………………………………77
3.3 深度网络的构造块 …………………………………………………………………………………………………….77
3.3.1 RBM……………………………………………………………………………………………………………..78
3.3.2 自动编码器 ……………………………………………………………………………………………………82
3.3.3 变分自动编码器 …………………………………………………………………………………………….83
第4 章 深度网络的主要架构…………………………………………………………………………………………..85
4.1 UPN …………………………………………………………………………………………………………………………85
4.1.1 DBN ………………………………………………………………………………………………………………86
4.1.2 GAN ………………………………………………………………………………………………………………88
4.2 CNN ………………………………………………………………………………………………………………………..91
4.2.1 生物学启发 ……………………………………………………………………………………………………92
4.2.2 思路 ………………………………………………………………………………………………………………92
4.2.3 CNN 架构概要 ……………………………………………………………………………………………….93
4.2.4 输入层 …………………………………………………………………………………………………………..94
4.2.5 卷积层 …………………………………………………………………………………………………………..95
4.2.6 池化层 …………………………………………………………………………………………………………101
4.2.7 全连接层 ……………………………………………………………………………………………………..102
4.2.8 CNN 的其他应用 ………………………………………………………………………………………….102
4.2.9 CNN 列表 …………………………………………………………………………………………………….103
4.2.10 小结 …………………………………………………………………………………………………………..103
4.3 RNN ………………………………………………………………………………………………………………………103
4.3.1 时间维度建模 ………………………………………………………………………………………………104
4.3.2 三维空间输入 ………………………………………………………………………………………………105
4.3.3 为什么不是马尔可夫模型 …………………………………………………………………………….107
4.3.4 常见的RNN 架构 …………………………………………………………………………………………107
viii | 目录
4.3.5 LSTM 网络 …………………………………………………………………………………………………..108
4.3.6 特定领域应用与混合网络 …………………………………………………………………………….114
4.4 递归神经网络 ………………………………………………………………………………………………………….115
4.4.1 网络架构 ……………………………………………………………………………………………………..115
4.4.2 递归神经网络的变体 ……………………………………………………………………………………115
4.4.3 递归神经网络的应用 ……………………………………………………………………………………116
4.5 小结与讨论 ……………………………………………………………………………………………………………..116
4.5.1 深度学习会使其他算法过时吗 ……………………………………………………………………..116
4.5.2 不同的问题有不同的最佳方法 ……………………………………………………………………..117
4.5.3 什么时候需要深度学习 ………………………………………………………………………………..117
第5 章 建立深度网络 …………………………………………………………………………………………………….118
5.1 将深度网络与适合的问题匹配 …………………………………………………………………………………118
5.1.1 列式数据与多层感知器 ………………………………………………………………………………..119
5.1.2 图像与CNN …………………………………………………………………………………………………119
5.1.3 时间序列与RNN ………………………………………………………………………………………….120
5.1.4 使用混合网络 ………………………………………………………………………………………………121
5.2 DL4J 工具套件 ………………………………………………………………………………………………………..121
5.2.1 向量化与DataVec …………………………………………………………………………………………121
5.2.2 运行时与ND4J …………………………………………………………………………………………….121
5.3 DL4J API 的基本概念 ………………………………………………………………………………………………123
5.3.1 加载与保存模型 …………………………………………………………………………………………..123
5.3.2 为模型获取输入 …………………………………………………………………………………………..124
5.3.3 建立模型架构 ………………………………………………………………………………………………124
5.3.4 训练与评估 ………………………………………………………………………………………………….125
5.4 使用多层感知器网络对CSV 数据建模 …………………………………………………………………….126
5.4.1 建立输入数据 ………………………………………………………………………………………………128
5.4.2 确定网络架构 ………………………………………………………………………………………………128
5.4.3 训练模型 ……………………………………………………………………………………………………..131
5.4.4 评估模型 ……………………………………………………………………………………………………..131
5.5 利用CNN 对手写图像建模 ……………………………………………………………………………………..132
5.5.1 使用LeNet CNN 的Java 代码示例 ………………………………………………………………..132
5.5.2 加载及向量化输入图像 ………………………………………………………………………………..134
5.5.3 DL4J 中用于LeNet 的网络架构…………………………………………………………………….135
5.5.4 训练CNN 网络 …………………………………………………………………………………………….138
5.6 基于RNN 的序列数据建模 ……………………………………………………………………………………..139
5.6.1 通过LSTM 生成莎士比亚风格作品 ………………………………………………………………139
5.6.2 基于LSTM 的传感器时间序列分类 ………………………………………………………………146
5.7 利用自动编码器检测异常 ………………………………………………………………………………………..152
目录 | ix
5.7.1 自动编码器示例的Java 代码列表 …………………………………………………………………152
5.7.2 设置输入数据 ………………………………………………………………………………………………156
5.7.3 自动编码器的网络结构与训练 ……………………………………………………………………..156
5.7.4 评估模型 ……………………………………………………………………………………………………..157
5.8 使用变分自动编码器重建MNIST 数字 ……………………………………………………………………158
5.8.1 重建MNIST 数字的代码列表 ……………………………………………………………………….158
5.8.2 VAE 模型的检验 …………………………………………………………………………………………..161
5.9 深度学习在自然语言处理中的应用 ………………………………………………………………………….163
5.9.1 使用Word2Vec 的学习词嵌入 ……………………………………………………………………….163
5.9.2 具有段落向量的句子的分布式表示 ………………………………………………………………168
5.9.3 使用段落向量进行文档分类 …………………………………………………………………………171
第6 章 深度网络调优 …………………………………………………………………………………………………….176
6.1 深度网络调优的基本概念 ………………………………………………………………………………………..176
6.1.1 建立深度网络的思路 ……………………………………………………………………………………177
6.1.2 构建思路的步骤 …………………………………………………………………………………………..178
6.2 匹配输入数据与网络架构 ………………………………………………………………………………………..178
6.3 模型目标与输出层的关系 ………………………………………………………………………………………..180
6.3.1 回归模型的输出层 ……………………………………………………………………………………….180
6.3.2 分类模型的输出层 ……………………………………………………………………………………….180
6.4 处理层的数量、参数的数量和存储器 ………………………………………………………………………182
6.4.1 前馈多层神经网络 ……………………………………………………………………………………….183
6.4.2 控制层和参数的数量 ……………………………………………………………………………………183
6.4.3 估计网络内存需求 ……………………………………………………………………………………….185
6.5 权重初始化策略 ………………………………………………………………………………………………………187
6.6 使用激活函数 ………………………………………………………………………………………………………….188
6.7 应用损失函数 ………………………………………………………………………………………………………….190
6.8 理解学习率 ……………………………………………………………………………………………………………..191
6.8.1 使用参数更新比率 ……………………………………………………………………………………….192
6.8.2 关于学习率的具体建议 ………………………………………………………………………………..193
6.9 稀疏性对学习的影响 ……………………………………………………………………………………………….195
6.10 优化方法的应用 …………………………………………………………………………………………………….195
6.11 使用并行化和GPU 更快地进行训练 ………………………………………………………………………197
6.11.1 在线学习与并行迭代算法 ………………………………………………………………………….197
6.11.2 DL4J 中的SGD 并行 …………………………………………………………………………………199
6.11.3 GPU ………………………………………………………………………………………………………….201
6.12 控制迭代和小批量的大小 ………………………………………………………………………………………202
6.13 如何使用正则化 …………………………………………………………………………………………………….203
6.13.1 使用先验函数正则化 …………………………………………………………………………………204
x | 目录
6.13.2 最大范数正则化 ………………………………………………………………………………………..204
6.13.3 Dropout ……………………………………………………………………………………………………..205
6.13.4 其他正则化事项 ………………………………………………………………………………………..206
6.14 处理类别不平衡 …………………………………………………………………………………………………….207
6.14.1 类别采样方法 ……………………………………………………………………………………………208
6.14.2 加权损失函数 ……………………………………………………………………………………………208
6.15 处理过拟合 ……………………………………………………………………………………………………………209
6.16 通过调优UI 来使用网络统计信息 ………………………………………………………………………….210
6.16.1 检测不佳的权重初始化 ……………………………………………………………………………..212
6.16.2 检测非混洗数据 ………………………………………………………………………………………..213
6.16.3 检测正则化的问题 …………………………………………………………………………………….214
第7 章 调优特定的深度网络架构 …………………………………………………………………………………217
7.1 CNN ………………………………………………………………………………………………………………………217
7.1.1 卷积架构常见的模式 ……………………………………………………………………………………218
7.1.2 配置卷积层 ………………………………………………………………………………………………….220
7.1.3 配置池化层 ………………………………………………………………………………………………….224
7.1.4 迁移学习 ……………………………………………………………………………………………………..225
7.2 RNN ………………………………………………………………………………………………………………………226
7.2.1 网络输入数据和输入层 ………………………………………………………………………………..227
7.2.2 输出层与RnnOutputLayer …………………………………………………………………………….228
7.2.3 训练网络 ……………………………………………………………………………………………………..228
7.2.4 调试LSTM 的常见问题 ………………………………………………………………………………..230
7.2.5 填充与掩码 ………………………………………………………………………………………………….230
7.2.6 掩码评估与评分 …………………………………………………………………………………………..231
7.2.7 循环网络架构的变体 ……………………………………………………………………………………232
7.3 受限玻尔兹曼机 ………………………………………………………………………………………………………232
7.3.1 隐藏层神经元与可用信息建模 ……………………………………………………………………..233
7.3.2 使用不同的单元 …………………………………………………………………………………………..234
7.3.3 用RBM 正则化…………………………………………………………………………………………….234
7.4 DBN ………………………………………………………………………………………………………………………235
7.4.1 利用动量 ……………………………………………………………………………………………………..235
7.4.2 使用正则化 ………………………………………………………………………………………………….235
7.4.3 确定隐藏单元的数量 ……………………………………………………………………………………236
第8 章 向量化 ……………………………………………………………………………………………………………….237
8.1 机器学习中的向量化方法 ………………………………………………………………………………………..237
8.1.1 为什么需要将数据向量化 …………………………………………………………………………….238
8.1.2 处理列式原始数据属性的策略 ……………………………………………………………………..240
目录 | xi
8.1.3 特征工程与规范化技术 ………………………………………………………………………………..241
8.2 使用DataVec 进行ETL 和向量化 …………………………………………………………………………….247
8.3 将图像数据向量化 …………………………………………………………………………………………………..248
8.3.1 DL4J 中的图像数据表示……………………………………………………………………………….248
8.3.2 使用DataVec 将图像数据与向量规范化 ………………………………………………………..250
8.4 将序列数据向量化 …………………………………………………………………………………………………..251
8.4.1 序列数据源的主要变体 ………………………………………………………………………………..251
8.4.2 使用DataVec 将序列数据向量化 …………………………………………………………………..252
8.5 将文本向量化 ………………………………………………………………………………………………………….256
8.5.1 词袋 …………………………………………………………………………………………………………….257
8.5.2 TF-IDF …………………………………………………………………………………………………………258
8.5.3 Word2Vec 与VSM 的比较 …………………………………………………………………………….261
8.6 使用图形 ………………………………………………………………………………………………………………..261
第9 章 在Spark 上使用深度学习和DL4J ………………………………………………………………….262
9.1 在Spark 和Hadoop 上使用DL4J 的介绍 ………………………………………………………………….262
9.2 配置和调优Spark 运行…………………………………………………………………………………………….266
9.2.1 在Mesos 上运行Spark ………………………………………………………………………………….267
9.2.2 在YARN 中执行Spark …………………………………………………………………………………268
9.2.3 Spark 调优简要介绍 ……………………………………………………………………………………..269
9.2.4 对在Spark 上运行的DL4J 作业调优 …………………………………………………………….273
9.3 为Spark 和DL4J 建立Maven 项目对象模型 …………………………………………………………….274
9.3.1 一个pom.xml 文件依赖模板 …………………………………………………………………………275
9.3.2 为CDH 5.x 设置POM 文件 ………………………………………………………………………….279
9.3.3 为HDP 2.4 创建POM 文件 …………………………………………………………………………..279
9.4 Spark 和Hadoop 故障排除 ……………………………………………………………………………………….280
9.5 DL4J 在Spark 上的并行执行 ……………………………………………………………………………………281
9.6 Spark 平台上的DL4J API 最佳实践 …………………………………………………………………………284
9.7 多层感知器的Spark 示例…………………………………………………………………………………………285
9.7.1 建立Spark MLP 网络架构 …………………………………………………………………………….288
9.7.2 分布式训练与模型评估 ………………………………………………………………………………..289
9.7.3 构建和执行DL4J Spark 作业 ………………………………………………………………………..290
9.8 使用Spark 和LSTM 生成莎士比亚作品 …………………………………………………………………..290
9.8.1 建立LSTM 网络架构 ……………………………………………………………………………………292
9.8.2 训练、跟踪进度及理解结果 …………………………………………………………………………293
9.9 基于Spark 上的CNN 进行MNIST 建模 …………………………………………………………………..294
9.9.1 配置Spark 作业和加载MNIST 数据 ……………………………………………………………..296
9.9.2 建立LeNet CNN 架构与训练 ………………………………………………………………………..297
xii | 目录
附录A 人工智能是什么 …………………………………………………………………………………………………299
附录B RL4J 与强化学习 ………………………………………………………………………………………………307
附录C 每个人都需要了解的数字 …………………………………………………………………………………325
附录D 神经网络和反向传播:数学方法 ……………………………………………………………………..326
附录E 使用ND4J API …………………………………………………………………………………………………..330
附录F 使用DataVec …………………………………………………………………………………………………….341
附录G 从源代码构建DL4J ………………………………………………………………………………………….350
附录H 设置DL4J 项目………………………………………………………………………………………………….352
附录I 为DL4J 项目设置GPU ……………………………………………………………………………………..356
附录J 解决DL4J 安装上的问题 …………………………………………………………………………………..359
关于作者 ……………………………………………………………………………………………………………………………365
关于封面 ……………………………………………………………………………………………………………………………365
——–
第1 章 機器學習回顧 ………………………………………………………………………………………………………..1
1.1 學習的機器 ………………………………………………………………………………………………………………..1
1.1.1 機器如何學習 ………………………………………………………………………………………………….2
1.1.2 生物學的啟發 ………………………………………………………………………………………………….4
1.1.3 什麼是深度學習 ………………………………………………………………………………………………5
1.1.4 鑽進奇幻的兔子洞 …………………………………………………………………………………………..5
1.2 提出問題 ……………………………………………………………………………………………………………………6
1.3 機器學習背後的數學:線性代數 …………………………………………………………………………………7
1.3.1 標量 ……………………………………………………………………………………………………………….7
1.3.2 向量 ……………………………………………………………………………………………………………….7
1.3.3 矩陣 ……………………………………………………………………………………………………………….8
1.3.4 張量 ……………………………………………………………………………………………………………….8
1.3.5 超平面 …………………………………………………………………………………………………………….8
1.3.6 相關數學運算 ………………………………………………………………………………………………….8
1.3.7 將資料轉換成向量 …………………………………………………………………………………………..9
1.3.8 方程組求解 ……………………………………………………………………………………………………10
1.4 機器學習背後的數學:統計學 …………………………………………………………………………………..12
1.4.1 概率 ………………………………………………………………………………………………………………12
1.4.2 條件概率 ……………………………………………………………………………………………………….14
1.4.3 後驗概率 ……………………………………………………………………………………………………….14
1.4.4 分佈 ………………………………………………………………………………………………………………15
1.4.5 樣本與總體 ……………………………………………………………………………………………………16
1.4.6 重採樣方法 ……………………………………………………………………………………………………16
vi | 目錄
1.4.7 選擇性偏差 ……………………………………………………………………………………………………17
1.4.8 似然 ………………………………………………………………………………………………………………17
1.5 機器學習如何工作 …………………………………………………………………………………………………….17
1.5.1 回歸 ………………………………………………………………………………………………………………17
1.5.2 分類 ………………………………………………………………………………………………………………19
1.5.3 聚類 ………………………………………………………………………………………………………………19
1.5.4 欠擬合與過擬合 …………………………………………………………………………………………….20
1.5.5 優化 ………………………………………………………………………………………………………………20
1.5.6 凸優化 …………………………………………………………………………………………………………..21
1.5.7 梯度下降 ……………………………………………………………………………………………………….22
1.5.8 SGD ………………………………………………………………………………………………………………24
1.5.9 擬牛頓優化方法 …………………………………………………………………………………………….24
1.5.10 生成模型與判別模型 ……………………………………………………………………………………25
1.6 邏輯回歸 ………………………………………………………………………………………………………………….25
1.6.1 邏輯函數 ……………………………………………………………………………………………………….26
1.6.2 理解邏輯回歸的輸出 ……………………………………………………………………………………..26
1.7 評估模型 ………………………………………………………………………………………………………………….27
1.8 建立對機器學習的理解 ……………………………………………………………………………………………..30
第2 章 神經網路基礎與深度學習 …………………………………………………………………………………..31
2.1 神經網路 ………………………………………………………………………………………………………………….31
2.1.1 生物神經元 ……………………………………………………………………………………………………33
2.1.2 感知器 …………………………………………………………………………………………………………..34
2.1.3 多層前饋網路 ………………………………………………………………………………………………..37
2.2 訓練神經網路 ……………………………………………………………………………………………………………42
2.3 啟動函數 ………………………………………………………………………………………………………………….49
2.3.1 線性函數 ……………………………………………………………………………………………………….49
2.3.2 sigmoid 函數…………………………………………………………………………………………………..49
2.3.3 tanh 函數………………………………………………………………………………………………………..50
2.3.4 hard tanh 函數 ………………………………………………………………………………………………..51
2.3.5 softmax 函數…………………………………………………………………………………………………..51
2.3.6 修正線性函數 ………………………………………………………………………………………………..51
2.4 損失函數 ………………………………………………………………………………………………………………….53
2.4.1 損失函數的符號 …………………………………………………………………………………………….53
2.4.2 用於回歸的損失函數 ……………………………………………………………………………………..54
2.4.3 用於分類的損失函數 ……………………………………………………………………………………..56
2.4.4 用於重建的損失函數 ……………………………………………………………………………………..57
2.5 超參數 ……………………………………………………………………………………………………………………..58
2.5.1 學習率 …………………………………………………………………………………………………………..58
2.5.2 正則化 …………………………………………………………………………………………………………..59
目錄 | vii
2.5.3 動量 ………………………………………………………………………………………………………………59
2.5.4 稀疏 ………………………………………………………………………………………………………………59
第3 章 深度網路基礎 ………………………………………………………………………………………………………60
3.1 定義深度學習 ……………………………………………………………………………………………………………60
3.1.1 什麼是深度學習 …………………………………………………………………………………………….60
3.1.2 本章結構 ……………………………………………………………………………………………………….67
3.2 深度網路的通用構建原則 ………………………………………………………………………………………….67
3.2.1 參數 ………………………………………………………………………………………………………………68
3.2.2 層 …………………………………………………………………………………………………………………68
3.2.3 啟動函數 ……………………………………………………………………………………………………….69
3.2.4 損失函數 ……………………………………………………………………………………………………….70
3.2.5 優化演算法 ……………………………………………………………………………………………………….71
3.2.6 超參數 …………………………………………………………………………………………………………..73
3.2.7 小結 ………………………………………………………………………………………………………………77
3.3 深度網路的構造塊 …………………………………………………………………………………………………….77
3.3.1 RBM……………………………………………………………………………………………………………..78
3.3.2 自動編碼器 ……………………………………………………………………………………………………82
3.3.3 變分自動編碼器 …………………………………………………………………………………………….83
第4 章 深度網路的主要架構…………………………………………………………………………………………..85
4.1 UPN …………………………………………………………………………………………………………………………85
4.1.1 DBN ………………………………………………………………………………………………………………86
4.1.2 GAN ………………………………………………………………………………………………………………88
4.2 CNN ………………………………………………………………………………………………………………………..91
4.2.1 生物學啟發 ……………………………………………………………………………………………………92
4.2.2 思路 ………………………………………………………………………………………………………………92
4.2.3 CNN 架構概要 ……………………………………………………………………………………………….93
4.2.4 輸入層 …………………………………………………………………………………………………………..94
4.2.5 卷積層 …………………………………………………………………………………………………………..95
4.2.6 池化層 …………………………………………………………………………………………………………101
4.2.7 全連接層 ……………………………………………………………………………………………………..102
4.2.8 CNN 的其他應用 ………………………………………………………………………………………….102
4.2.9 CNN 列表 …………………………………………………………………………………………………….103
4.2.10 小結 …………………………………………………………………………………………………………..103
4.3 RNN ………………………………………………………………………………………………………………………103
4.3.1 時間維度建模 ………………………………………………………………………………………………104
4.3.2 三維空間輸入 ………………………………………………………………………………………………105
4.3.3 為什麼不是瑪律可夫模型 …………………………………………………………………………….107
4.3.4 常見的RNN 架構 …………………………………………………………………………………………107
viii | 目錄
4.3.5 LSTM 網路 …………………………………………………………………………………………………..108
4.3.6 特定領域應用與混合網路 …………………………………………………………………………….114
4.4 遞迴神經網路 ………………………………………………………………………………………………………….115
4.4.1 網路架構 ……………………………………………………………………………………………………..115
4.4.2 遞迴神經網路的變體 ……………………………………………………………………………………115
4.4.3 遞迴神經網路的應用 ……………………………………………………………………………………116
4.5 小結與討論 ……………………………………………………………………………………………………………..116
4.5.1 深度學習會使其他演算法過時嗎 ……………………………………………………………………..116
4.5.2 不同的問題有不同的最佳方法 ……………………………………………………………………..117
4.5.3 什麼時候需要深度學習 ………………………………………………………………………………..117
第5 章 建立深度網路 …………………………………………………………………………………………………….118
5.1 將深度網路與適合的問題匹配 …………………………………………………………………………………118
5.1.1 列式數據與多層感知器 ………………………………………………………………………………..119
5.1.2 圖像與CNN …………………………………………………………………………………………………119
5.1.3 時間序列與RNN ………………………………………………………………………………………….120
5.1.4 使用混合網路 ………………………………………………………………………………………………121
5.2 DL4J 工具套件 ………………………………………………………………………………………………………..121
5.2.1 向量化與DataVec …………………………………………………………………………………………121
5.2.2 運行時與ND4J …………………………………………………………………………………………….121
5.3 DL4J API 的基本概念 ………………………………………………………………………………………………123
5.3.1 載入與保存模型 …………………………………………………………………………………………..123
5.3.2 為模型獲取輸入 …………………………………………………………………………………………..124
5.3.3 建立模型架構 ………………………………………………………………………………………………124
5.3.4 訓練與評估 ………………………………………………………………………………………………….125
5.4 使用多層感知器網路對CSV 資料建模 …………………………………………………………………….126
5.4.1 建立輸入資料 ………………………………………………………………………………………………128
5.4.2 確定網路架構 ………………………………………………………………………………………………128
5.4.3 訓練模型 ……………………………………………………………………………………………………..131
5.4.4 評估模型 ……………………………………………………………………………………………………..131
5.5 利用CNN 對手寫圖像建模 ……………………………………………………………………………………..132
5.5.1 使用LeNet CNN 的Java 代碼示例 ………………………………………………………………..132
5.5.2 載入及向量化輸入圖像 ………………………………………………………………………………..134
5.5.3 DL4J 中用於LeNet 的網路架構…………………………………………………………………….135
5.5.4 訓練CNN 網路 …………………………………………………………………………………………….138
5.6 基於RNN 的序列資料建模 ……………………………………………………………………………………..139
5.6.1 通過LSTM 生成莎士比亞風格作品 ………………………………………………………………139
5.6.2 基於LSTM 的感測器時間序列分類 ………………………………………………………………146
5.7 利用自動編碼器檢測異常 ………………………………………………………………………………………..152
目錄 | ix
5.7.1 自動編碼器示例的Java 代碼列表 …………………………………………………………………152
5.7.2 設置輸入資料 ………………………………………………………………………………………………156
5.7.3 自動編碼器的網路結構與訓練 ……………………………………………………………………..156
5.7.4 評估模型 ……………………………………………………………………………………………………..157
5.8 使用變分自動編碼器重建MNIST 數位 ……………………………………………………………………158
5.8.1 重建MNIST 數字的代碼清單 ……………………………………………………………………….158
5.8.2 VAE 模型的檢驗 …………………………………………………………………………………………..161
5.9 深度學習在自然語言處理中的應用 ………………………………………………………………………….163
5.9.1 使用Word2Vec 的學習詞嵌入 ……………………………………………………………………….163
5.9.2 具有段落向量的句子的分散式表示 ………………………………………………………………168
5.9.3 使用段落向量進行文檔分類 …………………………………………………………………………171
第6 章 深度網路調優 …………………………………………………………………………………………………….176
6.1 深度網路調優的基本概念 ………………………………………………………………………………………..176
6.1.1 建立深度網路的思路 ……………………………………………………………………………………177
6.1.2 構建思路的步驟 …………………………………………………………………………………………..178
6.2 匹配輸入資料與網路架構 ………………………………………………………………………………………..178
6.3 模型目標與輸出層的關係 ………………………………………………………………………………………..180
6.3.1 回歸模型的輸出層 ……………………………………………………………………………………….180
6.3.2 分類模型的輸出層 ……………………………………………………………………………………….180
6.4 處理層的數量、參數的數量和記憶體 ………………………………………………………………………182
6.4.1 前饋多層神經網路 ……………………………………………………………………………………….183
6.4.2 控制層和參數的數量 ……………………………………………………………………………………183
6.4.3 估計網路記憶體需求 ……………………………………………………………………………………….185
6.5 權重初始化策略 ………………………………………………………………………………………………………187
6.6 使用啟動函數 ………………………………………………………………………………………………………….188
6.7 應用損失函數 ………………………………………………………………………………………………………….190
6.8 理解學習率 ……………………………………………………………………………………………………………..191
6.8.1 使用參數更新比率 ……………………………………………………………………………………….192
6.8.2 關於學習率的具體建議 ………………………………………………………………………………..193
6.9 稀疏性對學習的影響 ……………………………………………………………………………………………….195
6.10 優化方法的應用 …………………………………………………………………………………………………….195
6.11 使用並行化和GPU 更快地進行訓練 ………………………………………………………………………197
6.11.1 線上學習與並行反覆運算演算法 ………………………………………………………………………….197
6.11.2 DL4J 中的SGD 並行 …………………………………………………………………………………199
6.11.3 GPU ………………………………………………………………………………………………………….201
6.12 控制反覆運算和小批量的大小 ………………………………………………………………………………………202
6.13 如何使用正則化 …………………………………………………………………………………………………….203
6.13.1 使用先驗函數正則化 …………………………………………………………………………………204
x | 目錄
6.13.2 最大範數正則化 ………………………………………………………………………………………..204
6.13.3 Dropout ……………………………………………………………………………………………………..205
6.13.4 其他正則化事項 ………………………………………………………………………………………..206
6.14 處理類別不平衡 …………………………………………………………………………………………………….207
6.14.1 類別採樣方法 ……………………………………………………………………………………………208
6.14.2 加權損失函數 ……………………………………………………………………………………………208
6.15 處理過擬合 ……………………………………………………………………………………………………………209
6.16 通過調優UI 來使用網路統計資訊 ………………………………………………………………………….210
6.16.1 檢測不佳的權重初始化 ……………………………………………………………………………..212
6.16.2 檢測非混洗資料 ………………………………………………………………………………………..213
6.16.3 檢測正則化的問題 …………………………………………………………………………………….214
第7 章 調優特定的深度網路架構 …………………………………………………………………………………217
7.1 CNN ………………………………………………………………………………………………………………………217
7.1.1 卷積架構常見的模式 ……………………………………………………………………………………218
7.1.2 配置卷積層 ………………………………………………………………………………………………….220
7.1.3 配置池化層 ………………………………………………………………………………………………….224
7.1.4 遷移學習 ……………………………………………………………………………………………………..225
7.2 RNN ………………………………………………………………………………………………………………………226
7.2.1 網路輸入資料和輸入層 ………………………………………………………………………………..227
7.2.2 輸出層與RnnOutputLayer …………………………………………………………………………….228
7.2.3 訓練網路 ……………………………………………………………………………………………………..228
7.2.4 調試LSTM 的常見問題 ………………………………………………………………………………..230
7.2.5 填充與遮罩 ………………………………………………………………………………………………….230
7.2.6 遮罩評估與評分 …………………………………………………………………………………………..231
7.2.7 迴圈網路架構的變體 ……………………………………………………………………………………232
7.3 受限玻爾茲曼機 ………………………………………………………………………………………………………232
7.3.1 隱藏層神經元與可用資訊建模 ……………………………………………………………………..233
7.3.2 使用不同的單元 …………………………………………………………………………………………..234
7.3.3 用RBM 正則化…………………………………………………………………………………………….234
7.4 DBN ………………………………………………………………………………………………………………………235
7.4.1 利用動量 ……………………………………………………………………………………………………..235
7.4.2 使用正則化 ………………………………………………………………………………………………….235
7.4.3 確定隱藏單元的數量 ……………………………………………………………………………………236
第8 章 向量化 ……………………………………………………………………………………………………………….237
8.1 機器學習中的向量化方法 ………………………………………………………………………………………..237
8.1.1 為什麼需要將資料向量化 …………………………………………………………………………….238
8.1.2 處理列式原始資料屬性的策略 ……………………………………………………………………..240
目錄 | xi
8.1.3 特徵工程與規範化技術 ………………………………………………………………………………..241
8.2 使用DataVec 進行ETL 和向量化 …………………………………………………………………………….247
8.3 將圖像資料向量化 …………………………………………………………………………………………………..248
8.3.1 DL4J 中的圖像資料表示……………………………………………………………………………….248
8.3.2 使用DataVec 將圖像資料與向量規範化 ………………………………………………………..250
8.4 將序列資料向量化 …………………………………………………………………………………………………..251
8.4.1 序列資料來源的主要變體 ………………………………………………………………………………..251
8.4.2 使用DataVec 將序列資料向量化 …………………………………………………………………..252
8.5 將文本向量化 ………………………………………………………………………………………………………….256
8.5.1 詞袋 …………………………………………………………………………………………………………….257
8.5.2 TF-IDF …………………………………………………………………………………………………………258
8.5.3 Word2Vec 與VSM 的比較 …………………………………………………………………………….261
8.6 使用圖形 ………………………………………………………………………………………………………………..261
第9 章 在Spark 上使用深度學習和DL4J ………………………………………………………………….262
9.1 在Spark 和Hadoop 上使用DL4J 的介紹 ………………………………………………………………….262
9.2 配置和調優Spark 運行…………………………………………………………………………………………….266
9.2.1 在Mesos 上運行Spark ………………………………………………………………………………….267
9.2.2 在YARN 中執行Spark …………………………………………………………………………………268
9.2.3 Spark 調優簡要介紹 ……………………………………………………………………………………..269
9.2.4 對在Spark 上運行的DL4J 作業調優 …………………………………………………………….273
9.3 為Spark 和DL4J 建立Maven 專案物件模型 …………………………………………………………….274
9.3.1 一個pom.xml 檔依賴範本 …………………………………………………………………………275
9.3.2 為CDH 5.x 設置POM 檔 ………………………………………………………………………….279
9.3.3 為HDP 2.4 創建POM 文件 …………………………………………………………………………..279
9.4 Spark 和Hadoop 故障排除 ……………………………………………………………………………………….280
9.5 DL4J 在Spark 上的並存執行 ……………………………………………………………………………………281
9.6 Spark 平臺上的DL4J API 最佳實踐 …………………………………………………………………………284
9.7 多層感知器的Spark 示例…………………………………………………………………………………………285
9.7.1 建立Spark MLP 網路架構 …………………………………………………………………………….288
9.7.2 分散式訓練與模型評估 ………………………………………………………………………………..289
9.7.3 構建和執行DL4J Spark 作業 ………………………………………………………………………..290
9.8 使用Spark 和LSTM 生成莎士比亞作品 …………………………………………………………………..290
9.8.1 建立LSTM 網路架構 ……………………………………………………………………………………292
9.8.2 訓練、跟蹤進度及理解結果 …………………………………………………………………………293
9.9 基於Spark 上的CNN 進行MNIST 建模 …………………………………………………………………..294
9.9.1 配置Spark 作業和載入MNIST 資料 ……………………………………………………………..296
9.9.2 建立LeNet CNN 架構與訓練 ………………………………………………………………………..297
xii | 目錄
附錄A 人工智慧是什麼 …………………………………………………………………………………………………299
附錄B RL4J 與強化學習 ………………………………………………………………………………………………307
附錄C 每個人都需要瞭解的數位 …………………………………………………………………………………325
附錄D 神經網路和反向傳播:數學方法 ……………………………………………………………………..326
附錄E 使用ND4J API …………………………………………………………………………………………………..330
附錄F 使用DataVec …………………………………………………………………………………………………….341
附錄G 從原始程式碼構建DL4J ………………………………………………………………………………………….350
附錄H 設置DL4J 專案………………………………………………………………………………………………….352
附錄I 為DL4J 專案設置GPU ……………………………………………………………………………………..356
附錄J 解決DL4J 安裝上的問題 …………………………………………………………………………………..359
關於作者 ……………………………………………………………………………………………………………………………365
關於封面 ……………………………………………………………………………………………………………………………365