【白话机器学习系列】白话向量点积

news2024/11/27 0:48:49

白话向量点积

点积(Dot Product)是机器学习中最常见的向量操作。本文将通过简洁易懂的语言配合大量图形为大家介绍点积运算及其背后的数学意义。

在这里插入图片描述

文章目录

    • 背景知识
    • 几何视角
      • 向量的大小
      • Cosine
      • 举例
      • 几何意义
    • 坐标视角
    • 两种视角的等价性
    • 点积的作用
    • 总结

背景知识

对于长度为 n n n 的两个向量 a a a b b b
a = [ a 1 , a 2 , a 3 , … , a n ] b = [ b 1 , b 2 , b 3 , … , b n ] \begin{aligned} a &= [a_1, a_2, a_3,\dots,a_n]\\ b &= [b_1, b_2, b_3,\dots,b_n] \end{aligned} ab=[a1,a2,a3,,an]=[b1,b2,b3,,bn]
点积可以用来表示它们之间的关系。 例如,它们指向同一个方向还是相反的方向? 它们彼此垂直吗?

两个向量进行点积运算的结果是标量,因此点积有时也称为标量积

为了让大家建立对点积工作原理的直觉,我们从其几何定义开始。

几何视角

在这里插入图片描述

点积的几何形式如下:
a ⋅ b = ∥ a ∥   ∥ b ∥ cos ⁡ θ a \sdot b = \Vert a \Vert \: \Vert b \Vert \cos\theta ab=abcosθ
上面公式包含3个部分:

  • ∥ a ∥ \Vert a \Vert a: 向量 a a a 的大小
  • ∥ b ∥ \Vert b \Vert b: 向量 b b b 的大小
  • θ \enspace\theta\enspace θ: 向量 a , b a,b a,b 之间的夹角

向量的大小

在这里插入图片描述

向量长度直观看上去就是一个用勾股定理计算斜边长度。对于二维向量来说就是 x 2 + y 2 \sqrt{x^2+y^2} x2+y2 ,对于三维向量来说就是 x 2 + y 2 + x 2 \sqrt{x^2+y^2+x^2} x2+y2+x2 。推而广之, n n n 维向量的长度为
∥ v ∥ = v 1 2 + v 2 2 + ⋯ + v n 2 \Vert v \Vert = \sqrt{v_1^2 + v_2^2 + \dots + v_n^2} v=v12+v22++vn2

Cosine

在这里插入图片描述

cos ⁡ θ \cos\theta cosθ 将向量 a a a 投影到向量 b b b 。上图中,向量 a a a 和向量 b b b 指向不同方向,所以 ∥ a ∥ cos ⁡ θ \Vert a \Vert \cos\theta acosθ 将向量 a a a 的一部分投影到向量 b b b 的方向上。反过来视为将向量 b b b 投影到向量 a a a 也可以,

举例

在这里插入图片描述

当向量之间的角度和大小已知时,几何视角很有用,如上例所示。 在这个例子中,计算点积很容易。
∥ a ∥ = ( − 6 ) 2 + 8 2 = 10 ∥ b ∥ = 5 2 + 1 2 2 = 13 θ = 59.5 ° ∴ a ⋅ b = ∥ a ∥ ∥ b ∥ cos ⁡ θ = 10 × 13 × cos ⁡ ( 59.5 ) = 65.9799871849 \begin{aligned} \Vert a \Vert &= \sqrt{(-6)^2+8^2} = 10\\ \Vert b \Vert &= \sqrt{5^2+12^2} = 13\\ \theta &= {59.5}\degree\\\\ \therefore a \sdot b &= \Vert a \Vert \Vert b \Vert \cos\theta\\ &=10 \times 13 \times \cos(59.5) \\ &=65.9799871849 \end{aligned} abθab=(6)2+82 =10=52+122 =13=59.5°=a∥∥bcosθ=10×13×cos(59.5)=65.9799871849

几何意义

上面的结果有什么意义呢?

