白话向量点积
点积(Dot Product)是机器学习中最常见的向量操作。本文将通过简洁易懂的语言配合大量图形为大家介绍点积运算及其背后的数学意义。
背景知识
对于长度为 $n$ 的两个向量 $a$ 和 $b$,
$$ \begin{aligned} a &= [a_1, a_2, a_3,\dots,a_n]\\ b &= [b_1, b_2, b_3,\dots,b_n] \end{aligned} $$
点积可以用来表示它们之间的关系。 例如,它们指向同一个方向还是相反的方向? 它们彼此垂直吗?
两个向量进行点积运算的结果是标量,因此点积有时也称为标量积。
为了让大家建立对点积工作原理的直觉,我们从其几何定义开始。
几何视角
点积的几何形式如下:
$$ a ⋅ b = \Vert a \Vert \: \Vert b \Vert \cos\theta $$
上面公式包含3个部分:
- $\Vert a \Vert$: 向量 $a$ 的大小
- $\Vert b \Vert$: 向量 $b$ 的大小
- $\enspace\theta\enspace$: 向量 $a,b$ 之间的夹角
向量的大小
向量长度直观看上去就是一个用勾股定理计算斜边长度。对于二维向量来说就是 $\sqrt{x^2+y^2}$,对于三维向量来说就是 $\sqrt{x^2+y^2+x^2}$ 。推而广之,$n$ 维向量的长度为
$$ \Vert v \Vert = \sqrt{v_1^2 + v_2^2 + \dots + v_n^2} $$
Cosine
$\cos\theta$ 将向量 $a$ 投影到向量 $b$ 。上图中,向量 $a$ 和向量 $b$ 指向不同方向,所以 $\Vert a \Vert \cos\theta$ 将向量 $a$ 的一部分投影到向量 $b$ 的方向上。反过来视为将向量 $b$ 投影到向量 $a$ 也可以,
举例
当向量之间的角度和大小已知时,几何视角很有用,如上例所示。 在这个例子中,计算点积很容易。
$$ \begin{aligned} \Vert a \Vert &= \sqrt{(-6)^2+8^2} = 10\\ \Vert b \Vert &= \sqrt{5^2+12^2} = 13\\ \theta &= 59.5°\\\\ \therefore a ⋅ b &= \Vert a \Vert \Vert b \Vert \cos\theta\\ &=10 \times 13 \times \cos(59.5) \\ &=65.9799871849 \end{aligned} $$
几何意义
上面的结果有什么意义呢?
我们都知道当两个向量指向相同方向时,它们之间的角度为 $\theta = 0°$ 或 $0$ 弧度。 这意味着 $\cos(\theta)$ 的结果为 1,此时点积最大。如果两个向量指向相反方向时,它们之间的角度为 $\theta = 180°$ 或 $\pi$ 弧度。 这意味着 $\cos(\theta)$ 的结果为 -1,此时点积最小。当 $\theta = 90°$ 或 $\pi/2$ 弧度时,$\cos(\theta)$ 的结果为 0,此时点积为0。当点积为 0 时,意味着两个向量彼此垂直或正交。
方向关系 | 计算结果 | |
---|---|---|
完全同向 | $+AB$ | |
基本同向 | $\lt +AB$ | |
垂直 | $0$ | |
基本反向 | $\gt -AB$ | |
完全反向 | $-AB$ |
坐标视角
在坐标视角下,我们只知道向量的坐标,不知道向量间的夹角,此时点积的代数形式可以不需要角度来计算点积。在坐标视角下,只需每个向量的对应分量相乘,相加后最终结果等同于几何视角的结果。下面是点积的代数形式:
$$ a ⋅ b = [a_0b_0+a_1b_1+\dots+a_nb_n] = \sum_{i=1}^na_ib_i $$
还是用上面的例子,用坐标视角计算向量 $a, b$ 的点积
$$ a ⋅ b = (-6)\times5+8\times12 = -30+96 = 66 $$
可见结果与几何视角的计算结果非常接近,误差可以忽略不记。
两种视角的等价性
要解释两种视角的等价性,需要引入标准基(Standard basis,也叫自然基或规范基)的概念。数学上,坐标向量空间的标准基是指向量分量只有一个1,其余都为0的向量的向量。举个例子很容易理解,在平面坐标系中,标准基有 2 个向量
$$ e_x=(1,0), \quad e_y=(0,1) $$
同理三维空间中,标准基有 3 个向量
$$ e_x=(1,0,0), \quad e_y=(0,1,0), \quad e_z=(0,0,1) $$
这里 $e_x$ 与 $x$ 轴同向,且长度为1;$e_y$ 与 $y$ 轴同向;$e_z$ 与 $z$ 轴同向。
标准基可以将任意向量分解为各分量与标准基的线性组合,比如三维空间中的向量 $v$ 可以表示为:
$$ v_xe_x+v_ye_y+v_ze_z $$
其中 $v_x, v_y, v_z$ 是向量 $v$ 的分量。
标准基中的向量都是正交的且长度为单位长度1,因此正交基具有如下性质:
$$ e_i ⋅ e_i = 1\\ e_i ⋅ e_j = 0 \quad(i \ne j)\\ $$
这两个性质很好证明,大家可以自行运用上面讲过几何视角和坐标视角去证明。
有了标准基的概念后,我们可以将向量表示成分量与标准基的线性组合:
$$ a = [a_1, a_2, \dots, a_n] = \sum_{i=1}^na_ie_i\\ b = [b_1, b_2, \dots, b_n] = \sum_{i=1}^nb_ie_i\\ $$
由于标准基向量的长度都为1,即 $\Vert e_i \Vert = 1$,当向量与标准基点乘时,得到的是向量的各分量:
$$ a ⋅ e_i = \Vert a \Vert \Vert e_i \Vert \cos\theta_i = \Vert a \Vert \cos\theta_i = a_i $$
这里 $a_i$ 就是向量 $a$ 在 $e_i$ 方向上的分量。
运用分配律带入点积的几何形式,就得到
$$ a ⋅ b = a ⋅ \sum_{i=1}^nb_ie_i = \sum_{i=1}^nb_i(a ⋅ e_i) = \sum_{i=1}^nb_ia_i = \sum_{i=1}^na_ib_i $$
上面式子的结果正是点积的代数定义。 所以点积的几何形式与代数形式是等价的。
点积的作用
物理中很多量都是矢量(既有大小也有方向),这些矢量可以通过点积连接。比如:
$$ \text{功} = (\vec{力}) ⋅ (\vec{距离}) $$可以计算两个向量的夹角,比如:
$$ \vec{u} = (81, -15)\\ \vec{v} = (22, 37) \\ \text{无需作图,通过代数形式可以计算得:}\\ \vec{u}⋅\vec{v} = 81 \times 22+(-15)\times37 =1227\\ \text{再根据几何形式有:}\\ \Vert u\Vert = \sqrt{81^2+(-15)^2} = 81.09\\ \Vert v\Vert = \sqrt{22^2+37^2} = 43.05\\ \Vert u\Vert \Vert v\Vert = 3491 \\ \cos\theta = \frac{\vec{u}⋅\vec{v}}{\Vert u\Vert \Vert v\Vert} = \frac{1227}{3491} = 0.351475222 \\ \theta = \cos^{-1}(0.351475222) = 69.42° $$
总结
点积是机器学习中最常见的向量操作。上面内容为了简单易懂可能在数学上有失严谨,全面严谨的讲解建议大家系统性地学习一下线性代数,这里推荐 Gilbert Strang 老爷子的 Introduction to Linear Algebra,这本书是我读过对初学者最友好的线性代数书。