深入理解Self-attention

news2024/11/19 9:41:00

概述

  • 输入的特点
    • 是一个向量序列
    • 序列的长度是可变的
    • 例如:对于音频数据,STFT之后,得到每个帧的特征,这些帧在时间维度上构成序列
      在这里插入图片描述
  • 输出类型有三种
    • 对序列中的每一个向量,都有一个对应的输出,比如说要对一段文本里的每个词,都判断词性。此时输出序列和输入序列长度相同
    • 只需要输出一个向量,比如说话人识别、音频事件分类
    • 输出序列的长度不能确定,比如语音识别、机器翻译

接下来专注于介绍第一种输出类型,这种任务通常被称为序列标注(Sequence Labeling)

动机

  • 假设输入一个句子,且每个词已经向量化,需要输出每个词的词性(名词、动词、形容词等),此时网络输出就是,当前输入属于每种词性的概率
  • 如果每个词都独立地输入到网络,即无论词的顺序如何变化,只要输入的元素不变,对应的输出元素就不变,此时用MLP即可完成该任务
    在这里插入图片描述
  • 但是,对于同一个词,在句子中的位置不同,其词性也会发生变化。网络需要获取上下文信息,才能使同一个元素,在不同的输入位置,对应不同的输出。要做到这一点,可以将输入元素及其邻近元素,集成到一个窗口中,把窗口作为输入序列的元素
    在这里插入图片描述
  • 以窗口作为输入,网络获取上下文信息能力是有限的,如果希望考虑整个输入序列的信息,该怎么做呢?可以把窗口开大一点,但是输入序列的长度是可变的,因此无法采用固定大小的窗口,实现全序列信息捕获
  • 引入Self-attention模块,效果是:使序列中的每个元素都获取全序列的上下文信息,并且序列长度不变。将Self-attention处理后的序列,再输入到MLP,其分类结果,就包含了全序列的信息
    在这里插入图片描述
  • 在上图的结构中,Self-attention用于捕获全序列信息,MLP用于集中该位置的信息,因此可以交替使用
    在这里插入图片描述

数学过程

  • 现在专注于Self-attention内部,要得到某一位置的输出,首先要在输入序列中找出与当前位置最为关联的其他位置的向量,具体做法是:将当前向量与其他向量两两组合,计算相关性,用 α \alpha α表示
    在这里插入图片描述
  • 计算相关性的方法:
    • Dot-product:q和k对应项相乘再相加,得到一个标量
      在这里插入图片描述
    • Additive:+号表示q和k对应项相加,最后输出也是标量
      在这里插入图片描述

其中,Dot-product是最为常用的方法,下面的介绍也采用这种方法

  • 将当前向量与其他向量两两组合,计算相关性:对当前向量求query,对其他向量分别求key,可以理解为将当前向量和其他向量都映射到另一个空间,在新的空间中求相关性,相关性计算的结果称为Attention分数
    在这里插入图片描述

  • 注意,在实际使用中,还会让当前向量和自身(Self)也计算Attention分数。得到的各位置的 α \alpha α后,还需要对 α \alpha α进行伸缩(scale),即除以 D \sqrt{D} D ,D是 a i a^i ai的向量维度。要除以 D \sqrt{D} D 的原因是:

    • 在向量维度升高时,Dot-product的输出方差很大,会出现过大的值,输入Softmax之后,会导致梯度消失,堆叠多层Self-attention时,这个情况尤为明显
    • 输出各类别概率的Softmax,则不需要对输入进行scale,因为靠近监督信号,如果类别正确,则参数不需要较大更新,若类别错误,则整体tidings接近1,需要参数较大的更新
  • 然后经过Softmax才是最终的分数,Softmax本质上是max函数的软化(可微分)版本,特点是:

    • 输入输出维度相同
    • 输出为概率分布,每一项都是正数,每一项求和等于1
    • “赢者通吃”,输入中最大的值输出会很接近1,其他的值输出会很接近0
    • 是max函数的可微分版本
  • Softmax使得与当前向量最相关的向量,对应的Attention分数最接近1。Softmax并不是唯一选择,使用ReLU也可
    在这里插入图片描述

  • 下一步是根据Attention分数,对每个向量,提取需要的信息value,注意对自身也需要提取value,公式如下,实际上是对value加权求和,得到一个向量,图中的 × \times ×表示向量的数乘
    b 1 = ∑ i α 1 , i ′ v i b^1 = \sum_{i} \alpha'_{1,i} v^i b1=iα1,ivi
    在这里插入图片描述

  • 上述过程中,所有的W都是矩阵,因为矩阵和向量的相乘会得到向量,所以,所有的q、k、v都是向量

  • 实际中,为了运算效率,常常会以矩阵形式运算,也就是说,将每个位置向量 a a a,视作列向量,然后在行的方向上串联(concatenate)起来,得到矩阵 I I I W W W I I I相乘会得到矩阵,比如: W q W^q Wq I I I相乘,会得到矩阵 Q Q Q Q Q Q表示:将每个位置向量对应的 q q q,视作列向量,然后在行的方向上串联起来。同理,也可得到矩阵 K K K V V V
    在这里插入图片描述

  • 得到 Q Q Q K K K V V V后,需要计算Attention分数,每个位置的Attention分数都是标量,位置i对其他位置(包括位置i本身)的Attention运算,可以用 K K K的转置与 q i q^i qi相乘得到,得到的Attention分数是列向量
    在这里插入图片描述

  • 计算Attention分数的过程进一步矩阵化:将每个位置的Attention分数列向量,在行的方向上串联起来,得到的矩阵称为 A A A,可以用 K K K的转置与 Q Q Q相乘得到。之后再对 A A A的每一列先进行scale,再计算Softmax(ReLU也可)就得到最终的Attention分数矩阵 A ′ A' A
    在这里插入图片描述

  • 得到 A ′ A' A之后就可以计算value了,因为 V V V是每个位置的value列向量在行方向上串联形成的, A ′ A' A每一列就是每个位置的Attention分数列向量,又因为矩阵相乘就是前一个矩阵的行,乘以后一个矩阵的列,因此 V V V A ′ A' A相乘,即可得到每个位置的value列向量在行方向上的串联,结果记为 O O O
    在这里插入图片描述

  • 矩阵运算总结如下,其中,只有 W q 、 W k 、 W v W^q、W^k、W^v WqWkWv是需要学习的参数
    在这里插入图片描述

