深度学习之注意力机制attention

目录

Sequence to Sequence model

注意力机制attention

加法注意力和乘法注意力

注意力机制在计算机视觉方面的应用

注意力机制在自然语言处理方面的应用

其他attention 方法


注意力机制是深度学习在近几年最重要的一个创新。本文将介绍简要的介绍一下注意力机制的原理。

Sequence to Sequence model

在将注意力机制之前首先要介绍一下S2S model,在rnn中,当输入为多个序列输出也为多个序列且输入输出长度不相等时我们需要使用到S2S model,例如在机器翻译中,我们输入的很有可能是一个长句子,翻译成其他语言时它的长度发生了改变,这样的话我们便需要用S2S来解决。

S2S model分为encoder 和 decoder两个部分,其中encoder是将输入序列转变为一个中间序列,这个中间序列尽可能的包含了我们输入序列的信息,之后我们的中间序列输入到decoder中,通过某种方式将中间序列转变为输入序列。举个例子:如下图所示,在机器翻译中,我们的输入是一个外文句子,我们需要将外文句子经过特征提取转变为词向量(处理过程可以看自然语言处理之特征提取和嵌入),我们的encoder是一个rnn模型,将词向量输入到rnn当中能够生成很多的输出序列,传统的S2S采用最后的一个输出序列作为我们的context。

context的形式是一个向量,它的长度是我们设定好的,可以很长也可以很短,我们采用四个方格来代表这个context向量。

回到我们刚刚的模型,“comment"转变为词向量后输入到encoder中,我们生成了一个#1方格,然后将”allez“的词向量和#1方格一同输入到encoder中,我么们得到#2方格,一次类推我们就能够得到很多的#n方格了,将最后的方格输入到decoder中进行解码。那这里最后一个向量应该需要包含我们输入的整个句子的信息,输入的句子很长的话,我们最后一个向量因为需要包含全部信息,则需要尽可能的长,但是这样不管有多长,我们的最刚开始输入的词向量的信息还是会很弱甚至消失,而且context向量太长,我们的模型将会遇到瓶颈问题以及出现过拟合的现象。

一个改进的方法是将我们所有的hiden states都作为向量输入到decoder中,这样我们保留了输入中的所有信息,在我们解码第一个单词的时候我们采用和第一个单词最接近的context,这里也就是我们的h1,当我们解码第二个单词的时候我们采用h2作为我们的context,这里有个前提是我们假设h1是最接近第一个单词的context,h2是最接近第二个单词的context,但是在一些情况下,我们并不知道最接近这个单词的hedden states是哪个,在实际当中,解码的结果大多数情况下是需要包含其他周围的信息,所以需要由多个hidden state共同来表示的,那这个时候该怎么去选择hedden states呢?

注意力机制attention

注意力机制的作用在于它能够学习出我需要用到哪些hidden states,hidden states的权重该怎么去分配,例如,首先我们已经得到了所有的hidden states,然后将我们的注意力机制的time step设定为3,这个时候根据注意力机制的得分函数(将在下面详细的介绍)我们得到h1的得分为13,h2的得分为9,h3的得分为9,经过softmax变化得到权重比,我们将这三个hidden state的值分别奖券相加得到我们最后的context。

回到我们的模型当中,在decoder的每一步,我们都利用注意力机制算出context之后输入到我们的rnn中,得到输出,这里的输出还是需要经过一系列的操作才能得到真正的输出,所以在下图的how上加了一个*,会在后面详解的介绍。

加法注意力和乘法注意力

注意力机制主要分为加法加法注意力和乘法注意力,其中乘法注意力机制是在加法注意力上改进而来的。基于注意力机制的神经机器翻译的有效方法神经机器翻译:同时学习匹配和翻译是首次提出构想的两篇论文,有兴趣的可以去看看。乘法注意力有两个个评分函数,第一个是直接用decoder的hidden state 点乘所有的encoder的hidden state;第二个是通用公式,加上了权重矩阵wa,乘法注意力采用的是称之为concat公式,是将encoder中的hidden state和decoder中的hidden state相加乘以权重矩阵后变化得到。然后我们利用softmax函数已经全连接之后tanh函数激活输出最后的结果。

乘法注意力

下面这张图展示的就是点乘的公式,ht是decoder中前一个隐藏层输出的结果,hs是encoder中所有的hidden state组合成的矩阵,通过点乘能够算出最后的权重。

上面的公式有一个缺陷, ht的行数和hs的行数必须是相等的,也就要使得encoder和decoder的隐藏层长度是一样的,这样的条件太苛刻了,当不相等的时候公式便不可行,所以我们采用在中间加上权重矩阵的做法。也就有了我们的通用公式。

回到原来的模型,现在可以真正说清楚how*是怎么来的啦。首先在进行t时刻的预测时,我们拿出decoder t-1时刻的hidden state以及encoder所有的hidden state,采用得分函数之后进行softmax转变成权重矩阵,最后算出我们的context,也就是在attention4中的蓝色方块,进行转置后变成C4,将C4和h4进行拼接,然后放入到全连接中(相当于乘以Wc),最后经过tanh的激活得到我们的how*,也就是我们attention的整个过程,之后再进行下一个时刻的运算,这就是我们乘法注意力的整个机制。

加法注意力

加法注意力首先将encoder中前一个hidden state和decoder中所有的hidden state拼接起来,之后我们进行全连接,经过tanh函数处理后乘以另外一个权重矩阵得到我们最后的输出值。下面的图片很好的阐释了这样的结果。

注意力机制在计算机视觉方面的应用

有兴趣的可以阅读这些论文,举例来说,Show, Attend and Tell: Neural Image Caption Generation with Visual Attention这篇论文输入一张图片能够输出图片的文字说明。

它使用的decoder是卷积神经网络,encoder是循环神经网络,encoder之后的向量大小为14x14,将二维的向量展平变成196x1,然后我们有512个这样的hidden state拼接成196x512的矩阵,之后在decoder中应用attention机制,得到我们的输出。

Show, Attend and Tell: Neural Image Caption Generation with Visual Attention [pdf]

Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering [pdf]

Video Paragraph Captioning Using Hierarchical Recurrent Neural Networks [pdf]

Every Moment Counts: Dense Detailed Labeling of Actions in Complex Videos [pdf]

Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge [pdf]

Visual Question Answering: A Survey of Methods and Datasets [pdf]

注意力机制在自然语言处理方面的应用

最佳应用示例是查看正在使用中的现实系统。在 2016 年底,Google 发表了关于 Google 神经机器翻译系统的以下文章:

Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation [pdf]

之后,Google 正式推出这一系统并使其作为 Google 翻译的支撑技术。

请阅读这篇文章,并与我们在这节课到目前为止讲解的知识关联起来。下面的几个问题有助于理解这篇课外阅读文章:

  • Google 的神经机器翻译系统是序列到序列模型吗?
  • 该模型利用了注意力机制吗?
  • 如果该模型利用了注意力机制,它使用的是加法注意力还是乘法注意力?
  • 该模型使用了什么类型的 RNN 单元?
  • 该模型使用了双向 RNN 吗?

文本摘要:

Abstractive Text Summarization using Sequence-to-sequence RNNs and Beyond

其他attention 方法

前面我们讲的attention方法一直是构建与rnn等模型上,最近有一篇文章采用仅仅attention机制而并不使用rnn,这种模型称之为Transformer,有时间的话会专门写一篇文章介绍Transfomer,有兴趣的可以先看看论文和作者的视频。

论文:Attention Is All You Need

Talk:Attention is all you need attentional neural network models – Łukasz Kaiser

 

  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值