注意力机制

之前接触到的seq2seq模型当中,解码器只依赖编码器最后一个时间步的隐藏状态作为解码器自身的初始隐藏状态。这个隐藏状态融合了所有输入序列的信息。

注意力机制的提出与一个心理学问题相关,假如我们需要观察一个人是否在睡觉,输入我们大脑的是从我们视觉神经获取的一个人的图像。我们为了判断此人是否在睡觉,我们会习惯地去看他的眼睛是不是闭着的,也就是说,我们将更多的注意力集中在观察对方的眼睛上而不是对方的耳朵或是鼻子。

第一段中提到的融合了所有输入序列的信息,就像是上段中提到的包含此人所有特征的图像。我们是否可以把注意力集中到某一个特定部分从而提高模型的效率。注意力机制由此提出。

所谓注意力机制,就是通过引入一个神经网络,计算编码器在各个时间步的隐藏状态对解码器贡献的权重,最后计算加权后编码器的输出,及上下文(Context)。通过在解码器更新隐藏状态的过程中引入上下文信息,最后达到让解码器德某一个特定解码和编码器的一些隐藏状态关联起来的效果。通俗来讲,可以理解为让解码器的某一个特定解码“格外注意”编码器中的某些隐藏状态。

具体来讲,以机器翻译为例。要将“I love China”翻译成中文“我爱中国”,在准备翻译出“我”这个字的时候,输入序列中的“I”是与之最相关的,我们要将注意力集中在“I”上。可见,注意力机制的核心在于对给定信息进行权重分配,权重高的信息意味着需要系统进行重点加工。注意力机制是怎样做到这个的?它是通过判断当前时间步解码器的隐藏状态与各个时间步编码器的隐藏状态的相似度分数来生成注意力权重,达到分配注意力的效果。

注意力机制的定义如下:
Attention(Query,Source)=∑iscore(Query,Keyi)⋅ValueiAttention(Query,Source) = \sum_{i}score(Query,Key_i) \cdot Value_i Attention(Query,Source)=i∑​score(Query,Keyi​)⋅Valuei​

其中,Source是需要系统处理的信息源,Query表示某种条件或者先验信息,Attention(Query,Source) 是给定Query的条件下,通过注意力机制从Source中提取得到的信息。;一般Source中的信息通过Key-Value对的形式表达出来。

拿融入注意力机制的seq2seq模型举例,假设时间步 ttt 时编码器的隐藏状态为 hth_tht​ ,时间步 t′t't′ 时解码器的隐藏状态为 st′s_{t'}st′​。我们很自然地将Query设置为解码器当前的隐藏状态,将Source设置为所有编码器的隐藏状态。不过其中Key=Value=htKey=Value=h_tKey=Value=ht​,有两种典型的分数计算方法:

