深度学习(5)---自注意力机制

文章目录

  • 一、输入与输出
  • 二、Self-attention
    • 2.1 介绍
    • 2.2 运作过程
    • 2.3 矩阵相乘理解运作过程
  • 三、位置编码
  • 四、Truncated Self-attention
    • 4.1 概述
    • 4.2 和CNN对比
    • 4.3 和RNN对比


一、输入与输出

 1. 一般情况下在简单模型中我们输入一个向量,输出结果可能是一个数值或者一个类别。但是在复杂的模型中我们一般会输入一组向量,那么输出结果可能是一组数值或一组类别。

在这里插入图片描述

 2. 一句话、一段语音、一张图等都可以转换成一组向量。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 3. 输入一组向量,一般输出结果有3种情况:(1) N对N;(2) N对1;(3) N对M。我们这里着重讲第1种。
:Seq2Seq(Sequence to Sequence,序列到序列模型)是循环神经网络模型的变种,包括编码器(Encoder)和解码器(Decoder)两部分。Seq2Seq模型是输出的长度不确定时采用的模型,这种情况一般是在机器翻译的任务中出现,将一句中文翻译成英文,那么这句英文的长度有可能会比中文短,也有可能会比中文长,所以输出的长度就不确定了。

在这里插入图片描述

二、Self-attention

2.1 介绍

 1. 有时候我们输入转化后的一组向量之间会有关联。比如 “I saw a saw-----我看见一把锯子” 这句话,对于传统的模型,可能会将第一个 saw 和第二个 saw 输出相同的结果,但事实上两个 saw 是完全不一样的意义,第一个 saw 意思是"看见",而第二个 saw 意思是"锯子"。

 2. 所以出现了自注意力机制(Self-attention)模型来解决上述这个问题。对于输入 Seg 中向量不确定多的情况,Self-attention会考虑所有向量。Self-attention的输入是一组向量,输出也是一组向量,但考虑了整个 Seq 产生的。

在这里插入图片描述

 3. 当然,Self-attention也可以使用多次。:其实Self-attention是Transformer模型中的关键组件。

在这里插入图片描述

2.2 运作过程

 1. Self-attention对于每一个的输出结果都是综合考虑了所有的输入。我们接下来以输入 a 1 a^1 a1 输出 b 1 b^1 b1 为例来讲解,其他的过程类似。

在这里插入图片描述

 2. 步骤(1):对于输入向量 a 1 a^1 a1,Self-attention首先会判断向量 a 1 a^1 a1 与其他向量的关联性。对两个向量的关联程度,Self-attention会给出一个数值 α α α
 求关联性 α α α 的方法很多。比如点积法:将两个向量分别乘以权重矩阵,再进行点积;点积和相加法:将两个向量分别乘以权重矩阵,结果进行相加后再与权重矩阵进行点积。:我们常用下面图片中左边的方法。

在这里插入图片描述

在这里插入图片描述

 3. 步骤(2):计算出每个的关联性 α α α,再用 s o f t m a x softmax softmax 函数得到 α ′ α' α:这里不一定用 s o f t m a x softmax softmax 函数,也可以用其他的激活函数。

在这里插入图片描述

在这里插入图片描述

 4. 步骤(3):然后再将所有向量 v ∗ α v * α vα,再求和得到 b b b

在这里插入图片描述

 5. 类似的,得到 b 2 b^2 b2 也是一样的过程。

在这里插入图片描述

2.3 矩阵相乘理解运作过程

在这里插入图片描述

在这里插入图片描述

三、位置编码

 1. 在人类的语言中,单词的位置与顺序定义了语法,也影响着语义。无法捕获的单词顺序会导致我们很难理解一句话的含义,如下图所示。

在这里插入图片描述

在这里插入图片描述

 2. 我们知道自注意力机制是Transformer模型中的关键组件,但是Transformer中的自注意力机制无法捕捉输入元素序列的顺序。因此我们需要一种方法将单词的顺序合并到Transformer架构中,于是位置编码应运而生。

 3. 目前,主流的位置编码方法主要分为绝对位置编码与相对位置编码两大类。其中绝对位置编码的作用方式是告知Transformer架构每个元素在输入序列中的位置,类似于为输入序列的每个元素打一个 “位置标签” 标明其绝对位置。而相对位置编码则是作用于自注意力机制,告知Transformer架构两两元素之间的距离。如下图所示。

在这里插入图片描述

 4. 由于相对位置编码作用于自注意力机制,所以我们这里介绍一下相对位置编码。相对位置编码中,一般我们会在一组输入向量中的每个位置加一个位置向量 e e e,然后把 e e e 加到 a a a 上。

在这里插入图片描述

四、Truncated Self-attention

4.1 概述

 1. Truncated Self-attention(缩减的自注意力机制)只看自己和前后一个向量之间的attention。
 计算方法:只计算矩阵中蓝色部分值,其余灰色的不用计算(填0)。
 问题:相当于只关联sequence中相邻的token,失去了Attention的全局性,和CNN的效果就比较相似了,只有局部感受野。

