浅谈Attention注意力机制
Attention注意力机制
注意力机制模仿了生物观察行为的内部过程,即一种将内部经验和外部感觉对齐从而增加部分区域的观察精细度的机制。例如人的视觉在处理一张图片时,会通过快速扫描全局图像,获得需要重点关注的目标区域,也就是注意力焦点。然后对这一区域投入更多的注意力资源,以获得更多所需要关注的目标的细节信息,并抑制其它无用信息。
这种机制普遍使用与cv和nlp的相关领域,事实证明确实有很大的收益;
1.Encoding — Decoding机制
目前attention机制多基于Encoding—Decoding这样的框架之中,比如神经机器翻译NMT & 问答系统:
下面来看 Encoding — Decoding 机制的示意图:
上图就是Encoding — Decoding 的框架图:
注意几个参数
encode & Decoding的输入为XencXdecX_{enc} \;\; X_{dec}XencXdec
上一时间序列的隐藏层输出为 henchdech_{enc} \;\; h_{dec}henchdec
decoing输出: ydecy_{dec}ydec
Encoding的长度是TencT_{enc}Tenc
Step1: Encoding 是没有最后输出的,这个模块仅仅在序列末输出上下文context vvv 然后作为 Decoding 第一个翻译结点的上一时刻的隐藏状态即可:
那么:
v=∏P(v∣hTenc,hTenc−1,…,h0)v = \prod P(v|h_{T_{enc}}, h_{T_{enc-1}},…,h_0)v=∏P(v∣hTenc,hTenc−1,…,h0)
然后上下文context vvv 被用于解码器的计算过程:
以解码器的第一个翻译结点为例:
hdec0=tanh(Wxdec0+Uv+b)h_{dec0} = tanh(Wx_{dec0} + Uv + b)hdec0=tanh(Wxdec0+Uv+b)
ydec0=softmax(Whdec0+b)y_{dec0} = softmax(Wh_{dec0} + b)ydec0=softmax(Whdec0+b)
依次类推,之后的各个结点的求解过程其实就是:
ydec=argmaxp(yt)=∏t=1TP(yt∣y1,y2,…,yt−1,v)y_{dec} = argmax p(y_t) = \prod_{t=1}^TP(y_t|y_1,y_2,…,y_{t-1},v)ydec=argmaxp(yt)=t=1∏TP(yt∣y1,y2,…,yt−1,v)
原始的Encoding — Decoding 会有两个局限性:
- 固定长度的上下文向量无法提供完整的编码信息
- 由于解码阶段,编码器所提供的信息仅在开始进入直接的计算,虽然 LstmLstmLstm 是长短记忆的 cellcellcell, 但是如果句子特别长时候表现会不佳
2.Attention机制
由于上述两个局限性,我们引入Attention机制,下面举一个例子
我爱自然语言处理 —> I love natural language processing
这是一个中英文翻译的神经机器翻译的例子:
这里会有这样的对应关系: 我 — I & 爱 — love & 自然 — natural & 语言 — language & 处理 — processing
Encoding : 我爱自然语言处理 Decoding : I love natural language processing
这样在解码模块Decoding时候,当翻译到
I
时候,我们应该更加关注我
,当翻译到natural
,我们应该更加关注自然
这个汉语词
这样来看 Attention机制 其实就是对不同的源进行不同的权重组合的一种机制,正如上面所说:
当翻译到 I
时候,我们应该更加关注我
,所以我的权重最高,其他词’爱’ ‘自然’ ‘语言’ '处理’会有较低的权重;
在计算attention时主要分为三步,第一步是将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;然后第二步一般是使用一个softmax函数对这些权重进行归一化;最后将权重和相应的键值value进行加权求和得到最后的attention value。目前在NLP研究中,key和value常常都是同一个,即key=value。
这里key和value进行运算是取解码器当前上一个状态(与当前解码单元相似度最高)和编码器每一个隐藏态进行相似度计算,如上图有4种计算方式 dotgeneralconcatpreceptrondot\;\;general\;\;concat\;\;preceptrondotgeneralconcatpreceptron
自下而上来看 Attention机制的作用过程:
- 对于Encoding计算输出和原始计算没有区别:
ht=tanh(Wxt+Uht−1+b)h_t = tanh(Wx_t + Uh_{t-1} + b) ht=tanh(Wxt+Uht−1+b)
- 计算eije_{ij}eij, eije_{ij}eij表示能量或者重要度, 用于度量编码器中第jjj个隐藏状态和先前解码状态Si−1S_{i-1}Si−1对SiS_iSi贡献的大小(这里使用感知模式进行Query和Key的组合,详细看上图):
eij=vaTtanh(WaSi−1+Uaht)e_{ij} = v_a^Ttanh(W_aS_{i-1} + U_ah_t)eij=vaTtanh(WaSi−1+Uaht)
- 源句子长度是LLL, αij\alpha_{ij}αij是归一化权重,用于计算第j个编码器隐藏状态对于第i个解码器预测的重要度,这里使用softmax进行归一化:
αij=exp(eij)∑k=1Lexp(eik)\alpha_{ij} = \frac{exp(e_{ij})}{\sum_{k=1}^L exp(e_{ik})}αij=∑k=1Lexp(eik)exp(eij)
- 这样每一个源的权重有了,那么根据权重产生解码所需要的上下文,也就是 Attention value:
ci=∑j=1Lαijhtc_i = \sum_{j=1}^L\alpha_{ij}h_tci=j=1∑Lαijht
- 每计算一次解码的输出,均需要通过上述步骤获取上下文向量参与计算,即:
hdec=g(ci,xdec,hdec)h_{dec} = g(c_i,x_{dec},h_{dec})hdec=g(ci,xdec,hdec)
下面贴出包含 Attention value的LSTMcellLSTM \;\; cellLSTMcell计算代码:
def dec_lstm_cell(i, o, state, c, dec_ix, dec_im, dec_ic, dec_ib, dec_fx, dec_fm, dec_fc, dec_fb, dec_cx, dec_cm,dec_cc, dec_cb, dec_ox, dec_om,dec_oc, dec_ob):''':param i: 解码器的输入x:param o: 解码器的隐藏状态:param state: 解码器的单元状态:param c: 解码器的上下文向量 C,也就是Attention value:param dec_ix::param dec_im::param dec_ic::param dec_ib::param dec_fx::param dec_fm::param dec_fc::param dec_fb::param dec_cx::param dec_cm::param dec_cc::param dec_cb::param dec_ox::param dec_om::param dec_oc::param dec_ob::return:'''input_gate = tf.sigmoid(tf.matmul(i, dec_ix) + tf.matmul(o, dec_im) + tf.matmul(c, dec_ic) + dec_ib)forget_gate = tf.sigmoid(tf.matmul(i, dec_fx) + tf.matmul(o, dec_fm) + tf.matmul(c, dec_fc) + dec_fb)update = tf.matmul(i, dec_cx) + tf.matmul(o, dec_cm) + tf.matmul(c, dec_cc) + dec_cbstate = forget_gate * state + input_gate * tf.tanh(update)output_gate = tf.sigmoid(tf.matmul(i, dec_ox) + tf.matmul(o, dec_om) + tf.matmul(c, dec_oc) + dec_ob)return output_gate * tf.tanh(state), state
3.Attention机制的优劣
Attention机制其实就是通过度量编码器第j个隐藏状态和先前解码器状态Sj−1S_{j-1}Sj−1对SjS_jSj的贡献大小,不断调节每个编码器权重的大小来实现学习的机制;从而更加关注与输入的元素相似的部分,而抑制其它无用的信息;
优点:
1.Attention机制通过调节权重,有效抑制无用信息,提高有用信息的关注度,可以提高模型的收益
2.由于LSTMLSTMLSTM这类的RNN模型,随着文本长度或者说时间序列的增加,记忆能力会下降;而Attention机制可以在每次预测之前精准定位局部与整体的关系,可以并行的解决有效记忆的问题
3.Attention value(也就是上下文向量)的计算仅依赖于上一个时间序列的隐藏态,可以有效实现并行计算
劣势:
- 没有考虑文本顺序,但是于文本而言,有时候顺序是很重要的## 标题
浅谈Attention注意力机制相关推荐
- 浅谈Attention注意力机制及其实现
1. 什么是注意力机制 1.1 注意力机制的思想 关于什么是注意力机制,粗略的描述就是"你正在做什么,你就将注意力集中在那一点上".这种机制就和人脑在思考问题时一样.例如我们在思考 ...
- 浅谈Attention机制
浅谈Attention机制 Attention注意机制现在大热,很多深度学习的框架都带上了注意力机制,而且也取得了很好的性能指标.乘着大热也来水一水文章,发表发表自己的看法.事先说明老哥我在NLP上萌 ...
- [深度学习-原理]浅谈Attention Model
系列文章目录 深度学习NLP(一)之Attention Model; 深度学习NLP(二)之Self-attention, Muti-attention和Transformer; 深度学习NLP(三) ...
- 关于《注意力模型--Attention注意力机制》的学习
关于<注意力模型--Attention注意力机制>的学习 此文大部分参考深度学习中的注意力机制(2017版) 张俊林的博客,不过添加了一些个人的思考与理解过程.在github上找到一份基于 ...
- DL之Attention:Attention注意力机制的简介、应用领域之详细攻略
DL之Attention:Attention注意力机制的简介.应用领域之详细攻略 目录 Attention的简介 1.Why Attention? 2.Attention机制的分类 3.Attenti ...
- [转]浅谈MS-SQL锁机制
本文转自:http://study.99net.net/study/database/mssql/1085625420.html 浅谈MS-SQL锁机制 2004-05-27 锁的概述 一. ...
- 图片的描述生成任务、使用迁移学习实现图片的描述生成过程、CNN编码器+RNN解码器(GRU)的模型架构、BahdanauAttention注意力机制、解码器端的Attention注意力机制
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
- 循环神经网络RNN 2—— attention注意力机制(附代码)
attention方法是一种注意力机制,很明显,是为了模仿人的观察和思维方式,将注意力集中到关键信息上,虽然还没有像人一样,完全忽略到不重要的信息,但是其效果毋庸置疑,本篇我们来总结注意力机制的不同方 ...
- Attention注意力机制–原理与应用
Attention注意力机制–原理与应用 注意力机制即Attention mechanism在序列学习任务上具有巨大的提升作用,在编解码器框架内,通过在编码段加入A模型,对源数据序列进行数据加权变换, ...
- 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
最新文章
- 【算法】差分约束系统
- 产品经理的职业天花板在哪?
- 使用Java模拟线性表顺序存储结构
- sql server作业_SQL Server作业性能–报告
- 如何以用户身份登录MySQL_解析:如何以普通用户的身份运行 MySQL
- 怎么给字符串字段加索引?
- 【MySQL】简单易学的MySQL安装教程
- 使用虚幻4进行安卓打包
- 解读基于数加的大数据仓库解决方案
- 浅谈聊天机器人 ChatBot 涉及到的技术点 以及词性标注和关键字提取
- 代理服务器的安全证书有问题 错误代码8,如何修复Internet Explorer 8中的证书错误...
- 显著性水平 置信度 置信区间 实例讲解
- 国防科技大学计算机考研资料汇总
- windows10系统盘瘦身
- mysql添加用户并赋予权限命令
- 高德地图生成静态图片,显示指定经纬度的地图
- CentOS7 安装 chrome
- matlab三相短路电流计算程序_基于MATLAB下的供电系统三相短路电流计算研究
- 电脑pin码忘了登录不进系统_关windows10PIN码是什么?如何取消windows10系统的pin码?...
- 使用scrapy创建一个项目爬取网易云音乐的所有歌手的相关资料