score(st′,ht)={vTtanh(W[st′;ht]+b)[Bahdanau′sAdditiveAttention]st′TWht[luong′sMultiplicativeAttention]score(s_{t'},h_t) = \begin{cases} v^Ttanh(W[s_{t'};h_t]+b)&[Bahdanau's\ Additive\ Attention]\\ s_{t'}^TWh_t &[luong's \ Multiplicative\ Attention] \end{cases} score(st′​,ht​)={vTtanh(W[st′​;ht​]+b)st′T​Wht​​[Bahdanau′s Additive Attention][luong′s Multiplicative Attention]​

计算出当前解码时刻与各个编码时刻对应的相似度分数后,再根据该分数计算每个编码状态的注意力权重:

wt′t=exp(score(st′,ht))∑k=1Tscore(st′,hk)w_{t't} = \frac{exp(score(s_{t'},h_t))}{\sum_{k=1}^T score(s_{t'},h_k)} wt′t​=∑k=1T​score(st′​,hk​)exp(score(st′​,ht​))​

wt′tw_{t't}wt′t​ 表示编码时刻 ttt 对解码时刻 t′t't′ 的注意力权重,之后对编码器的隐藏状态做加权求和就得到了解码时刻t′t't′上下文。假设编码器总的时间步为T:

ct′=∑t=1Twt′thtc_{t'} = \sum^{T}_{t=1}w_{t't}h_t ct′​=t=1∑T​wt′t​ht​

得到了上下文,我们可以此来更新解码器 t′+1t'+1t′+1 时的隐藏状态。其中 yt′y_{t'}yt′​ 为 t′t't′时解码器的输出。

st′+1=f(st′,ct′,yt′)s_{t'+1} = f(s_{t'},c_{t'},y_{t'}) st′+1​=f(st′​,ct′​,yt′​)

GAT

最近看了篇论文跟图注意力网络GAT(Graph Attention Networks)有关,这里做一下总结。对比之前的seq2seq模型,此时Query为当前中心节点的特征向量,将Source设置为所有邻居结点的特征向量,Attention(Query,Source)即为中心节点经过聚合操作后的新的特征向量。

设图中任意节点 viv_ivi​ 在第l层的特征向量为 hi∈Rd(l)h_i \in {R}^{d^{(l)}}hi​∈Rd(l),经过一个以注意力机制为核心的聚合操作之后,输出的是每个结点新的特征向量 hi′∈Rd(l+1)h_i' \in R^{d^{(l+1)}}hi′​∈Rd(l+1)。将这个聚合操作称作图注意力层(Graph Attention Layer)

假设当前中心节点为 viv_ivi​, 该节点与节点 vjv_jvj​ 的相似度分数定义为:

eij=score(Whi,Whj)=LeaklyRelu(aT[Whi∣∣Whj])\begin{aligned} e_{ij} &= score(Wh_i,Wh_j)\\ &= Leakly\ Relu(a^T[Wh_i||Wh_j]) \end{aligned} eij​​=score(Whi​,Whj​)=Leakly Relu(aT[Whi​∣∣Whj​])​
其中 ∣∣||∣∣ 表示拼接操作,W∈Rd(l+1)×d(l)W \in R^{d^{(l+1)}\times d^{(l)}}W∈Rd(l+1)×d(l) 是该层节点变换的权重参数,scorescorescore 也可以选择内积进行相似度的计算,只要满足输出 eije_{ij}eij​ 是一个标量值即可,这里使用了一个单层的全连接层,其中 a∈R2d(l+1)a\in R^{2d^{(l+1)}}a∈R2d(l+1)为权重参数。

需要注意的是,我们可以计算出图中任意一个节点到节点 viv_ivi​ 的相似度分数,但是为了简化计算,我们将其限制在一阶邻居内。在GAT中,作者将每个节点自身也视作自己的邻居。

之后则将所有一阶邻居的相似度用softmax进行归一化处理得到注意力权重:

αij=softmaxjeij=exp(eij)∑vk∈N(vi)exp(eik)\alpha_{ij} = softmax_j{e_{ij} = \frac{exp(e_{ij})}{\sum_{v_k \in N(v_i)}exp(e_{ik})}} αij​=softmaxj​eij​=∑vk​∈N(vi​)​exp(eik​)exp(eij​)​

完成上述注意力权重的计算之后,按照注意力机制加权求和即可得出节点 viv_ivi​ 新的特征向量为:

hi′=σ(∑vj∈N(vi)αijWhj)h_i' = \sigma(\sum_{v_j \in N(v_i)} \alpha_{ij}Wh_j) hi′​=σ(vj​∈N(vi​)∑​αij​Whj​)

多头图注意力

多头注意力机制可以进一步提升模型的表达能力,具体操作为对上式调用K组相互独立的注意力机制,然后将结果拼接在一起:

hi′=∥k=1Kσ(∑j∈NiαijkWkhj){h}_{i}^{\prime}=\|_{k=1}^{K} \sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} {h}_{j}\right) hi′​=∥k=1K​σ⎝⎛​j∈Ni​∑​αijk​Wkhj​⎠⎞​

其中k表示第k组注意力机制。增加了多组相互独立的注意力机制,使得多头注意力机制能够将注意力的分配放到中心节点与邻居节点多处相关的特征上。

相比于GCN里面的图卷积操作,多头图注意力多了一个自适应的边权重系数的维度。

参考文献

[1] Velikovi, P.; Cucurull, G.; Casanova, A.; Romero, A.; Li, P.; and Bengio, Y. 2018. Graph attention networks. In ICLR.
[2] Sutskever, I., Vinyals, O., & Le, Q. V. (2014). Sequence to sequence learning with neural networks. In Advances in neural information processing systems (pp. 3104-3112).
[3] Cho, K., Van Merriënboer, B., Gulcehre, C., Bahdanau, D., Bougares, F., Schwenk, H., & Bengio, Y. (2014). Learning phrase representations using RNN encoder-decoder for statistical machine translation. arXiv preprint arXiv:1406.1078.

