【跟着李沐学AI读书笔记】线性代数

我们通过一维张量处理向量。一般来说,张量可以具有任意长度,取决于机器的内存限制。

本书和大量文献认为列向量是向量的默认方向。向量的长度通常称为向量的维度。当用张量表示一个向量(只有一个轴)时,也可以通过.shape属性访问向量的长度。形状(shape)是一个元素组,列出了张量沿每个轴的长度(维数)。对于只有一个轴的张量,形状只有一个元素。

向量或轴的维度被用来表示向量或轴的长度,即向量或轴的元素数量,而张量的维度用来表示张量具有的轴数。张量的某个轴的维数就是这个轴的长度。

尽管单个向量的默认方向是列向量,但在表示表格数据集的矩阵中,将每个数据样本作为矩阵中的行向量更为常见。

两个矩阵的按元素乘法称为Hadamard积。A*B的结果为两个矩阵对应元素乘积组成的新矩阵。

将张量乘以或加上一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘。

默认情况下,调用求和函数.sum()会沿所有的轴降低张量的维度,使它变为一个标量,还可以指定张量沿哪一个轴来通过求和降低维度。以矩阵为例,为了通过求和所有行的元素来降维(轴0),可以在调用函数时指定axis=0.由于输入矩阵沿0轴降维以生成输出向量,因此输入轴0的维数在输出形状中消失。

A= torch.arange(20,dtype=torch.float32).reshape(5,4)
A_sum_axis0 = A.sum(axis=0)
print(A_sum_axis0,A_sum_axis0.shape)

沿着行和列对矩阵求和,等价于对矩阵的所有元素进行求和。即A.sum(axis=[0,1])等价于A.sum()。一个与求和相关的量是平均值。可以采用.mean()或A.sum()/A.numel()。同样,计算平均值的函数也可以沿指定轴降低张量的维度。

有时在调用函数来计算总和或均值时保持轴数不变会很有用。

sum_A = A.sum(axis=1, keepdims=True)
print(sum_A)

tensor([[ 6.],
        [22.],
        [38.],
        [54.],
        [70.]])

  如果想沿某个轴计算A元素的累积总和,比如axis=0(按行计算),可以调用cumsum函数,此函数不会沿任何轴降低输入张量的维度。

  给定两个向量X、Y,它们的点积X^{T}Y是相同位置的按元素乘积的和。我们也可以通过执行按元素乘法,然后进行求和来表示两个向量的点积。点积在很多场合都很有用,例如给定一组由向量x表示的值,和一组由w表示的权重,x中的值根据权重w的加权和,可以表示为点积x^{T}w。当权重为非负数且和为1时,点积表示加权平均。将两个向量规范化得到单位长度后,点积表示它们夹角的余弦。

x=torch.arange(4,dtype=torch.float32)
y=torch.ones(4,dtype=torch.float32)
print(x,y,torch.dot(x,y))

另外,用torch.sum(x*y)也可以达到相同的效果。

在代码中使用张量表示矩阵-向量积,我们使用与点积相同的mv函数。当为矩阵A和向量x调用torch.mv(A,x)时,会执行矩阵-向量积。注意,A的列维数(沿轴1的长度)必须与x的维数(其长度)相同。矩阵乘法采用.mm()函数,不应与hadamard积混淆。

一个向量的范数告诉我们一个向量有多大,这里考虑的大小概念不涉及维度,而是分量的大小。在线性代数中,向量范数是将向量映射到标量的函数f。给定任意向量x,向量范数要满足一些属性。1.如果按常数因子a缩放向量的所有元素,其范数也会按相同常数因子的绝对值缩放:f(ax)=|a|f(x).2.三角不等式:f(x+y)\leqslant f(x)+f(y).3.范数必须是非负的。4.范数最小为0,当且仅当向量全由0组成。实际上,欧几里得距离是一个L2范数,是向量元素平方和的平方根。计算L2范数用.norm()函数。L1范数表示为向量元素的绝对值之和,我们用abs(u).sum()来计算它。

L2范数和L1范数都是更一般的Lp范数的特例:

||X||_{p}=(\sum_{i=1}^{n}|x_{i}|^{p})^{1/p}

类似于向量的L2范数,矩阵X \in \mathbb{R}^{m*n}的Frobenius范数是矩阵元素平方和的平方根:

||X||_{F}=\sqrt{\sum_{i=1}^{m}\sum_{j=1}^{n}x_{ij}^{2}}

Frobenius范数满足向量范数的所有性质,它就像是矩阵形向量的L2范数。调用以下函数将计算矩阵的Frobenius范数:torch.norm(torch.ones((4,9)))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值