深度学习常用数学知识

向量的内积 a · b

向量的内积也称为点积,用来计算两个向量之间的相似度。在数学上,两个向量的内积等于将一个向量投影到另一个向量上得到的长度再乘以两个向量之间的夹角的余弦值。

使用PyTorch进行向量的内积计算非常简单,可以通过torch.dot()函数实现。以下是一个示例代码,计算两个向量的内积:

import torch

# 定义两个向量
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])

# 计算内积
dot_product = torch.dot(a, b)

# 输出结果
print(dot_product)

运行以上代码,将会输出内积的结果,即32。

  • 注意,向量的内积要求两个向量的维度相同,否则将会报错。

两个向量a和b的内积可以通过以下数学表达式来表示:

a · b = ||a|| · ||b|| cosθ

其中,

  • a · b 表示向量a和向量b的内积(点积),
  • ||a|| 表示向量a的模长(或范数),
  • ||b|| 表示向量b的模长(或范数),
  • cosθ 表示向量a和向量b之间的夹角的余弦值。

注意,此表达式适用于二维和三维空间中的向量,对于更高维度的向量同样适用。

另外,如果两个向量a和b是n维向量,可以表示为:

a = [a1, a2, …, an]
b = [b1, b2, …, bn]

则内积计算公式可以展开为:

a · b = a1 * b1 + a2 * b2 + … + an * bn

这表示将向量a和向量b对应位置的元素相乘,并将结果累加起来。

Hadamard积 a ⊙ b

Hadamard积,也称为逐元素乘积或Schur积,是指两个具有相同维度的矩阵或向量,对应位置上的元素相乘得到的结果。

假设有两个n维向量a和b,记为:

a = [a1, a2, …, an]
b = [b1, b2, …, bn]

则Hadamard积可以表示为一个新的n维向量c,其每个元素ci满足:

ci = ai * bi

即,c的第i个元素等于a的第i个元素和b的第i个元素相乘。

在数学符号中,Hadamard积通常用⊙表示,因此可以表示为:

c = a ⊙ b

注意,Hadamard积要求两个向量的维度相同,以便对应位置上的元素能够相乘。

在PyTorch中,可以使用torch.mul()函数来计算Hadamard积。以下是一个示例代码,演示了如何使用PyTorch计算两个向量的Hadamard积

import torch

# 定义两个向量
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])

# 计算Hadamard积
c = torch.mul(a, b)

# 输出结果
print(c)

运行以上代码,将会输出Hadamard积的结果:

tensor([ 4, 10, 18])

注意,向量的Hadamard积要求两个向量的维度相同,否则将会报错。

范数

范数(Norm)是用来衡量向量或矩阵的大小的一种度量方式。在数学中,范数是一个将向量映射到非负实数的函数。

对于实数向量x=(x₁, x₂, …, xn),其p范数(p-norm)定义为:

||x||p = (|x₁|^p + |x₂|^p + … + |xn|p)(1/p)

其中,p为范数的指数,取值可以为任意实数(包括无穷大),常用的p值有:

  • 当p=1时,称为L1范数,也叫曼哈顿距离或绝对值范数
  • 当p=2时,称为L2范数,也叫欧氏距离或二范数
  • 当p=∞时,称为无穷范数或者最大范数,计算的是向量元素的最大绝对值

在PyTorch中,可以使用torch.norm()函数来计算向量的范数。以下是一个示例代码,演示了如何使用PyTorch计算向量的L2范数:

import torch

# 定义一个向量
x = torch.tensor([1, 2, 3, 4, 5])

# 计算L2范数
l2_norm = torch.norm(x, p=2)

# 输出结果
print(l2_norm)

运行以上代码,将会输出L2范数的结果:

tensor(7.4162)

同样,可以使用torch.norm()函数来计算其他范数,只需将参数p设置为对应的值即可。

常用范数求导

  • L1 范数
    对于L1范数(绝对值范数)的导数,在向量中每个元素的取值都不为零时,可以直接按元素进行求导,导数等于元素的正负号。具体而言,对于一维向量 x = [x1, x2, …, xn],其L1范数为 ||x||1 = |x1| + |x2| + … + |xn|。

  • L1范数不可微。但是存在次梯度,即是次微分的。
    L1范数的次梯度如下:

    ∂ ∂ x ∥ x ∥ 1 = sign ⁡ ( x ) \frac{\partial}{\partial \mathbf{x}}\|\mathbf{x}\|_{1}=\operatorname{sign}(\mathbf{x}) xx1=sign(x)

其中,
sign ⁡ ( x ) = { + 1 x i > 0 − 1 x i < 0 [ − 1 , 1 ] x i = 0 \operatorname{sign}(\mathbf{x})=\left\{\begin{array}{ll}+1 & x_{i}>0 \\-1 & x_{i}<0 \\{[-1,1]} & x_{i}=0\end{array}\right. sign(x)= +11[1,1]xi>0xi<0xi=0

综上所述,L1范数的导数是一个分段常函数,在每个元素为非零值时等于元素的正负号,在元素为零值时可以使用次梯度来表示。

  • L2 范数
    ∂ ∂ x ∥ x − a ∥ 2 = x − a ∥ x − a ∥ 2 \frac{\partial}{\partial \mathbf{x}}\|\mathbf{x}-\mathbf{a}\|_{2}=\frac{\mathbf{x}-\mathbf{a}}{\|\mathbf{x}-\mathbf{a}\|_{2}} xxa2=xa2xa

数学参考此网址:
https://www.zhihu.com/column/c_1601171263636090880

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值