1 张量的乘法
张量乘法(Tensor Product)是一种在线性代数中常常使用的积分形式,它与标准的乘法类似,但在多个维度上进行操作。它在高维空间中的数学运算,有助于在机器学习中解决类似图像处理,自然语言处理和深度学习这样的复杂任务。
张量乘法可以用来模拟神经元之间的连接,模拟神经元网络的发展。它也可以用来模拟复杂的模型,如语言模型,神经机器翻译,自动驾驶以及智能搜索等机器学习任务。
张量乘法被视为人工智能领域中的关键技术,是解决复杂任务的有力工具。它不仅可以把矢量转换成矩阵,还可以与大量其他算法,如神经网络,支持向量机,卷积网络等,结合使用,从而发挥最大的效用。
2 张量乘法的分类
按照不同维度的张量,其乘法计算的方法也会存在差别。
以下介绍几种常用的计算方法。
2.1 一维张量
可用于一维张量的乘法计算的有:
- dot()
点乘,计算两个1维向量的内积。
几何意义: 如果点乘的结果为0,则表示a在b上的投影为0,表示a和b是正交的。如果正交,表示这两个向量不相干。
- vdot()
计算一个维度上两个1维向量的点积。
计算方式为
公式中的 表示复向量的共轭,如果是实向量则为它本身。
在对虚数计算点积时,实际上是用原虚数的共轭虚数来进行计算。
- matmul()
叉乘,两个向量的外积,又叫叉乘、叉积向量积,其运算结果是一个向量而不是一个标量。只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。
行为取决于张量的维度,如下所示:
如果两个张量都是一维的,则返回点积(标量)。
如果两个参数都是2维的,则返回矩阵与矩阵的乘积。
几何意义: 在三维几何中,向量a和向量b的外积结果是一个向量,有个更通俗易懂的叫法是法向量,该向量垂直于a和b向量构成的平面。
- inner()
内积,计算1维张量的点积。对于较高的维度,是求输入元素和其他元素沿其最后一个维度的乘积。
2.1.1 实数计算
对于两个同为1行2列的一维的实数来说,这些方法的计算结果均相同。
计算的方法是:同列元素相乘后的结果,再相加,即
a=tensor([2, 4])
b=tensor([1, 5])
结果=(2*1)+(4*5)= 22
2.1.2 虚数计算
在前边的概念里,可以看到 vdot() 方法在计算点积时,并不是使用的原虚数,因此计算的结果,与其它几个方法不同。
定义两个复数
x=a+bj
y=c+dj
计算其乘法的结果应当是:
(ac-bd)+(bc+ad)j = 1.2959+1.2644j
但是 vdot() 方法是先将第一个张量中的虚数转换为其共轭虚数,即 a-bj,所以它得到的结果是:
(ac + bd)+(-bc+ad)j = 1.8054+0.1353j
2.2 二维张量
在做二维张量的乘法计算时,dot() vdot() 方法将不再适用,取而代之的是 mm() 方法。
2.3 三维张量
对于三维张量,mm() 方法不能使用,因此需要使用 bmm() 方法,同时要适用这些方法,对于参与运算的张量各维度数都有限制。
bmm() 方法要求两个张量都必须是三维张量,且每个张量都包含相同数量的矩阵,即前两个维度的数量必须相同。
inner() 方法,则要求两个张量的维度和各个维度的数量,都必须相同。
以及 matmul() 方法。
2.4 高维张量
对于高维张量的乘法运算,可以使用以下方法:
- matmul() 方法
- inner() 方法