Multi-head Self-attention

  • 为什么需要Multi-head Self-attention(多头自注意力)呢?因为在计算相关性的步骤中,相关性这一概念可以有多种解释,如果把q向量映射到更多的空间中,网络就能学习多种相关性
  • 以2个head为例,得到位置i的 q i q^i qi向量后,再引入两个矩阵 W q , 1 、 W q , 2 W^{q,1}、W^{q,2} Wq,1Wq,2,计算对应的多头q向量:
    q i , 1 = W q , 1 q i q i , 2 = W q , 2 q i \begin{aligned} q^{i,1}&=W^{q,1}q^i \\ q^{i,2}&=W^{q,2}q^i \end{aligned} qi,1qi,2=Wq,1qi=Wq,2qi
    同理也可得到 k i 、 v i k^i、v^i kivi向量的多头映射
    在这里插入图片描述
  • 得到多头的q、k、v向量后,属于同一个头的q、k向量单独计算Attention分数,再对属于同一个头的v向量加权求和,得到当前头的输出。对每个头都进行该操作,就得到多头的输出 b i , 1 、 b i , 2 b^{i,1}、b^{i,2} bi,1bi,2
    在这里插入图片描述
    在这里插入图片描述
  • 将多头的输出在列方向上串联起来,经过 W o W^o Wo,投射成一个列向量,这就是Multi-head Self-attention的最终输出
    在这里插入图片描述

Positional Encoding

  • 最开始我们假设:输入一个句子,且每个词已经向量化,需要输出每个词的词性(名词、动词、形容词等)。这里的词向量化实际上并没有包含每个词在句子中的位置信息,上图中的输入 a 1 、 a 2 、 a 3 、 a 4 a^1、a^2、a^3、a^4 a1a2a3a4的序号上标,是为了便于理解,假如输入顺序变化成 a 1 、 a 3 、 a 4 、 a 2 a^1、a^3、a^4、a^2 a1a3a4a2,Self-attention对应的输出内容也不会变化,只是顺序随之变化而已(即输出的每个列向量的值不会变,只是列向量以不同的顺序,在行的方向上串联)
  • 所谓位置信息,在本任务中是指句子中单词的相对距离,这对于词性标注而言是有用的,例如:形容词后常跟名词,动词后常跟名词,代词常在句首等。
  • 位置编码,具体而言是对输入向量的不同位置,都进行独一无二的编码,记为 e i e^i ei,将 e i + a i e^i+a^i ei+ai作为位置编码后的输出,然后再输入到Self-attention
  • 位置编码函数可以是人工设计的一个离散函数,也可以是可学习的参数,位置编码的最优方式目前尚未有定论
  • 位置编码函数记为 f P E ( ⋅ , ⋅ ) f_{PE}(\cdot,\cdot) fPE(,),输出是一个向量,输入两个参数,第一个参数是当前向量的位置序号,第二个参数是一个向量,输出向量的维度,与第二个参数的维度相同。常用的一个位置编码函数:
    f P E ( i , 2 j ) = sin ⁡ i 1000 0 2 j / D f P E ( i , 2 j + 1 ) = cos ⁡ i 1000 0 2 j / D f_{PE}(i,2j)=\sin \frac{i}{10000^{2j/D}} \\ f_{PE}(i,2j+1)=\cos \frac{i}{10000^{2j/D}} fPE(i,2j)=sin100002j/DifPE(i,2j+1)=cos100002j/Di
    其中, D D D a i a^i ai的向量维度,由于这个函数区分奇偶,所以要迭代地调用 f P E ( ⋅ , ⋅ ) f_{PE}(\cdot,\cdot) fPE(,)才能得到一个向量,第二个参数也变成了当前维度的序号

