Skip to content
BaiRuic
Go back

内积 外积 叉积

目录
📢

内积运算应该是机器学习中使用最多的,因此本文着重介绍了内积!其次是外积。至于叉积,目前还没在机器学习相关论文上看到过。

内积(Inner product)

首先从内积空间引入到内积运算。然后介绍常见的几个内积空间中具体的内积定义。(Wikipedia上关于内积的介绍也是在内积空间的条目中的,甚至没有单独给内积一个页面,可见,要了解内积还是得从内积空间开始)

内积空间是具有内积运算的向量空间,这使得在该空间中可以定义向量的长度(范数)和向量之间的夹角。该空间是对实数向量空间Rn\mathbb{R}^n的推广。常见的内积空间有实数向量空间Rn\mathbb R^n、复数向量空间 Cn\mathbb C^n、函数空间 C∞(R)\mathcal{C}^\infty(\mathbb{R})、矩阵空间 Fm×n\mathbb{F}^{m \times n}等。

那什么是内积运算呢?内积运算就是把向量空间V\mathbb V中的两个向量映射到标量场 F\mathbb F中的一个标量,是 V×V→F\mathbb V \times \mathbb V \rightarrow \mathbb F 的函数,通常表示为 ⟨x,y⟩\langle \mathbf x,\mathbf y\rangle 或者 (x,y)(\mathbf x,\mathbf y)。

内积运算需满足如下性质:

  • 对称性 ⟨x,y⟩=⟨y,x⟩\langle \mathbf x, \mathbf y\rangle = \langle \mathbf y, \mathbf x\rangle
  • 线性 ⟨ax,y⟩=a⟨x,y⟩\langle a \mathbf x, \mathbf y\rangle = a \langle \mathbf x, \mathbf y\rangle
  • 双线性 ⟨x+y,z⟩=⟨x,z⟩+⟨y,z⟩\langle \mathbf x+\mathbf y, \mathbf z\rangle = \langle \mathbf x, \mathbf z\rangle + \langle \mathbf y, \mathbf z\rangle
  • 正定性 ⟨x,y⟩>0,if  x≠0\langle \mathbf x, \mathbf y\rangle > 0, \text{if}\; \mathbf x\neq 0

满足了这些性质才确保了内积空间中向量的长度(范数)和向量之间的角度的概念是有意义的。

💡

“长度”和”夹角”并不是一个向量空间天然具有的特性,需要额外引入内积的定义,即让两个向量点乘之后得到一个标量,才借此产生出了模长和夹角,进而可以定义什么是标准化(模长为1),什么是正交化(夹角垂直)。引入了内积的线性空间称为内积空间。

具体而言,内积空间中向量的范数∥⋅∥\| \cdot \|定义为向量与自身的内积的平方根,即:

∥x∥=⟨x,x⟩\| \mathbf{x} \| = \sqrt{\langle \mathbf{x}, \mathbf{x} \rangle}

另外,内积空间中,两个非零向量 x\mathbf{x} 和 x\mathbf{x} 的夹角 θ\theta 可以通过它们的内积及范数根据余弦公式计算:

cos⁡θ=⟨x,y⟩∣x∣∣y∣\cos \theta = \frac{\langle \mathbf{x}, \mathbf{y} \rangle}{|\mathbf{x}| |\mathbf{y}|}

接下来介绍工科应用中最常见的几个内积空间及对应的内积运算。

实数向量空间R^n 点乘

在 Rn\mathbb R^n 向量空间中,内积又称为点积(因此点积是内积的一个特例,这也是为什么工科中,经常把点积和内积这两个专业词混着用的缘由)。点积定义如下:对任意两个 nn 维向量x=(x1⋮xn)∈Rn\mathbf x=\begin{pmatrix} x_1 \\ \vdots \\ x_n \end{pmatrix} \in \mathbb R^n 和 y=(y1⋮yn)∈Rn\mathbf y=\begin{pmatrix} y_1 \\ \vdots \\ y_n \end{pmatrix} \in \mathbb R^n,其内积(点积) ⟨x,y⟩=x1∗y1+x2∗y2+⋯+xn∗yn\langle \mathbf x, \mathbf y\rangle = x_1 * y_1 + x_2 * y_2 + \cdots + x_n * y_n

复数向量空间C^n 复点乘

在 Cn\mathbb C^n 向量空间中,内积定义如下:对任意两个 nn 维向量x=(x1⋮xn)∈Cn\mathbf x=\begin{pmatrix} x_1 \\ \vdots \\ x_n \end{pmatrix} \in \mathbb C^n 和 y=(y1⋮yn)∈Cn\mathbf y=\begin{pmatrix} y_1 \\ \vdots \\ y_n \end{pmatrix} \in \mathbb C^n,其内积 ⟨x,y⟩=x1∗y1‾+x2∗y2‾+⋯+xn∗yn‾\langle \mathbf x, \mathbf y\rangle = x_1 * \overline{y_1} + x_2 * \overline{y_2} + \cdots + x_n * \overline{y_n}

