【深度学习】【注意力机制】【自然语言处理】【图像识别】深度学习中的注意力机制详解、self-attention

news2024/11/17 17:44:47

1、深度学习的输入

无论是我们的语言处理、还是图像处理等,我们的输入都可以看作是一个向量。通过Model最终输出结果。这里,我们的vector大小是不会改变的。
请添加图片描述

然而,我们有可能会遇到这样的情况:
请添加图片描述
输入的sequence的长度是不定的怎么处理?
比如 Vector Set as Input:

  • 句子:句子的词数不一定相同。

请添加图片描述

  • 声音信号:经过处理,把一段声音变成向量。
    请添加图片描述

  • 图:每个节点转化为向量
    请添加图片描述

  • 图:分子结构中的每个原子转化为one-hot。
    请添加图片描述

2、深度学习的输出

2.1 输出和输入数量相同

也就是说,输入的每一个向量,都对应一个输出标签。比如输入3个向量,输出3个对应标签。
例子:

  • 输入一句话“I saw a saw”,输出4个标签,分析各个词的词性。
  • 输入四个向量组成的一段音频,输出这四个向量代表的语意,比如这语音说的是“a、a、b、b”
  • 输入很多节点向量,构成一个图,输出各个节点所代表的重要含义。
    请添加图片描述

2.2 输入多个向量,输出一个标签

这是说,我们输入了若干个向量,输出一个标签来描述这些向量的含义。
例子:

  • 输入一句话“this is good”,输出“positive”代表这句话说正面描述。
  • 输入一段语音,输出这句话是谁的声音。
  • 输入一个分子组成,输出这个分子代表的化学物质。
    请添加图片描述

2.3 不知道要输出多少,机器自己决定

输入一些向量,输出的向量个数是不定的。
例子:

  • 翻译句子:翻译两遍的语言不同,字数不一定相同。
  • 输入一段语音:输出描述这段语音讲了什么。
    请添加图片描述

3、Sequence Labeling

