Self-Attention的学习

news2024/9/22 14:38:33

文章目录

  • Self-Attention
    • 模型的输入与输出
    • 1.为什么引入Self-Attention?
    • 2.Self-attention(重点)
      • 2.1 整体架构
      • 2.2 计算单个输出的原理
      • 2.3 整体的矩阵计算
    • 3.Multi-head Self-attention
    • 4.Self-attention的缺点
    • 5.Self-attention与CNN的对比
    • 6.Self-attention与RNN的对比

Self-Attention

模型的输入与输出

输入:输入是一个向量,输入是一个向量集。

image-20231213223751090

可以做为向量集的数据有:词嵌入(Word Embedding)、语音数据、图连接。

输出:一个向量对应一个标签,整个序列有一个标签,模型决定了标签的数量(seq2seq)

image-20231214092913238

1.为什么引入Self-Attention?

在考虑上下文时,尽管全连接层能够考虑周边的一些信息,但是如果序列足够长的话,全连接的窗口不可能覆盖整个序列,因此需要自注意力机制。

只要数据可以表示为一个向量集,那么就可以使用self-attention,Self-attention可以用于语音处理,也可以用于图像。

2.Self-attention(重点)

2.1 整体架构

image-20231214093625206

self-attention不是仅关注了当前的输入,而是关注了整体的输入。通过计算当前输入与其他输入的相关性,来共同决定当前的输出。

image-20231214094312599

那么在整个序列中找到相关性的向量就变得很重要了。

image-20231214095251716

计算相关性的方式有很多,下面是两种常见的方法:

2.2 计算单个输出的原理

计算 b 1 b^1 b1的过程:

  1. 首先对于 a 1 a^1 a1,将 a 1 a^1 a1 W q W^q Wq进行乘积,得到 q 1 q^1 q1,然后剩余的输入,通过乘以 W k W^k Wk计算出 k 2 , k 3 , k 4 k^2,k^3,k^4 k2,k3,k4。之后将计算的 q 1 q^1 q1 k 2 , k 3 , k 4 k^2,k^3,k^4 k2,k3,k4分别进行点积,就分别得到了 a 2 a^2 a2 a 1 a^1 a1 a 3 a^3 a3 a 1 a^1 a1 a 4 a^4 a4 a 1 a^1 a1的注意力分数 α 1 , 2 , α 1 , 3 , α 1 , 4 \alpha_{1,2},\alpha_{1,3},\alpha_{1,4} α1,2,α1,3,α1,4

image-20231214100535247

  1. 对于 a 1 a^1 a1我们也让其乘以 W k W^k Wk,得到 k 1 k^1 k1,通过 q 1 q^1 q1 k 1 k^1 k1进行点积,得到 α 1 , 1 \alpha_{1,1} α1,1。然后将 α 1 , 1 , α 1 , 2 , α 1 , 3 , α 1 , 4 \alpha_{1,1},\alpha_{1,2},\alpha_{1,3},\alpha_{1,4} α1,1,α1,2,α1,3,α1,4送入到一个Soft-Max,得到了 α 1 , 1 ′ , α 1 , 2 ′ , α 1 , 3 ′ , α 1 , 4 ′ \alpha^{'}_{1,1},\alpha^{'}_{1,2},\alpha^{'}_{1,3},\alpha^{'}_{1,4} α1,1,α1,2,α1,3,α1,4.

image-20231214102807780

  1. 然后对于每一个 a 1 , a 2 , a 3 , a 4 a^1,a^2,a^3,a^4 a1,a2,a3,a4通过乘以 W v W^v Wv计算出 v 1 , v 2 , v 3 , v 4 v^1,v^2,v^3,v^4 v1,v2,v3,v4.接下来将计算出来的 v 1 , v 2 , v 3 , v 4 v^1,v^2,v^3,v^4 v1,v2,v3,v4分别乘以对应的注意力权重 α 1 , 1 ′ , α 1 , 2 ′ , α 1 , 3 ′ , α 1 , 4 ′ \alpha^{'}_{1,1},\alpha^{'}_{1,2},\alpha^{'}_{1,3},\alpha^{'}_{1,4} α1,1,α1,2,α1,3,α1,4并进行求和,就得到了 b 1 b^1 b1.

image-20231214103358241

  1. b 2 , b 3 , b 4 b^2,b^3,b^4 b2,b3,b4也是同样的道理。