Self-attention VS CNN

  • Self-attention的输入是向量序列,那么图像可否被视作向量序列呢?有一种角度是将图像上的每一个像素点视作一个向量,图像的通道数就是向量的长度,分辨率的值就是序列的长度。但这样处理,神经网络的参数量将会巨大,所以用于图像处理的Self-Attention都会先将图像分块,将每个图像块向量化,再进行Self-Attention运算,有一句名言“An Image is Worth 16x16 Words”
    在这里插入图片描述
  • 那么,常用于处理图像的神经网络CNN,与用于处理向量序列的Self-attention有何异同呢?
  • 假如当前向量是图像上的一个像素点,Self-attention在计算相关性时,是对整张图像的每一个像素点都计算相关性,而不仅仅是该像素点的邻域;而CNN的每一个卷积核,在对每个像素点运算时,只考虑了该像素点的邻域
  • 因此,CNN可以视作是一种简化版的Self-attention,每个卷积核在运算时,只考虑了特征图上每个像素点的邻域,随着CNN深度加深,邻域对应原图中比较大的区域,因此,感受野逐渐增大的CNN是在逐渐接近Self-attention
  • 不过CNN的感受野是人为设计的,而Self-attention的感受野是可学习的参数,并且不会被限制在一个邻域内,而是考虑整张图像上,任何与当前像素点有关的区域。所以,CNN的Function Set是Self-attention的Function Set的子集
  • 由于Self-attention的Function Set更大,所以需要的训练数据也更多,否则会导致比CNN更严重的过拟合
    在这里插入图片描述

Self-attention VS RNN

  • RNN也是用于处理向量序列的神经网络,其特点是
    • 存在一些人工设计的状态,这些状态被储存在RNN块内,记忆了当前向量之前的信息
    • RNN的当前输出,是之前的“记忆”与当前向量的协同作用,而得到的
    • 双向RNN的当前输出,可以看作是考虑了整个输入序列信息的输出
      在这里插入图片描述
  • RNN与Self-attention的区别在于
    • RNN的每个输出都不能并行,就像链表一样,逐个计算输出,如果当前向量与之前某一向量非常相关,那么这一相关性信息(value)的提取,只能靠RNN的记忆来建立,因此要求RNN的长期记忆能力
    • Self-attention的当前向量,与其他向量计算相关性时,有种“天涯若比邻”的能力,只要具有相关性,就能提取出信息,还能根据相关性的强弱进行加权
      在这里插入图片描述

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

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

相关文章

活动星投票国潮大秀东方网络评选投票怎么做的免费微信投票活动

如果通过一个小程序免费制作一个微信投票活动呢?文章详细讲解如何利用一款免费好用的微信小程序“活动星投票”小程序来制作投票活动,无需注册即可免费制作,非常的方便快捷,可以实现视频投票、分组投票、隐藏选手票数、导出投票数…

Feign作为HTTP客户端调用远程服务

前言 在分布式微服务的机构体系下,我们日常开发调用内部微服务的方式通常是Feign调用,grpc、dubbo,大部分的公司后端架构基本是以Spring Cloud 体系下的,所以基本会用到Feign,Feign是 Netflix开发的声明式、模板化的H…

基于jeecgboot的flowable流程支持定时边界事件

Flowable事件 事件(event)通常用于为流程生命周期中发生的事情建模。事件总是图形化为圆圈。在BPMN 2.0中,有两种主要的事件分类:*捕获(catching)与抛出(throwing)*事件。 捕获: 当…

【Linux】——权限理解

目录 1.Linux权限的概念 Linux权限管理 1.文件访问者的分类(人的属性) 2.文件类型和访问权限(事物属性) 2.1文件类型 2.2基本权限 2.3文件权限值的表示方法 2.4文件访问权限的相关设置方法 file指令 目录的权限 默认权限…

2000-2019年省级农业绿色全要素生产率原始测算数据和结果数据

2000-2019年省级农业绿色全要素生产率原始测算数据和结果数据 1、时间:2000-2019年 2、范围:包括30个省份 3、方法:使用的方法为SBM-GML指数、SBM-BML指数、SBM-ML指数和全局SBM(静态)。 同时,还提供了…

抗反射蛾眼结构的严格分析与设计

