动手学深度学习 Release 2.0.0-beta0 Aston Zhang,Zachary C.Lipton,Mu Li,and Alexander J.Smola Apr29,2022
动⼿学深度学习 Release 2.0.0-beta0 Aston Zhang, Zachary C. Lipton, Mu Li, and Alexander J. Smola Apr 29, 2022
目录 序言 安装 9 符号 1前言 2预备知识 2.1数据操作 ····。。·…,··。·。,··,”,··。。…。…···· 211入门 40 2.12运算符 2.13 广播机制 。。。。4g。。。。。。。。…。。。。。。。。。。。。。。。。4。。。。。。。 24 2.1.4 索引和切片.。。。。。····。。。。·· 2.1.5节省内存。 2.1.6 转换为其他Python对象 。。。”,,,。·,””,”,,”””。,。,,。”” 2.1.7 小结… 218统习 2.2 数据预处理 0。。。…·····……·…··。…·。·…··。··。………···。 2.2.1 2.2.2 处理缺失值。。。,· 2.23转换为张量格式 2.2.4 小结 ,。。。。,,,。。。。。,,,,。,。。,,,。。。,,。,。。 2.2.5练习 23 线性代数 23.1 标量 ·+。。。。……+。。。。…4。…+4·0。。…+,·+。。。。…,…÷。+。。 232向量 2.3.3矩阵
⽬录 序⾔ 1 安装 9 符号 13 1 前⾔ 17 2 预备知识 39 2.1 数据操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.1.1 ⼊⻔ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.1.2 运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.1.3 ⼴播机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.1.4 索引和切⽚ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.1.5 节省内存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.1.6 转换为其他Python对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.1.7 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.1.8 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.2 数据预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.2.1 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.2.2 处理缺失值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.2.3 转换为张量格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.2.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.2.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.3 线性代数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.3.1 标量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.3.2 向量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.3.3 矩阵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 i
2.3.4 张量 2.3.5 张量算法的基本性质 54 2.3.6 23.7 点积(Dot Product) 5动 2.3.8 58 2.3.9 矩阵矩阵乘法 2.310 范 2.3.11关干线性代数的更多信息 61 2.3.12 小结 2.3.13 练习 2.4 微积分 2.4.1 导数和微分 2.42 偏导数 6 2.4.3 梯度 )44 链式法测 2.4.5 小结 6 2.4.6 练习 2.5 自动微分 。。 68 25.1 一个简单的例子 25.2 非标量变量的反向传播 6 2.5.3 分离计算 25.4 Python控制流的梯度计算 2.5.5 7元 2.5.6 练习 71 2.6 概率 72 26.1 基本概率论 2.6.2 2.6.3 期塑和方差 79 2.6.4 小结 80 2.6.5 练习 27 查阅文档 80 2.7.1 查找模块中的所有函数和类 80 2.7.2 查找特定函数和类的用法 2.7.3 小小情 82 274 练习 82 3线性神经网络 83 3.1 线性回归 3.1.1 3.12 矢最化加速 87 3.1.3 正态分布与平方损失 3.1. 从线性回归到深度网络 80
2.3.4 张量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.3.5 张量算法的基本性质 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.3.6 降维 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.3.7 点积(Dot Product) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.3.8 矩阵-向量积 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.3.9 矩阵-矩阵乘法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.3.10 范数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 2.3.11 关于线性代数的更多信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 2.3.12 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 2.3.13 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 2.4 微积分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.4.1 导数和微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.4.2 偏导数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 2.4.3 梯度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 2.4.4 链式法则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 2.4.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 2.4.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 2.5 ⾃动微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 2.5.1 ⼀个简单的例⼦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 2.5.2 ⾮标量变量的反向传播 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 2.5.3 分离计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 2.5.4 Python控制流的梯度计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 2.5.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 2.5.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 2.6 概率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 2.6.1 基本概率论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 2.6.2 处理多个随机变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 2.6.3 期望和⽅差 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 2.6.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 2.6.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 2.7 查阅⽂档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 2.7.1 查找模块中的所有函数和类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 2.7.2 查找特定函数和类的⽤法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 2.7.3 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 2.7.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3 线性神经⽹络 83 3.1 线性回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.1.1 线性回归的基本元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 3.1.2 ⽮量化加速 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 3.1.3 正态分布与平⽅损失 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 3.1.4 从线性回归到深度⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 ii
3.1.5 小结 92 316练 3.2 线性国归的从零并始实现 3.2.1 93 3.2.2 读取数据集 3.2 初始化模型参数 3.2.4 96 3.2.5 定义损失函数 32.6 定义优化算法 3.2. 32.8 小结 98 3.2.9 练习 9 3.3 线性回归的简洁实现 3.3.1 生成数据集 99 33.2 读取数据集 3.3.3 定义型 900 3.3.4 初始化模型参数 101 3.3.5 定义损失函数 33.6 定义优化算法 3.3.7 珠 101 3.3.8 小结 3.3.9 练习 3.4 softmaxl回归 103 241 分类问题 3.4.2 网络架构 3.4.3 104 3.4.4 softmax运算., 104 34.5 小批量样本的矢最化 05 3.4.6 3.47 信良论基础.。 107 3.4.8 模型预测和评估 34.g 小结 18 3410练习..................。....。......。......... 108 3.5 图像分类数据集 读取数据集 3.5.2 3.5.3 整合所有组件 3.5. 小第 3.5.5 112 3.6 softmaxl回归的从零开始实现 113 3.6.1 初始化模型参数 。,,。。。”。”,。。””。,,。。。。。。。。。。。。 113 3.6.2 定义s0 ftmax操作,,,·,··························· 113
3.1.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 3.1.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 3.2 线性回归的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 3.2.1 ⽣成数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 3.2.2 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.2.3 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 3.2.4 定义模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 3.2.5 定义损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 3.2.6 定义优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 3.2.7 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 3.2.8 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 3.2.9 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 3.3 线性回归的简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 3.3.1 ⽣成数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 3.3.2 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 3.3.3 定义模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 3.3.4 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 3.3.5 定义损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 3.3.6 定义优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 3.3.7 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 3.3.8 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 3.3.9 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 3.4 softmax回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 3.4.1 分类问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 3.4.2 ⽹络架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 3.4.3 全连接层的参数开销 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 3.4.4 softmax运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 3.4.5 ⼩批量样本的⽮量化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 3.4.6 损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 3.4.7 信息论基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 3.4.8 模型预测和评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 3.4.9 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 3.4.10 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 3.5 图像分类数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 3.5.1 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 3.5.2 读取⼩批量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 3.5.3 整合所有组件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 3.5.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 3.5.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 3.6 softmax回归的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 3.6.1 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 3.6.2 定义softmax操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 iii
3.6.3 定义模型 114 3.6.4 定义损失函数 115 3.6.5 分类精 3.66 训 3.6.7 预浏 120 3.6.8 小结 3.6.9 练习 120 3.7 softmax回归的简洁实现 121 初始化模型参数 重新审视Softmaxf的实现 3.7.3 23 374 123 3.7.5 小结 123 3.7.6 练 124 4多层感知机 125 4.1多层感知机 125 4.11 隐藏层 41.2 激活函数 4.1.3 小结 132 414 练习 133 4.2 多层感知机的从零开始实现 133 4.2.1 133 422 激活函数 423 模型 .24 损失函数 134 4.2.5 426 小结 427 练习 4.3 136 4.3.1 4.3.2 小临 4.3.3 练习 137 4.4 模型选择、欠拟合和过拟合·…………… 44.1 训练误差和泛化误差 4.4.2 140 4.4.3 欠拟合还是过拟合? 4.4.4 多项式回归.……… 142 4.4.5 小结 147 4.4.6 练习 4.5 权重衰 4.5.1 范数与权重衰 148
3.6.3 定义模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 3.6.4 定义损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 3.6.5 分类精度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 3.6.6 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 3.6.7 预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 3.6.8 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 3.6.9 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 3.7 softmax回归的简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 3.7.1 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 3.7.2 重新审视Softmax的实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 3.7.3 优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 3.7.4 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 3.7.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 3.7.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 4 多层感知机 125 4.1 多层感知机 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 4.1.1 隐藏层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 4.1.2 激活函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 4.1.3 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 4.1.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.2 多层感知机的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.2.1 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.2.2 激活函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 4.2.3 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 4.2.4 损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 4.2.5 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 4.2.6 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 4.2.7 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 4.3 多层感知机的简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 4.3.1 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 4.3.2 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 4.3.3 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 4.4 模型选择、⽋拟合和过拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 4.4.1 训练误差和泛化误差 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 4.4.2 模型选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 4.4.3 ⽋拟合还是过拟合? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 4.4.4 多项式回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 4.4.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 4.4.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 4.5 权重衰减 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 4.5.1 范数与权重衰减 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 iv
4.5.2 149 453 从零开始实现 45.4 简洁实现 4.5.5 小结 154 4.5.6 练习 4.6 暂退法(Dropout) 14 4.6.1 重新审视过拟合 154 4.6.2 扰动的稳健性 4.63 实践中的暂退法 4.6.4 从零开始实现 156 46.5 简洁实现. 159 4.6.6 小结 6 46.7 练习 4.7 前向传播、反向传播和计算图 161 47.1 前向传播 4.7.2 前向传播计算图 162 4.7.3 162 47.4 训练神经络 47.5 小结 4.7.6 珠习 164 4.8 数值稳定性和模型初始化 48.1 梯度消失和梯度爆 4.8.2 167 4.8.3 小结 4.8.4 练习 4.9 169 49.1 分布伯移的米型 169 4.9.2 分布偏移示例 4.9.3 分布偏移纠正 173 4.9.4 学习问颗的分类法 4.9.5机器学习中的公平、责任和透明度 49.6 小结 4.9.7 178 4.10实战Kaggle比赛:预测房价 4.10.1 下载和缓存数据集 180 4.10.3访问和读取数据集 4.10.4 数据预处理……… 4.10.5 183 4.10.6K折交叉验证。 4.10.7模型选择 185 4.10.8 提交你的Kagglef预测.··,·············…············
4.5.2 ⾼维线性回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 4.5.3 从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 4.5.4 简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 4.5.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 4.5.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 4.6 暂退法(Dropout) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 4.6.1 重新审视过拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 4.6.2 扰动的稳健性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 4.6.3 实践中的暂退法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 4.6.4 从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 4.6.5 简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 4.6.6 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 4.6.7 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 4.7 前向传播、反向传播和计算图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 4.7.1 前向传播 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 4.7.2 前向传播计算图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 4.7.3 反向传播 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 4.7.4 训练神经⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 4.7.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 4.7.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 4.8 数值稳定性和模型初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 4.8.1 梯度消失和梯度爆炸 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 4.8.2 参数初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 4.8.3 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 4.8.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 4.9 环境和分布偏移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 4.9.1 分布偏移的类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 4.9.2 分布偏移⽰例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 4.9.3 分布偏移纠正 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 4.9.4 学习问题的分类法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 4.9.5 机器学习中的公平、责任和透明度 . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 4.9.6 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 4.9.7 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 4.10 实战Kaggle⽐赛:预测房价 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 4.10.1 下载和缓存数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 4.10.2 Kaggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 4.10.3 访问和读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 4.10.4 数据预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 4.10.5 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 4.10.6 K折交叉验证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 4.10.7 模型选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 4.10.8 提交你的Kaggle预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 v
4.10.9小结 188 4.10.10练习 5深度学习计算 189 5.1层和块 5.1 自定义块 17 5.1.2 192 513 在前向传播函数中执行代码 193 51.4 效率 194 5.1.5 小 195 5.1.6 练 5.2 参数管理 95 5.2.1 参数访问 5.2.2 19g 5.2.3 参数绑定 5.2 小结 201 5.25 练习 201 5.3 延后初始化 5.3.1 实例化网络 2 5.3.2 小结 202 523 练习 5.4 自定义 203 5.4.1 不带参数的层 03 542 带参数的层 30 5.4.3 小结 205 练习 2 5.5 卖写文件 305 55.1 加载和保存张量 552 加载和保存模型参数 5.5.3 小结 5.5.4 练习 5.6 GPU 28 5.6.1 3 5.6.2 张最与GPU 5.6.3 神经网络与GPU 213 5.6.4 小结 2 565 练习 6卷积神经网络 215 6.1从全连接层到卷积 216 不变性 216 6.1.2 217
4.10.9 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 4.10.10 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 5 深度学习计算 189 5.1 层和块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 5.1.1 ⾃定义块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 5.1.2 顺序块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 5.1.3 在前向传播函数中执⾏代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 5.1.4 效率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 5.1.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 5.1.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 5.2 参数管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 5.2.1 参数访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 5.2.2 参数初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 5.2.3 参数绑定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 5.2.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 5.2.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 5.3 延后初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 5.3.1 实例化⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 5.3.2 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 5.3.3 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 5.4 ⾃定义层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 5.4.1 不带参数的层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 5.4.2 带参数的层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 5.4.3 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 5.4.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 5.5 读写⽂件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 5.5.1 加载和保存张量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 5.5.2 加载和保存模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 5.5.3 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 5.5.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 5.6 GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 5.6.1 计算设备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 5.6.2 张量与GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 5.6.3 神经⽹络与GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 5.6.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 5.6.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 6 卷积神经⽹络 215 6.1 从全连接层到卷积 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 6.1.1 不变性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 6.1.2 多层感知机的限制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 vi
6.1.3 卷积 218 6.1 “沃尔多在哪里”回顾 6.15 小结 4…。。。。……4+。。。。。………+4。…4.4··。。4……4。·。。 9 6.1.6 练习 220 6.2 图像卷积 62.1 互相关运算 m 6.2.2 2 6.2.3 图像中目标的边缘检测 62. 学习卷积核 224 6.2.5 互相关和卷积 2 6.2.6 特征映射和感受野 225 6.2.7 小结 225 6.2.8 练习 6.3 填充和步幅 2 6.31 填充 6.3.2 步 228 6.3.3 小结 6.3.4 练习 6.4 多输入多输出通道 6.4.1 6.4.2 多输出场道 6.43 1×1卷积层 6.4.4 小结 233 6A5 练习 233 6.5 汇聚层 234 6.5.1 最大汇聚层和平均汇聚层···。······················· 6.5.2 填充和步幅。···· 6.5.3 多个通道 237 6.5.4 小 2 6.5.5 练习 6.6 卷积神经网络(LeNet). 66 LeNet 6.6.2 244 6.6.3 小结 6.6.4 练习 7现代卷积神经网络 7.1深度卷积神经网络(AlexNet) 246 7.11 学习表征·…· 246 7.1.2 AlexNet. 7.1.3 读取数据 7.1.4 252
6.1.3 卷积 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 6.1.4 “沃尔多在哪⾥”回顾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 6.1.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 6.1.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 6.2 图像卷积 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 6.2.1 互相关运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 6.2.2 卷积层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 6.2.3 图像中⽬标的边缘检测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 6.2.4 学习卷积核 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 6.2.5 互相关和卷积 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 6.2.6 特征映射和感受野 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 6.2.7 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 6.2.8 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 6.3 填充和步幅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 6.3.1 填充 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 6.3.2 步幅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 6.3.3 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 6.3.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 6.4 多输⼊多输出通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 6.4.1 多输⼊通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 6.4.2 多输出通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 6.4.3 1 × 1 卷积层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 6.4.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 6.4.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 6.5 汇聚层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 6.5.1 最⼤汇聚层和平均汇聚层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 6.5.2 填充和步幅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 6.5.3 多个通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 6.5.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 6.5.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 6.6 卷积神经⽹络(LeNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 6.6.1 LeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 6.6.2 模型训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 6.6.3 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 6.6.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 7 现代卷积神经⽹络 245 7.1 深度卷积神经⽹络(AlexNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 7.1.1 学习表征 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 7.1.2 AlexNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 7.1.3 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 7.1.4 训练AlexNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 vii
7.1.5 小结 252 7.1.6练习 252 7.21 VGG块 7.2.2 VGG国络 254 7.2.3 训练模型 72.4 7.2.5 练习 257 7.3 网络中的网络NiN) 73.1 NiN块 7.3.2 NiN模型 259 723 训练模型 7.34 小结 260 7.3.5 练习 260 7.4 含并行连结的网络(GoogLeNet) 7.4.1 Inception块 261 7.4.2 GoogLeNet模型 7.43 训练模型 6 7.4.4 小结 74.5 266 7.5 批量规范化 7.5.1 训练深层网络 75.2 批量规范化层 7.5.3 从客买.。. 26g 7.5.4 使用批量规范化层的LeNet 2 75.5 简明实现 271 7.5.6 272 757 小结 75.8 练习 7.6 我差网路(ResNet) 273 761 函数类 274 76.2 残差块 275 7.6.3 2 7.6.4 训练模型 7.6.5 小结 7.6.6 练习 281 7.7 稠密连接网络(DenseNet), 从ResNet到DenseNet 稠密块体 7.7.3 283 7.7.4 284 7.7.5 训练模型 285
7.1.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 7.1.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 7.2 使⽤块的⽹络(VGG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 7.2.1 VGG块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 7.2.2 VGG⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 7.2.3 训练模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 7.2.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 7.2.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 7.3 ⽹络中的⽹络(NiN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 7.3.1 NiN块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 7.3.2 NiN模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 7.3.3 训练模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 7.3.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 7.3.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 7.4 含并⾏连结的⽹络(GoogLeNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 7.4.1 Inception块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 7.4.2 GoogLeNet模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 7.4.3 训练模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 7.4.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 7.4.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 7.5 批量规范化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 7.5.1 训练深层⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 7.5.2 批量规范化层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 7.5.3 从零实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 7.5.4 使⽤批量规范化层的 LeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 7.5.5 简明实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 7.5.6 争议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 7.5.7 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 7.5.8 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 7.6 残差⽹络(ResNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 7.6.1 函数类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 7.6.2 残差块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 7.6.3 ResNet模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 7.6.4 训练模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 7.6.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 7.6.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 7.7 稠密连接⽹络(DenseNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 7.7.1 从ResNet到DenseNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 7.7.2 稠密块体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 7.7.3 过渡层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 7.7.4 DenseNet模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 7.7.5 训练模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 viii
7.7.6 小结 285 7.7.7 练 285 8循环神经网络 287 序列模 8.1.1 统计江具…………… 288 8.12 训练 8.1.3 293 2 8.1.5 练 8.2 文本须处理 82.1 296 读取数据集 2 8.2.2 词元化… 297 8.2.3 词表 82.4 整合所有功能 208 8.2.5 小结 300 8.2.6 练习 301 8.3 语言模型和数据集 301 8.3.1 学习语言模型 83.2 马尔可夫模型与n元语法 0 8.33 自然语言统计 303 8.3.4 读取长序列数 306 8.3.5 小结 。。 3 8.3.6 练习 8.4 循环神经 8.4.1 310 8.4.2 有隐状态的循环神经网路 84.3 基于循环神经网络的字符级语 言模型 8.4.4 N&度(Perplexity 3 8.4.5 小结 31 84.6 练习 315 8.5 循环神经网络的从零开始实现···。·。。。························ 315 851 独热编码, 85.2 初始化模型参数 6 8.5.3 6 8.5.4 流 梯度裁剪 8.5.6 8.5.7 小结 。 323 8.5.8练习 8.6 循环神经网络的简洁实现 8.6.1 空
7.7.6 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 7.7.7 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 8 循环神经⽹络 287 8.1 序列模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 8.1.1 统计⼯具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 8.1.2 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 8.1.3 预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 8.1.4 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 8.1.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 8.2 ⽂本预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 8.2.1 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 8.2.2 词元化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 8.2.3 词表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 8.2.4 整合所有功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 8.2.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 8.2.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 8.3 语⾔模型和数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 8.3.1 学习语⾔模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 8.3.2 ⻢尔可夫模型与n元语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 8.3.3 ⾃然语⾔统计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 8.3.4 读取⻓序列数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 8.3.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 8.3.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 8.4 循环神经⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 8.4.1 ⽆隐状态的神经⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 8.4.2 有隐状态的循环神经⽹络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 8.4.3 基于循环神经⽹络的字符级语⾔模型 . . . . . . . . . . . . . . . . . . . . . . . . . . 313 8.4.4 困惑度(Perplexity) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 8.4.5 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 8.4.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 8.5 循环神经⽹络的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 8.5.1 独热编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 8.5.2 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 8.5.3 循环神经⽹络模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 8.5.4 预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 8.5.5 梯度裁剪 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 8.5.6 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 8.5.7 ⼩结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 8.5.8 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 8.6 循环神经⽹络的简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 8.6.1 定义模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 ix