这种情况对应上面的[[#2.1输出和输入数量相同]]。
看下面的例子:输入“I saw a saw”,我们的目标是输出每个词的对应词性。
请添加图片描述

然而这里有个问题:第一个saw和第二个saw词性不同,但通过model的输出却是相同的
因为每个词是独立的,所以要让它model考虑上下文信息。如何解决?
前后几个向量建立关系,添加FC
请添加图片描述
FC可以让相邻的词语建立关系(相当于一个window),从而能帮助model推断。
然而这个办法有局限:如果我们考虑整个上下文的关系呢?把window开到最大?换言之:如果我们输入的句子有很多,长短不一,选取其中最长的句子的大小作为window,这样可行吗?答案是:这样会让FC的计算量非常大,还容易overfitting。

可以考虑self- attention。

4、Self- attention

下面是attention的模式图:
请添加图片描述

这里带有黑框的vector表示是携带了上下文的vector。

而且self-attention是可以叠加使用的。比如,可以先self- attention后,再进行FC,然后接着self-attemtion…
请添加图片描述

这就是著名的论文[[Attention_Is_All_You_Need.pdf]]。在这里,Google提出了transformer概念。其实在这之前有其它相近的概念,只是这片论文将这种概念发扬光大。

请添加图片描述
这里,输入的向量 [ a 1 , a 2 , a 3 , a 4 ] [a^1,a^2,a^3,a^4] [a1,a2,a3,a4] 建立好关系后 [ b 1 , b 2 , b 3 , b 4 ] [b^1,b^2,b^3,b^4] [b1,b2,b3,b4],完成context的获取。
下面以 b 1 b^1 b1的为例,讲述过程:

4.1 向量相关性

对于 a 1 a^1 a1,我们希望找出与它相关的向量,而不是整个sequence。

请添加图片描述
a 1 a^1 a1的和其他向量的相关程度的数值,用 α \alpha α 表示。

那么如何来找某两个向量之间的关系?比如以 a 1 a^1 a1 a 4 a^4 a4?举两个例子:

  • Dot-product
  • Additive

请添加图片描述

Dot- product:

这是一个常见的计算方法。首先,两个向量分别点乘以不同的向量 W q 和 W^q和 Wq W k W^k Wk,得到 q q q k k k,然后点乘得到结果 α \alpha α(attention score)。

请添加图片描述

其实,以 a 1 a^1 a1为例,自己也要和自己计算关联性:

请添加图片描述

接着,每个 α ′ \alpha' α分别和 v ′ v' v 点乘求和。如果,举个例子, a 1 a^1 a1 a 2 a^2 a2的关联性较强,那么 b 1 b^1 b1 v 2 v^2 v2的值会更相近。
请添加图片描述

4.2 相关性计算细节

4.2.1 q q q k k k v v v的来源

对于一个向量 a a a,为了对应的 q q q k k k v v v,每个 a a a需要点乘以一个矩阵 W W W。因为这个W是固定的,所以可以把 a a a合并成一个大矩阵。以 q i q^i qi为例:首先 a 1 a^1 a1 a 2 a^2 a2 a 3 a^3 a3 a 4 a^4 a4可以合成一个大矩阵 I I I,然后点乘以一个矩阵 W q W^q Wq,得到大矩阵 Q Q Q(可以拆成死列, q 1 q^1 q1 q 2 q^2 q2 q 3 q^3 q3 q 4 q^4 q4)。 k k k v v v以此类推。如下图:
请添加图片描述

4.2.2 α \alpha α的计算

b 1 b^1 b1为例,在计算 b 1 b^1 b1前,我们需要先计算向量 a 1 a^1 a1 a 1 a^1 a1 a 2 a^2 a2 a 3 a^3 a3 a 4 a^4 a4的关系,即 α 1 , 1 \alpha^{1,1} α1,1 α 1 , 2 \alpha^{1,2} α1,2 α 1 , 3 \alpha^{1,3} α1,3 α 1 , 4 \alpha^{1,4} α1,4。而对于计算公式中 a 1 , i = k i × q 1 a^{1,i}=k^i\times q^1 a1,i=ki×q1来说, q 1 q^1 q1是不变的。所以可以合并几个 k i k^i ki成一个大矩阵来计算,如下图:
请添加图片描述

推广到 a i , i a^{i,i} ai,i,在经过normalization(用的是softmax,也可以选其他的如relu)就是:

请添加图片描述

4.2.3 b b b的计算

b 1 b^1 b1为例, b 1 b^1 b1的计算公式是: b 1 = α 1 , 1 ′ × v 1 + α 1 , 2 ′ × v 2 + α 1 , 3 ′ × v 3 + α 1 , 4 ′ × v 4 b^1=\alpha'_{1,1}\times v^1+\alpha'_{1,2}\times v^2+\alpha'_{1,3}\times v^3+\alpha'_{1,4}\times v^4 b1=α1,1×v1+α1,2×v2+α1,3×v3+α1,4×v4
写成矩阵形式就是:
b 1 = [ v 1 v 2 v 3 v 4 ] [ α 1 , 1 ′ α 1 , 2 ′ α 1 , 3 ′ α 1 , 4 ′ ] b^1= \begin{bmatrix} v^1&v^2&v^3&v^4 \end{bmatrix} \begin{bmatrix} \alpha'_{1,1}\\ \alpha'_{1,2}\\ \alpha'_{1,3}\\ \alpha'_{1,4} \end{bmatrix} b1=[v1v2v3v4] α1,1α1,2α1,3α1,4
以此类推,拓展到 b 2 b^2 b2 b 3 b^3 b3 b 4 b^4 b4就是:
请添加图片描述

4.2.4 计算过程小结

重新再来看一遍这些计算过程,其实就是一些矩阵的运算。模型要学习的,其实就是 W q W^q Wq W k W^k Wk W v W^v Wv这三个矩阵。
请添加图片描述

5、multi-head attention

我们还可以用不同的 q q q来处理不同的相关性。下面举一个2个头的例子。我们的 a i a^i ai首先点乘以一个矩阵,得到了 q i q^i qi,然后 q i q^i qi再分别点乘以不同的两个矩阵,得到 q i , 1 q^{i,1} qi,1 q i , 2 q^{i,2} qi,2。如下:
请添加图片描述

对应地,我们的 k k k v v v也需要分别有两个,也就是如下所示的样子:
请添加图片描述

接着,我们要继续计算 b b b。因为我们的 q q q k k k v v v各自都是2个,所以我们的 b b b也是分开算。首先通过 q i , 1 q^{i,1} qi,1 k i , 1 k^{i,1} ki,1 v i , 1 v^{i,1} vi,1计算得到 b i , 1 b^{i,1} bi,1。如下:
请添加图片描述

然后,相同地,通过 q i , 2 q^{i,2} qi,2 k i , 2 k^{i,2} ki,2 v i , 2 v^{i,2} vi,2计算得到 b i , 2 b^{i,2} bi,2。如下:
请添加图片描述

更多头的操作也是如此。

思考:对于一个向量,我们已经能够通过注意力机制,获取上下文信息了,但是好像没有考虑到空间信息。换言之,一些相同的向量通过模型的运算后,输出的结果是相似的,即使这些向量所处位置不同。比如,在我们的语句中,动词出现在句首的可能性很小。也就是说,如果一个词出现在句首,那么它大概率不是动词。

举个例子:“can”这个单词包含两个意思,“可以”和“罐头”。在这句话中:“罐头可以装食物。”,“A can can store food.”。句首的“can”是名词,而不是(情态)动词。这也是很重要的语义信息,然而,上面的注意力机制并没有注意到。

下面,将介绍包含位置信息的注意力机制。

6、Positional Encoding

为了让向量 a i a^i ai携带位置信息,可以让它加上位置向量 e i e^i ei e i e^i ei的i表示处在i的位置。比如 e 1 = [ 1 , 0 , 0 , 0 ] e^1=[1,0,0,0] e1=[1,0,0,0]表示处在1的位置, a 1 a^1 a1加上它后,就代表 a 1 a^1 a1处在1的位置; e 2 = [ 0 , 1 , 0 , 0 ] e^2=[0,1,0,0] e2=[0,1,0,0]表示处在2的位置, a 2 a^2 a2加上它后,就代表 a 2 a^2 a2处在2的位置(这里的向量是我举例随意写的)。

请添加图片描述
比如在上面图中的第四列,用黑框圈起来的这列代表 e 4 e^4 e4,他可以加到 a 4 a^4 a4上,代表这个 a 4 a^4 a4处在位置4上。

说明:这里的 e i e^i ei是hand-crafted的,也就是人工标注的。

这就有一个问题:如果向量 e e e设置的长度是128,但是我的语句sequence长度是129怎么办?这尚待研究。这有一篇论文研究了这个问题: 《Learning to Encode Position for Transformer with Continuous Dynamical Model》

7、Self- attention的应用

7.1

Transformer、BERT都是利用了自注意力机制。
请添加图片描述

7.1 Self-attention用在语音上

因为即使很短的语音信号转化的向量也是很长的,所以我们随俗便便说的一句语音可能就是上千长度的向量了。这就带来一个问题:矩阵 A ′ A' A(就是那些很多 a 1 , 1 ′ a'_{1,1} a1,1 a 1 , 2 a_{1,2} a1,2 a 1 , 3 a_{1,3} a1,3的矩阵)的行列会很大,导致占用训练内存很多,难以训练。解决办法是,输入的某个向量不要考虑全部上下文,而是只考虑相邻的几个向量,这样可以加快训练。
![[Pasted image 20240126013029.png]]

7.1 Self-attention用在图像上

对于一张图片来说,一个个像素可以用RGB三个通道表示。这些像素排列起来其实就是一个比较长的向量(把图片拉成一条直线)。这样,如果一个batch的输入是一排向量的话,适合用self-attention。
请添加图片描述

举例1:
请添加图片描述

# 《Self-Attention Generative Adversarial Networks》

举例2:
请添加图片描述

# 《End-to-End Object Detection with Transformers》

8、Self-attention v.s CNN

我们在使用Self-attention处理图像时,一个pixel(像素)产生query,其他pixel产生key。
以上面我们说的为例,我们使用的是内积(点乘)运算,所以self-attention考虑的是全局资讯(上下文信息)。

而在CNN中,一个neuron只考虑感受野(receptive field)内的讯息。

所以,可以说,CNN是简化版的self- attention;self- attention是CNN的复杂版。

也可以说,self-attention在找出相关的pixel时,像是在自动学习感受野的形状、哪些pixel时重要的、相关的。
请添加图片描述

下面这篇论文阐述了CNN和self-attention的关系:设置好self-attention的参数,可以做到和CNN一模一样的效果。
请添加图片描述

# 《On the Relationship between Self-Attention and Convolutional Layers》

未完待续…读完资料再来更新

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

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

相关文章

Idea上操作Git回退本地版本,怎么样保留已修改的文件,回退本地版本的四种方式代表什么?

Git的基本概念:Git是一个版本控制系统,用于管理代码的变更历史记录。核心概念包括仓库、分支、提交和合并。 1、可以帮助开发者合并开发的代码 2、如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突 3、代码文件版本管理 问题描述 当我们使用git提交代码…

Hive3.1.3基础学习

文章目录 一、Hive入门与安装1、Hive入门1.1 简介1.2 Hive架构原理 2、Hive安装2.1 安装地址2.2 Hive最小化安装(测试用)2.3 MySQL安装2.4 配置Hive元数据存储到MySQL2.5 Hive服务部署2.6 Hive服务启动脚本(了解) 3、Hive使用技巧3.1 Hive常用交互命令3.2 Hive参数配置方式3.3 …

蓝桥杯(C++ 左移右移 买二增一 松散子序列 填充 有奖问答 更小的数 )

目录 左移右移 思路: 代码: 买二增一 思路: 代码: 松散子序列 思路: 代码: 填充 思路: 代码 : 有奖问答 思路: 代码: 更小的数 思路&#…

【快影】怎么制作卡拉OK字幕

您好,您添加了字幕之后可以添加动画,选择卡拉OK,其中 卡拉OK1是支持修改颜色的,卡拉OK2只支持修改文字的底色。

OpenCV使用基础、技巧

OpenCV概述与安装 视觉概述 人类的视觉能够很轻易地从图像中识别出内容。但是,计算机视觉不会像人类视觉那样能够对图像进行感知和识别,更不会自动控制焦距和光圈,而是把图像解析为按照栅格状排列的数字。 这些按照栅格状排列的数字包含大量…

Java中Integer(127)==Integer(127)为True,Integer(128)==Integer(128)却为False,这是为什么?

文章目录 1.前言2. 源码解析3.总结 1.前言 相信大家职业生涯中或多或少的碰到过Java比较变态的笔试题,下面这道题目大家应该不陌生: Integer i 127; Integer j 127;Integer m 128; Integer n 128;System.out.println(i j); // 输出为 true System.o…

华为数通方向HCIP-DataCom H12-831题库(判断题:121-140)

第121题 BGP/MPLS IP VPN内层采用MP-BGP分配的标签区分不同的VPN实例,外层可采用多种隧道类型,例如GRE隧道。 正确 错误 答案: 错误 解析: VPN业务的转发需要隧道来承载,隧道类型包括GRE隧道、LSP隧道、TE隧道(即CR-LSP)。 如果网络边缘的PE设备具备MPLS功能,但骨干网核…

Deepin基本环境查看(四)【硬盘/分区、文件系统、硬连接/软连接】

Linux操作系统(Deepin、Ubuntu)操作系统中,硬盘分区的管理与Windows操作系统不同; 在Linux系统中维护着一个统一的文件目录体系,而硬盘和分区是以资源的形式由操作系统挂接和调度;此外Linux系统中连接(硬连…

UE创建数据表格

创建一个数据表格需要行结构 继承自FTableRowBase的一个子类 效果 如何使用它 在蓝图中给C该类型的指针变量选用 UDataTable类型的 FindRow()函数可查询并返回对应行的行结构 FTableRowBase GetAllRows()函数可以获得该数据表的所有行、

全面解析开源大语言模型:BLOOM

大型语言模型 (LLM) 的兴起一直是自然语言处理 (NLP) 领域的一个决定性趋势,导致它们在各种应用程序中的广泛采用。然而,这种进步往往是排他性的,大多数由资源丰富的组织开发的 LLM 仍然无法向公…

手动搭建koa+ts项目框架(apidoc文档篇)

文章目录 一、安装apidoc工具二、使用1、项目根目录新建apidoc.json2、定义接口路由上方注解对应信息3、配置静态文件访问目录4、生成api文档如有启发,可点赞收藏哟~ 一、安装apidoc工具 全局安装 npm i apidoc -g查看是否安装成功 apidoc -v二、使用 1、项目根…

面向社交网络语言隐写分析

论文:Linguistic Steganalysis Toward Social Network 发表在:IEEE Transactions on Information Forensics & Security是网络与信息安全领域的国际两大顶级期刊之一,中国计算机学会(CCF)推荐的A类期刊&#xff0c…

第一篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:从helloworld开始理解鸿蒙开发ArkTS编程思路

传奇开心果短博文系列 系列短博文目录鸿蒙开发技术点案例示例系列 短博文目录一、前言二、初步解读鸿蒙的helloworld三、进一步深入解读理解 系列短博文目录 鸿蒙开发技术点案例示例系列 短博文目录 一、前言 从掰碎了揉烂了详细注释解读helloworld开始,理解Ark…

matlab appdesigner系列-容器2-选项卡组

所谓容器,就是可以放置常有组件的空间,类似一种画布。默认背景画布就是一张画布,选项卡组,可以同时增加好几个画布空间,以满足不的组件放置需求。 1)将选项卡组拖拽到画布上 2)将选项卡组拉大背…