我们都知道当两个向量指向相同方向时,它们之间的角度为 θ = 0 ° \theta = 0\degree θ= 0 0 0 弧度。 这意味着 cos ⁡ ( θ ) \cos(\theta) cos(θ) 的结果为 1,此时点积最大。如果两个向量指向相反方向时,它们之间的角度为 θ = 180 ° \theta = 180\degree θ=180° π \pi π 弧度。 这意味着 cos ⁡ ( θ ) \cos(\theta) cos(θ) 的结果为 -1,此时点积最小。当 θ = 90 ° \theta = 90\degree θ=90° π / 2 \pi/2 π/2 弧度时, cos ⁡ ( θ ) \cos(\theta) cos(θ) 的结果为 0,此时点积为0。当点积为 0 时,意味着两个向量彼此垂直或正交。

方向关系计算结果
完全同向 + A B +AB +AB
基本同向 < + A B \lt +AB <+AB
垂直 0 0 0
基本反向 > − A B \gt -AB >AB
完全反向 − A B -AB AB

坐标视角

在坐标视角下,我们只知道向量的坐标,不知道向量间的夹角,此时点积的代数形式可以不需要角度来计算点积。在坐标视角下,只需每个向量的对应分量相乘,相加后最终结果等同于几何视角的结果。下面是点积的代数形式:
a ⋅ b = [ a 0 b 0 + a 1 b 1 + ⋯ + a n b n ] = ∑ i = 1 n a i b i a \sdot b = [a_0b_0+a_1b_1+\dots+a_nb_n] = \sum_{i=1}^na_ib_i ab=[a0b0+a1b1++anbn]=i=1naibi
还是用上面的例子,用坐标视角计算向量 a , b a, b a,b 的点积
a ⋅ b = ( − 6 ) × 5 + 8 × 12 = − 30 + 96 = 66 a \sdot b = (-6)\times5+8\times12 = -30+96 = 66 ab=(6)×5+8×12=30+96=66
可见结果与几何视角的计算结果非常接近,误差可以忽略不记。

两种视角的等价性

要解释两种视角的等价性,需要引入标准基(Standard basis,也叫自然基或规范基)的概念。数学上,坐标向量空间的标准基是指向量分量只有一个1,其余都为0的向量的向量。举个例子很容易理解,在平面坐标系中,标准基有 2 个向量
e x = ( 1 , 0 ) , e y = ( 0 , 1 ) e_x=(1,0), \quad e_y=(0,1) ex=(1,0),ey=(0,1)
同理三维空间中,标准基有 3 个向量
e x = ( 1 , 0 , 0 ) , e y = ( 0 , 1 , 0 ) , e z = ( 0 , 0 , 1 ) e_x=(1,0,0), \quad e_y=(0,1,0), \quad e_z=(0,0,1) ex=(1,0,0),ey=(0,1,0),ez=(0,0,1)
这里 e x e_x ex x x x 轴同向,且长度为1; e y e_y ey y y y 轴同向; e z e_z ez z z z 轴同向。

标准基可以将任意向量分解为各分量与标准基的线性组合,比如三维空间中的向量 v v v 可以表示为:
v x e x + v y e y + v z e z v_xe_x+v_ye_y+v_ze_z vxex+vyey+vzez
其中 v x , v y , v z v_x, v_y, v_z vx,vy,vz 是向量 v v v 的分量。

标准基中的向量都是正交的且长度为单位长度1,因此正交基具有如下性质:
e i ⋅ e i = 1 e i ⋅ e j = 0 ( i ≠ j ) e_i \sdot e_i = 1\\ e_i \sdot e_j = 0 \quad(i \ne j)\\ eiei=1eiej=0(i=j)
这两个性质很好证明,大家可以自行运用上面讲过几何视角和坐标视角去证明。

