码迷,mamicode.com
首页 > 其他好文 > 详细

NLP复习之Attention概述

时间:2020-03-22 15:37:47      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:body   图片   之间   应用   编码   筛选   inf   loading   建模   

Preview

这一部分主要对注意力机制(Attention Mechanism)做一个概述,整合一下之前学习的内容,免得遗忘。

来源

注意力机制的设计,或者说命名,是借鉴了人类的注意力机制。人类的注意力机制属于生物的天性之一,无论是视觉还是听觉,都可以让我们在大量信息中筛选并关注高价值信息,获取更多所需要关注目标的细节信息,而抑制其他无用信息,极大地提高了信息处理的效率与准确性。

而应用于深度学习的注意力机制,其核心目标也是在海量信息中挑选出最有价值的信息。

Encoder-Decoder(Seq2seq)

要了解注意力机制,就需要先理解Seq2seq问题,Seq2Seq是一种语言建模方法,可以使用Encoder-Decoder框架来实现的端到端的模型。它的目标是将输入序列转换为目标序列,并且两个序列的长度都可以是任意的。转换任务的例子包括文本或音频的翻译、问答、对话生成等等。

Encoder-Decoder框架的结构如下面一个文本翻译图所示:

技术图片

Encoder(编码器):负责处理输入序列,并将信息压缩成固定长度的上下文向量(Context Vector),上下文向量的目的是概括整个源序列的含义。

Decoder(解码器):使用上下文向量和之前生成的历史信息生成下一个单词,一直到目标文本生成完毕。

其中,编码器和解码器可以使用任何模型,CNN/RNN/LSTM/GRU/Transformer均可。

但是,由于编码和解码阶段一直使用一个定长的上下文向量,也造成了一些问题,其中最严重的是下面两个问题:

  • 信息表示困难:编码器要将整个序列的信息压缩进一个固定长度的上下文向量,使得语义向量无法完全表示整个序列的信息
  • 无法记住长句:对于长序列输入,最开始输入的序列容易被后输入的序列给覆盖掉,从而丢失许多细节信息

注意力机制就是为了解决这些问题而诞生的。

注意力机制(Attention)

Attention机制在NLP领域第一次应用是Bahdanau et al., 2015的论文,应用于神经机器翻译(NMT)中,协助记忆长源句信息,其构建单个上下文向量的方式与Encoder不同,Encoder仅在最后一个隐藏状态构建上下文向量,而Attention在上下文向量和所有输入之间创建链接权重,供输出元素使用。 

因为上下文向量可以访问整个输入序列,所以无需担心序列过长导致的信息遗忘问题。

下图是Bahdanau论文提出的具有附加注意机制的编码器-解码器模型。

技术图片

Attention的类型

 下面是几个常用的Attention和对应函数的汇总表:

技术图片

 

 ^注意:scale-dot product添加了一个缩放系数,避免当输入很大时,softmax函数可能由于梯度过小,难以有效学习的问题。

下面是对更广泛的注意机制类别的总结:

技术图片

 

 

 其中:

Self-Attention:使用自适应方式获取特征信息,详见Transformer。

Soft Attention:通过加权求和的方式来选取特征信息。

Hard Attention:通过随机采样或最大采样的方式来选取特征信息,使得其无法使用反向传播算法进行训练。

Global Attention:关注的是整个序列的输入信息,相对来说需要更大的计算量。

Local Attention:关注限定窗口范围内的序列信息,但窗口的限定使得中心词容易忽视不在窗口范围内的信息,因此窗口的大小设定十分重要。

 

Thanks:

https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html

https://www.zhihu.com/question/68482809/answer/264632289

 

技术图片

 

NLP复习之Attention概述

标签:body   图片   之间   应用   编码   筛选   inf   loading   建模   

原文地址:https://www.cnblogs.com/shadowlight/p/12527003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!