在这里插入图片描述

 2. 例如对于长序列的语音问题,转换成输入向量后数量很大,这个时候我们可以只取一小段范围。 因为有时候关注一小段范围就可以得到我们想要的输出结果。

在这里插入图片描述

4.2 和CNN对比

 自注意力机制和CNN在处理图像问题时,有一些显著的区别。
 CNN,即卷积神经网络,可以看作是简化版的自注意力机制。在CNN中,每个神经元只考虑一个感受野里的信息,而感受野的大小和范围是人工设定的。然而,自注意力机制考虑整张图片的信息,相当于每个神经元自动学习如何确定其感受野。在自注意力机制中,感受野是通过注意力机制算法自动学出来的。

 具体来说,自注意力机制中,模型会用attention机制去找出相关的像素;而在CNN中,每个神经元只考虑一个固定感受野里的像素。此外,在处理大量数据时,自注意力机制表现得更好,而在训练数据较少时,CNN表现得更好。

 总的来说,自注意力机制和CNN在处理图像问题时各有优势。自注意力机制能够更好地处理大量数据,而CNN在处理少量数据时表现较好。在实际应用中,需要根据具体任务和数据量来选择使用哪种模型。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.3 和RNN对比

 自注意力机制和RNN(循环神经网络)在自然语言处理和其他序列处理任务中都有广泛应用,但它们之间存在一些关键区别。
 (1) 上下文处理:RNN在处理序列时,通常按照顺序逐个处理输入元素,因此其对于上下文的处理主要依赖于之前的隐藏状态。这意味着RNN在处理当前元素时,只能考虑到该元素之前的上下文信息。相比之下,自注意力机制能够同时处理整个序列,直接关联并考虑所有的上下文信息,而不仅仅局限于当前元素之前的部分。

 (2) 并行计算:由于RNN的顺序处理特性,其计算通常是顺序进行的,这限制了其并行计算的能力。而自注意力机制的计算可以并行进行,因为所有的输入元素都是同时处理的,这有助于提高计算效率。

 (3) 输入顺序:RNN对输入序列的顺序是敏感的,因为顺序的改变会影响隐藏状态的计算。而自注意力机制本身对输入序列的顺序是不敏感的,因为其在计算注意力权重时并不考虑元素的位置信息。然而,为了在需要的情况下捕捉序列的顺序信息,可以在自注意力机制中引入位置编码。

 (4) 长期依赖问题:RNN在处理长序列时,可能会遇到梯度消失或梯度爆炸的问题,这使得网络难以学习到长期依赖关系。虽然一些改进的RNN变体(如LSTM和GRU)能够在一定程度上缓解这个问题,但自注意力机制由于其全局上下文处理的能力,通常能够更好地处理长期依赖关系。

 总的来说,自注意力机制和RNN在序列处理任务中各有优势。自注意力机制能够更好地处理全局上下文和长期依赖关系,并具有并行计算的优势;而RNN则更适合处理具有明确顺序关系的序列数据。在实际应用中,可以根据具体任务的需求选择合适的模型或结合两者以充分利用其优势。

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css 中 flex 布局最后一行实现左对齐

问题 flex 布局最后一行没有进行左对齐显示&#xff1a; <div classparent><div classchild></div><div classchild></div><div classchild></div><div classchild></div><div classchild></div><div…

Linux中禅道12.5一键部署安装过程笔记

1. Linux中禅道12.5一键部署安装过程笔记 文章目录 1. Linux中禅道12.5一键部署安装过程笔记1. 安装1.将安装包直接解压到/opt目录下2. Apache和Mysql常用命令3. 访问和登录禅道4. 其他 2. 访问数据库1. 网页登录数据库2. 命令行连接数据库 3. 9.2.stable版本起Linux一键安装包…

设计模式_装饰器模式_Decorator

生活案例 咖啡厅 咖啡定制案例 在咖啡厅中&#xff0c;有多种不同类型的咖啡&#xff0c;客户在预定了咖啡之后&#xff0c;还可以选择添加不同的调料来调整咖啡的口味&#xff0c;当客户点了咖啡添加了不同的调料&#xff0c;咖啡的价格需要做出相应的改变。 要求&#xff…

girhub添加 SSH 密钥

1 打开终端 输入 ssh-keygen -t rsa -b 4096 -C "github邮箱地址"如果不需要密码可以一路回车 出现这个页面就是生存成功了 open ~/.ssh // 打开.ssh 找到id_rsa.pub复制出内容新建ssh密钥输入内容,保存即可

jmeter下载及安装配置

前言 本文是在win10环境下安装使用jmeter&#xff0c;jmeter可以运行在多平台上Windows和Linux。 环境准备&#xff1a; java 1.8 jmeter 5.1.1 jmeter环境 jmeter环境依赖JAVA环境&#xff0c;需安装JDK1.8环境&#xff0c;JDK环境安装网上一大堆教程&#xff0c;我这里就…

Socket实现服务器和客户端

Socket 编程是一种用于在网络上进行通信的编程方法&#xff0c;以下代码可以实现在不同主机之间传输数据。 Socket 编程中服务器端和客户端的基本步骤&#xff1a;服务器端步骤&#xff1a; 1.创建 Socket&#xff1a; int serverSocket socket(AF_INET, SOCK_STREAM, 0);…

