【记录读论文时遇到的一些算法3】—— Vector Dot Product & Vector Cross Product

向量点乘与叉乘的概念及几何意义

1. 点乘

点乘(Dot Product) 的结果是 点积,又称数量积标量积(Scalar Product)

假设空间中有两个向量: a ⃗ = ( x 1 , y 1 , z 1 ) , b ⃗ = ( x 2 , y 2 , z 2 ) , a ⃗ \vec{a}=\left(x_{1}, y_{1}, z_{1}\right) , \vec{b}=\left(x_{2}, y_{2}, z_{2}\right) , \vec{a} a =(x1,y1,z1)b =(x2,y2,z2)a b ⃗ \vec{b} b 之间夹角为 θ \theta θ

代数角度看,点积是对两个向量对应位置上的值相乘再相加的操作,其结果即为点积。
a ⃗ ⋅ b ⃗ = x 1 x 2 + y 1 y 2 + z 1 z 2 \vec{a} \cdot \vec{b}=x_{1} x_{2}+y_{1} y_{2}+z_{1} z_{2} a b =x1x2+y1y2+z1z2
几何角度看,点积是两个向量的长度与它们夹角余弦的积。
a ⃗ ⋅ b ⃗ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ cos ⁡ θ \vec{a} \cdot \vec{b}=|\vec{a}||\vec{b}| \cos \theta a b =a b cosθ

几何意义

点乘的结果表示 a ⃗ \vec{a} a b ⃗ \vec{b} b 方向上的投影 ∣ b ⃗ ∣ |\vec{b}| b 乘积,反映了两个向量的相似度,结果越大越相似。基于结果可以判断这两个向量是否是同一方向,是否正交垂直,具体对应关系为:

  1. a ⃗ ⋅ b ⃗ > 0 \vec{a} \cdot \vec{b}>0 a b >0 则方向基本相同,夹角在 0 ∘ 0^{\circ} 0 9 0 ∘ 90^{\circ} 90 之间
  2. a ⃗ ⋅ b ⃗ = 0 \vec{a} \cdot \vec{b}=0 a b =0 则正交,相互垂直
  3. a ⃗ ⋅ b ⃗ < 0 \vec{a} \cdot \vec{b}<0 a b <0 则方向基本相反,夹角在 9 0 ∘ 90^{\circ} 90 18 0 ∘ 180^{\circ} 180 之间

点乘代数定义推导几何定义: (常用来求向量夹角)

a ⃗ \vec{a} a 终点为 A ( x 1 , y 1 , z 1 ) , b ⃗ A\left(x_{1}, y_{1}, z_{1}\right) , \vec{b} A(x1,y1,z1)b 的终点为 B ( x 2 , y 2 , z 2 ) B\left(x_{2}, y_{2}, z_{2}\right) B(x2,y2,z2),原点为 O O O ,则 A B → = ( x 2 − x 1 , y 2 − y 1 , z 2 − z 1 ) \overrightarrow{A B}=\left(x_{2}-x_{1}, y_{2}-y_{1}, z_{2}-z_{1}\right) AB =(x2x1,y2y1,z2z1)
△ O A B \triangle O A B OAB 中,由余弦定理得:
∣ A B → ∣ 2 = ∣ a ⃗ ∣ 2 + ∣ b ⃗ ∣ 2 − 2 ∣ a ⃗ ∣ ∣ b ⃗ ∣ cos ⁡ θ |\overrightarrow{A B}|^{2}=|\vec{a}|^{2}+|\vec{b}|^{2}-2|\vec{a}||\vec{b}| \cos \theta AB 2=a 2+b 22a b cosθ
使用距离公式进行处理,可得:

