初学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=Wq​a1,k=Wk​a2,再计算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)相关推荐

  1. 深入理解注意力机制(Attention Mechanism)和Seq2Seq

    学习本部分默认大家对RNN神经网络已经深入理解了,这是基础,同时理解什么是时间序列,尤其RNN的常用展开形式进行画图,这个必须理解了. 这篇文章整理有关注意力机制(Attention Mechanis ...

  2. 注意力机制(Attention Mechanism)-ECANet

    引言 神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案.在神经网络学习中,一般而言模型的参 ...

  3. 在RNN模型中引入注意力机制(Attention)

    此前的文章介绍过Seq2seq模型,并将其用于机器翻译.Seq2seq模型的一个问题在于随着输入句子越来越长,更早输入的单词就很大可能会被忘掉.于是,随着输入句子中单词数变多,翻译质量就会很快劣化.改 ...

  4. 注意力机制(Attention Mechanism)-SENet

    引言 神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案.在神经网络学习中,一般而言模型的参 ...

  5. 深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  6. 深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  7. AI大觉醒:图灵奖得主Bengio称AI将产生意识,未来机器学习核心是注意力机制

      新智元报道   来源:venturebeat 编辑:梦佳 [新智元导读]人工智能是时候该觉醒了吗?在本周的2020 ICLR 大会上,图灵奖得主Yoshua Bengio针对AI和机器学习的未来阐 ...

  8. 深度学习【注意力机制(Attention)原理和实现】

    文章目录 一 Attention的原理和实现 1. Attention的介绍 2. Attenion的实现机制 2.1 Attention的实现过程 2.2 不同Attention的介绍 2.2.1 ...

  9. Transformer:注意力机制(attention)和自注意力机制(self-attention)的学习总结

    目录 前言 1. 注意力机制 1.1非自主提示和自主提示 1.2 查询,键和值 1.3 注意力机制的公式 1.3.1 平均汇聚 1.3.2 非参数的注意力汇聚(Nadaraya-Watson核回归) ...

  10. 注意力机制~Attention Mechanism

    目录 背景 1. Attention Function 2. Scaled Dot-Product Attention 3. Multi-attention --> Q, K=V 4. self ...

最新文章

  1. Libgdx环境搭建及介绍
  2. 叶杰平入选、华人占4成,2020年ACM杰出科学家榜单出炉
  3. mybatis面试题讲解1
  4. 用“龙头”促发展,以“立体”筑生态,长沙生物医药产业集群跑出“加速度”
  5. 4.1-大秦立国-ip演变
  6. 前端学习笔记之 JavaScript WebAPIs(整理)
  7. 关于myBatis的问题There is no getter for property named 'USER_NAME' in 'class com.bky.model.实例类'
  8. js 判断移动端还是pc端,ios或者android
  9. 改善深层神经网络:超参数调整、正则化以及优化——2.3指数加权平均
  10. 855旗舰烂大街了,Ov俩兄弟数字系列旗舰却仍用710?
  11. 修改 连接层_Mybatis连接池_动态sql语句_多表查询实现
  12. C++ main函数中参数argc和argv相关定义与研究
  13. Python-面向对象之一
  14. 推荐系统-推荐模型总结
  15. idea 无法找到要转到的声明
  16. 忘记 Apple ID 密码?重设 Apple ID 密码的 3 种方法
  17. 外网远程访问管家婆ERP进销存
  18. H.265编码视频播放器在播放FLV视频流时出现黑屏,如何解决?
  19. vscode之vue文件格式化代码无效怎么办
  20. 电脑dhcp服务器修改,更改电脑dhcp服务器地址

热门文章

  1. 邮件江湖群狼环伺 U-Mail邮件系统防狼有术
  2. 死亡计算机在线应用使用,死亡计算器怎么使用,死亡计算器使用技巧
  3. 【观察】 “门派林立”的超融合江湖,思科凭什么做到“后发先至”?
  4. Notepad++ Emmet执行时提示R6034 Runtime Error, 错误的解决方法
  5. GOPROXY代理地址
  6. 华为Mate40、华为Mate40Pro、华为Mate40Pro+和华为Mate40RS保时捷值得买吗
  7. HTML——5(图片)
  8. 如何用三元组表表示下列稀疏矩阵_稀疏矩阵的压缩存储可以用一个三元组表来表示稀疏矩阵中的非0元素。...
  9. c语言自动发扑克牌技巧,1分51秒记住52张乱序扑克牌 最强大脑是怎样炼成的
  10. 深入理解ThreadPoolExecutor第三弹