详讲api网关之kong的基本概念及安装和使用(一)

什么是api网关 前面我们聊过sentinel&#xff0c;用来限流熔断和降级&#xff0c;如果你只有一个服务&#xff0c;用sentinel自然没有问题&#xff0c;但是如果是有多个服务&#xff0c;特别是微服务的兴起&#xff0c;那么每个服务都使用sentinel就给系统维护带来麻烦。那么网…

附1:k8s服务器初始化

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 关联文章&#xff1a; 《RKE快速搭建离线k8s集群并用rancher管理界面》 《附2&#xff1a;rke安装的k8s集群新增主机》 1.创建…

IDEA使用技巧总结(强迫症福音+新手必看)

前言 本文主要整理与分享个人在使用IDEA做Java开发时做的各种配置&#xff0c;算是几年来的总结。 本人使用的 idea 版本比较老了&#xff0c;2019.1 版本&#xff0c;JDK 版本也老&#xff0c;1.8 版本&#xff0c;主打的是情怀不同版本的 idea 影响不大&#xff0c;基本上在设…

【C++】list讲解及模拟

目录 list的基本介绍 list模拟实现 一.创建节点 二.迭代器 1.模版参数 2.迭代器的实现&#xff1a; a. ! b. c. -- d. *指针 e.&引用 整体iterator (与const复用)&#xff1a; 三.功能实现 1.模版参数 2.具体功能实现&#xff1a; 2.1 构造函数 2.2 begi…

【oracle】oracle客户端及oracle连接工具

一、关于oracle客户端 1.1 Oracle Client 完整客户端 包含完整的客户端连接工具。 包很大&#xff0c;需要安装 1.2 instantclient 即时客户端 是 Oracle(R) 发布的轻量级数据库客户端&#xff0c;减少甚至只包含几个文件&#xff0c;您无需安装标准的客户端&#xff0c;就可以…

Element UI样式修改之NavMenu导航菜单箭头样式修改

UI设计稿给的菜单箭头样式可能与我们饿了么组件NavMenu的菜单箭头样式不一致,目前我们侧边导航菜单的上下翻转箭头如下所示: 希望得到如下的结果: 找到饿了么Icon里我们想要向下箭头,F12后复制content内容content: “\e790”; content: "\e790";然后将默认的c…

【Delphi】程序实现Windows电脑关机、重启、注销(源代码)

目录 一、API函数说明 1. GetCurrentProcess 2. OpenProcessToken 3. LookupPrivilegeValue 4. AdjustTokenPrivileges 5. ExitWindowsEx 二、Delphi实现源代码 在日常软件开发中&#xff0c;可能会遇到通过程序自动关闭电脑&#xff0c;在早期Windows 9x下&#xff0c;…

西安石油大学C++上机实验汇总

考试题难度就像第三章第五章课后题的难度 基础知识一定要掌握&#xff01;&#xff01;&#xff01; 上机一&#xff1a;类与对象程序设计&#xff08;2 学时&#xff09; 上机目的 掌握声明类的方法。掌握类和类的成员的概念以及定义对象的方法。掌握构造函数和析构函数的…

家居图册制作方法,快来看看

​随着家居设计的流行&#xff0c;越来越多的人开始关注家居装饰和家居用品。据统计&#xff0c;家居市场每年的销售额逐年增长。而家居图册作为家居装饰的重要组成部分&#xff0c;其制作方法也备受关注。 那要怎么制作呢&#xff1f;准备好这个工具&#xff1a;FLBOOK在线制作…

百度Apollo | 实车自动驾驶:感知、决策、执行的无缝融合

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…

风口抓猪-借助亚马逊云科技EC2服务器即刻构建PalWorld(幻兽帕鲁)私服~~~持续更新中

Pocketpair出品的生存类游戏《幻兽帕鲁》最近非常火&#xff0c;最高在线人数已逼近200万。官方服务器亚历山大&#xff0c;游戏开发商也提供了搭建私人专用服务器的方案&#xff0c;既可以保证稳定的游戏体验&#xff0c;也可以和朋友一起联机游戏&#xff0c;而且还能自定义经…

大创项目推荐 题目:基于LSTM的预测算法 - 股票预测 天气预测 房价预测

文章目录 0 简介1 基于 Keras 用 LSTM 网络做时间序列预测2 长短记忆网络3 LSTM 网络结构和原理3.1 LSTM核心思想3.2 遗忘门3.3 输入门3.4 输出门 4 基于LSTM的天气预测4.1 数据集4.2 预测示例 5 基于LSTM的股票价格预测5.1 数据集5.2 实现代码 6 lstm 预测航空旅客数目数据集预…

1.25 C++ day2

思维导图 自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() 代码&a…

vue实现甘特图

目录 实现效果 一、安装依赖 二、使用 二、绕过license 实现效果 一、安装依赖 npm i --save vue-gantt-schedule-timeline-calendar 实现甘特图需先安装上述依赖&#xff0c;安装依赖实际上是通过gantt-schedule-timeline-calendar来实现的。所以node_module中因包含以下…
最新文章