linux-centos服务器离线安装yapi(包含nodejs、mongodb、yapi、pm2离线安装)

yapi是使用vue框架开发的,借助nodejs 前端直接访问的mongodb数据库,离线安装yapi步骤如下 下载离线安装包 下载地址 https://download.csdn.net/download/qq445829096/88778418 离线安装包先复制到 dev/yapi目录(根据自己习惯自定义目录) node-v12.13.0-linux-x64.tar.xz …

10.多柱状图(MuliBarChart)

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET 7、MAUI 话接上回&#xff08;9.单柱状图&#xff08;SingleBarChart&#xff09;&#xff09;&#xff0c;从单柱拓展到多柱状图。 1.数据设置 private void InitValue(List<BasicSerieDto> dtos){Serie…

EXCEL VBA调用adobe的api识别电子PDF发票里内容并登记台账

EXCEL VBA调用adobe的api识别电子PDF发票里内容并登记台账 代码如下 使用须知&#xff1a; 1、工具--引用里勾选[Adobe Acrobat 10.0 Type Library] 2、安装Adobe Acrobat pro软件Dim sht As Worksheet Function BrowseFolders() As String 浏览目录Dim objshell As ObjectDim…

ORM-08-EclipseLink 入门介绍

拓展阅读 The jdbc pool for java.(java 手写 jdbc 数据库连接池实现) The simple mybatis.&#xff08;手写简易版 mybatis&#xff09; 1. EclipseLink概述 本章介绍了EclipseLink及其关键特性&#xff1a;包括在EclipseLink中的组件、元数据、应用程序架构、映射和API。 本…

202|读书笔记《金融的本质:伯南克四讲美联储》

今天跟朋友聊天&#x1f4ac;&#xff0c;说已经没人看书了&#x1f4d6; 我想&#xff0c; 还是会有人读书的吧。 ​ 一、美联储的起源和使命 1. 第一讲&#xff1a;美国南北战争结束后的40年间&#xff0c;美国经历了6次大的银行体系恐慌&#xff0c;促使其于1913年成立美联储…

如何在Word中选择多个图片?这里提供两个方法及详细步骤

你的Word文档中可能有一些图片。要更改图片的几个参数,可以逐个编辑它们。当你有更多的图片时,你可能需要一次选择所有图片。这允许你一次更改所有内容。默认情况下,Word不允许你一次选择多张图片。 Word插入图片的两个布局选项 文字环绕 嵌入文本中 默认情况下,Word会在文…