【机器学习杂记】自注意力机制(Self-attention)
初学self-attention,是学习笔记,基于李宏毅老师的课程。有缘人看到的话若有错误的不完善的地方还请指出,不胜感激!
\space
零 引出
有时候我们的模型具有复杂的输入,例如不定长的向量集合。例如语音识别、机器翻译等任务,其输入是不定长的。
在这种应用背景下,输出有两种:
- 一是每个输入向量都有一个对应的输出,例如词性判(POS
tagging);对于一个graph,决定每个节点的特性(例如根据一个社交网络做个性化推荐) - 二是一整个输入的sequence只对应一个输出的label,例如情感判别
- 三是不知道输出多少个label,由model自己决定 (这种任务称作seq2seq任务),例如输入为语音信号,输出为识别文字
先学第一种输入输出数目一样的情况。这种情形又叫做Sequence Labeling。
由于输入的向量之间是有关联的,因此不能逐个独立地考虑,这就是self-attention发挥作用的地方。其也是Transformer里重要的组成部分。
\space
一 Sequence Labeling的计算方式
\space
1.1 基本原理
self-attention的框架如下图所示:
\space
图中最底部的四个向量代表输入向量,中间经过Self-attention的框架(下文讲),输出与输入个数相同的向量。Self-attention输出的向量已经包含了上下文信息,这些包含上下文信息的新向量可以经过全连接层计算出结果。
注意: 在一个框架中可以用多次Self-attention。
\space
具体Self-attention是怎么运作的呢?
最核心的思想就是: 通过一些经过训练的矩阵来计算输入向量之间的相关性。具体地:
1.Dot product方法: 对于两个向量a1,a2a^1,a^2a1,a2,若要计算二者的相关性,将其分别乘两个不同的矩阵得到两个向量:q=Wqa1,k=Wka2q=W_qa^1,k=W_ka^2q=Wqa1,k=Wka2,再计算q,kq,kq,k的内积:α1,2=(q,k)\alpha_{1,2}=(q,k)α1,2=(q,k),α\alphaα就衡量了相关程度,框图如下:
这里,qqq有个名字叫query,kkk有个名字叫key,α\alphaα叫attention score。
2.Additive方法: Additive比Dot product多了一些运算,框图如下:
下面的说明都是基于Dot product方法的。
因此,假如我们输入了四个向量,则attention score的计算方法如下:
注意: 看图得出,计算某一个向量与其他向量关联性的时候,也要计算自己和自己的关联性(αi,i=(qi,ki)\alpha_{i,i}=(q^i,k^i)αi,i=(qi,ki)),计算出αi,j\alpha_{i,j}αi,j后再经过一个softmax层(换别的也行,例如ReLU)。
接下来要做的就是从计算出的attention score里提取信息。这时我们需要一个新的矩阵WvW^vWv,输入向量与WvW^vWv相乘后得到的向量计算加权和,权重就是之前计算出的attention score。框图:
公式:
bi=∑jαi,j′vj,vj=Wvαjb_i=\sum_{j}\alpha'_{i,j}v^j,\space \quad v^j=W^v\alpha^jbi=j∑αi,j′vj, vj=Wvαj
bib_ibi就反映了第iii个input和其余input的相关程度。
(一个疑问: 所有的input都共享同样的矩阵吗?感觉很怪。感觉为每个input都训练特别的矩阵也没啥)
\space
1.2 矩阵表达
在实际中肯定是并行计算的,所以我们找到简洁的矩阵表达形式就尤为重要。
假设有NNN个输入a1,...,aNa^1,...,a^Na1,...,aN,query的计算可表示为:
[q1,q2,...,qN]=Wq[a1,a2,...,aN][q^1,q^2,...,q^N]=W^q[a^1,a^2,...,a^N][q1,q2,...,qN]=Wq[a1,a2,...,aN]
写成:
Q=WqIQ=W^qIQ=WqI
同理:
K=[k1,...,kN]=Wk[a1,a2,...,aN]=WkIK=[k^1,...,k^N]=W^k[a^1,a^2,...,a^N]=W^kIK=[k1,...,kN]=Wk[a1,a2,...,aN]=WkI
attention score的计算:
A=[αi,j]N×N=KTQA=[\alpha_{i,j}]_{N\times N}=K^TQA=[αi,j]N×N=KTQ
别忘了还要经过一层激活函数,假设表示成σ\sigmaσ,最终的attention score矩阵:
A′=σ(A)A'=\sigma(A)A′=σ(A)
最终的那个bbb:
O=[b1,...,bN]=[v1,...,vN]A′O=[b^1,...,b^N]=[v^1,...,v^N]A'O=[b1,...,bN]=[v1,...,vN]A′
OOO就是Self-attention计算出的输出了。把上面的过程形象化一点就是下面这个图:
\space
那一堆WWW就是要训练的。
\space
二 Multi-head Self-attention
所谓Multi-head,就是在计算出qqq,kkk和vvv向量的基础上,再加一层,将qqq,kkk和vvv向量分出多个头来,当然在计算bbb的时候,也是根据每个head算出bib_ibi,再算一个总的bbb。
例如,对于head=2的情形,框图如下:
\space
最后根据bi,1b^{i,1}bi,1和bi,2b^{i,2}bi,2算出bib^ibi:
bi=WO[bi,1,bi,2]Tb^i=W^O[b^{i,1},b^{i,2}]^Tbi=WO[bi,1,bi,2]T
我觉得WOW^OWO的shape应该是(n⋅head,n⋅head)(n·head,n·head)(n⋅head,n⋅head),其中nnn应该是输入向量的维度,head是头的数目。
\space
三 Positional Encoding
可以看出,前面的架构其实并没有考虑到输入向量的位置信息,实际上它们的位置都是等价的。如果对于NLP的任务来说,显然词汇的位置是很重要的。因此要把位置编码的信息加入到输入向量当中去,方法有很多,比如对于位置iii定义一个位置向量eie^iei,那么输入的向量为:
ei+nie^i+n^iei+ni
eie^iei的定义方式多种多样,也是一个研究热点之一。
\space
四 Self-attention跟CNN的关系
CNN有两种理解方式,一种是常见的从二维卷积的角度去理解。还有一种等价的理解方式,就是理解成权值共享的网络。可以将整张输入图片划分成多个receptive field,每一块receptive field都有等数量的neuron来负责,且对应neuron的权值都是共享的。
为什么说这两种对CNN的说法等价呢,因为拿一个kernel去卷积一幅图,不就是拿相同的权值去计算不同的receptive field(我的理解,不一定对)
从第二种角度看CNN,就可以看出来其和Self-attention有相通之处。实际上CNN是Self-attention的subset,可以看成是变形的Self-attention。
\space
五 Self-attention跟RNN的关系
RNN网络不能并行计算,也不能长时记忆,很后面的输入很难与很前面的输入产生关联,然而Self-attention没有这些问题。
好像,RNN要被抛弃了…
\space
六 Self-attention和图
图已经预设好了顶点和顶点之间的联系,所以在计算图的顶点之间相关度的时候,就没必要每个顶点之间都计算了。
有个小想法,可不可以把MOT里二部图匹配的任务和Self-attention挂上钩?当然只是瞎想,还没看论文呢…
【机器学习杂记】自注意力机制(Self-attention)相关推荐
- 深入理解注意力机制(Attention Mechanism)和Seq2Seq
学习本部分默认大家对RNN神经网络已经深入理解了,这是基础,同时理解什么是时间序列,尤其RNN的常用展开形式进行画图,这个必须理解了. 这篇文章整理有关注意力机制(Attention Mechanis ...
- 注意力机制(Attention Mechanism)-ECANet
引言 神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案.在神经网络学习中,一般而言模型的参 ...
- 在RNN模型中引入注意力机制(Attention)
此前的文章介绍过Seq2seq模型,并将其用于机器翻译.Seq2seq模型的一个问题在于随着输入句子越来越长,更早输入的单词就很大可能会被忘掉.于是,随着输入句子中单词数变多,翻译质量就会很快劣化.改 ...
- 注意力机制(Attention Mechanism)-SENet
引言 神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案.在神经网络学习中,一般而言模型的参 ...
- 深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)
分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...
- 深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)
分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...
- AI大觉醒:图灵奖得主Bengio称AI将产生意识,未来机器学习核心是注意力机制
新智元报道 来源:venturebeat 编辑:梦佳 [新智元导读]人工智能是时候该觉醒了吗?在本周的2020 ICLR 大会上,图灵奖得主Yoshua Bengio针对AI和机器学习的未来阐 ...
- 深度学习【注意力机制(Attention)原理和实现】
文章目录 一 Attention的原理和实现 1. Attention的介绍 2. Attenion的实现机制 2.1 Attention的实现过程 2.2 不同Attention的介绍 2.2.1 ...
- Transformer:注意力机制(attention)和自注意力机制(self-attention)的学习总结
目录 前言 1. 注意力机制 1.1非自主提示和自主提示 1.2 查询,键和值 1.3 注意力机制的公式 1.3.1 平均汇聚 1.3.2 非参数的注意力汇聚(Nadaraya-Watson核回归) ...
- 注意力机制~Attention Mechanism
目录 背景 1. Attention Function 2. Scaled Dot-Product Attention 3. Multi-attention --> Q, K=V 4. self ...
最新文章
- 用css如何写正方体,css正方体实现--(transform练习)
- 安全套接层Secure Sockets Layer,SSL
- 【小题目】输入两个数字以及一个符号,输出这两个数字在这个符号下运算产生的结果
- Redis持久化-深入理解AOF,RDB
- RMQ求区间最值 nlog(n)
- [HNOI 2011]数学作业
- linux windows死机,linux死机的处理方式
- web.xml不同版本的头文件配置
- python随机数调用
- Java对象转换Map(工具类)
- h5页面预览pdf文件_H5 页面如何查看 PDF 文件
- Laravel文档阅读笔记-Custom Authentication Login And Registration Using Laravel 8
- 【算法:leetcode】双指针:142. 环形链表 II 633. 平方数之和
- 以贝叶斯思维看待世界
- 中国科学技术大学计算机考研好考吗,中国科学技术大学计算机考研复习方法谈...
- 音色、音高、音强、音长
- 计算机中丢失cg,【计算机中丢失dll文件】计算机丢失dll文件_计算机中丢失cg dll-win7之家...
- shell 编程三剑客之三:awk 详解
- write()与 read() 函数用法(C语言)
- python conda安装