有了标准基的概念后,我们可以将向量表示成分量与标准基的线性组合:
a = [ a 1 , a 2 , … , a n ] = ∑ i = 1 n a i e i b = [ b 1 , b 2 , … , b n ] = ∑ i = 1 n b i e i a = [a_1, a_2, \dots, a_n] = \sum_{i=1}^na_ie_i\\ b = [b_1, b_2, \dots, b_n] = \sum_{i=1}^nb_ie_i\\ a=[a1,a2,,an]=i=1naieib=[b1,b2,,bn]=i=1nbiei
由于标准基向量的长度都为1,即 ∥ e i ∥ = 1 \Vert e_i \Vert = 1 ei=1,当向量与标准基点乘时,得到的是向量的各分量:
a ⋅ e i = ∥ a ∥ ∥ e i ∥ cos ⁡ θ i = ∥ a ∥ cos ⁡ θ i = a i a \sdot e_i = \Vert a \Vert \Vert e_i \Vert \cos\theta_i = \Vert a \Vert \cos\theta_i = a_i aei=a∥∥eicosθi=acosθi=ai
这里 a i a_i ai 就是向量 a a a e i e_i ei 方向上的分量。

运用分配律带入点积的几何形式,就得到
a ⋅ b = a ⋅ ∑ i = 1 n b i e i = ∑ i = 1 n b i ( a ⋅ e i ) = ∑ i = 1 n b i a i = ∑ i = 1 n a i b i a \sdot b = a \sdot \sum_{i=1}^nb_ie_i = \sum_{i=1}^nb_i(a \sdot e_i) = \sum_{i=1}^nb_ia_i = \sum_{i=1}^na_ib_i ab=ai=1nbiei=i=1nbi(aei)=i=1nbiai=i=1naibi
上面式子的结果正是点积的代数定义。 所以点积的几何形式与代数形式是等价的。

点积的作用

  1. 物理中很多量都是矢量(既有大小也有方向),这些矢量可以通过点积连接。比如:
    功 = ( 力 ⃗ ) ⋅ ( 距离 ⃗ ) \text{功} = (\vec{力}) \sdot (\vec{距离}) =( )(距离 )

  2. 可以计算两个向量的夹角,比如:
    u ⃗ = ( 81 , − 15 ) v ⃗ = ( 22 , 37 ) 无需作图,通过代数形式可以计算得: u ⃗ ⋅ v ⃗ = 81 × 22 + ( − 15 ) × 37 = 1227 再根据几何形式有: ∥ u ∥ = 8 1 2 + ( − 15 ) 2 = 81.09 ∥ v ∥ = 2 2 2 + 3 7 2 = 43.05 ∥ u ∥ ∥ v ∥ = 3491 cos ⁡ θ = u ⃗ ⋅ v ⃗ ∥ u ∥ ∥ v ∥ = 1227 3491 = 0.351475222 θ = cos ⁡ − 1 ( 0.351475222 ) = 69.42 ° \vec{u} = (81, -15)\\ \vec{v} = (22, 37) \\ \text{无需作图,通过代数形式可以计算得:}\\ \vec{u}\sdot\vec{v} = 81 \times 22+(-15)\times37 =1227\\ \text{再根据几何形式有:}\\ \Vert u\Vert = \sqrt{81^2+(-15)^2} = 81.09\\ \Vert v\Vert = \sqrt{22^2+37^2} = 43.05\\ \Vert u\Vert \Vert v\Vert = 3491 \\ \cos\theta = \frac{\vec{u}\sdot\vec{v}}{\Vert u\Vert \Vert v\Vert} = \frac{1227}{3491} = 0.351475222 \\ \theta = \cos^{-1}(0.351475222) = 69.42\degree u =(81,15)v =(22,37)无需作图,通过代数形式可以计算得:u v =81×22+(15)×37=1227再根据几何形式有:u=812+(15)2 =81.09v=222+372 =43.05u∥∥v=3491cosθ=u∥∥vu v =34911227=0.351475222θ=cos1(0.351475222)=69.42°

总结

点积是机器学习中最常见的向量操作。上面内容为了简单易懂可能在数学上有失严谨,全面严谨的讲解建议大家系统性地学习一下线性代数,这里推荐 Gilbert Strang 老爷子的 Introduction to Linear Algebra,这本书是我读过对初学者最友好的线性代数书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GC 调优(基础篇)

