官方:预备知识
D2L 02 预备知识
- 所有机器学习方法都涉及从数据中提取信息,因此,我们先学习一些关于数据的实用技能,包括存储、操作和预处理数据
- 深度学习是关于优化的。我们有一个带有参数的模型,想要找到其中能拟合数据的最好模型。在算法的每个步骤中,决定以何种方式调整参数需要一点微积分知识。本节将简要介绍这些知识
- 机器学习还涉及如何做出预测:给定我们观察到的信息,某些未知属性可能的值是多少?要在不确定的情况下进行严格的推理,我们需要借用概率语言
2.1 数据操作
Numpy & Pytorch 基础
根据 github 项目 和自己的一些经验,整理了 Numpy Cheat Sheet,在博客内搜索即可。学习该教材也需要一定的 pytorch 基础(如果你选择 pytorch 作为工具的话),这里就不赘述了
节省内存
为了节省内存,可以使用索引进行原地操作
Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))
# id is the same
2.2 数据预处理
我们将简要介绍使用pandas
预处理原始数据并将原始数据转换为张量格式的步骤。假设 csv 数据如下
NumRooms Alley Price
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000
使用 pandas 读取 csv 文档,并对 NaN 值进行处理
import pandas as pd
# read_csv
data = pd.read_csv(data_file)
# iloc
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
# fillna
inputs = inputs.fillna(inputs.mean())
转换为 Tensor
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
更多有关 pandas 的处理后续再进行总结
2.3 线性代数
这里仅记录一些自己觉得该注意的点,更基础的数学和编程知识就不介绍了
一些注意的点
向量与张量的维度
维度(dimension)这个词在不同上下文时往往会有不同的含义,向量的维度和张量的维度经常会使人感到困惑。为了清楚起见,我们在此明确一下:
- 向量或轴的维度被用来表示向量或轴的长度,即向量或轴的元素数量
- 张量的维度用来表示张量具有的轴数。在这个意义上,张量的某个轴的维数就是这个轴的长度
两个矩阵的按元素乘法称为哈达玛积(Hadamard product)(数学符号⊙)
非降维求和
有时在调用函数来计算总和或均值时保持轴数不变会很有用
sum_A = A.sum(axis=1, keepdims=True)
哈达玛积(Hadamard product)
两个矩阵的按元素乘法称为哈达玛积(Hadamard product)(数学符号⊙)
范数计算
# L2 or Frobenius norm u = torch.tensor([3.0, -4.0]) torch.norm(u) # L1 torch.abs(u).sum()
线性代数与机器学习
仅用一节,我们就教会了你所需的,用以理解大量的现代深度学习的全部线性代数。 线性代数还有很多,其中很多数学对于机器学习非常有用。例如,矩阵可以分解为因子,这些分解可以显示真实世界数据集中的低维结构。机器学习的整个子领域都侧重于使用矩阵分解及其向高阶张量的泛化来发现数据集中的结构并解决预测问题。但这本书的重点是深度学习。我们相信,一旦你开始动手尝试并在真实数据集上应用了有效的机器学习模型,你会更倾向于学习更多数学。因此,虽然我们保留在后面介绍更多数学知识的权利,但我们这一节到此结束。
这最后的小结非常有意思,说明了机器学习需要更多的数学知识,但深度学习所需要的线性代数知识就到此为止了…可以说数学门槛是相当低了,不过机器学习给人更扎实的感受,以后有时间再整理一下机器学习领域的知识吧😀
2.4 微分
重要概念:导数,微分,偏微分,梯度,链式法则。当扩展到张量阶段的时候,需要参考工程矩阵中的知识,下面贴一个梯度的公式
2.5 自动微分
关于自动微分,可以查看博客中的 pytorch tutorial 里面更详细地介绍了自动微分操作。当加入了张量运算后自动微分会变得不那么显然,可以自行推导一下矩阵相乘时的一般结论,以及 sigmoid 函数的自动微分情况
2.6 概率
重要概念:概率论基本公式,随机变量,联合概率,条件概率,贝叶斯定理,边际概率,独立性,期望,方差,协方差…
概率论和矩阵论都是我非常薄弱的环节😭,希望有时间一定要好好重新学过!!!
TODO
- 完成 matplotlib 整理
- 完成概率论,线性代数的深入学习