外积:
两个向量的内积返回一个标量,两个向量的外积则返回一个矩阵。不同于内积的运算,外积运算不要要求两个向量有相同数量的元素。具体来说,将包含m个元素的向量a与包括n个元素的向量b做外积,结果为由向量a中的每一个元素与向量b中的每一个元素相乘后得到的矩阵。
记号 说明了向量外积的计算过程。请注意外积极符号 与内积符号: 的区别,但它们都假定a和b是列向量。关于外积,目前还没有统一的表示符号,主要原因可能在于这种矩阵相乘的形式已经足够方便,部分原因可能在于外积的运用没有内积那么广泛。不过,我们有时还是能看到“ ”表示外识运算的情况。
NumPy提供了专门用于计算外识的函数np.outer:
- >>> import numpy as np
- >>> a = np.array([1,2,3,4])
- >>> b = np.array([5,6,7,8])
- >>> np.dot(a,b)
- np.int64(70)
- >>> np.outer(a,b)
- array([[ 5, 6, 7, 8],
- [10, 12, 14, 16],
- [15, 18, 21, 24],
- [20, 24, 28, 32]])
-
这里仍使用之前内积运算中用到的向量a和b。正如我们所料,np.do函数返回a.b的标量结果。np.outer函数则返回一个4*4的矩阵,其中每行分别是向量b依次与向量a中第个元素相乘的结果。因次,向量a中的每个元素都与向量b中的每个元素做了一次乘积。由两个向量的大小都是4,因此我们最得到一个4*4的矩阵。
在深度学习中,外积的这种输入的所有组合融合到一起的能力,经常被用在神经网络协同过滤和视觉问答系统中。在一些基于高级神经网络实现的推荐系统或基于图片的问答系统中,就会用到这些运算。在这些应用中,外积运算会出现对不同词嵌入进行混合的场景中。词嵌入是神经网络层产生的向量,例如在传统的卷积神经网络中,Softmax层之前的最一个全连接层的输出就可以作为词嵌入。词嵌入层通常可以看视网络对输入学到的新的表征,或者视为将一个复杂的输入(如图像)映射到某低给空间。
|