神经网络中的Attention机制

Attention机制

一、概述

  人类的注意力机制(Attention Mechanism)是从直觉中得到,它是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段。深度学习中的注意力机制借鉴了人类的注意力思维方式,被广泛的应用在自然语言处理、图像分类及语音识别等各种不同类型的深度学习任务中,并取得了显著的成果。

  Attention机制就是对输入的每个元素考虑不同的权重参数,从而更加关注与输入的元素相似的部分,而抑制其它无用的信息。本质上说它模拟的是人脑的注意力模型,比如观赏一幅画时,虽然我们可以看到整幅画的全貌,人脑对整幅图的关注并不是均衡的,是有一定的权重区分的。Attention机制可以灵活的捕捉全局和局部的联系。它先是进行序列的每一个元素与其他元素的对比,在这个过程中每一个元素间的距离都是一,因此它比时间序列RNN的一步步递推得到长期依赖关系好的多。Attention机制每一步计算不依赖于上一步的计算结果,因此可以进行并行处理。

二、发展历史

  • Attention机制最早是应用于图像领域。
  • 在2014年,Google Mind团队发表的《Recurrent Models of Visual Attention》论文,提出在RNN模型上使用Attention机制来进行图像分类,取得了很好的性能。
  • Bahdanau等人发表论文《Neural Machine Translation by Jointly Learning to Align and Translate》中提出在机器翻译任务上使用Attention机制将翻译和对齐同时进行,将Attention机制应用在NLP领域中。
  • Xu等人发表的论文《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》中,将Attention机制应用在Image Caption领域。
  • 2017年,Google发表的论文《Attention is all you need》中提出在机器翻译上大量使用自注意力(Self-Attention)机制来学习文本表示。

三、Seq2Seq模型

  Seq2Seq模型通常具有编码器-解码器架构:

  • 编码器Encoder: 编码器处理输入序列并将序列信息压缩成固定长度的上下文向量(语义编码/语义向量 context),期望向量能够比较好的表示输入序列的信息。
  • 解码器Decoder: 利用上下文向量初始化解码器以得到变换后的目标序列输出。早期工作仅使用编码器的最后状态作为解码器的输入。
  • 编码器和解码器都是循环神经网络,比较常见的是使用LSTM或GRU。

  目前大多数注意力模型都伴随在Encoder-Decoder框架下。Encoder-Decoder是深度学习中非常常见的一个模型框架。
在这里插入图片描述

  假设在上述模型中,Encoder和Decoder都是传统的RNN模型。在RNN中,当前时刻的隐藏状态 h t h_t ht由上一时刻的隐藏状态 h t − 1 h_{t-1} ht1和当前时刻的输入 x t x_t xt决定:
h t = f ( h t − 1 , x t ) h_t = f(h_{t-1},x_t) ht=f(ht1,xt)

  在编码阶段,将各个时刻的隐藏层的状态汇总,生成语义编码向量C,其中q表示某种非线性神经网络,在这里表示多层RNN。
C = q ( h 1 , h 2 , h 3 , . . . , h T x ) C=q(h_1,h_2,h_3,...,h_{T_x}) C=q(h1,h2,h3,...,hTx)

  在解码阶段,根据给定的语义向量C和之前已经生成的输出序列 y 1 , y 2 , y 3 , . . . , y t − 1 y_1,y_2,y_3,...,y_{t-1} y1,y2,y3,...,yt1预测下一个输出 y t y_t yt
y t = a r g m a x P ( y t ) = ∏ t = 1 T p ( y t ∣ y 1 , y 2 , , y t − 1 , C y_t = argmax P(y_t) = \prod_{t=1}^T p(y_t|y_1,y_2,,y_{t-1},C yt=argmaxP(yt)=t=1Tp(yty1,y2,,yt1,C
  即
y t = g ( y 1 , y 2 , . . . , y t − 1 , C ) y_t = g(y_1,y_2,...,y_{t-1},C) yt=g(y1,y2,...,yt1,C)
  在RNN中可以化简为
y t = g ( y t − 1 , s t − 1 , C ) y_t = g(y_{t-1},s_{t-1},C) yt=g(yt1,st1,C)
  其中, s t − 1 s_{t-1} st1表示Decoder中RNN神经元的隐藏层状态, y t − 1 y_{t-1} yt1表示前一时刻的输出,C是语义向量;g是非线性的多层神经网络,可以输出 y t y_t yt的概率。g一般情况下是多层RNN后接softmax层。

  Encoder-Decoder框架的局限性较大。由于编码器和解码器之间的唯一联系就是一个固定长度的语义向量C。于是编码器要将整个序列的信息压缩进一个固定长度的向量中。这样做存在两个弊端:

  • 语义向量C可能无法完全表示整个序列的信息
  • 先输入到网络的内容携带的信息会被后输入的信息覆盖掉,输入序列越长,这个现象就越严重。

  因此在解码的时候解码器一开始没有获得输入序列足够多的信息,解码的准确度不够高。

四、Attention模型

  在Encoder-Decoder框架中,在预测每一个encode时对应的语义编码c都是一样的,也就意味着无论句子X中的每个单词对输出Y中的每一个单词的影响都是相同的。Attention Model(注意力模型)的设计便是用来解决上述缺陷。在机器翻译的时候,让生成词不是只能关注全局的语义编码向量c,而是增加了一个“注意力范围”,表示接下来输出词时候要重点关注输入序列中的哪些部分,然后根据关注的区域来产生下一个输出。
在这里插入图片描述

  从而当前时刻的输出 y t y_t yt可以表示为:
y t = f 1 ( C t , y 1 , y 2 , . . . , y t − 1 ) y_t = f_1(C_t,y_1,y_2,...,y_{t-1}) yt=f1(Ct,y1,y2,...,yt1)
  其中 C i C_i Ci表示包含各个单词权重的语义编码:
c i = ∑ j = 1 T x α i j h j c_i = \sum_{j=1}^{T_x} \alpha_{ij}h_j ci=j=1Txαijhj
  其中 α \alpha α表示注意力模型的权值, h h h是隐藏层输出。

  总体的编码-解码框架如下图所示:
在这里插入图片描述

  Encoder层:采用双向RNN模型,同时具有前向隐藏状态 h i → \overrightarrow{h_i} hi 和后向隐藏状态 h i ← \overleftarrow{h_i} hi ,为了获得词的上下文信息,采用简单串联方式将前向和后向表示拼接作为Encoder的隐藏层状态:
h i = [ h i → T ; h i ← T ] T , i = 1 , . . . , n h_i = [\overrightarrow{h_i}^T; \overleftarrow{h_i}^T]^T, i=1,...,n hi=[hi

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值