解决序列长期依赖的法宝——注意力机制
注意力的种类有如下四种:
- 加法注意力, Bahdanau Attention
- 点乘注意力, Luong Attention
- 自注意力, Self-Attention
- 多头点乘注意力, Multi-Head Dot Product Attention(请转至Transformer模型)
1. Bahdanau Attention
Neural Machine Translation by Jointly Learning to Align and Translate, Bahdanau et al, ICLR 2015
总览
2015年发布的论文,首次提出注意力机制,也就是加法注意力,并将其应用在机器翻译领域。
当前工作的不足
目前NMT主流的方法是seq2seq方法,具体采用的是encoder-decoder模型。但是在编解码模型中编码得到的是固定长度的context vector,这是当前seq2seq的瓶颈。
本文提出联合学习对齐和翻译的方法:
- 对齐:在预测每一个target word的时候都去search源句子中一个部分
- 翻译:根据对齐的部分动态生成c,然后基于c和上一个target word生成当前的target word
模型
下图展示了在预测target word oto_tot时从源句子隐藏状态动态生成上下文向量的过程。
首先根据对齐模型aaa,给每个源隐藏状态hjh_jhj生成一个权重系数etje_{tj}etj:
etj=a(st−1,hj)e_{tj} = a(s_{t-1}, h_j) etj=a(st−1,hj)
然后将所有权重系数进行softmax归一化得到各个源隐藏状态的注意力权重:
atj=exp(etj)∑k=1Txexp(etk)a_{tj} = \frac{exp(e_{tj})}{\sum_{k=1}^{T_x}exp(e_{tk})} atj=∑k=1Txexp(etk)exp(etj)
计算注意力权重和各个源隐藏状态的加权和,得到预测oto_tot的注意力向量:
ct=∑j=1Txatjhjc_t = \sum_{j=1}^{T_x}a_{tj}h_j ct=j=1∑Txatjhj
然后根据注意力向量进行预测:
st=f(st−1,yt−1,ct)s_t = f(s_{t-1}, y_{t-1}, c_t) st=f(st−1,yt−1,ct)
p(yt∣y1,...,yt−1,x)=g(yt−1,st,ct)p(y_t|y_1, ..., y_{t-1}, x) = g(y_{t-1}, s_t, c_t) p(yt∣y1,...,yt−1,x)=g(yt−1,st,ct)
文章在这里对g进行了解释:g是非线性的,可能是多层的函数。
结论
通过注意力机制,避免了encoder将整个句子的语义信息编码成一个固定长度的上下文向量,并在翻译时将注意力集中到和下一个目标词相关的信息上。在长句子上,此方法的提升尤为突出。
下图展示了注意力机制的可视化:
简单解释下:x和y轴分别表示源句子(英语)和生成的句子(法语),权重系数通过像素的灰度值来刻画,1表示全白,0表示全黑。
文章最后提出,未来的工作是处理一些罕见词。
2. Luong Attention
Effective Approaches to Attention-based Neural Machine Translation, Luong, EMNLP 2015
总览
Luong提出了全局和局部注意力(这里只讨论全局注意力),本文提出了新的权重系数计算方法,大大提高了成绩。
当前工作存在的不足
本文继Bahdanau之后继续研究注意力,在此根据对齐时,覆盖所有范围和部分范围,提出了全局注意力(global attention)和局部注意力(local attention)。
模型
全局注意力和局部注意力的区别是生成注意力向量的方式不同,后续工作都是一样的。
下图展示了全局注意力的完整生成过程:
在这里,权重系数直接根据目标隐藏状态hth_tht和源隐藏状态h‾s\overline h_shs计算得到,计算方法有以下几种:
score(ht,h‾s)={htTh‾sdothtTWah‾sgeneralvaTtanh(Wa[ht;h‾s])concatscore(h_t, \overline h_s) = \begin{cases} h_t^T\overline h_s \quad dot\\ h_t^TW_a\overline h_s \quad general\\ v_a^Ttanh(W_a[h_t;\overline h_s]) \quad concat \end{cases} score(ht,hs)=⎩⎪⎨⎪⎧htThsdothtTWahsgeneralvaTtanh(Wa[ht;hs])concat
然后将分数进行归一化:
at(s)=align(ht,h‾s)=exp(score(ht,h‾s))∑s′exp(score(ht,h‾s′))\begin{aligned} a_t(s) & = align(h_t, \overline h_s)\\ & = \frac{exp(score(h_t, \overline h_s))}{\sum_{s'}exp(score(h_t, \overline h_{s'}))} \end{aligned} at(s)=align(ht,hs)=∑s′exp(score(ht,hs′))exp(score(ht,hs))
文中没有给出注意力向量的计算过程,可以参考Bahdanau注意力的计算过程,通过加权和得到注意力向量ctc_tct
将注意力向量和隐藏状态hth_tht简单拼接,输入到全连接层,得到隐藏状态h~t\tilde h_th~t:
h~t=tanh(Wc[ct;ht])\tilde h_t = tanh(W_c[c_t;h_t]) h~t=tanh(Wc[ct;ht])
根据这个隐藏状态即可得到最后的输出:
p(yt∣y<t,x)=softmax(Wsh~t)p(y_t|y_{<t}, x) = softmax(W_s\tilde h_t) p(yt∣y<t,x)=softmax(Wsh~t)
总结&相比Bahdanau的优势
无论是全局注意力还是局部注意力,Luong都提出了多种权重系数计算方式,最后的实验结果表示:对于全局注意力,dot的方式是最好的;对于局部注意力,general的方式最好。
但是可以看出无论是哪一种计算方式,都不再需要预先计算出st−1s_{t-1}st−1了,这样就可以实现并行化计算,大大提高了计算速度。
3. Self-Attention
A Structured Self-Attentive Sentence Embedding, Zhouhan Lin et al, ICLR 2017
总览
本文提出使用自注意力机制计算不同注意力系数作用下的句子嵌入(sentence embedding)。
然后将得到的句子嵌入应用到多个NLP任务(author profiling, sentiment classification, textual entailment)中去。
自注意力是注意力机制的一种特例:因为自注意力的源隐藏状态和目标隐藏状态的来源相同。
模型
模型的结构如下图所示:
从图中可以看出,如果只考虑一种句子嵌入,双向LSTM的输出为H,那么模型的注意力权重计算如下所示:
a=softmax(ws2tanh(Ws1HT))a = softmax(w_{s_2}tanh(W_{s_1}H^T)) a=softmax(ws2tanh(Ws1HT))
上式中,Ws2∈R1×daW_{s_2} \in \Bbb R^{1 \times d_a}Ws2∈R1×da,Ws1∈Rda×2uW_{s_1}\in \Bbb R^{d_a \times 2u}Ws1∈Rda×2u,H∈Rn×2uH \in \Bbb R^{n \times 2u}H∈Rn×2u,dad_ada是超参数
此时如果考虑多种句子嵌入,那么
A=softmax(ws2tanh(Ws1HT))A = softmax(w_{s_2}tanh(W_{s_1}H^T)) A=softmax(ws2tanh(Ws1HT))
此时,Ws2∈Rr×daW_{s_2} \in \Bbb R^{r \times d_a}Ws2∈Rr×da,那么就得到r套注意力权重,计算其和源隐藏状态加权和就得到多种句子嵌入:
M=AHM = AH M=AH
这就是最后的句子嵌入矩阵。
解决序列长期依赖的法宝——注意力机制相关推荐
- Talk | 微软亚洲研究院宋恺涛南大余博涛:面向文本/音乐序列任务的Transformer注意力机制设计
本期为TechBeat人工智能社区第456期线上Talk! 北京时间11月22日(周二)20:00,微软亚洲研究院研究员--宋恺涛与南京大学硕士研究生--余博涛的Talk将准时在TechBeat人工智 ...
- 关于ATIS以及基于注意力机制的递归神经网络模型 的学习记录
关于ATIS以及基于注意力机制的递归神经网络模型 的学习记录 此为本人学习的类笔记,主要内容为借助Google翻译机译的论文WHAT IS LEFT TO BE UNDERSTOOD IN ATIS? ...
- 从起源、变体到评价指标,一文解读NLP的注意力机制
作者 | yuquanle 转载自AI小白入门(ID:StudyForAI) 目录 1.写在前面 2.Seq2Seq 模型 3.NLP中注意力机制起源 4.NLP中的注意力机制 5.Hierarchi ...
- 一篇了解NLP中的注意力机制
文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | AI小白入门(公众号ID: StudyForAI) 作者 | yuquanle,985在读硕 ...
- 自注意力机制_自注意力机制在计算机视觉中的应用【附PPT与视频资料】
关注微信公众号:人工智能前沿讲习回复"蒋正锴"获取PPT与视频资料视频资料可点击下方阅读原文在线观看 导读 在神经网络中,我们知道卷积层通过卷积核和原始特征的线性结合得到输出特征, ...
- 如何理解自然语言处理中的注意力机制? | 技术头条
作者 | yuquanle 责编 | 郭芮 你的颜值及格没?人工智能测试? https://edu.csdn.net/topic/ai30?utm_source=csdn_bw 近些年来,注意力机制一 ...
- tacotron2 注意力机制 self-attention学习
我们在机器翻译.语音识别.语音合成.语音转换等任务中,常常需要对序列数据进行处理,传统的方法不但繁琐且效果有限,目前常见的端到端seq2seq方法很值得学习. 1. 序列到序列 序列到序列最早应用于机 ...
- 自然语言处理中注意力机制综述
https://www.toutiao.com/a6655120292144218637/ 目录 1.写在前面 2.Seq2Seq 模型 3.NLP中注意力机制起源 4.NLP中的注意力机制 5.Hi ...
- 综述:计算机视觉中的注意力机制
作者|xys430381_1 https://blog.csdn.net/xys430381_1/article/details/89323444 本文仅作学术分享,著作权归作者所有,如有侵权,请联系 ...
- [自然语言处理入门]-NLP中的注意力机制
本章的主要内容有: 注意力机制概述 传统注意力机制 注意力编码机制 1.注意力机制概述 注意力机制简单来说就是:加权求和机制/模块 加权求和模块 : 神经网络中的一个组件,可以单独使用,但更多地用作为 ...
最新文章
- vuex——做简单的购物车功能
- sizeof 和 strlen
- 神兽来了服务器维护,20191204维护公告解读
- 气温常年在25度的地方_最低调的海滨城市,物价便宜,常年25度,沙滩细白,不输三亚!...
- 介绍 Echoo: go 语言编写的 echo 服务器
- Spring Boot MyBatis配置多种数据库
- fastjson 不转某些字段_全面总结Fastjson过滤字段、排除字段的5种方法(含示例)...
- C++工作笔记-设计普通类的格式,实现简单工厂中接口的定义
- C/C++ OpenCV图像的尺寸变化
- C# list删除 另外list里面的元素_[Python]列表(list)操作
- Architecture(5)电商APP组件化探索
- String 是值类型还是引用类型
- 在的微型计算机系统中 外设可和,微机原理第七章题库
- 分布式文件存储FastDFS之安装Nginx实现文件访问
- OSError解决办法
- 【参赛作品94】21天openGauss学习之旅
- Python猜数字项目源代码
- java计算机毕业设计ssm奥博羽毛球俱乐部管理系统
- 【FLASH】报错“必要的系统组件未能正常运行,请修复Adobe Flash Player”及 error#2046
- win10打印机共享问题集,及解决方法持续更新