内积运算应该是机器学习中使用最多的,因此本文着重介绍了内积!其次是外积。至于叉积,目前还没在机器学习相关论文上看到过。
内积(Inner product)
首先从内积空间引入到内积运算。然后介绍常见的几个内积空间中具体的内积定义。(Wikipedia上关于内积的介绍也是在内积空间的条目中的,甚至没有单独给内积一个页面,可见,要了解内积还是得从内积空间开始)
内积空间是具有内积运算的向量空间,这使得在该空间中可以定义向量的长度(范数)和向量之间的夹角。该空间是对实数向量空间Rn的推广。常见的内积空间有实数向量空间Rn、复数向量空间 Cn、函数空间 C∞(R)、矩阵空间 Fm×n等。
那什么是内积运算呢?内积运算就是把向量空间V中的两个向量映射到标量场 F中的一个标量,是 V×V→F 的函数,通常表示为 ⟨x,y⟩ 或者 (x,y)。
内积运算需满足如下性质:
- 对称性 ⟨x,y⟩=⟨y,x⟩
- 线性 ⟨ax,y⟩=a⟨x,y⟩
- 双线性 ⟨x+y,z⟩=⟨x,z⟩+⟨y,z⟩
- 正定性 ⟨x,y⟩>0,ifx=0
满足了这些性质才确保了内积空间中向量的长度(范数)和向量之间的角度的概念是有意义的。
“长度”和”夹角”并不是一个向量空间天然具有的特性,需要额外引入内积的定义,即让两个向量点乘之后得到一个标量,才借此产生出了模长和夹角,进而可以定义什么是标准化(模长为1),什么是正交化(夹角垂直)。引入了内积的线性空间称为内积空间。
具体而言,内积空间中向量的范数∥⋅∥定义为向量与自身的内积的平方根,即:
∥x∥=⟨x,x⟩
另外,内积空间中,两个非零向量 x 和 x 的夹角 θ 可以通过它们的内积及范数根据余弦公式计算:
cosθ=∣x∣∣y∣⟨x,y⟩
接下来介绍工科应用中最常见的几个内积空间及对应的内积运算。
实数向量空间R^n 点乘
在 Rn 向量空间中,内积又称为点积(因此点积是内积的一个特例,这也是为什么工科中,经常把点积和内积这两个专业词混着用的缘由)。点积定义如下:对任意两个 n 维向量x=x1⋮xn∈Rn 和 y=y1⋮yn∈Rn,其内积(点积) ⟨x,y⟩=x1∗y1+x2∗y2+⋯+xn∗yn
复数向量空间C^n 复点乘
在 Cn 向量空间中,内积定义如下:对任意两个 n 维向量x=x1⋮xn∈Cn 和 y=y1⋮yn∈Cn,其内积 ⟨x,y⟩=x1∗y1+x2∗y2+⋯+xn∗yn
其中,yi 为 yi 的共轭复数。
矩阵空间
矩阵的内积定义为两个矩阵对应位置元素乘积之和,也因此,矩阵内积仅在尺寸相同时有定义。给定m∗n矩阵A和B,则矩阵A和B的内积为:
⟨A,B⟩=trace(ATB)=i=1∑mj=1∑nAijBij
矩阵内积又称为Frobenius inner product,利用该内积,可以计算矩阵A的Frobenius norm为
∣A∣F=⟨A,A⟩=i=1∑mj=1∑n∣Aij∣2
如果将矩阵展平成一个长向量(将矩阵的每一行依次排列成一个长向量),那么这个长向量的 2 范数就与原矩阵的 Frobenius 范数相同。
外积(Outer product)
在线性代数中,两个向量u和v的外积(Outer product)是一个矩阵。如果这两个向量的维数分别为n和m,那么它们的外积是一个n×m矩阵,且该矩阵秩为1,其中行向量为向量 u 的缩放版本,列向量是向量 v 的缩放版本。
给定两个向量u和v,它们的外积定义为一个矩阵,记作 u⊗v:
u⊗v=uvT
改矩阵中每个元素的值为:
(u⊗v)ij=uivj
更一般的,给定两个张量(多维数组),它们的外积是张量。张量的外积也被称为它们的张量积,可以用来定义张量代数。
外积运算在线性代数中有许多应用,例如在矩阵分解、协方差矩阵的构造等方面(别的实在想不出来了…)。
注:外积不像内积这样有数学上深刻的含义,更多的仅仅是定义了一种向量的计算方式。
叉积(Cross product,叉乘)
在数学中,叉积(Cross product)或向量积(Vector product)是在三维欧几里得向量空间中对两个向量的二元运算,用符号×表示。给定两个线性无关的向量u 和v,叉积u×v是一个垂直于u和 v的向量,因此垂直于包含它们的平面。
在三维空间中,两个向量u=u1u2x3和v=v1v2v3的叉积u×v可以表示为一个行列式:
u×v=iu1v1ju2v2ku3v3
其中,i,j,k 是单位向量分别沿 x,y,z 方向。这个行列式计算的结果是一个新的向量,如下,即为叉积的结果向量:
u×v=u2v3−u3v2u3v1−u1v3u1v2−u2v1
叉积在物理、工程和计算机编程中有许多应用。如在物理学中,叉积常用于描述力和位移的乘积,计算扭矩(torque)。在计算机科学中,许多凸包算法(如 Graham 扫描算法)利用叉积来确定三个点的方向,从而判断哪些点位于凸包的边界上。
注:叉积在机器学习中很少用到,至少我没在论文中看到过,但是很多blog会把叉乘和外积弄混。甚至GPT-3.5也会把它弄混,严重怀疑是中文圈搞混的文章太多了,以至于污染了训练数据。
参考