临近年关,修复ASPNETCore因浏览器内核版本引发的单点登陆故障
向量内积
这个基本上是中学当中数学课本上的概念,两个向量的内积非常简单,我们直接看公式回顾一下:
\[X \cdot Y = \sum_{i=1}^n x_i*y_i\]
这里X和Y都是n维的向量,两个向量能够计算内积的前提是两个向量的维度一样。从上面公式可以看出来,两个向量的内积就等于两个向量对应各个维度的分量的乘积的和。
为了和矩阵乘法以及普通的乘法做区分,我们通常把两个向量的内积写成:\([x, y]=x^Ty\)。
这里有一个很重要的性质,对于一个向量而言,我们可以用欧几里得公式计算它的长度。进一步,我们可以用向量的长度以及向量之间的夹角来表示向量的内积,如下:
\[[x, y]=|x|\cdot |y|\cos\theta\]
其中的\(\theta\)是x和y向量之间的夹角,对于三维及以下空间内的向量,这一点非常直观。对于高维度的向量,我们很难想象它的物理意义。不过没有关系,我们一样可以认为向量之间存在一个广义超空间内的一个夹角。在机器学习领域,我们通常用这个夹角来反应向量之间的相似度。两个向量越相似,那么它们之间的夹角应该越小,对应的cos余弦值应该越大。所以我们可以用两个向量之间的余弦值来反应它们之间的相似度。余弦值的计算就源于此。
正交向量
从上面的公式可以看出来,向量的内积等于两个向量长度乘上向量之间的夹角。对于非零向量而言,它们的长度都应该是大于0的。所以两个向量的内积的大小,就完全取决于向量之间的夹角\(\theta\)。
如果\(\theta\)小于90°,那么\(\cos\theta>0\),那么内积为正值。如果\(\theta\)大于90°,那么余弦值为负值。所以我们可以通过余弦值正负判断夹角是锐角还是钝角。既然说到夹角,自然就离不开一种特殊情况——垂直。
如果是在二维平面当中,两个向量夹角是90°,那么显然这两个向量垂直。在高维空间当中也是一样,不过我们一般不说垂直,而是会换一个词——正交。两个非零向量的内积为0,说明两个向量正交。
正交向量组
搞清楚了正交向量之后,正交向量组也就明确了。正交向量组是指一组两两正交且非零的向量组。
如果n维的向量组:\(a_1, a_2, \cdots,a_r\)两两正交,那么,它们一定线性无关。也就是说不存在一组不为零的系数\(\lambda\),使得:
\[\lambda_1a_1+\lambda_2a_2+\cdots + \lambda_ra_r=0\]
这点很容易证明,由于向量组内向量均不为0,我们只需要在等式两边随便乘上一个向量即可,假设我们乘的是\(a_1\)。由于它与其他向量两两正交,所以其他项全为0。如果要等式成立,那么必须要:
\[\lambda_1a_1^Ta_1=0\]
由于\(a_1\)不为0,那么\(a_1^Ta_1\)必然不为0,要使得等式成立,只能是\(\lambda_1\)为0。
规范正交基
Go 每日一库之 fsnotify
我们把正交向量组的概念和基的概念融合,如果向量组\(e_1, e_2, \cdots, e_r\)是向量空间V的一个基。如果它们之间彼此正交,那么就称它们是一组规范正交基。
对于向量a,我们可以很方便地求出它在规范正交基下各个维度的坐标:
\[\lambda_i = e_i^Ta=[a, e_i]\]
也就是说向量a,在规范正交基下某一个维度的坐标, 等于它和这个维度的正交基向量的内积。
如果说我们已经知道向量空间V中的一组基是\(a_1, a_2, \cdots, a_r\),我们怎么求V的规范正交基呢?
这里要用到一个算法,叫做施密特算法。通过这个算法,我们可以通过向量空间的一组基来求出它的正交基。
这个算法很简单,我们可以直接写出它的公式:
\[ \begin{aligned} b_1 &= a_1 \\ b_2 &= a_2 – \frac{[b_1, a_2]}{[b_1, b_1]}b_1\\ \cdots\\ b_r &= a_r – \frac{[b_1, a_r]}{[b_1, b_1]}b_1-\frac{[b_2, a_r]}{[b_2, b_2]}b_2 – \cdots – \frac{[b_{r-1}, a_r]}{[b_{r-1}, b_{r-1}]}b_{r-1} \end{aligned} \]
我们随便取两个b向量乘一下就知道,b向量组之中两两正交。所以,我们只要将b向量组单位化一下,就可以求出对应的规范正交基了。
即:
\[ e_1=\frac{1}{||b_1||}b_1, \quad e_2=\frac{1}{||b_2||}b_2 \quad \cdots \quad e_r=\frac{1}{||b_r||}b_r \]
这个算法虽然不难,但蛮重要。在机器学习领域中一些降维算法,很多都与施密特正交化方法有关。
正交矩阵
之前我们在介绍矩阵的时候,曾经说过,我们可以把一个矩阵看成是一个特定的向量组的结构。同样,我们也可以把一个规范正交基向量组看成是一个矩阵,那么这个矩阵就称为是正交矩阵。
它拥有如下性质:
\[A^TA=I\]
其中I是单位矩阵,它的充要条件是矩阵A当中的每一列都是一个单位列向量,并且两两正交。
最后,我们看一下正交矩阵的性质。它的主要性质有三个:
-
如果A是正交矩阵,那么\(A^{-1}=A^T\),也是正交矩阵,并且\(|A|=\pm 1\)。
-
如果A和B都是正交矩阵,并且它们阶数一样,那么AB也是正交矩阵。
-
如果A是正交矩阵,向量y经过A变换之后行列式保持不变。
这三个性质都很简单,我们通过正交矩阵的性质基本上都可以直接推导得到,或者是非常直观,和我们的直觉吻合。其实怎么推导不是重点,对于算法工程师而言,更重要的是理解这些概念的意思,并且将它与算法模型当中起到的功能联系起来,这才是最重要的事情。
今天关于正交向量和矩阵的内容就到这里,如果觉得有所收获,请顺手点个关注或者转发吧,你们的支持是我最大的动力。
Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率