GC调优(Tuning Garbage Collection)和其他性能调优是同样的原理。初学者可能会被 200 多个 GC参数弄得一头雾水, 然后随便调整几个来试试结果,又或者修改几行代码来测试。其实只要参照下面的步骤&#xff0c;就能保证你的调优方向正确: 列出性能调优指标(State your performan…

2023-06-04 Unity ScriptableObject1——ScriptableObject数据文件

文章目录 一、创建数据模板二、创建数据文件三、使用数据文件四、非持久化特性 ​ ScriptableObject 是 Unity 提供的一个数据配置存储基类&#xff0c;可以用来保存大量数据的数据模板&#xff0c;类似于可以自定义的数据资源文件模板 ​ 它是一个类似 MonoBehavior 的基类&am…

简单易懂的基础封装模块,让Web测试更简单!

目录 前言&#xff1a; 1. 环境配置 2. 创建基础封装模块的类 3. 运行测试用例 4. 结论 前言&#xff1a; 在当今互联网时代&#xff0c;Web应用程序的开发变得越来越重要。随着Web应用程序数量的增加&#xff0c;需要进行测试的Web应用程序也日益增加。为了加速测试过程&…

京东太狠:100W数据去重,用distinct还是group by,说说理由?

背景说明&#xff1a; Mysql调优&#xff0c;是大家日常常见的调优工作。所以&#xff0c;Mysql调优是一个非常、非常核心的面试知识点。在40岁老架构师 尼恩的读者社群(50)中&#xff0c;其相关面试题是一个非常、非常高频的交流话题。 近段时间&#xff0c;有小伙伴面试京东…

【论文】——Robust High-Resolution Video Matting with Temporal Guidance浅读

视频matting 时序监督 摘要 我们介绍了一种稳健、实时、高分辨率的人类视频抠图方法&#xff0c;该方法取得了新的最先进性能。我们的方法比以前的方法轻得多&#xff0c;可以在Nvidia GTX 1080Ti GPU上以76 FPS处理4K&#xff0c;以104 FPS处理HD。与大多数现有的逐帧作为独…

118.【微信小程序 - 02】

微信小程序-02 (六)、小程序基础加强1.自定义组件-组件的创建与引用(1).创建自定义组件(2).引用组件(全局和局部)(3).局部引用组件(4).全局引用组件(5).全局引用和局部引用的建议(6).组件和页面的区别 2.自定义组件-样式(1).组件样式隔离(2).组件样式隔离的注意点(3).修改组键的…

【2023】Redis哨兵模式集群

目录 &#x1f3b6; 哨兵模式&#x1f3b6; 搭建哨兵模式集群&#x1f3b6; 搭建一主二从复制集群&#x1f3b6; 创建哨兵节点 &#x1f3b6; 哨兵节点的其他配置&#x1f3b6; 哨兵模式下故障自动恢复效果&#x1f3b6; 通过日志查看故障恢复过程 &#x1f3b6; 哨兵模式 一般…

华为OD机试真题 Java 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路

一、题目描述 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第 k 长的子串的长度&#xff0c;相同字母只取最长的那个子串。 二、输入描述 第一行有一个子串(1<长度<100)&#xff0c;只包含大写字母&#xff1b;第二…

Zinx框架学习 - 多路由实现

Zinx - V0.6 多路由实现 之前在已经给Zinx配置了路由模式&#xff0c;但是之前的Zinx只能绑定一个路由的处理业务方法显然这是无法满足基本的服务器需求&#xff0c;需要给Zinx添加多路由的方案查看之前的Server定义&#xff0c;路由Router只有一个&#xff0c;当我们想要再添…

七个很好的 Python 工具,让你的生活更轻松

有一句谚语“你不必重新发明轮子”。工具就是最好的例子。它可以帮助您以简单的方式实现复杂且耗时的功能。在我看来&#xff0c;为了提高生产力和效率&#xff0c;我们需要使用一些可用的最佳工具。在这里&#xff0c;我整理了 7 个工具&#xff0c;可以帮助您完成开发之旅。 …

【网络】TCP通讯(三次握手、四次挥手;滑动窗口;TCP状态转换;端口复用;TCP心跳检测机制)

