7194

帖子

11

TA的资源

版主

21
 

投影:

将一个向量投影到另一个向量上,就是计算前者在后面的方向上有多少分量。向量a在向b的投影为:

proj_{b}a = \frac{a.b}{\left \| b \right \|^{2}}b

下图解释了二维向量投影的几何含义。

  投影的过程就是找出向量a在向量b方向上的分量。注意向量a在向量b上的投影不同于向量b在向量a上的投影。

由于投影公式的分子是内积,因此如果两个向量相互正交,那么其中一个向量在另一个向时的投影为0.换言之,前者在后面方向上没有分量,请结合x轴和y轴思考一下,我们使用笛卡儿坐标系的原因就是二维空间中的两个坐标或者三维空间中的三个坐标之间互相正交,任何一个坐标在其他坐标方向上的分量都是0,这使得我们能够从原点到任何一点的向量来表示该点的位置。使用代码实现投影如下例:

  • >>> import numpy as np
  • >>> a = np.array([1,1])
  • >>> b = np.array([1,0])
  • >>> p = (np.dot(a,b)/np.dot(b,b))*b
  • >>> print(p)
  • [1. 0.]
  • >>> c = np.array([-1,1])
  • >>> p = (np.dot(c,b)/np.dot(b,b))*b
  • >>> print(p)
  • [-1. -0.]

在第一个列子中,a指向x轴上方45度的方向,b指向x轴的正方向,因此我们预期a在b方向上的投影也应该指向x轴。第二个例子中,c指向x轴上90度+45度= 135度,因此我们预期c在b方向上的分量应该指向x轴的反方向。

 

 
 

回复

7194

帖子

11

TA的资源

版主

22
 

外积:

两个向量的内积返回一个标量,两个向量的外积则返回一个矩阵。不同于内积的运算,外积运算不要要求两个向量有相同数量的元素。具体来说,将包含m个元素的向量a与包括n个元素的向量b做外积,结果为由向量a中的每一个元素与向量b中的每一个元素相乘后得到的矩阵。

  记号ab^{T}说明了向量外积的计算过程。请注意外积极符号ab^{T}与内积符号:a^{T}b的区别,但它们都假定a和b是列向量。关于外积,目前还没有统一的表示符号,主要原因可能在于这种矩阵相乘的形式已经足够方便,部分原因可能在于外积的运用没有内积那么广泛。不过,我们有时还是能看到“\bigotimes”表示外识运算的情况。

NumPy提供了专门用于计算外识的函数np.outer:

  • >>> import numpy as np
  • >>> a = np.array([1,2,3,4])
  • >>> b = np.array([5,6,7,8])
  • >>> np.dot(a,b)
  • np.int64(70)
  • >>> np.outer(a,b)
  • array([[ 5, 6, 7, 8],
  • [10, 12, 14, 16],
  • [15, 18, 21, 24],
  • [20, 24, 28, 32]])

这里仍使用之前内积运算中用到的向量a和b。正如我们所料,np.do函数返回a.b的标量结果。np.outer函数则返回一个4*4的矩阵,其中每行分别是向量b依次与向量a中第个元素相乘的结果。因次,向量a中的每个元素都与向量b中的每个元素做了一次乘积。由两个向量的大小都是4,因此我们最得到一个4*4的矩阵。

在深度学习中,外积的这种输入的所有组合融合到一起的能力,经常被用在神经网络协同过滤和视觉问答系统中。在一些基于高级神经网络实现的推荐系统或基于图片的问答系统中,就会用到这些运算。在这些应用中,外积运算会出现对不同词嵌入进行混合的场景中。词嵌入是神经网络层产生的向量,例如在传统的卷积神经网络中,Softmax层之前的最一个全连接层的输出就可以作为词嵌入。词嵌入层通常可以看视网络对输入学到的新的表征,或者视为将一个复杂的输入(如图像)映射到某低给空间。

 
 
 

回复

7194

帖子

11

TA的资源

版主

23
 

叉积:

叉积是定义在三维空间中的。向量a和b叉积(矢量积)的结果是一个新的向量,这个向量垂直于包含向量a和b的平面。注意,这并不是说向量a和b是相互垂直的。叉积的定义如下:

a\times b=\left \| a \right \|\left \| b \right \|sin(\theta )

NumPy是通过np.cross函数实现叉积运算的

  • >>> import numpy as np
  • >>> a = np.array([1,0,0])
  • >>> b = np.array([0,1,0])
  • >>> print(np.cross(a,b))
  • [0 0 1]
  • >>> c = np.array([1,1,0])
  • >>> print(np.cross(a,c))
  • [0 0 1]
  • >>>

叉积已被广泛应用于物理学和其他科学领域,但由于叉积仅限于三维空间,因此叉积在深度学习领域的应用较少。尽管如此,你还是应该熟悉叉积,以免在阅读深度学习的相关文献时犯错。

讲完向量运算内容,现在让我们离开一维世界,走进深度学习领域最为重要的运类型-》矩阵乘法。

 
 
 

回复

7194

帖子

11

TA的资源

版主

24
 

线性代数学习了许多的基础知识,下一步将学习矩阵乘法了,这个帖子告一段落。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表