∣ a ⃗ ∣ ∣ b ⃗ ∣ cos ⁡ θ = x 1 2 + y 1 2 + z 1 2 + x 2 2 + y 2 2 + z 2 2 − [ ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 + ( z 2 − z 1 ) 2 ] 2 |\vec{a}||\vec{b}| \cos \theta=\frac{x_{1}^{2}+y_{1}^{2}+z_{1}^{2}+x_{2}^{2}+y_{2}^{2}+z_{2}^{2}-\left[\left(x_{2}-x_{1}\right)^{2}+\left(y_{2}-y_{1}\right)^{2}+\left(z_{2}-z_{1}\right)^{2}\right]}{2} a b cosθ=2x12+y12+z12+x22+y22+z22[(x2x1)2+(y2y1)2+(z2z1)2]
去括号后合并,可得:
∣ a ⃗ ∣ ∣ b ⃗ ∣ cos ⁡ θ = x 1 x 2 + y 1 y 2 + z 1 z 2 = a ⃗ ⋅ b ⃗ |\vec{a}||\vec{b}| \cos \theta=x_{1} x_{2}+y_{1} y_{2}+z_{1} z_{2}=\vec{a} \cdot \vec{b} a b cosθ=x1x2+y1y2+z1z2=a b
根据上面的工式可计算 a ⃗ \vec{a} a b ⃗ \vec{b} b 之间的夹角:
θ = arccos ⁡ ( a ⃗ ⋅ b ⃗ ∣ a ⃗ ∣ ∣ b ⃗ ∣ ) \quad \theta=\arccos \left(\frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|}\right) θ=arccos(a b a b )

2. 叉乘

叉乘(Cross Product) 又称 向量积(Vector Product)

在空间中有两个向量: a ⃗ = ( x 1 , y 1 , z 1 ) , b ⃗ = ( x 2 , y 2 , z 2 ) , a ⃗ \vec{a}=\left(x_{1}, y_{1}, z_{1}\right) , \vec{b}=\left(x_{2}, y_{2}, z_{2}\right) , \vec{a} a =(x1,y1,z1)b =(x2,y2,z2)a b ⃗ \vec{b} b 之间夹角为 θ \theta θ

从代数角度计算:
a ⃗ × b ⃗ = ( y 1 z 2 − z 1 y 2 , z 1 x 2 − x 1 z 2 , x 1 y 2 − y 1 x 2 ) \vec{a} \times \vec{b}=\left(y_{1} z_{2}-z_{1} y_{2}, z_{1} x_{2}-x_{1} z_{2}, x_{1} y_{2}-y_{1} x_{2}\right) a ×b =(y1z2z1y2,z1x2x1z2,x1y2y1x2)
从几何角度计算: ( n ⃗ \vec{n} n a ⃗ \vec{a} a b ⃗ \vec{b} b 所构成平面的单位向量)
a ⃗ × b ⃗ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ sin ⁡ θ n ⃗ \vec{a} \times \vec{b}=|\vec{a}||\vec{b}| \sin \theta \vec{n} a ×b =a b sinθn
其运算结果是一个向量,并且与这两个向量都垂直,是这两个向量所在平面的法线向量。使用右手定则确定其方向。

几何意义

如果以向量 a ⃗ \vec{a} a b ⃗ \vec{b} b 为边构成一个平行四边形,那么这两个向量外积的模长与这个平行四边形的面积相等。

参考文章

[1] https://zhuanlan.zhihu.com/p/359975221 (向量点乘与叉乘的概念及几何意义)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jacobian-vector product是指在反向传播算法中,计算某个向量对于神经网络输出的梯度的过程。具体来说,假设我们有一个神经网络模型$f(x)$,其中$x$是输入,$y=f(x)$是输出。我们想要计算某个向量$v$对于输出$y$的梯度,即$\frac{\partial y}{\partial v}$。这个梯度可以通过Jacobian矩阵$J$和向量$v$的乘积来计算,即$\frac{\partial y}{\partial v}=Jv$。在反向传播算法中,我们需要计算许多这样的梯度,因此Jacobian-vector product是一个非常重要的计算过程。 具体来说,Jacobian矩阵$J$的每一行对应于输出$y$中的一个元素,每一列对应于输入$x$中的一个元素。因此,$J$的大小为$N_y \times N_x$,其中$N_y$是输出$y$的维度,$N_x$是输入$x$的维度。Jacobian-vector product的计算过程可以通过链式法则来推导。假设我们已经计算出了某个中间变量$z$对于输出$y$的梯度$\frac{\partial z}{\partial y}$,以及$z$对于输入$x$的梯度$\frac{\partial z}{\partial x}$。那么,根据链式法则,我们可以得到$v$对于输入$x$的梯度$\frac{\partial v}{\partial x}$,即$\frac{\partial v}{\partial x}=\frac{\partial z}{\partial x}\frac{\partial v}{\partial z}$。这个式子可以进一步化简为$\frac{\partial v}{\partial x}=J^T\frac{\partial v}{\partial y}$,其中$J^T$是$J$的转置矩阵。因此,Jacobian-vector product可以通过先计算$\frac{\partial v}{\partial y}$,然后再乘以$J^T$来得到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值