前言&#xff1a;建议看着图片&#xff0c;根据文字描述走一遍TCP通讯过程&#xff0c;加深理解。 目录 TCP通信时序&#xff1a; 1&#xff09;建立连接&#xff08;三次握手&#xff09;的过程&#xff1a; 2&#xff09;数据传输的过程&#xff1a; 3&#xff09;关闭连…

java的IP组播

文章目录 1. 简介2. 组播地址和组3. 客户端和服务器4. 路由器和路由5. 使用组播Socket6. 构造函数7. 与组播组通信8. 案例实战 1. 简介 前面介绍的Socket都是单播Socket&#xff0c;它们提供点对点的通信。单播Socket在两个明确的端点之间创建一个连接&#xff0c;有一个发送方…

LNMP平台搭建

文章目录 安装 Nginx 服务安装 MySQL 服务安装配置 PHP 解析环境 安装 Nginx 服务 systemctl stop firewalld systemctl disable firewalld setenforce 0安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make创建运行用户 useradd -M -s /sbin/nologin nginx编译…

ArduPilot之H743+BMI270x2+First Normal Takeoff

ArduPilot之H743BMI270x2First Normal Takeoff 1. 源由2. 正常起飞3. 问题汇总3.1 机架构型3.2 IMU对齐3.3 接收机3.4 GPS3.5 VTX3.6 电调3.7 PID 4. 总结5. 参考资料6. 附录6.1 补充AcroTrainer视频6.2 补充Acro视频 1. 源由 鉴于目前该飞控板子在ArduPilot开源社区尚未得到官…

Photoshop 批量照片转格式

Photoshop 批量照片转格式 文章目录 Photoshop 批量照片转格式前言一、打开Photoshop软件二、打开图像处理器三、参数设置四、运行 前言 在工作和学习中&#xff0c;我们可能会遇到需要处理多张图片、更改多张图片格式的情况&#xff0c;如果一张一张的进行处理是很麻烦浪费时…

一步一步从功能测试到测试开发,我这一路的坎坷谁能懂?

读者提问&#xff1a; 测试开发工程师到底是测试&#xff0c;还是开发 &#xff1f; 鱼鱼回答&#xff1a; 既是测试&#xff0c;也是开发。 首先&#xff0c;测试开发是测试工程师&#xff0c;他们是服务于业务测试同学的&#xff0c;目标是解决业务测试工程师的具体问题。…

基于flask的web应用开发——接受post请求

目录 0. 前言1. 了解post方法2. 在flask中实现3. 具体讲解 0. 前言 操作系统&#xff1a;Windows10 家庭版 开发环境&#xff1a;Pycahrm Comunity 2022.3 Python解释器版本&#xff1a;Python3.8 第三方库&#xff1a;flask 1. 了解post方法 POST是HTTP协议定义的一种请…

尚硅谷JUC极速版笔记

尚硅谷JUC极速版笔记 1、JUC概述1.1 进程和线程1.2 线程的状态&#xff08;6个&#xff09;1.3 wait和sleep1.4 并发与并行1.5 管程&#xff08;锁&#xff09;1.6 用户线程和守护线程 2、Lock接口2.1 复习synchronized&#xff08;java内置同步锁&#xff09;2.2 什么是Lock接…

03使用IDEA快速开发一个WEB应用的具体流程

使用集成开发环境实现web开发 集成开发工具很多&#xff0c;其中目前使用比较多的是IntelliJ IDEA和Eclipse IntelliJ IDEA(居多): JetBrain公司开发的收费软件, IDEA在提示功能方面要强于Eclipse使用起来更加智能更好用Eclipse(较少):Eclipse是IBM团队开发的, Eclipse寓意是…

ChatGPT 国内镜像网站独家汇总:发现最优秀的人工智能对话体验!

欢迎来到我们的 ChatGPT 镜像网站汇总博客&#xff01;在这个令人激动的人工智能时代&#xff0c;ChatGPT 作为一款顶尖的语言模型&#xff0c;已经引起了全球范围内的热议。但是&#xff0c;您是否曾经为了找到最佳的 ChatGPT 使用体验而苦苦搜寻&#xff1f;别担心&#xff0…