动手学深度学习 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