线性代数
0. 环境介绍
环境使用 Kaggle 里免费建立的 Notebook
小技巧:当遇到函数看不懂的时候可以按 Shift+Tab
查看函数详解。
1. 标量
标量由只有一个元素的张量表示。 在下面的代码中,我们实例化两个标量,并执行一些熟悉的算术运算,即加法、乘法、除法和指数。
2. 向量
可以将向量视为标量值组成的列表。 将这些标量值称为向量的元素(element)或分量(component)。
2.1 长度,维度,形状
3. 矩阵
3.1 转置
3.2 矩阵逻辑运算
4. 张量
当我们开始处理图像时,张量将变得更加重要,图像以 n 维数组形式出现, 其中3个轴对应于高度、宽度,以及一个通道(channel)轴, 用于表示颜色 RGB 通道(红色、绿色和蓝色)。
5. 张量算法基本性质
任何按元素二元运算的结果都将是相同形状的张量。
5.1 element-wise
运算
可以发现这里的 A*B
为 element-wise
相乘。
5.2 标量-张量的运算
标量和张量的运算结果为标量值和张量逐个元素相运算,而且张量的形状并未发生改变。
5.3 向量-张量的运算
向量和张量逐行运算。
5.4 矩阵-张量运算
补充:
mul()
函数可以用于向量-矩阵,向量-张量,矩阵-张量,张量-张量之间的按某个维度的wise
乘运算。
6. 降维
6.1 求和
6.1.1 求所有元素总和
6.1.2 求特定维度的和
指定张量沿哪一个轴来通过求和降低维度。 以矩阵为例,为了通过求和所有行的元素来降维(轴0),我们可以在调用函数时指定axis=0。 由于输入矩阵沿0轴降维以生成输出向量,因此输入轴0的维数在输出形状中消失。
指定axis=1将通过汇总所有列的元素降维(轴1)。因此,输入轴1的维数在输出形状中消失。
沿着行和列对矩阵求和,等价于对矩阵的所有元素进行求和。
6.2 求平均
6.2.1 求所有元素平均
6.2.2 求特定维度平均
6.3 非降维求和
keepdims=True
可以保证结果的维度不变。
6.4 累加和
补充:
- 累乘函数为
cumprod()
axis
也可以替换为dim
,效果相同
7. 点积 Dot-Product
dot()
多种方法都可以得到点积结果。
8. 矩阵-向量积 mv()
9. 矩阵-矩阵乘法 mm()
补充:
matmul()
函数可用于矩阵-张量,张量-张量乘运算。
如果矩阵和张量运算用 mm()
函数会报错。
10. 范数 norm()
线性代数中最有用的一些运算符是范数(norm)。 非正式地说,一个向量的范数告诉我们一个向量有多大。 这里考虑的大小(size)概念不涉及维度,而是分量的大小。
norm()
默认就是 2 范数或者在矩阵中的 F 范数。
每个元素绝对值求和就是 1 范数。
10.1 范数和目标
在深度学习中,我们经常试图解决优化问题: 最大化分配给观测数据的概率; 最小化预测和真实观测之间的距离。 用向量表示物品(如单词、产品或新闻文章),以便最小化相似项目之间的距离,最大化不同项目之间的距离。 目标,或许是深度学习算法最重要的组成部分(除了数据),通常被表达为范数。
11. 练习
11.1 我们在本节中定义了形状的张量 X(2, 3, 4)。len(X)的输出结果是什么?
len(X)
会输出对应 X 的 axis=0 轴。若 X
形状为 (5, 4)
,则 len(X)
的结果为 5
。
11.2 考虑形状(2, 3, 4)的张量 X ,在轴0、1、2上的求和输出是什么形状?
比如上例,分别将形状变成了(3, 4), (2, 4), (2, 3)。当然,如果使用 keepdim=True
参数会更形象看出结果。
11.3 为 linalg.norm
函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?
直接用函数会报错,得转换一下数据类型。
还可以指定参数。