【深度学习】注意力机制相关推荐

  1. 深入理解深度学习——注意力机制(Attention Mechanism):自注意力(Self-attention)

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

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

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

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

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

  4. 资源|深度学习注意力机制TensorFlow 使用教程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 [导读]本资源介绍了以下3个方面:1)如何在图像上应用CNN at ...

  5. 深度学习——注意力机制

    什么是注意力机制? 人第一眼看上面的图会首先注意到鹰,而不会太重视天空背景.然而,计算机在处理图像的时候是所有的图像内容同等看待,不会重点关注比较重要的信息.因此,人们提出了一种注意力机制,使计算机系 ...

  6. 深度学习 - 注意力机制

    1 深度学习中的注意力机制 2014年Recurrent Modelsof Visual Attention -- NIPS 2014: 2204-2212 https://proceedings.n ...

  7. 【动手学深度学习----注意力机制笔记】

    注意力提示 因此,"是否包含自主性提示"将注意力机制与全连接层或汇聚层区别开来. 在注意力机制的背景下,我们将自主性提示称为查询(query). 给定任何查询,注意力机制通过注意力 ...

  8. 深度学习基础学习-注意力机制(计算机视觉中)

    在网上看到很多关于注意力机制的说明,下面自己总结一下.大佬绕道 下面放几个文章的链接 添深度学习中的注意力模型 计算机视觉中的注意力机制 图像处理注意力机制Attention汇总 注意力机制详述 注意 ...

  9. [深度学习] Attention机制,一文搞懂从实例到原理

    一 人类的视觉注意力 扩展阅读: Attention and Augmented Recurrent Neural Networks[译文] 不用看数学公式!图解谷歌神经机器翻译核心部分:注意力机制 ...

  10. 深度学习: 注意力模型 (Attention Model)

    Introduction 注意力模型,Attention Model . 是根据人对画面 关注度权重 的 分布不均,而设计的一种新的深度学习模型. 注意力焦点 由下图可看出,人们会把注意力更多投入到人 ...

最新文章

  1. 干货丨全球人工智能专利分布战情图,看看谁才是人工智能界的老大!
  2. Holt-Winters模型原理分析
  3. Android使用 LruCache 缓存图片
  4. Oracle 把过程与函数说透
  5. 在余额宝里放30万,每天在家什么都不干,利息够生活吗?
  6. 关于自动布局更新约束方法的总结
  7. python3 beautifulsoup 模块详解_关于beautifulsoup模块的详细介绍
  8. 数据从mysql迁移至oracle时知识点记录(一)
  9. js最基础知识回顾1(参数,函数,网页换肤)
  10. Oracle 11gR2数据库使用
  11. 两个PNP三极管组成限流电路原理分析
  12. java uml模型图 常见图形含义_uml图六种箭头的含义
  13. Windows 2016 出現 0xc0000135 ServerManager.exe 无法启用
  14. linux下查看硬盘型号、大小等信息(含Raid)
  15. bitcoin.conf详解
  16. JDK1.8新特性(八):还在重复写空指针检查代码?赶紧使用Optional吧!
  17. 【历史上的今天】1 月 25 日:电子游戏起源;《吃豆人》作者出生;“蠕虫王”问世
  18. Linux中xtp文件上传不了,xtp_api_java: 中泰证券xtp java api for win\linux\mac https://xtp.zts.com.cn...
  19. 基于Azure Kinect SDK获取物体rgb图、深度图、红外IR图和点云数据并保存到本地
  20. 美工素材 站酷 千图网 昵图网

热门文章

  1. 全景制作后期拼接全景图怎么做?
  2. word用宏修改文档中图片大小
  3. 计算机房颁奖词,网络达人奖颁奖词.doc
  4. 什么是云渲染?为什么要用电脑渲图?
  5. js 中~~是什么意思?
  6. 贪心 阿狸和桃子的游戏
  7. Delphi7 将Excel导入数据库
  8. 为了摸鱼,我开发了一个工具网站
  9. 微信小程序实战 wx.showNavigationBarLoading(),下拉动画配置无效
  10. 论文笔记--InterFusion