摘要 对于许多光学应用来说需要减少表面反射。控制表面反射的一种非常有效的方法是使用抗反射的纳米或微米结构,启发来源于自然界(蛾眼)。这些具有亚波长范围特征尺寸的结构表现出关于波长和角度依赖性的独特性质。在本文中,介绍了…

SSM校园报修系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 1、学生功能: (1)学生登录:学生通过管理员下发的初始账号和密码,可以登录系统进行申…

git diff 命令6种使用场景

目录 一、背景&目标 二、git三个区了解 三、git diff 6种场景介绍 3.1 工作区和暂存区差异对比 3.2 工作区和版本库之间差异 3.3 暂存区和版本库之间差异对比 3.4 本地版本库之间提交记录对比 3.5 不同分支对比 3.6 不同分支下同一文件对比 四、git diff 中 -x1,y…

非零基础自学Golang 第12章 接口与类型 12.3 接口嵌入

非零基础自学Golang 文章目录非零基础自学Golang第12章 接口与类型12.3 接口嵌入第12章 接口与类型 12.3 接口嵌入 接口嵌入,也叫接口组合,在其他语言中,这种接口的组合叫作继承;Go语言舍弃了繁杂的继承体系,但继承这…

48页智慧城市大数据可视化平台建设方案

目 录 1. 概述 1.1 需求分析 1.2 采取策略 1.3 方案目标 2. 智慧城市解决方案 2.1 架构说明 2.1.1 整体架构 2.1.2 规划架构 2.1.3 云平台架构 2.2 建设内容 2.2.1 云计算公共支撑平台 2.2.2 智慧规划 2.2.3 智慧管网 2.2.4 智能政务 2.2.5 智慧交通 2.2.6 智慧…

两台笔记本之间快速传输文件,两台电脑之间快速传输大量文件

想用自己的笔记本电脑给同事的电脑传文件,却发现自己和同事都没有带U盘和数据线,怎么办?两台笔记本之间快速传输文件?接下来介绍的方法你可能用得到。 方案一、微信、QQ传输文件 简单的方法就是两台电脑都登陆聊天工具&#xff0…

小学生C++编程基础 课程7(B)

904.等差数列 (课程7) 登录 905.双等差数列 (课程7) 登录 906.打印数列1 (课程7) 登录 907.打印数列2 (课程7) 难度:1 登录 908.对称数列 (课程7) 登录 909.个位数是7 (课程7) 登录 910.打印数列3 (课程7) 登录…

【AI理论学习】n-gram语言模型和神经网络语言模型

n-gram语言模型和神经网络语言模型什么是语言模型语言模型的计算什么是n-gram模型n-gram平滑技术什么是神经网络语言模型(NNLM)?基于前馈神经网络的模型基于循环神经网络的模型语言模型评价指标总结参考资料什么是语言模型 语言模型是自然语…

重磅!张文宏最新防治指南来了!

文 | 闲欢来源:Python 技术「ID: pythonall」最近全国各地最热门的话题恐怕都是跟“羊”有关的了。混乱时期两周之前,在所有人猝不及防的情况下,国家宣布放开疫情防控。从此我们再也不用每天排队做核酸,上班或者出去完也不用处处设…

二维Poisson方程五点差分格式与Python实现

最近没怎么写新文章,主要在学抽象代数下学期还有凸分析好累的一学期哦对,我不是数学系的,我是物理系的。而且博主需要澄清一下,博主没有对象,至少现在还没有。好,兄弟们,好习惯,先上…

SSM鹊巢大连分公司分销商管理系统

开发工具(eclipse/idea/vscode等):idea 数据库(sqlite/mysql/sqlserver等):mysql 功能模块(请用文字描述,至少200字):、主要功能 一、:人员管理:自己派遣到各个地区的员工,也就是分销商&#xf…

Java平衡树之红黑树代码实现过程详解(2)

红黑树 前面介绍了2-3树,可以看到2-3树能保证在插入元素之后,树依然保持平衡状态,它的最坏情况下所有子结点都是2-结点,树的高度为lgN,相比于我们普通的二叉查找树,最坏情况下树的高度为N,确实保证了最坏情…

药学专业转行软件测试,真的可以月薪过万吗?

转行原因 我在大学里学的是药学专业,毕业之后也顺利从事了对口的工作——药物分析。工作很稳定,但是内容很繁琐,薪资也一般,但从我自己内心来说从来没有开心过,因为我不想从事这样枯草并且一眼就可以看到老的人生。 …

常见的DDoS攻击方式和预防方法

DDoS攻击指分布式拒绝服务攻击,即处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。以下是三种常见的DDoS攻击方式: 1.TCP洪水攻击(SYN …

ADI Blackfin DSP处理器-BF533的开发详解65:JPEG解码(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了将 480*272 尺寸的 JPEG 数据解码为 RGB888 数据功能,调用了 JPEG 解码库函数。 JPEG 图像数据以.dat 文件…