书籍详情
解剖深度学习原理:从0编写深度学习库
作者:董洪伟 著
出版社:电子工业出版社
出版时间:2021-04-01
ISBN:9787121413261
定价:¥158.00
购买这本书可以去
内容简介
本书深入浅出地介绍了深度学习的基本原理和实现过程,用Python的numpy库从底层开始构建了一个深度学习库。本书在介绍基本的Python编程、微积分、概率统计知识的基础上,按照深度学习的发展脉络依次介绍了回归模型、神经网络、卷积神经网络、循环神经网络、生成对抗网络等深度学习的核心基础知识,在剖析原理的同时给出了详细的代码实现过程。这种从0开始的原理与代码实现结合的方式,可以使读者更好地理解深度学习的基本原理和流行的深度学习库的设计思想。最后,作为对照,还介绍了如何使用PyTorch深度学习库。 本书适合高校相关专业学生、对深度学习感兴趣的读者阅读。
作者简介
哈尔滨工业大学数学力学系应用数学本科、基础数学硕士,南京航空航天大学航空宇航制造工程专业博士。2008-2009年德州农工大学tamu访问学者,2016年休斯敦大学访问研究。从事过曲面造型、特征造型的算法研究和系统实现,开发过数控玻璃切割系统。在高校从事过高等数学、线性代数、概率统计、数据结构、C++编程语言、图形学、计算机网络等课程教学,目前主要研究方向:计算机图形学与计算机视觉、深度学习人工智能等。编著了《C++17从入门到精通》《Python 3从入门到实战》等书。
目录
第1章 编程和数学基础 1
1.1 Python快速入门 1
1.1.1 快速安装Python 1
1.1.2 Python基础 2
1.1.3 Python中的常见运算 5
1.1.4 Python控制语句 7
1.1.5 Python常用容器类型 10
1.1.6 Python常用函数 16
1.1.7 类和对象 22
1.1.8 Matplotlib入门 24
1.2 张量库NumPy 33
1.2.1 什么是张量 33
1.2.2 创建ndarray对象 37
1.2.3 ndarray数组的索引和切片 53
1.2.4 张量的计算 57
1.3 微积分 63
1.3.1 函数 64
1.3.2 四则运算和复合运算 66
1.3.3 极限和导数 69
1.3.4 导数的四则运算和链式法则 72
1.3.5 计算图、正向计算和反向传播求导 74
1.3.6 多变量函数的偏导数与梯度 75
1.3.7 向量值函数的导数与Jacobian矩阵 78
1.3.8 积分 83
1.4 概率基础 84
1.4.1 概率 84
1.4.2 条件概率、联合概率、全概率公式、贝叶斯公式 86
1.4.3 随机变量 88
1.4.4 离散型随机变量的概率分布 89
1.4.5 连续型随机变量的概率密度 91
1.4.6 随机变量的分布函数 93
1.4.7 期望、方差、协方差、协变矩阵 95
第2章 梯度下降法 99
2.1 函数极值的必要条件 99
2.2 梯度下降法基础 101
2.3 梯度下降法的参数优化策略 108
2.3.1 Momentum法 108
2.3.2 AdaGrad法 110
2.3.3 AdaDelta法 112
2.3.4 RMSprop法 114
2.3.5 Adam法 115
2.4 梯度验证 117
2.4.1 比较数值梯度和分析梯度 117
2.4.2 通用的数值梯度 118
2.5 分离梯度下降法与参数优化策略 119
2.5.1 参数优化器 119
2.5.2 接受参数优化器的梯度下降法 120
第3章 线性回归、逻辑回归和softmax回归 122
3.1 线性回归 122
3.1.1 餐车利润问题 122
3.1.2 机器学习与人工智能 123
3.1.3 什么是线性回归 126
3.1.4 用正规方程法求解线性回归问题 127
3.1.5 用梯度下降法求解线性回归问题 129
3.1.6 调试学习率 133
3.1.7 梯度验证 135
3.1.8 预测 135
3.1.9 多特征线性回归 136
3.2 数据的规范化 143
3.2.1 预测大坝出水量 143
3.2.2 数据的规范化过程 147
3.3 模型的评估 149
3.3.1 欠拟合和过拟合 149
3.3.2 验证集和测试集 153
3.3.3 学习曲线 155
3.3.4 偏差和方差 160
3.4 正则化 165
3.5 逻辑回归 168
3.5.1 逻辑回归基础 169
3.5.2 逻辑回归的NumPy实现 173
3.5.3 实战:鸢尾花分类的NumPy实现 178
3.6 softmax回归 180
3.6.1 spiral数据集 180
3.6.2 softmax函数 181
3.6.3 softmax回归模型 186
3.6.4 多分类交叉熵损失 188
3.6.5 通过加权和计算交叉熵损失 191
3.6.6 softmax回归的梯度计算 191
3.6.7 softmax回归的梯度下降法的实现 197
3.6.8 spiral数据集的softmax回归模型 197
3.7 批梯度下降法和随机梯度下降法 199
3.7.1 MNIST手写数字集 199
3.7.2 用部分训练样本训练逻辑回归模型 201
3.7.3 批梯度下降法 202
3.7.4 随机梯度下降法 207
第4章 神经网络 209
4.1 神经网络概述 209
4.1.1 感知机和神经元 209
4.1.2 激活函数 213
4.1.3 神经网络与深度学习 216
4.1.4 多个样本的正向计算 221
4.1.5 输出 224
4.1.6 损失函数 224
4.1.7 基于数值梯度的神经网络训练 229
4.2 反向求导 235
4.2.1 正向计算和反向求导 235
4.2.2 计算图 237
4.2.3 损失函数关于输出的梯度 239
4.2.4 2层神经网络的反向求导 242
4.2.5 2层神经网络的Python实现 247
4.2.6 任意层神经网络的反向求导 252
4.3 实现一个简单的深度学习框架 256
4.3.1 神经网络的训练过程 256
4.3.2 网络层的代码实现 257
4.3.3 网络层的梯度检验 260
4.3.4 神经网络的类 261
4.3.5 神经网络的梯度检验 263
4.3.6 基于深度学习框架的MNIST手写数字识别 266
4.3.7 改进的通用神经网络框架:分离加权和与激活函数 268
4.3.8 独立的参数优化器 276
4.3.9 fashion-mnist的分类训练 279
4.3.10 读写模型参数 282
第5章 改进神经网络性能的基本技巧 285
5.1 数据处理 285
5.1.1 数据增强 285
5.1.2 规范化 289
5.1.3 特征工程 289
5.2 参数调试 296
5.2.1 权重初始化 296
5.2.2 优化参数 301
5.3 批规范化 301
5.3.1 什么是批规范化 301
5.3.2 批规范化的反向求导 303
5.3.3 批规范化的代码实现 304
5.4 正则化 310
5.4.1 权重正则化 310
5.4.2 Dropout 312
5.4.3 早停法 316
5.5 梯度爆炸和梯度消失 317
第6章 卷积神经网络 318
6.1 卷积入门 319
6.1.1 什么是卷积 319
6.1.2 一维卷积 325
6.1.3 二维卷积 326
6.1.4 多通道输入和多通道输出 338
6.1.5 池化 341
6.2 卷积神经网络概述 344
6.2.1 全连接神经元和卷积神经元 345
6.2.2 卷积层和卷积神经网络 346
6.2.3 卷积层和池化层的反向求导及代码实现 349
6.2.4 卷积神经网络的代码实现 361
6.3 卷积的矩阵乘法 364
6.3.1 一维卷积的矩阵乘法 364
6.3.2 二维卷积的矩阵乘法 365
6.3.3 一维卷积反向求导的矩阵乘法 371
6.3.4 二维卷积反向求导的矩阵乘法 373
6.4 基于坐标索引的快速卷积 377
6.5 典型卷积神经网络结构 393
6.5.1 LeNet-5 393
6.5.2 AlexNet 394
6.5.3 VGG 395
6.5.4 残差网络 396
6.5.5 Inception网络 398
6.5.6 NiN 399
第7章 循环神经网络 403
7.1 序列问题和模型 403
7.1.1 股票价格预测问题 404
7.1.2 概率序列模型和语言模型 405
7.1.3 自回归模型 406
7.1.4 生成自回归数据 406
7.1.5 时间窗方法 408
7.1.6 时间窗采样 409
7.1.7 时间窗方法的建模和训练 409
7.1.8 长期预测和短期预测 410
7.1.9 股票价格预测的代码实现 412
7.1.10 k-gram语言模型 415
7.2 循环神经网络基础 416
7.2.1 无记忆功能的非循环神经网络 417
7.2.2 具有记忆功能的循环神经网络 418
7.3 穿过时间的反向传播 421
7.4 单层循环神经网络的实现 425
7.4.1 初始化模型参数 425
7.4.2 正向计算 425
7.4.3 损失函数 427
7.4.4 反向求导 427
7.4.5 梯度验证 429
7.4.6 梯度下降训练 432
7.4.7 序列数据的采样 433
7.4.8 序列数据的循环神经网络训练和预测 441
7.5 循环神经网络语言模型和文本的生成 448
7.5.1 字符表 448
7.5.2 字符序列样本的采样 450
7.5.3 模型的训练和预测 452
7.6 循环神经网络中的梯度爆炸和梯度消失 455
7.7 长短期记忆网络 456
7.7.1 LSTM的神经元 457
7.7.2 LSTM的反向求导 460
7.7.3 LSTM的代码实现 461
7.7.4 LSTM的变种 469
7.8 门控循环单元 470
7.8.1 门控循环单元的工作原理 470
7.8.2 门控循环单元的代码实现 472
7.9 循环神经网络的类及其实现 475
7.9.1 用类实现循环神经网络 475
7.9.2 循环神经网络单元的类实现 483
7.10 多层循环神经网络和双向循环神经网络 491
7.10.1 多层循环神经网络 491
7.10.2 多层循环神经网络的训练和预测 497
7.10.3 双向循环神经网络 500
7.11 Seq2Seq模型 506
7.11.1 机器翻译概述 507
7.11.2 Seq2Seq模型的实现 508
7.11.3 字符级的Seq2Seq模型 516
7.11.4 基于Word2Vec的Seq2Seq模型 522
7.11.5 基于词嵌入层的Seq2Seq模型 533
7.11.6 注意力机制 541
第8章 生成模型 552
8.1 生成模型概述 552
8.2 自动编码器 556
8.2.1 什么是自动编码器 557
8.2.2 稀疏编码器 559
8.2.3 自动编码器的代码实现 560
8.3 变分自动编码器 563
8.3.1 什么是变分自动编码器 563
8.3.2 变分自动编码器的损失函数 564
8.3.3 变分自动编码器的参数重采样 565
8.3.4 变分自动编码器的反向求导 565
8.3.5 变分自动编码器的代码实现 566
8.4 生成对抗网络 571
8.4.1 生成对抗网络的原理 573
8.4.2 生成对抗网络训练过程的代码实现 577
8.5 生成对抗网络建模实例 579
8.5.1 一组实数的生成对抗网络建模 579
8.5.2 二维坐标点的生成对抗网络建模 585
8.5.3 MNIST手写数字集的生成对抗网络建模 590
8.5.4 生成对抗网络的训练技巧 594
8.6 生成对抗网络的损失函数及其概率解释 594
8.6.1 生成对抗网络的损失函数的全局最优解 594
8.6.2 Kullback-Leibler散度和Jensen-Shannon散度 595
8.6.3 生成对抗网络的最大似然解释 598
8.7 改进的损失函数——Wasserstein GAN 599
8.7.1 Wasserstein GAN的原理 599
8.7.2 Wasserstein GAN的代码实现 603
8.8 深度卷积对抗网络 605
8.8.1 一维转置卷积 606
8.8.2 二维转置卷积 609
8.8.3 卷积对抗网络的代码实现 612
参考文献 617
1.1 Python快速入门 1
1.1.1 快速安装Python 1
1.1.2 Python基础 2
1.1.3 Python中的常见运算 5
1.1.4 Python控制语句 7
1.1.5 Python常用容器类型 10
1.1.6 Python常用函数 16
1.1.7 类和对象 22
1.1.8 Matplotlib入门 24
1.2 张量库NumPy 33
1.2.1 什么是张量 33
1.2.2 创建ndarray对象 37
1.2.3 ndarray数组的索引和切片 53
1.2.4 张量的计算 57
1.3 微积分 63
1.3.1 函数 64
1.3.2 四则运算和复合运算 66
1.3.3 极限和导数 69
1.3.4 导数的四则运算和链式法则 72
1.3.5 计算图、正向计算和反向传播求导 74
1.3.6 多变量函数的偏导数与梯度 75
1.3.7 向量值函数的导数与Jacobian矩阵 78
1.3.8 积分 83
1.4 概率基础 84
1.4.1 概率 84
1.4.2 条件概率、联合概率、全概率公式、贝叶斯公式 86
1.4.3 随机变量 88
1.4.4 离散型随机变量的概率分布 89
1.4.5 连续型随机变量的概率密度 91
1.4.6 随机变量的分布函数 93
1.4.7 期望、方差、协方差、协变矩阵 95
第2章 梯度下降法 99
2.1 函数极值的必要条件 99
2.2 梯度下降法基础 101
2.3 梯度下降法的参数优化策略 108
2.3.1 Momentum法 108
2.3.2 AdaGrad法 110
2.3.3 AdaDelta法 112
2.3.4 RMSprop法 114
2.3.5 Adam法 115
2.4 梯度验证 117
2.4.1 比较数值梯度和分析梯度 117
2.4.2 通用的数值梯度 118
2.5 分离梯度下降法与参数优化策略 119
2.5.1 参数优化器 119
2.5.2 接受参数优化器的梯度下降法 120
第3章 线性回归、逻辑回归和softmax回归 122
3.1 线性回归 122
3.1.1 餐车利润问题 122
3.1.2 机器学习与人工智能 123
3.1.3 什么是线性回归 126
3.1.4 用正规方程法求解线性回归问题 127
3.1.5 用梯度下降法求解线性回归问题 129
3.1.6 调试学习率 133
3.1.7 梯度验证 135
3.1.8 预测 135
3.1.9 多特征线性回归 136
3.2 数据的规范化 143
3.2.1 预测大坝出水量 143
3.2.2 数据的规范化过程 147
3.3 模型的评估 149
3.3.1 欠拟合和过拟合 149
3.3.2 验证集和测试集 153
3.3.3 学习曲线 155
3.3.4 偏差和方差 160
3.4 正则化 165
3.5 逻辑回归 168
3.5.1 逻辑回归基础 169
3.5.2 逻辑回归的NumPy实现 173
3.5.3 实战:鸢尾花分类的NumPy实现 178
3.6 softmax回归 180
3.6.1 spiral数据集 180
3.6.2 softmax函数 181
3.6.3 softmax回归模型 186
3.6.4 多分类交叉熵损失 188
3.6.5 通过加权和计算交叉熵损失 191
3.6.6 softmax回归的梯度计算 191
3.6.7 softmax回归的梯度下降法的实现 197
3.6.8 spiral数据集的softmax回归模型 197
3.7 批梯度下降法和随机梯度下降法 199
3.7.1 MNIST手写数字集 199
3.7.2 用部分训练样本训练逻辑回归模型 201
3.7.3 批梯度下降法 202
3.7.4 随机梯度下降法 207
第4章 神经网络 209
4.1 神经网络概述 209
4.1.1 感知机和神经元 209
4.1.2 激活函数 213
4.1.3 神经网络与深度学习 216
4.1.4 多个样本的正向计算 221
4.1.5 输出 224
4.1.6 损失函数 224
4.1.7 基于数值梯度的神经网络训练 229
4.2 反向求导 235
4.2.1 正向计算和反向求导 235
4.2.2 计算图 237
4.2.3 损失函数关于输出的梯度 239
4.2.4 2层神经网络的反向求导 242
4.2.5 2层神经网络的Python实现 247
4.2.6 任意层神经网络的反向求导 252
4.3 实现一个简单的深度学习框架 256
4.3.1 神经网络的训练过程 256
4.3.2 网络层的代码实现 257
4.3.3 网络层的梯度检验 260
4.3.4 神经网络的类 261
4.3.5 神经网络的梯度检验 263
4.3.6 基于深度学习框架的MNIST手写数字识别 266
4.3.7 改进的通用神经网络框架:分离加权和与激活函数 268
4.3.8 独立的参数优化器 276
4.3.9 fashion-mnist的分类训练 279
4.3.10 读写模型参数 282
第5章 改进神经网络性能的基本技巧 285
5.1 数据处理 285
5.1.1 数据增强 285
5.1.2 规范化 289
5.1.3 特征工程 289
5.2 参数调试 296
5.2.1 权重初始化 296
5.2.2 优化参数 301
5.3 批规范化 301
5.3.1 什么是批规范化 301
5.3.2 批规范化的反向求导 303
5.3.3 批规范化的代码实现 304
5.4 正则化 310
5.4.1 权重正则化 310
5.4.2 Dropout 312
5.4.3 早停法 316
5.5 梯度爆炸和梯度消失 317
第6章 卷积神经网络 318
6.1 卷积入门 319
6.1.1 什么是卷积 319
6.1.2 一维卷积 325
6.1.3 二维卷积 326
6.1.4 多通道输入和多通道输出 338
6.1.5 池化 341
6.2 卷积神经网络概述 344
6.2.1 全连接神经元和卷积神经元 345
6.2.2 卷积层和卷积神经网络 346
6.2.3 卷积层和池化层的反向求导及代码实现 349
6.2.4 卷积神经网络的代码实现 361
6.3 卷积的矩阵乘法 364
6.3.1 一维卷积的矩阵乘法 364
6.3.2 二维卷积的矩阵乘法 365
6.3.3 一维卷积反向求导的矩阵乘法 371
6.3.4 二维卷积反向求导的矩阵乘法 373
6.4 基于坐标索引的快速卷积 377
6.5 典型卷积神经网络结构 393
6.5.1 LeNet-5 393
6.5.2 AlexNet 394
6.5.3 VGG 395
6.5.4 残差网络 396
6.5.5 Inception网络 398
6.5.6 NiN 399
第7章 循环神经网络 403
7.1 序列问题和模型 403
7.1.1 股票价格预测问题 404
7.1.2 概率序列模型和语言模型 405
7.1.3 自回归模型 406
7.1.4 生成自回归数据 406
7.1.5 时间窗方法 408
7.1.6 时间窗采样 409
7.1.7 时间窗方法的建模和训练 409
7.1.8 长期预测和短期预测 410
7.1.9 股票价格预测的代码实现 412
7.1.10 k-gram语言模型 415
7.2 循环神经网络基础 416
7.2.1 无记忆功能的非循环神经网络 417
7.2.2 具有记忆功能的循环神经网络 418
7.3 穿过时间的反向传播 421
7.4 单层循环神经网络的实现 425
7.4.1 初始化模型参数 425
7.4.2 正向计算 425
7.4.3 损失函数 427
7.4.4 反向求导 427
7.4.5 梯度验证 429
7.4.6 梯度下降训练 432
7.4.7 序列数据的采样 433
7.4.8 序列数据的循环神经网络训练和预测 441
7.5 循环神经网络语言模型和文本的生成 448
7.5.1 字符表 448
7.5.2 字符序列样本的采样 450
7.5.3 模型的训练和预测 452
7.6 循环神经网络中的梯度爆炸和梯度消失 455
7.7 长短期记忆网络 456
7.7.1 LSTM的神经元 457
7.7.2 LSTM的反向求导 460
7.7.3 LSTM的代码实现 461
7.7.4 LSTM的变种 469
7.8 门控循环单元 470
7.8.1 门控循环单元的工作原理 470
7.8.2 门控循环单元的代码实现 472
7.9 循环神经网络的类及其实现 475
7.9.1 用类实现循环神经网络 475
7.9.2 循环神经网络单元的类实现 483
7.10 多层循环神经网络和双向循环神经网络 491
7.10.1 多层循环神经网络 491
7.10.2 多层循环神经网络的训练和预测 497
7.10.3 双向循环神经网络 500
7.11 Seq2Seq模型 506
7.11.1 机器翻译概述 507
7.11.2 Seq2Seq模型的实现 508
7.11.3 字符级的Seq2Seq模型 516
7.11.4 基于Word2Vec的Seq2Seq模型 522
7.11.5 基于词嵌入层的Seq2Seq模型 533
7.11.6 注意力机制 541
第8章 生成模型 552
8.1 生成模型概述 552
8.2 自动编码器 556
8.2.1 什么是自动编码器 557
8.2.2 稀疏编码器 559
8.2.3 自动编码器的代码实现 560
8.3 变分自动编码器 563
8.3.1 什么是变分自动编码器 563
8.3.2 变分自动编码器的损失函数 564
8.3.3 变分自动编码器的参数重采样 565
8.3.4 变分自动编码器的反向求导 565
8.3.5 变分自动编码器的代码实现 566
8.4 生成对抗网络 571
8.4.1 生成对抗网络的原理 573
8.4.2 生成对抗网络训练过程的代码实现 577
8.5 生成对抗网络建模实例 579
8.5.1 一组实数的生成对抗网络建模 579
8.5.2 二维坐标点的生成对抗网络建模 585
8.5.3 MNIST手写数字集的生成对抗网络建模 590
8.5.4 生成对抗网络的训练技巧 594
8.6 生成对抗网络的损失函数及其概率解释 594
8.6.1 生成对抗网络的损失函数的全局最优解 594
8.6.2 Kullback-Leibler散度和Jensen-Shannon散度 595
8.6.3 生成对抗网络的最大似然解释 598
8.7 改进的损失函数——Wasserstein GAN 599
8.7.1 Wasserstein GAN的原理 599
8.7.2 Wasserstein GAN的代码实现 603
8.8 深度卷积对抗网络 605
8.8.1 一维转置卷积 606
8.8.2 二维转置卷积 609
8.8.3 卷积对抗网络的代码实现 612
参考文献 617
猜您喜欢