内积和外积都是一种广义的称呼,我们最常见的内积是点积(数量积、标量积和点积定义相同),即对应元素乘然后累加;
但是,我们最容易弄错外积的定义,我们理解的两个向量运算得到第三个向量,且其方向垂直于另外两个向量的运算严格上叫叉积、叉乘或向量积,而非外积。外积有其单独定义,其对向量运算的结果为矩阵。
那么假设有两个向量:
a
=
[
a
1
a
2
a
3
]
;
b
=
[
b
1
b
2
b
3
]
a=\left[\begin{array}{c} a_1 \\ a_2 \\ a_3 \end{array}\right]; b= \left[\begin{array}{c} b_1 \\ b_2 \\ b_3 \end{array}\right]
a=
a1a2a3
;b=
b1b2b3
内积(Inner Product)
欧几里得空间(Euclidean space)是内积空间(inner product space)的一个特例。在实数域且有限维的内积空间(Inner product space)被称作欧几里得空间(Euclidean space)
欧式空间的本质性,是其平面性.
一句话总结:欧几里得空间就是在对现实空间的规则抽象和推广(从n<=3推广到有限n维空间)。欧几里得几何就是中学学的平面几何、立体几何,在欧几里得几何中,平行线任何位置的间距相等。
内积最常见的形式是欧氏空间中的内积,也就是常说的点积(dot product),点积也被称为数量积(scalar product)。
内积的表示形式
那么内积的计算结果是一个标量,其计算形式有两种:
a
⋅
b
=
∣
a
∣
∣
b
∣
c
o
s
(
θ
)
=
a
1
b
1
+
a
2
b
2
+
a
3
b
3
\begin{align} a \cdot b &= |a||b|cos(\theta) \\ &= a_1b_1+a_2b_2+a_3b_3 \end{align}
a⋅b=∣a∣∣b∣cos(θ)=a1b1+a2b2+a3b3
内积的意义
-
几何关系:点积可以用来描述一个向量在另一个向量方向上的投影,同时还可以用来计算向量之间的夹角(仅对二维空间有效)。
-
相关性:内积可以理解为表示了两个向量之间的相干性,若两个向量正交(无相干性),则点积为0;而点积越大表示两个向量的相干性越强。
外积(Outer Product)
外积是更广义的说法,宽松的说,他在一定的语境中和叉积、叉乘、向量积都表示求垂直于两个向量的新向量,但是在更严格的语境中,外积还是不等价于上述三种乘积的。严格意义上来说,外积划分情况如下:
外积的表示形式
外积可以分为以下几种含义,维基百科中注明了这几个的差别:
- External product,又名**叉积(英语:cross product)和向量积**(英语:vector product),常写为 a × b a \times b a×b;
- Outer product,见**外积 (张量积)**,常写为 a ⊗ b a \otimes b a⊗b;
- Exterior product,又名**楔积**(英语:wedge product),常写为 a ∧ b a \wedge b a∧b;(不常见,不做讨论)
External Product
在数学和向量代数领域(也就是解析几何领域),外积(external product)又称叉积(cross Product)、叉乘、向量积,是对三维空间中的两个向量的二元运算(即两个向量的法向量)。
英文中的 external , cross , vector product 均为此定义, 同时也是最广为人知的一个外积的定义(于中学课本中常见),此外积仅在三维空间中定义。
那么其表示形式为:
KaTeX parse error: Expected 'EOF', got '&' at position 13: a \times b &̲= \left|\begin{…
该法向量的模表示为
∣
a
×
b
∣
=
∣
a
∣
∣
b
∣
s
i
n
(
θ
)
|a \times b|=|a||b|sin(\theta)
∣a×b∣=∣a∣∣b∣sin(θ)
Outer Product
Outer Product是线性代数中的外积,也就是张量积。(这也就是中学中学习的普通矩阵/向量的计算)
在线性代数中一般指两个向量的张量积,其结果为矩阵,其表示为:
a
⊗
b
=
[
a
1
a
2
a
3
]
⊗
[
b
1
b
2
b
3
]
=
[
a
1
b
1
a
1
b
2
a
1
b
3
a
2
b
1
a
2
b
2
a
2
b
3
a
3
b
1
a
3
b
2
a
3
b
3
]
a \otimes b = \left[\begin{array}{c} a_1 \\ a_2 \\ a_3 \end{array}\right] \otimes [b_1 \; b_2 \; b_3] =\left[\begin{array}{c} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array}\right]
a⊗b=
a1a2a3
⊗[b1b2b3]=
a1b1a2b1a3b1a1b2a2b2a3b2a1b3a2b3a3b3
外积是将结果的维度扩张到二维,而内积呢,其结果将维度缩减到了标量(所以可以从这个点理解外积和内积)
torch中使用
torch.mm()
或torch.matmul()
补充1:Kronecker Product
外积是一种特殊的克罗内克积(kronecker product)。为什么这样说呢?因为数学上,克罗内克积是两个任意大小的矩阵间的运算。
如 A A A矩阵是一个 m × n m \times n m×n的矩阵,而 B B B是一个 p × q p \times q p×q的矩阵,那么克罗内克积则是一个维度为 ( m n ) × ( p q ) (mn) \times (pq) (mn)×(pq)的分块矩阵。具体的计算形式可以看这篇博客。
numpy中 使用
np.kron
实现。克罗内克积的表示形式为 A ⊗ B A \otimes B A⊗B。
补充2:Hadamard Product
矩阵元素积(element-wise product, point-wise product),又称作哈达玛积(hadamard product),对应元素相乘,结果还是向量/矩阵,那么这样就要求两个相乘的向量/矩阵必须行列数相同。
numpy中 使用
np.multiply
或*
实现元素积。torch中 使用
*
或torch.mul
元素积表示形式为 A ⊙ B A \odot B A⊙B
Note:深度学习论文中,矩阵的计算一般为张量积和哈达玛积,即 ⊗ \otimes ⊗就是普通的矩阵乘法, ⊙ \odot ⊙表示矩阵对应位置元素相乘