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的本质
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的本质的更多相关文章
- seq2seq和attention应用到文档自动摘要
一.摘要种类 抽取式摘要 直接从原文中抽取一些句子组成摘要.本质上就是个排序问题,给每个句子打分,将高分句子摘出来,再做一些去冗余(方法是MMR)等.这种方式应用最广泛,因为比较简单.经典方法有Lex ...
- 完全图解RNN、RNN变体、Seq2Seq、Attention机制
完全图解RNN.RNN变体.Seq2Seq.Attention机制 本文主要是利用图片的形式,详细地介绍了经典的RNN.RNN几个重要变体,以及Seq2Seq模型.Attention机制.希望这篇文章 ...
- 从Seq2seq到Attention模型到Self Attention
Seq2seq Seq2seq全名是Sequence-to-sequence,也就是从序列到序列的过程,是近年当红的模型之一.Seq2seq被广泛应用在机器翻译.聊天机器人甚至是图像生成文字等情境. ...
- 深入理解Attention机制
要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,因为目前大多数注意力模型附着在Encoder-Decoder框架下,当然,其实注意力模型可以看作一种通用的思想,本身并不依 ...
- 自定义Encoder/Decoder进行对象传递
转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...
- 比sun.misc.Encoder()/Decoder()的base64更高效的mxBase64算法
package com.mxgraph.online; import java.util.Arrays; /** A very fast and memory efficient class to e ...
- Netty自定义Encoder/Decoder进行对象传递
转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...
- Atitit 深入理解软件的本质 attilax总结 软件三原则"三次原则"是DRY原则和YAGNI原则的折
Atitit 深入理解软件的本质 attilax总结 软件三原则"三次原则"是DRY原则和YAGNI原则的折 1.1.1. 软件的本质:抽象 1 1.2. 软件开发的过程就是不断 ...
- RNN、LSTM、Seq2Seq、Attention、Teacher forcing、Skip thought模型总结
RNN RNN的发源: 单层的神经网络(只有一个细胞,f(wx+b),只有输入,没有输出和hidden state) 多个神经细胞(增加细胞个数和hidden state,hidden是f(wx+b) ...
随机推荐
- angular笔记_9
<style> .red{background:red} </style> 失去焦点 <input type="text" ng-model=&quo ...
- curl get请求添加header头信息
function get($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CU ...
- vue给methods中的方法传入当前点击行的值
<template> <!-- 在template中,只能存在一个根组件 --> <div class="event"> <ul> ...
- c++检查内存泄漏
使用_CrtDumpMemoryLeaks()函数检查内存泄漏 #include <cstdio> #include <cstdlib> #include <crtdbg ...
- [P2058][NOIP2015]海港 (模拟)
%%%ADMAN #include<cstdio> using namespace std; int n,tot,now,ans,h; ],k[],a[],sum[]; int main( ...
- ssm数据库异常问题
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti ...
- Html块标签、含样式的标签、语义化的标签:
Html块标签: (1)<div>标签 块元素,表示一块内容,没有具体的语义 (2)<span>标签 行内元素,表示一行中的一小段内容,没有具体的语义 <p>标签 ...
- Android requestcode resultcode的作用
requestcode 一个页面的不同事件,激发不同的函数,startActivityForResult中传入不同的请求码的值以调用下一个界面,在被调用界面结束返回第一个界面时,请求码会自动返回(自动 ...
- Install latest git on CentOS 6/7
Assuming you have sudo/root permission. Try rpmforge-extras first. yum --disablerepo=base,updates -- ...
- CSS关键词的值-currentColor关键字提示文字(当前颜色)
currentColor关键字 currentColor关键字相当于一个CSS变量. currentColor关键字与CSS变量也是有区别的: (1)他只可以能接受<color>值的地方使 ...