目录
2.3.0 预备知识
(矩阵乘法相当于 空间扭曲)
特征向量的直观理解:不被矩阵改变方向的向量
对称矩阵总是可以找到特征向量
2.3.1 标量
x = torch.tensor(3.0)
y = torch.tensor(2.0)
2.3.2 向量
x = torch.arange(4)
# 访问张量长度
print(len(4))
#通过张量的索引来访问任一元素
print(x[3])
2.3.3 矩阵
A = torch.arange(20).reshape(5, 4)
# 矩阵的转置
print(A.T)
2.3.4 张量
向量是标量的推广,矩阵是向量的推广,可以构建具有更多轴的数据结构
X = torch.arange(24).reshape(2, 3, 4)
给定具有相同形状的任意两个张量,任何按元素二元运算的结果都将是相同形状的张量
两个矩阵的按元素乘法称为Hadamard积(Hadamard product)(数学符号⊙⊙)
2.3.5 张量算法的基本性质
# 创建张量
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone()
# 矩阵乘法(得到5*4)
A * B
2.3.6 降维
二维降维变一维,三维降维变二维
# 计算张量所有元素的和
A.sum()
# 指定张量沿哪一个轴来同股票求和降低维度
A_sum_axis0 = A.sum(axis=0) # 沿0轴降维(纵轴 👆)
A_sum_axis1 = A.sum(axis=1) # 沿1轴降维(横轴 👈)
关于降维的补充笔记:
2.3.7 非降维求和
在调用函数来计算总和或均值时保持轴数不变
sum_A = A.sum(axis=1, keepdims=True) # 不删除第二位,而是将第二位改成“1”
2.3.8 点积
torch.dot(x, y)
# 也可以这样求
torch.sum(x * y) # 对应元素相乘求和
2.3.9 矩阵-向量积
2.3.10 矩阵-矩阵乘法
矩阵乘法
2.3.11 范数
范数就是向量元素平方和的平方根
torch.norm(u)
小结
- 标量、向量、矩阵和张量是线性代数中的基本数学对象。
- 向量泛化自标量,矩阵泛化自向量。
- 标量、向量、矩阵和张量分别具有零、一、二和任意数量的轴。
- 一个张量可以通过
sum
和mean
沿指定的轴降低维度。 - 两个矩阵的按元素乘法被称为他们的Hadamard积。它与矩阵乘法不同。
- 在深度学习中,我们经常使用范数,如𝐿1L1范数、𝐿2L2范数和Frobenius范数。
- 我们可以对标量、向量、矩阵和张量执行各种操作。
练习
- 证明一个矩阵𝐀A的转置的转置是𝐀A,即(𝐀⊤)⊤=𝐀(A⊤)⊤=A。
- 给出两个矩阵𝐀A和𝐁B,证明“它们转置的和”等于“它们和的转置”,即𝐀⊤+𝐁⊤=(𝐀+𝐁)⊤A⊤+B⊤=(A+B)⊤。
- 给定任意方阵𝐀A,𝐀+𝐀⊤A+A⊤总是对称的吗?为什么?
- 我们在本节中定义了形状(2,3,4)(2,3,4)的张量
X
。len(X)
的输出结果是什么? - 对于任意形状的张量
X
,len(X)
是否总是对应于X
特定轴的长度?这个轴是什么? - 运行
A/A.sum(axis=1)
,看看会发生什么。你能分析原因吗? - 考虑一个具有形状(2,3,4)(2,3,4)的张量,在轴0、1、2上的求和输出是什么形状?
- 为
linalg.norm
函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?
矩阵计算
标量求导:最基本的求导公式;导数是切线的斜率
亚导数:将导数拓展到不可微的函数
(例子)
梯度:将导数拓展到向量
标量对标量求导 --- 标量
向量对标量求导 --- 向量(列向量关于标量的导数是列向量)
标量对向量求导 --- 向量(标量关于列向量的导数是行向量)
向量对向量求导 --- 矩阵