最近看到公式就头疼,深深感受到数学不好就意味着被降维打击。。
在Deep Learning里,因为操作的对象是高维向量,所以很多paper里的公式都喜欢用矩阵乘来表达公式,这样的优点是公式表达更简洁(一个矩阵乘同时包含了乘法和加法),缺点就是菜的人可能一时半会反应不过来,比如说我!
假设有两个 n n n 维向量 x , y x,y x,y , x = ( x 1 , x 2 , . . . , x n ) , y = ( y 1 , y 2 , . . . , y n ) x=(x_1, x_2, ..., x _n), y=(y_1, y_2, ..., y _n) x=(x1,x2,...,xn),y=(y1,y2,...,yn)
欧式距离
欧式距离就是所谓的向量的二范式,论文里通常是这么写的 ℓ 2 ( x , y ) = ∥ x − y ∥ 2 \ell_{2}(\mathbf{x}, \mathbf{y})=\|\mathbf{x}-\mathbf{y}\|_{2} ℓ2(x,y)=∥x−y∥2,相比欧式距离,我感觉人们更喜欢用范式来表达(可能是因为范式更抽象?)
对范式不太清楚的同学可以看这篇文章 矩阵范数与向量范数公式的理解
欧式距离计算公式为:
d = ∑ i = 1 N ( x i − y i ) 2 d=\sqrt{\sum_{i=1}^{N}\left(x_{i}-y_{i}\right)^{2}} d=i=1∑N(xi−yi)2
因为这个公式太常用了,论文里一般不会写,可能就直接写 ℓ 2 \ell_{2} ℓ2
余弦距离
余弦相似度经常被用来衡量两个向量的相似度,计算公式为:
cos ( x , y ) = x ⋅ y ∥ x ∥ 2 ∥ y ∥ 2 \cos (x, y)=\frac{x \cdot y}{\|x\|_{2} \|y\|_{2}} cos(x,y)=∥x∥2∥y∥2x⋅y我们把 1 − cos ( x , y ) 1- \cos (x, y) 1−cos(x,y)称为余弦距离,取值范围[0,2]
另外,对于一些运算:
向量点积: x ⋅ y = x T y x \cdot y = x^T y x⋅y=xTy
向量距离平方: ℓ 2 = ∥ x ∥ 2 2 = x T x \ell^{2}=\|x\|_2^2=x^Tx ℓ2=∥x∥22=xTx
关系
欧氏距离是计算空间中两个点的直线距离,所以它受不同维度上数值尺度的影响比较大,而余弦距离则是计算两者在空间中方向上的差异,它包含的信息更多,而且更稳定,用哪一个看具体场景,不过我感觉用余弦的更多一些。
有时候,为了消除不同维度数值尺度差异的影响或者让收敛更加的平滑,我们会对向量进行单位化(长度归一化),也就是:
x = x ∣ ∣ x ∣ ∣ 2 x=\frac {x}{||x||_2} x=∣∣x∣∣2x 在这种情况下,欧式距离和余弦距离本质上是等价的,他们的单调性相同,证明如下
经过长度归一化后,有:
∥ x ∥ 2 = ∥ y ∥ 2 = 1 \|\mathbf{x}\|_{2}=\|\mathbf{y}\|_{2}=1 ∥x∥2=∥y∥2=1于是:
d 2 = ∥ x − y ∥ 2 2 = ( x − y ) ⊤ ( x − y ) = x ⊤ x − 2 x ⊤ y + y ⊤ y = 2 − 2 x ⊤ y = 2 − 2 cos ( x , y ) = 2 ( 1 − cos ( x , y ) ) \begin{aligned} d^2=\|\mathbf{x}-\mathbf{y}\|_{2}^{2} &=(\mathbf{x}-\mathbf{y})^{\top}(\mathbf{x}-\mathbf{y}) \\ &=\mathbf{x}^{\top} \mathbf{x}-2 \mathbf{x}^{\top} \mathbf{y}+\mathbf{y}^{\top} \mathbf{y} \\ &=2-2 \mathbf{x}^{\top} \mathbf{y} \\ &=2-2 \cos(\mathbf{x}, \mathbf{y}) \\ &=2(1- \cos(\mathbf{x}, \mathbf{y})) \end{aligned} d2=∥x−y∥22=(x−y)⊤(x−y)=x⊤x−2x⊤y+y⊤y=2−2x⊤y=2−2cos(x,y)=2(1−cos(x,y))
可以看到,欧氏距离和余弦距离的单调性相同,这意味着在归一化的情况下,优化两者的效果是一样的,即等价。
如果对你有帮助,请点个赞:-D