2.3 整体的矩阵计算

  1. 首先将每一个 a 1 , a 2 , a 3 , a 4 a^1,a^2,a^3,a^4 a1,a2,a3,a4(也就是矩阵 I I I)都分别乘以 W q , W k , W v W^q,W^k,W^v Wq,Wk,Wv,就得到了 q 1 , q 2 , q 3 , q 4 q^1,q^2,q^3,q^4 q1,q2,q3,q4(矩阵Q), k 1 , k 2 , k 3 , k 4 k^1,k^2,k^3,k^4 k1,k2,k3,k4(矩阵K), v 1 , v 2 , v 3 , v 4 v^1,v^2,v^3,v^4 v1,v2,v3,v4(矩阵V)

image-20231214104552617

  1. 然后用矩阵Q乘以矩阵K就得到了矩阵A(也就是注意力矩阵),最后将矩阵A送入Softmax,就得到了 A ′ A^{'} A

image-20231214105142314

  1. 接着将 A ′ A^{'} A与V相乘,就得到了矩阵O(代表输出)

image-20231214105619362

3.Multi-head Self-attention

多头自注意力原理和自注意力的原理是一致的,感觉就像是针对每一个输出,进行了多次的计算,然后将每一次计算出来的结果通过权重的方式将它们联系起来。

image-20231214110807155

image-20231214112323380

4.Self-attention的缺点

比如在做词性标记的时候,往往句首的词性是动词的概率较低,所以也需要考虑到位置的信息,但是Self-attention没有位置信息,上面的 a 1 , a 2 , a 3 , a 4 a^1,a^2,a^3,a^4 a1,a2,a3,a4标号是为了理解而标记上去的,实际上它们之间的位置信息是不确定的,没有说谁就在谁的前面或者后面。

改进:可以通过position encoding的技术来实现位置信息。就是在每一个位置引入一个位置向量 e i e^i ei,不同位置的 e i e^i ei是不一样的。通过 e i e^i ei来告诉不同位置的位置信息。

image-20231214114604482

目前position representation的方法很多,不用仅仅局限于上面的 e i e^i ei.

5.Self-attention与CNN的对比

Self-attention就是一种复杂的CNN,反过来说,CNN是一种简单的self-attention.

CNN 每次关注的是一个 receptive field(这个域的范围是由我们自己决定的),而self-attention关注的是整体的域。CNN是每次从这个较小的域中找到关键信息,而self-attention是从整体的域中去计算他们之间的相关程度,找出重要的特征信息。

image-20231214115948052

在数据量较少的情况下,CNN的效果较好,但是在数据量较多的情况下,self-attention的效果优于CNN。

6.Self-attention与RNN的对比

尽管Self-attention与RNN都是用于时序数据,Self-attention的输出是并行输出,但是RNN的输出不是并行的。self-attention的效果要优于RNN。

image-20231214164028571


这篇笔记根据李宏毅老师的讲解结合自己的理解所写。感兴趣的伙伴可以去听李宏毅老师的课程,讲的十分通透。链接如下:

【强烈推荐!台大李宏毅自注意力机制和Transformer详解!】 https://www.bilibili.com/video/BV1v3411r78R/?share_source=copy_web&vd_source=a36f62f9fcd2efea97449039538032fa

😃😃😃

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

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

相关文章

selenium 与 chromedriver安装

本文章向大家介绍selenium 安装与 chromedriver安装,主要包括selenium 安装与 chromedriver安装使用实例、应用技巧、基本知识点总结和需要注意事项供大家参考。 一、安装selenium 1、Selenium简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开…

msvcr100.dll丢失的多种解决方法,哪个方法更合适你呢

我们打开电脑程序的时候,系统提示电脑丢失msvcr100.dll,无法启动此程序,这该怎么办?msvcr100.dll是电脑一个重要的文件,丢失了就会导致一些应用程序打不开。下面我们就来看看详细的解决步骤。 msvcr110.dll为Visual St…

IS-IS原理与配置

IS-IS原理与配置 • IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP (ConnectionL…

MySQL——库,表基础操作

目录 一.库的操作 1.显示当前的数据库列表 2.创建数据库 3.字符集和校验规则 4.操纵数据库 5.删除数据库 6.数据库备份与还原 7.查看连接情况 二.表的操作 1.创建表 2.查看表结构 3.修改表 4.删除表 一.库的操作 1.显示当前的数据库列表 show databases; 2.创建数…

PyQt6 QSpacerItem弹簧控件

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计46条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…

QT案例 使用WMI获取win_32类的属性值,包括Win32提供程序类中的属性

最近涉及到读取WINDOWS 系统电脑设备的各种信息,在一些特殊的PE或者简化系统中是没有WMI查询工具的,所以就自己写了个查询大部分WMI属性值的工具,免去了查网站的功夫。涉及到的方法内容就汇总做个总结。 PS:因为工作中软件基本都是我一个人开…

关于react native项目中使用react-native-wechat-lib@3.0.4

关于react native项目中使用react-native-wechat-lib3.0.4 插件官网安装依赖包(Android和iOS下载插件完成后记得更新依赖,)Android中配置1.在项目文件夹下面创建文件夹wxapi(如上图)2.在文件MainApplication.java中如下…

软件设计师——法律法规(三)

📑前言 本文主要是【法律法规】——软件设计师——法律法规的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

JAVA代码审计之深入XXE漏洞挖掘与防御

文章目录 前言WebGoat1.1 Docker环境搭建1.2 Leve1-XXE回显1.3 代码审计与溯源1.4 Jaxb的反序列化1.5 Level2-格式校验1.6 Level3-XXE盲注 挖掘与防御2.1 XMLReader2.2 SAXBuilder2.3 SAXReader2.4 SAXParserFactory2.5 Digester2.6 DocumentBuilderFactory2.7 XXE挖掘技巧小结…

strlen的三种模拟实现方法

首先&#xff0c;我们要了解strlen函数的参数以及返回值&#xff0c;还有使用方法。 1. 计数器方法 #include <stdio.h>size_t my_strlen(const char* str) {int count 0;while (*str) {count;}return count; } int main() {char arr[] "abcdef";int len …

Angular+Nginx区域HIS医院信息管理系统源码

医院管理信息系统&#xff08;HIS&#xff09;是医院基本、重要的管理系统&#xff0c;是医院大数据的基础。“云”指系统采用云计算的技术和建设模式&#xff0c;具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生&#xff0c;由原来医院 (…

Flask学习四:补充

插件 flask-caching 简介 Flask-Caching 是一个 Flask 扩展&#xff0c;旨在为 Flask 应用程序添加缓存功能。缓存是一种提高应用性能的技术&#xff0c;通过将常用数据暂时存储在一个快速访问的位置&#xff08;如内存或磁盘&#xff09;&#xff0c;从而减少对较慢资源&…

ssm基于MVC的舞蹈网站的设计与实现论文

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;舞蹈网站当然也不能排除在外。舞蹈网站是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采用Java技…

自动化测试(终章)webdriver的常用api(2)以及新的开始

目录 多层框架/窗口定位 多层框架的定位 frame是什么&#xff1f; 多层窗口定位 层级定位 使用 XPath 进行层级定位&#xff1a; 使用 CSS 选择器进行层级定位&#xff1a; 下拉框处理 alert、confirm、prompt 的处理 Alert 弹窗&#xff1a; Confirm 弹窗&#xff…

万兆网络之屏蔽线序接法(上)

可以经常听到用RJ45指代网线&#xff0c;用RJ11指代电话线的&#xff0c;RJ&#xff08;Registered Jack&#xff09;即已注册插口&#xff0c;可以简单理解为一种约定就行&#xff08;参见参考链接&#xff09; 前一篇已经讲到&#xff0c;网线线对互相缠绕是为了电流方向相反…

Redis List类型

列表类型是用来存储多个有序的字符串&#xff0c;如图所示&#xff0c;a、b、c、d、e 五个元素从左到右组成了一个有序的列表&#xff0c;列表中的每个字符串称为元素 (element)&#xff0c;一个列表最多可以存储2的32次方 -1个元素。在 Redis 中&#xff0c;可以对列表两端插入…

spring面试:一、面试题分类总览+bean线程安全问题+AOP相关问题(定义、使用步骤、编程式事务管理和声明式事务管理和声明式事务管理失效)

面试题分类总览 bean线程安全问题 单例/多例 单例&#xff08;singleton&#xff09;&#xff1a;在每个spring ioc容器中都只有一个实例。 多例&#xff08;prototype&#xff09;&#xff1a;在每个spring ioc容器中有多个实例。 默认情况下spring中的bean都是单例的。但是…

【星环云课堂大数据实验】kafka消息发布与订阅

文章目录 一、Kafka概述二、实验环境三、实验准备四、实验目的五、实验步骤5.1、创建Kafka Topic5.2、Kafka消息发布5.3、Kafka消息订阅 六、实验感悟 一、Kafka概述 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。该项目的目标是为处理实…

算法Day33 不会算数的小明

不会算数的小明 Description 现在有一个数字startValue&#xff0c;小明不会算数&#xff0c;只会以下两种操作&#xff1a; 双倍&#xff08;Double&#xff09;&#xff1a;将数字乘2&#xff1b; 递减&#xff08;Decrement&#xff09;&#xff1a;将数字减1。 给定两个整…

Python3开发笔记(简洁版)

一、开发编辑器 1. pycharm 2. IDLE&#xff08;Python自带软件&#xff09; 方法&#xff1a;Microsoft Store搜索 Python 安装 二、数据类型 Python中有以下几种主要的数据类型&#xff1a; 数字&#xff08;Numbers&#xff09;、 字符串&#xff08;Strings&#xff09…