1. 语言模型

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

3. ELMo算法原理解析

4. OpenAI GPT算法原理解析

5. BERT算法原理解析

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

1. 前言

注意力模型最近几年在深度学习各个领域被广泛使用,无论是图像处理、语音识别还是自然语言处理的各种不同类型的任务中,都很容易遇到注意力模型的身影。所以,了解注意力机制的工作原理对于关注深度学习技术发展的技术人员来说有很大的必要。

2. Encoder-Decoder(Seq2Seq)框架

要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,因为目前大多数注意力模型附着在Encoder-Decoder框架下。其实注意力模型可以看作一种通用的思想,本身并不依赖于特定框架,这点需要注意

Encoder-Decoder框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。图2是文本处理领域里常用的Encoder-Decoder框架最抽象的一种表示。

文本处理领域的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机制。

3.1 Soft Attention介绍

我们最普遍的一种Soft Attention的计算过程。

加上Attention的Encoder-Decoder的框架如下:

我们的图中,出现了\(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\)如何计算?

我们再看一副Attention的细节图

从图中可以看出\(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句子每个单词的对齐模型,这是非常有道理的。

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

我们可以这样来看待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结构实现不同层级间的信息传递,并且还能并行处理大大提高运行速度,和准确度。

6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质的更多相关文章

  1. seq2seq和attention应用到文档自动摘要

    一.摘要种类 抽取式摘要 直接从原文中抽取一些句子组成摘要.本质上就是个排序问题,给每个句子打分,将高分句子摘出来,再做一些去冗余(方法是MMR)等.这种方式应用最广泛,因为比较简单.经典方法有Lex ...

  2. 完全图解RNN、RNN变体、Seq2Seq、Attention机制

    完全图解RNN.RNN变体.Seq2Seq.Attention机制 本文主要是利用图片的形式,详细地介绍了经典的RNN.RNN几个重要变体,以及Seq2Seq模型.Attention机制.希望这篇文章 ...

  3. 从Seq2seq到Attention模型到Self Attention

    Seq2seq Seq2seq全名是Sequence-to-sequence,也就是从序列到序列的过程,是近年当红的模型之一.Seq2seq被广泛应用在机器翻译.聊天机器人甚至是图像生成文字等情境. ...

  4. 深入理解Attention机制

    要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,因为目前大多数注意力模型附着在Encoder-Decoder框架下,当然,其实注意力模型可以看作一种通用的思想,本身并不依 ...

  5. 自定义Encoder/Decoder进行对象传递

    转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...

  6. 比sun.misc.Encoder()/Decoder()的base64更高效的mxBase64算法

    package com.mxgraph.online; import java.util.Arrays; /** A very fast and memory efficient class to e ...

  7. Netty自定义Encoder/Decoder进行对象传递

    转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...

  8. Atitit 深入理解软件的本质 attilax总结 软件三原则"三次原则"是DRY原则和YAGNI原则的折

    Atitit 深入理解软件的本质 attilax总结 软件三原则"三次原则"是DRY原则和YAGNI原则的折 1.1.1. 软件的本质:抽象  1 1.2. 软件开发的过程就是不断 ...

  9. RNN、LSTM、Seq2Seq、Attention、Teacher forcing、Skip thought模型总结

    RNN RNN的发源: 单层的神经网络(只有一个细胞,f(wx+b),只有输入,没有输出和hidden state) 多个神经细胞(增加细胞个数和hidden state,hidden是f(wx+b) ...

随机推荐

  1. Jmeter压测过程报错the target server failed to respond

    失败事务报错信息如下, Socket closed Non HTTP response code: org.apache.http.NoHttpResponseException (the targe ...

  2. NOIP2017 题解(给自己看的) --有坑要填

    目录 D1T1精妙证明: D1T3 D2T2 几道水题就不写了.... D1T1精妙证明: 把ax+by = z 的z按照模a剩余系分类 由于\((a,b)=1\)所以对于每个\(k\in[0, a) ...

  3. Wannafly Winter Camp 2019.Day 8 div1 E.Souls-like Game(线段树 矩阵快速幂)

    题目链接 \(998244353\)写成\(99824435\)然后调这个线段树模板1.5h= = 以后要注意常量啊啊啊 \(Description\) 每个位置有一个\(3\times3\)的矩阵, ...

  4. BZOJ.4826.[AHOI/HNOI2017]影魔(树状数组/莫队 单调栈)

    BZOJ LOJ 洛谷 之前看\(mjt\)用莫队写了,以为是一种正解,码了3h结果在LOJ T了没A= = 心态爆炸(upd:发现是用C++11(NOI)交的,用C++11交就快一倍了...) 深刻 ...

  5. 1489 ACM 贪心

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1489 题意:为负数表示买酒,正数表示买酒,每两家人之间为one unit of work.问最小的work ...

  6. Android的系统属性:build.propSystemProperties

    获取build.prop的键值信息: String sn = SystemProperties.get(SN_INFO); 其中key值为: public static final String SN ...

  7. 考前停课集训 Day4 雷

    Day 4 今天Rating掉了两百多 为什么呢 因为是真实力打的 倒数第三 没什么好说的了 这才是我的真实水平 强的人一如既往强 作弊的人一落千丈. 只有我.是的,只有我. 被老师嘲讽了,哎,您真的 ...

  8. Eclipse Maven pom.xml 警告No grammar constraints (DTD or XML schema)

    消除警告方案: <?xml version="1.0" encoding="UTF-8" standalone="no"?> & ...

  9. 一道c++面试题 输入一个维度,逆时针打印出一个指定的矩阵

    题目:逆时针打印矩阵元素 #include <stdio.h> #include <malloc.h> int main() { int dimension; int *p; ...

  10. Quartz 定时器任务调度配置(以及如何配置quartz启动执行一次)

    1. 添加maven依赖.pom.xml 中添加jar文件 <!-- 作业任务调度机制 --> <dependency> <groupId>org.quartz-s ...