向量点积这东西,说白了就是两个东西在“打架”要么“拥抱”的时候,到底能释放出多少能量。
不用非得整那些复杂的数学符号,就把它想象成两个人面对面站着,你左撇子他右撇子,左手那个家伙伸过来握右手那个家伙,可是手都是朝前的。
这时候他们之间的夹角拍板了这事儿到底顺不顺。 一般大家认定夹角是 90 度最好,出于这时候点积归零,两不相干。
要是夹角大于 90 度,你略微用手肘顶一下,他往回缩,点积就变成负数了,这在物理上就代表有人在抵抗。
要是夹角就是 0 度,那就是全人类最强的握手方式,直接给你全体能量。大家习惯用余弦公式算,$a cdot b = |a||b|costheta$,但这玩意儿有点忒正了。 我更喜爱用几何直观去理解,就连能把它拆解成最好办的加法。
你看,两个向量 $a$ 和 $b$,截取一个小三角形,夹着这两条线。
这个三角形的面积,实际上和它们的夹角有个直接关系。三角形面积等于底乘以高除以二,这里高就是 $|a||b|sintheta$,底是 $|a||b|$ 吗?不对,底实际上是两边夹的角对应的对边长度,也就是 $2|a||b|sin(theta/2)$。
故此三角形面积就是 $|a||b|sin(theta/2)$。 而点积呢,在向量运算里,$a cdot b$ 实际上是被夹住的那条对角线的平方,也就是 $|a|^2 + |b|^2 - |a-b|^2$。展开这个式子,你会发现它跟 $costheta$ 是负号关系。
这就好比你拿一根绳子量三角形边长,点积实际上就是那个三角形面积的两倍。
既然面积跟正弦相关,那点积跟余弦就有必然联系。 举个例子,假设你在做工程仿真,有两个载荷向量。
第一个方向是东南西北的 $0.5$ 倍力度,第二个方向是西南西北的 $0.6$ 倍力度。
要是它们夹角是 90 度,那点积就是 $0.5 times 0.6 = 0.3$。
这 0.3 代表啥?代表这两个力在垂直方向上没有分量干扰,剩下的全是有效推力。 要是是斜着抱呢?比如夹角是 60 度。
这时候 $cos60^circ$ 是 $0.5$,点积就是 $0.5 times 0.6 times 0.5 = 0.15$。
这说明别看力度不小,但方向忒偏了,互相抵消了一些。
要是夹角是 120 度,$cos120^circ$ 是 $-0.5$,点积变成负值,意味着这两个向量实际上是互相排斥的,一个推西,一个推东,中心点会被推开。 在机器学习里,这种点积显赫。
比如训练一个分类模型,特征向量 $x$ 和标签向量 $y$。别看标签本身不能参与运算,但我们在构建损失函数要么做梯度下降的时候,都会用到这个。
要是两个向量夹角大,学到的模式就是错的;要是夹角小,说明它们有重叠局部,能够用来优化。 有时候人们会认定点积是个黑盒公式,记不住。
实际上有个更通俗的算法叫矩积。你手里有个积分算子,输入两个函数,输出你期望的点积结局。在数值计算里,这实际上就是把向量做点积再除以模长。
要是你把向量坐标写成矩阵的行和列,矩阵乘法本质上就是所有行乘以对应的列,求和,这实际上就是定义了点积。 再拿个具体数据看看。假设向量 $a$ 是 $(10, 0)$,向量 $b$ 是 $(0, 8)$。
这是十字形,点积肯定是 0。
要是向量 $b$ 变成 $(3, 4)$,那 $a cdot b = 10 times 3 + 0 times 4 = 30$。
这里 $30$ 等于 $|b|$ 乘以 $|b|$ 的余弦值吗?$|b|=5$,$costheta = 30/25 = 1.2$?不对,余弦值不能大于 1。
哦,什么的,$30 = 10 times 3$,这是点积公式 $a cdot b = |a||b|costheta$ 里的 $|a||b|costheta$ 等于 $10 times 5 times costheta$。
要是点积是 30,那 $costheta$ 就是 $3$,这在数学上是不可能的,说明啥?说明这两个向量不可能与此同时存有。我算错了,应当是 $a cdot b = 10 times 3 + 0 times 4 = 30$。
那 $|a|=10, |b|=5$。$10 times 5 times costheta = 30 Rightarrow 50costheta = 30 Rightarrow costheta = 0.6$。
哎,原来 0.6 是合法的。之前我认定 $30$ 如此大直接矛盾,实际上是理解错了余弦值。向量长度直接结合,点积就出来了。 还有说点积是“内积”的,实际上这就是内积的通俗叫法。内积就是在数学里最标准的定义,就是两个向量的某种配合法。在物理力学里,就是力矩要么位移的复合。在几何里,就是把两个向量合成一个新向量,然后再求长度。 有时候为了计算撇脱,我们会用分量形式。
要是你有两个向量,你只需求把对应的坐标乘起来加起来就行。
要是座标轴是正交的,比如 Cartesian 坐标系,那点积就特别好办,就是 $x_1x_2 + y_1y_2$。但要是是在球坐标系里,要么曲线坐标系里,坐标轴可能不垂直,这时候就得小心了,务必把坐标转换成正交的,要么用矩阵乘法处理。 实际上点积最了得的地方在于它能把向量运算变成标量运算。
本来向量运算需求处理方向、模长这些复杂信息,一旦算出点积,就是一个纯数字。
这个数字直接告诉你两个向量走了多远,要么夹角大约多大。在图像处理里,像素点也是向量,两个像素点比较,点积就能算出它们的相似度。
要是点积接近,说明这两个像素颜色挺像,归于同一个物体;要是不接近,可能就是不同物体。 自然,点积有时候也会让人困惑。
比如零向量。零向量模长是 0,不管如何乘点积,结局都是 0。
这意味着零向量跟任何向量都“无缘”,出于它没有方向。在数据清洗时,我们会把零向量剔除,出于它代表无意义。 最终总结一下,点积实际上就是两个向量在同一个平面内,按照夹角做的某种投影之和。它把几何上的角度关系,转化成了代数上的数值关系。
不用背公式,只要记住:夹角越小,数值越大;夹角越接近 180 度,数值越负;夹角是 90 度,数值为零。
这就是向量点积最本质的样子。