动手学深度学习
Release 2.0.0
Aston Zhang, Zachary C. Lipton, Mu Li, and Alexander J. Smola
Aug 18, 2023
目录
前言 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 索引和切片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.1.5 节省内存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.1.6 转换为其他Python对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.2 数据预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.2.1 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.2.2 处理缺失值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.2.3 转换为张量格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.3 线性代数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3.1 标量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3.2 向量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.3 矩阵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.3.4 张量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.3.5 张量算法的基本性质 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.3.6 降维 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.3.7 点积(Dot Product) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
i
2.3.8 矩阵‐向量积 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2.3.9 矩阵‐矩阵乘法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.3.10 范数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.3.11 关于线性代数的更多信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.4 微积分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.4.1 导数和微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.4.2 偏导数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.4.3 梯度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.4.4 链式法则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.5 自动微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.5.1 一个简单的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.5.2 非标量变量的反向传播 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
2.5.3 分离计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
2.5.4 Python控制流的梯度计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2.6 概率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.6.1 基本概率论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.6.2 处理多个随机变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2.6.3
期望和方差
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2.7 查阅文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2.7.1 查找模块中的所有函数和类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2.7.2 查找特定函数和类的用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3 线性神经网络 85
3.1 线性回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
3.1.1 线性回归的基本元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.1.2 矢量化加速 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.1.3 正态分布与平方损失 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.1.4 从线性回归到深度网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.2 线性回归的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.2.1 生成数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.2.2 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.2.3 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.2.4 定义模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.2.5 定义损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.2.6 定义优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.2.7 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.3 线性回归的简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3.3.1 生成数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3.3.2 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.3.3 定义模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.3.4 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.3.5 定义损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
ii
3.3.6 定义优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.3.7 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.4 somax回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.4.1 分类问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.4.2 网络架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3.4.3 全连接层的参数开销 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3.4.4 somax运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3.4.5 小批量样本的矢量化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.4.6 损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.4.7 信息论基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.4.8 模型预测和评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.5 图像分类数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.5.1 读取数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.5.2 读取小批量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
3.5.3 整合所有组件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.6 somax回归的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3.6.1 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3.6.2
定义
somax
操作
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.6.3 定义模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
3.6.4 定义损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
3.6.5 分类精度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.6.6 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
3.6.7 预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
3.7 somax回归的简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
3.7.1 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.7.2 重新审视Somax的实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.7.3 优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.7.4 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
4 多层感知机 129
4.1 多层感知机 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.1.1 隐藏层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
4.1.2 激活函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4.2 多层感知机的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.2.1 初始化模型参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.2.2 激活函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
4.2.3 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
4.2.4 损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
4.2.5 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
4.3 多层感知机的简洁实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.3.1 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.4 模型选择、欠拟合和过拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
iii