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

news2024/9/24 3:18:58

文章目录

  • 1. 输入与输出
  • 2. Self-attention
    • 2.1 介绍
    • 2.2 运作过程
    • 2.3 矩阵相乘理解运作过程
  • 3. 位置编码
  • 4. Truncated Self-attention
    • 4.1 概述
    • 4.2 和CNN对比
    • 4.3 和RNN对比


1. 输入与输出

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

2. 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 矩阵相乘理解运作过程

在这里插入图片描述

在这里插入图片描述

3. 位置编码

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

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

4. 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.coloradmin.cn/o/1404160.html

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

相关文章

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(2.0) —— 如何删除任务

前言 (1)FreeRTOS是我一天过完的,由此回忆并且记录一下。个人认为,如果只是入门,利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后,再去学习网上的一些其他课程也许会简单很多。 (2&am…

基于Java开发的校园跳蚤市场管理系统详细设计和实现【附源码】

基于Java开发的校园跳蚤市场管理系统详细设计和实现【附源码】 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种…

React进阶 - 12(浅谈 state、props与render函数的关系)

本章内容 目录 一、state 与 render 函数的关系二、props 与 render函数的关系 上一节我们讲了如何使用 PropTypes及 DefaultProps来进行属性的类型校验及设置属性默认值。本节内容我们来了解一下 state、props与render函数的关系。 一、state 与 render 函数的关系 我们知道…

助力焊接场景下自动化缺陷检测识别,基于YOLOv8【n/s/m/l/x】全系列参数模型开发构建工件表面焊接裂纹缺陷检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景,在工件表面焊接场景下常常有对工件表面缺陷智能自动化检测识别的需求,工业AI结合落地是一个比较有潜力的场景,在我们前面的博文开发实践中也有一些相关的实践,感兴趣的话可以自行…

防御第二次作业-防火墙组网实验(2)

目录 实验拓扑图 实验要求 一般组网步骤 to isp区域ping通 dmz区域 trust区域 实验拓扑图 实验要求 1.防火墙向下使用子接口分别对应两个内部区域 2.所有分区设备可以ping通网关 一般组网步骤 1.先配ip、接口、区域、安全策略 2.内网配置回包路由 3.配置dmz区域的服务器映…

vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

vue2状态管理Vuex Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态,以及规则保证状态只能按照规定的方式进行修改。 State(状态):Vuex 使用单一状态树,即一个对象包含全部的应用层…

分布式日志

1 日志管理 1.1 日志管理方案 服务器数量较少时 直接登录到目标服务器捞日志查看 → 通过 rsyslog 或shell/python 等脚本实现日志搜集并集中保存到统一的日志服务器 服务器数量较多时 ELK 大型的日志系统,实现日志收集、日志存储、日志检索和分析 容器环境 …

基于SpringBoot Vue汽车租赁系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…

【代码随想录】刷题笔记Day54

前言 差单调栈就结束代码随想录一刷啦,回家二刷打算改用python补充进博客,小涛加油!!! 647. 回文子串 - 力扣(LeetCode) 双指针法 中心点外扩,注意中心点可能有一个元素可能有两个…

Android14源码剖析:MediaPlayer与MediaPlayerService区别?(五十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

C#,入门教程(35)——哈希表(Hashtable)的基础知识与用法

上一篇: C#,入门教程(34)——关于函数的参数之引用(ref)的一点知识与源程序https://blog.csdn.net/beijinghorn/article/details/125411351 有一段故事: King Log The frogs in the lake had an easy life doing ex…

神经网络算法与逻辑回归:优势与差异

神经网络算法和逻辑回归都是预测模型中的重要工具,但它们在处理复杂和非线性问题时表现出不同的性能。本文将深入探讨神经网络算法相对于逻辑回归的优势,以及它们在不同场景下的适用性。 一、引言 神经网络算法和逻辑回归都是预测模型中的重要工具&…

C# CefSharp 根据输入日期段自动选择日期

前言 搞这个Demo整整搞几天通宵,爆肝了。后做的效果出来,还是不错的。给小伙伴看看效果图。 2, 遇到的问题 日期之间相差多少个月数。开始时间框点击对应月份要点击多少次,结束时间框点击对应月份要点击多少次Xpath获取问题。找到对应html元…

力扣刷题第七天 分割数组的最大值

给定一个非负整数数组 nums 和一个整数 k &#xff0c;你需要将这个数组分成 k 个非空的连续子数组。 设计一个算法使得这 k 个子数组各自和的最大值最小。 注&#xff1a; 1 < nums.length < 10000 < nums[i] < 1061 < k < min(50, nums.length) 示例一 输入…

cdh6.3.2的hive配udf

背景 大数据平台的租户要使用udf&#xff0c;他们用beeline连接&#xff0c; 意味着要通过hs2&#xff0c;但如果有多个hs2&#xff0c;各个hs2之间不能共享&#xff0c;需要先把文件传到hdfs&#xff0c;然后手动在各hs2上create function。之后就可以永久使用了&#xff0c;…

宠物互联网医院系统

在数字时代&#xff0c;宠物医疗迎来了一场革新&#xff0c;动物互联网医院系统以其先进的技术和智能的特性成为宠物护理的领军者。本文将介绍宠物互联网医院系统的一些关键技术和代码示例&#xff0c;揭示这一科技奇迹的实现原理。 1. 远程医疗服务的实现 远程医疗服务是宠…

<蓝桥杯软件赛>零基础备赛20周--第15周--快速幂+素数

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

Spring-配置文件

一、引子 了解完Spring的基本概念后&#xff0c;我们紧接着来了解Spring中的核心文件--Spring配置文件。 二、配置Bean 我们在上一节Spring的基本概念中快速使用了一下Spring&#xff0c;其中我们在配置文件中主要涉及到就是Bean标签的配置&#xff1a;主要的配置字段有id, …

[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

C++ //练习 2.36 关于下面的代码,请指出每一个变量的类型以及程序结束时它们各自的值。

C Primer&#xff08;第5版&#xff09; 练习 2.36 练习 2.36 关于下面的代码&#xff0c;请指出每一个变量的类型以及程序结束时它们各自的值。 int a 3, b 4; decltype(a) c a; decltype((b)) d a; c; d;环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09;…