6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质

1. 语言模型

2. Attention Is All You Need(Transformer)算法原理解析

3. ELMo算法原理解析

4. OpenAI GPT算法原理解析

5. BERT算法原理解析

6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质

7. Transformer-XL原理介绍

1. 前言

注意力模型最近几年在深度学习各个领域被普遍使用,不管是图像处理、语音识别仍是天然语言处理的各类不一样类型的任务中,都很容易遇到注意力模型的身影。因此,了解注意力机制的工做原理对于关注深度学习技术发展的技术人员来讲有很大的必要。html

2. Encoder-Decoder(Seq2Seq)框架

要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,由于目前大多数注意力模型附着在Encoder-Decoder框架下。其实注意力模型能够看做一种通用的思想,自己并不依赖于特定框架,这点须要注意算法

Encoder-Decoder框架能够看做是一种深度学习领域的研究模式,应用场景异常普遍。图2是文本处理领域里经常使用的Encoder-Decoder框架最抽象的一种表示。架构

image

文本处理领域的Encoder-Decoder框架能够这么直观地去理解:能够把它看做适合处理由一个句子(或篇章)生成另一个句子(或篇章)的通用处理模型。对于句子对(Source,Target),咱们的目标是给定输入句子Source,期待经过Encoder-Decoder框架来生成目标句子Target。Source和Target能够是同一种语言,也能够是两种不一样的语言。而Source和Target分别由各自的单词序列构成:框架

\[ Source=(x_1,x_2,...,x_m) \]
\[ Target=(y_1,y_2,...,y_n) \]
Encoder顾名思义就是对输入句子Source进行编码,将输入句子经过非线性变换转化为中间语义表示C:
\[ C=f(x_1,x_2,...,x_m) \]
对于解码器Decoder来讲,其任务是根据句子Source的中间语义表示C和以前已经生成的历史信息学习

\[ y_{i}=g(C,y_1,y_2,...,y_{i-1}) \]编码

3. Attention原理

按照Encoder-Decoder的框架,咱们的输出值y的表达式:
\[ y_{i}=g(C,y_1,y_2,...,y_{i-1}) \]
语义编码C是由句子Source的每一个单词通过Encoder编码产生的,这意味着不管是生成哪一个单词,\(y_1\),\(y_2\)仍是\(y_3\),其实句子Source中任意单词对生成某个目标单词\(y_i\)来讲影响力都是相同的,这是为什么说这个模型没有体现出注意力的原因。这相似于人类看到眼前的画面,可是眼中却没有注意焦点同样。这样不符合人类认知事物的原理。因此咱们引入Attention机制。spa

3.1 Soft Attention介绍

咱们最广泛的一种Soft Attention的计算过程。翻译

加上Attention的Encoder-Decoder的框架以下:3d

image

咱们的图中,出现了\(C_1,C_2,C_3\)分别对应了\(y_1,y_2,y_3\),这样咱们的输出值的表达式也改变了:
\[ y_{i}=g(C_i,y_1,y_2,...,y_{i-1}) \]
问题是咱们的\(C_i\)如何计算?code

咱们再看一副Attention的细节图

image

从图中能够看出\(C_i\)\(h_i\)的加权的结果
\[ C_i=\sum_{j\in{m}}\alpha_{i,j}h_i \]
咱们如何计算\(\alpha_i\)呢?这时候就用到咱们的Softmax的原理,着也是Soft Attention取名的缘由。
\[ \alpha_{i,j}=\frac{exp(e(h_i,s_j))}{\sum_i{exp(e(h_i,s_j))}} \]
根据不一样的Attention算法\(e(h_i,s_j)\)的实现方式也不一样:

  • Bahdanau Attention结构
    \[ e(h,s) = Utanh(Vh+Ws) \]
    其中\(U,V,W\)是模型的参数,\(e(h,s)\)结构表明了一层全联接层。

  • Luong Attention结构
    \[ e(h,s) = h^TWs \]
    可是不管是Bahdanau Attention,仍是Luong Attention,它们都属于Soft Attention的结构,都是经过Softmax来计算\(\alpha_{i,j}\)

4. Attention机制的本质思想

上述内容就是经典的Soft Attention模型的基本思想,那么怎么理解Attention模型的物理含义呢?通常在天然语言处理应用里会把Attention模型看做是输出Target句子中某个单词和输入Source句子每一个单词的对齐模型,这是很是有道理的。

目标句子生成的每一个单词对应输入句子单词的几率分布能够理解为输入句子单词和这个目标生成单词的对齐几率,这在机器翻译语境下是很是直观的:传统的统计机器翻译通常在作的过程当中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的做用。

image

咱们能够这样来看待Attention机制:将Source中的构成元素想象成是由一系列的(Key,Value)数据对构成,此时给定Target中的某个元素Query,经过计算Query和各个Key的类似性或者相关性,获得每一个Key对应Value的权重系数,而后对Value进行加权求和,即获得了最终的Attention数值。因此本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。便可以将其本质思想改写为以下公式:

\[ Attention(Query_j,Source)=\sum_{i=1}^NSimilarity(Query_j,Key_i)*Value_i \]
上文所举的Encoder-Decoder框架中,由于在计算Attention的过程当中,Source中的Key和Value合二为一成,指向的是同一个东西,也即输入句子中每一个单词对应的语义编码\(h_i\),因此可能不容易看出这种可以体现本质思想的结构。

从本质上理解,Attention是从大量信息中有选择地筛选出少许重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体如今权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重表明了信息的重要性,而Value是其对应的信息。

5. 总结

Encoder-Decoder(Seq2Seq)加Attention架构因为其卓越的实际效果,目前在深度学习领域里获得了普遍的使用,了解并熟练使用这一架构对于解决实际问题会有极大帮助。

再者还有最新的Transformer结构,抛弃传统的RNN结构,彻底使用Attention结构实现不一样层级间的信息传递,而且还能并行处理大大提升运行速度,和准确度。