其中,yi‾\overline{y_i} 为 yiy_i 的共轭复数。

矩阵空间

矩阵的内积定义为两个矩阵对应位置元素乘积之和,也因此,矩阵内积仅在尺寸相同时有定义。给定m∗nm*n矩阵AA和BB,则矩阵AA和BB的内积为:

⟨A,B⟩=trace(ATB)=∑i=1m∑j=1nAijBij\langle A, B \rangle = \text {trace}(A^TB) = \sum_{i=1}^{m} \sum_{j=1}^{n} A_{ij} B_{ij}

矩阵内积又称为Frobenius inner product,利用该内积,可以计算矩阵A的Frobenius norm为

∣A∣F=⟨A,A⟩=∑i=1m∑j=1n∣Aij∣2 |A|_F = \sqrt {\langle A, A \rangle} = \sum_{i=1}^m \sum_{j=1}^n |A_{ij}|^2

如果将矩阵展平成一个长向量(将矩阵的每一行依次排列成一个长向量),那么这个长向量的 22 范数就与原矩阵的 Frobenius 范数相同。

外积(Outer product)

在线性代数中,两个向量u\mathbf u和v\mathbf v的外积(Outer product)是一个矩阵。如果这两个向量的维数分别为nn和mm,那么它们的外积是一个n×mn×m矩阵,且该矩阵秩为11,其中行向量为向量 u\mathbf u 的缩放版本,列向量是向量 v\mathbf v 的缩放版本。

给定两个向量u\mathbf u和v\mathbf v,它们的外积定义为一个矩阵,记作 u⊗v\mathbf{u} \otimes \mathbf{v}:

u⊗v=uvT\mathbf{u} \otimes \mathbf{v} = \mathbf{u} \mathbf{v}^T

改矩阵中每个元素的值为:

(u⊗v)ij=uivj(\mathbf{u} \otimes \mathbf{v})_{ij}=u_i v_j

更一般的,给定两个张量(多维数组),它们的外积是张量。张量的外积也被称为它们的张量积,可以用来定义张量代数。

外积运算在线性代数中有许多应用,例如在矩阵分解、协方差矩阵的构造等方面(别的实在想不出来了…)。

📢

注:外积不像内积这样有数学上深刻的含义,更多的仅仅是定义了一种向量的计算方式。

叉积(Cross product,叉乘)

在数学中,叉积(Cross product)或向量积(Vector product)是在三维欧几里得向量空间中对两个向量的二元运算,用符号×\times表示。给定两个线性无关的向量u\mathbf{u} 和v\mathbf{v},叉积u×v\mathbf{u} \times \mathbf{v}是一个垂直于u\mathbf{u}和 v\mathbf{v}的向量,因此垂直于包含它们的平面。

在三维空间中,两个向量u=(u1u2x3)\mathbf u=\begin{pmatrix} u_1 \\ u_2 \\ x_3 \end{pmatrix}和v=(v1v2v3)\mathbf v=\begin{pmatrix} v_1 \\ v_2 \\ v_3 \end{pmatrix}的叉积u×v\mathbf{u} \times \mathbf{v}可以表示为一个行列式:

u×v=∣ijku1u2u3v1v2v3∣\mathbf{u} \times \mathbf{v} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ u_1 & u_2 & u_3 \\ v_1 & v_2 & v_3 \end{vmatrix}

其中,i,j,ki,j,k 是单位向量分别沿 x,y,zx,y,z 方向。这个行列式计算的结果是一个新的向量,如下,即为叉积的结果向量:

u×v=(u2v3−u3v2u3v1−u1v3u1v2−u2v1)\mathbf{u} \times \mathbf{v} =\begin{pmatrix} u_2 v_3 - u_3 v_2 \\ u_3 v_1 - u_1 v_3 \\ u_1 v_2 - u_2 v_1 \end{pmatrix}

叉积在物理、工程和计算机编程中有许多应用。如在物理学中,叉积常用于描述力和位移的乘积,计算扭矩(torque)。在计算机科学中,许多凸包算法(如 Graham 扫描算法)利用叉积来确定三个点的方向,从而判断哪些点位于凸包的边界上。

📢

注:叉积在机器学习中很少用到,至少我没在论文中看到过,但是很多blog会把叉乘和外积弄混。甚至GPT-3.5也会把它弄混,严重怀疑是中文圈搞混的文章太多了,以至于污染了训练数据。

参考