Skip to content

动手学深度学习之线性代数 ​

数学知识 ​

补充一些快要忘记的数学知识

范数 ​

c=A⋅bhence||c||≤||A||⋅||b||
  • 取决于如何衡量 b 和 c 的长度

常见的范数:

  • 矩阵范数:最小的满足上面公式的值

  • Frobenius范数:∑i,jAij2

正定 ​

一个矩阵乘任何的一个列向量或是行向量都大于等于零。

||x||2=xTx≥0generalizes toxTAx≥0

正交矩阵 ​

  • 所有行都正交

  • 所有行都有单位长度

Uwith∑jUijUij=δjk
  • 可以写成
UUT=1

置换矩阵 ​

PwithPij=1if and only ifj=π(i)
  • 置换矩阵都是正交矩阵

特征向量 ​

  • 不被矩阵改变的向量
Ax=λx
  • 对称矩阵总是可以找到特征向量

编程计算 ​

标量 ​

由只有一个元素的张量表示。

python
x = torch.tensor([3.0])

向量 ​

由向量值组成的列表。

python
x = torch.arange(4)

矩阵 ​

python
A = torch.arange(20).reshape(5, 4)

转置:A.T

求和 ​

部分内容见上一讲 04数据处理。

对矩阵而言,0 是行,对 axis=0 求和就是对每一列求和,因为要把矩阵的第 0 维降维,也就是将原本的行数降维,只保留原本的列数。等价于去掉形状的对应维度。

哈达玛积 ​

A⊙B 代表按元素相乘:Aij⋅Bij。

python
A * B

向量的点积 ​

点积是相同位置的按元素乘积的和。

  • 向量的点积结果是标量。
python
torch.dot(x, y)

也可以先执行按元素乘法,然后进行求和来表示两个向量的点积。

python
torch.sum(x * y)

矩阵-向量积 ​

  • 矩阵-向量积是矩阵的每一行与向量的点积。
python
y = torch.mv(A, x)

矩阵-矩阵乘法 ​

  • 矩阵-矩阵乘法 AB 看作是简单地执行 m 次矩阵-向量积,并将结果拼接在一起,形成一个 n×m 矩阵。
python
A = torch.arange(20).reshape(5, 4)
B = torch.ones(4, 3)
torch.mm(A, B)

范数求解 ​

  • L2 范数:
||x||2=∑inxi2
python
u = torch.tensor([3.0, -4.0])
torch.norm(u)
  • L1 范数:
||x||1=∑in|xi|
python
torch.abs(u).sum()
  • 矩阵的 Frobenius 范数:
||X||F=∑i=1m∑j=1nXij2
python
torch.norm(torch.ones((4, 9)))