第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
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
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
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
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
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
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 为CDH5.x设置POM文件 279
9.3.3 为HDP2.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 建立SparkMLP网络架构 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 建立LeNetCNN架构与训练 297
附录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