精华内容
下载资源
问答
  • Attention机制

    2020-12-04 10:54:33
    文章目录Attention机制的发家史Attention机制的理解引入attentionSeq2seq模型Encoder-Decoder在Decoder中引入Attentionseq2seq中的attention机制Attention的通用定义Attention的计算变体针对attention向量计算方式...

    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领域中。接着attention机制就被广泛应用在基于RNN/CNN等神经网络模型的各种NLP任务中去了,效果看样子是真的好,仿佛谁不用谁就一点都不fashion一样。2017年,google机器翻译团队发表的《Attention is all you need》中大量使用了自注意力(self-attention)机制来学习文本表示。这篇论文引起了超大的反应,本身这篇paper写的也很赞,很是让人大开眼界。因而自注意力机制也自然而然的成为了大家近期的研究热点,并在各种NLP任务上进行探索,纷纷都取得了很好的性能。

    Attention机制的理解

    ​ 在进行某种任务时,想要得到的结果肯定与上下文不同位置有着不同程度的关系,而attention机制就是求出这些“程度“(数字)。

    总结来说就是不同位置分布不同的权重。

    引入attention

    Seq2seq模型

    一个典型的序列到序列(seq2seq)模型,接收的输入是一个(单词、字母、图像特征)序列,输出是另外一个序列。一个训练好的模型如下图所示:

    Encoder-Decoder

    模型是由编码器(Encoder)和解码器(Decoder)组成的。其中,编码器会处理输入序列中的每个元素,把这些信息转换为一个向量(称为上下文(context))。当我们处理完整个输入序列后,编码器把上下文(context)发送给解码器,解码器开始逐项生成输出序列中的元素。

    在机器翻译任务中,上下文(context)是一个向量(基本上是由数字组成的数组)。编码器和解码器一般都是循环神经网络(你可以看看 Luis Serrano写 的 一篇关于循环神经网络 的精彩介绍)

    虽然我们将编码器的上下文向量传给解码器。但实际上,上下文向量是这类模型的瓶颈。因为这使得模型在处理长文本时面临非常大的挑战。

    在Decoder中引入Attention

    Bahdanau et al., 2014Luong et al., 2015 两篇论文中,提出了一种解决方法。这 2 篇论文提出并改进了一种叫做注意力(Attention)的技术,它极大地提高了机器翻译的效果。注意力使得模型可以根据需要,关注到输入序列的相关部分。

    首先,编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态)传递给解码器,而不是只传递最后一个 hidden state(隐藏层状态)。
    在这里插入图片描述

    第二,注意力模型的解码器在产生输出之前,会做一些额外的处理。为了把注意力集中在与该时间步相关的那些输入部分。解码器做了如下的处理:

    1. 查看所有接收到的编码器的 hidden state(隐藏层状态)。其中,编码器中每个 hidden state(隐藏层状态)都对应到输入句子中一个单词。

    2. 给每个 hidden state(隐藏层状态)打一个分数(我们先不说明这个分数的计算过程)。

    3. 将每个 hidden state(隐藏层状态)乘以经过 softmax 归一化的对应分数,从而使得,得分高对应的 hidden state(隐藏层状态)会被放大,而得分低对应的 hidden state(隐藏层状态)会被缩小弱化。

    在这里插入图片描述

    这个加权平均的步骤,会发生在解码器的每个时间步。

    现在,让我们把所有内容都融合到下面的图中,来看看注意力模型的整个过程:

    1. 注意力模型的解码器 RNN 的输入包括:一个 的词嵌入向量,和一个经过初始化的解码器 hidden state(隐藏层状态)。
    2. RNN 处理上述的 2 个输入,产生一个输出(注意这里的输出会被忽略)和一个新的 hidden state(隐藏层状态向量,图中表示为 h4)。
    3. 注意力的计算步骤:我们使用编码器的 hidden state(隐藏层状态)和 h4 向量来计算这个时间步的上下文向量(C4)。
    4. 我们把 h4 和 C4 拼接起来,得到一个向量。
    5. 我们把这个向量输入一个前馈神经网络(这个网络是和整个模型一起训练的)。
    6. 前馈神经网络的产生的输出表示这个时间步输出的单词。
    7. 在下一个时间步重复这个步骤。

    下图,我们使用另一种方式来可视化注意力,看看在每个解码的时间步中关注输入句子的哪些部分:

    请注意,注意力模型不是盲目地把输出的第一个单词对应到输入的第一个单词。实际上,它从训练阶段学习到了如何在两种语言中,找到对应单词的关系(在我们的例子中,是法语和英语)。下图展示了注意力机制的准确程度(图片来自于上面提到的论文):

    seq2seq中的attention机制

    • 我们在encoder的过程中保留每个RNN单元的隐藏状态(hidden state)得到(h1……hN)
    • 然后对于decoder的每一个timestep,因为有此时decoder的输入和上一步的隐藏状态输出,所以我们可以得到当前步的隐藏状态。假设第t步的(根据上一步隐藏状态输出与当前输入得到的)隐藏状态为St,
      在每个第t步利用St和hi进行dot点积得到attention score,也称为“相似度“或者“影响度”,或者“匹配得分”。
    • αt=softmax(et)α^t=softmax(e^t) , 利用softmax函数将dot products转化为attention scores的概率分布。

    at=iNαihi a_t=\sum_{i}^{N} \alpha_i h_i
    按照刚才的概率分布,计算encoder的hidden states的加权求和。到这里其实attention的计算就结束了,得到的这个ata^t就已经是decoder的第t时刻的注意力向量了(在后面的文章中,这个ata_t也称作是上下文向量(context vector),符号表示也可能是用ctc_t来表示的)。

    最后将注意力向量ata_t,以及decoder的t时刻的hidden state (sts_t),并联起来,然后做后续的步骤(比如加个全连接层做标签预测之类的)。

    Attention的通用定义

    按照Stanford大学课件上的描述,attention的通用定义如下:

    • 给定一组向量集合values,以及一个向量query,attention机制是一种根据该query计算values的加权求和的机制。
    • attention的重点就是这个集合values中的每个value的“权值”的计算方法。
    • 有时候也把这种attention的机制叫做query的输出关注了(或者说叫考虑到了)原文的不同部分。(Query attends to the values)

    Attention的计算变体

    首先从大的概念来讲,针对attention的变体主要有两种方式:
    1.一种是在attention 向量的加权求和计算方式上进行创新
    2.另一种是在attention score(匹配度或者叫权值)的计算方式上进行创新

    当然还有一种就是把二者都有改变的结合性创新,或者是迁移性创新。

    针对attention向量计算方式变体

    大概分成这么几种:

    • Soft attention、global attention、动态attention
    • Hard attention
    • “半软半硬”的attention (local attention)
    • 静态attention
    • 强制前向attention

    Soft attention、global attention、动态attention

    这三个其实就是Soft attention,也就是我们上面讲过的那种最常见的attention,是在求注意力分配概率分布的时候,对于输入句子X中任意一个单词都给出个概率,是个概率分布,把attention变量(context vecor)用ctc_t表示,attention得分在经过了softmax过后的权值用α\alpha表示

    论文:Neural machine translation by jointly learning to align and translate

    Hard attention

    Soft是给每个单词都赋予一个单词match概率,那么如果不这样做,直接从输入句子里面找到某个特定的单词,然后把目标句子单词和这个单词对齐,而其它输入句子中的单词硬性地认为对齐概率为0,这就是Hard Attention Model的思想。

    Hard attention的这个pt,我也没有详细研究,不过我觉得可能跟下面讲的local attention机制的找法差不多。据说Hard attention 一般用在图像里面,当图像区域被选中时,权重为1,剩下时候为0。
    https://www.cnblogs.com/Determined22/p/6914926.html

    local attention (半软半硬attention)

    Soft attention 每次对齐的时候都要考虑前面的encoder的所有hi,所以计算量会很大,因此一种朴素的思想是只考虑部分窗口内的encoder隐藏输出,其余部分为0,在窗口内使用softmax的方式转换为概率。这个local attention相反概念的是global attention,global attention其实就是softmax attention,这里不多赘述global attention了。

    论文:Effective Approaches to Attention-based Neural Machine Translation
    在这个模型中,对于是时刻t的每一个目标词汇,模型首先产生一个对齐的位置 pt(aligned position),context vector 由编码器中一个集合的隐藏层状态计算得到,编码器中的隐藏层包含在窗口[pt-D,pt+D]中,D的大小通过经验选择。

    上式之中,大S指的是源句子的长度,Wp和vp是指的模型的参数,通过训练得到,为了支持pt附近的对齐点,设置一个围绕pt的高斯分布,其中小s是在以pt为中心的窗口中的整数,pt是一个在[0,S]之间的实数。小Sigma σ 一般取窗口大小的一半。

    静态attention

    静态attention:对输出句子共用一个St的attention就够了,一般用在Bilstm的首位hidden state输出拼接起来作为st(在图所示中为u)
    这里写图片描述
    论文:Teaching Machines to Read and Comprehend 以及
    Supervised Sequence Labelling with Recurrent Neural Networks

    上面这个图是我从论文摘过来的静态attention的示意图,有同学可能会注意到的是:这个前面的每个hidden state 不应该都和这里的 u 算一次attention score吗,怎么这里只有一个r和u进行了交互?
    其实他这里的r表示的是加权平均的self attention,这个权就是attention ct向量,这个图里面把attention ct的计算过程省略了。直接跳到了ct和st计算真正的s’t的部分。他这个里面用的实际的attention score的计算并不是用点积,是additive attention,什么是additive attention呢?这个下面就会讲根据按照attention score计算的不同的attention model变体。

    针对Attention score的计算方式变体

    attention score的计算主要有以下几种:

    img
    qq时query向量,xix_i是value向量。

    self-attention

    Attention机制的计算流程

    preview

    Attention机制的实质其实就是一个寻址(addressing)的过程,如上图所示:给定一个和任务相关的查询Query向量 q,通过计算与Key的注意力分布并附加在Value上,从而计算Attention Value,这个过程实际上是Attention机制缓解神经网络模型复杂度的体现:不需要将所有的N个输入信息都输入到神经网络进行计算,只需要从X中选择一些和任务相关的信息输入给神经网络。

    在软性注意力机制(soft attention)中有两种类别:普通模式(Key=Value=X)和键值对模式(Key!=Value)。(与soft attention对应的是hard attention,上一小节讲过了)。

    img

    一种强大的Attention机制:为什么自注意力模型(self-Attention model)在长距离序列中如此强大?

    (1)卷积或循环神经网络难道不能处理长距离序列吗?

    当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列,如图所示:

    img

    从上图可以看出,无论卷积还是循环神经网络其实都是对变长序列的一种“局部编码”:卷积神经网络显然是基于N-gram(可以理解为窗口)的局部编码;而对于循环神经网络,由于梯度消失等问题也只能建立短距离依赖(RNN具有梯度消失的缺陷,缓解方法是LSTM)。

    (2)要解决这种短距离依赖的“局部编码”问题,从而对输入序列建立长距离依赖关系,有哪些办法呢?

    如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一 种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互,另一种方法是使用全连接网络。 ——《神经网络与深度学习》

    img

    由上图可以看出,全连接网络虽然是一种非常直接的建模远距离依赖的模型, 但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。

    这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(self-attention model)。由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列。

    总体来说,为什么自注意力模型(self-Attention model)如此强大利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列。

    (3)自注意力模型(self-Attention model)具体的计算流程是怎样的呢?

    同样,给出信息输入:用X = [x1, · · · , xN ]表示N 个输入信息;通过线性变换得到为查询向量序列,键向量序列和值向量序列:

    img

    上面的公式可以看出,self-Attention中的Q是对自身(self)输入的变换,而在传统的Attention中,Q来自于外部。

    imgself-Attention计算过程剖解(来自《细讲 | Attention Is All You Need 》)

    注意力计算公式为:

    img

    自注意力模型(self-Attention model)中,通常使用缩放点积来作为注意力打分函数,输出向量序列可以写为:

    img

    参考文献

    https://zhuanlan.zhihu.com/p/35571412

    https://zhuanlan.zhihu.com/p/265182368

    https://blog.csdn.net/hahajinbu/article/details/81940355

    https://zhuanlan.zhihu.com/p/53682800

    展开全文
  • attention 机制

    2019-04-06 16:58:29
    attention 机制motivationattention机制的形式attention的种类attention的应用 motivation attention 机制最早是在图像领域提出来的,它受人类在观察事物时会重点关注某一部分而不是全部的启发。attention 机制最早...

    motivation

    attention 机制最早是在图像领域提出来的,它受人类在观察事物时会重点关注某一部分而不是全部的启发。attention 机制最早应用在nlp领域中是在机器翻译任务上。机器翻译任务是一个经典的序列到序列的任务,在机器翻译中seq2seq是一个非常热门的模型,主要包括encoder和decoder 两个部分:encoder将输入表示成一个固定长度的向量,解码器根据encoder的输出向量解码出序列。这里存在一个问题:无论输入序列的长度为多长,都输出一个固定长度的向量,解码器受限于这个固定长度的向量,尤其是当序列长度较长时,并不能得到一个很好的向量表示,因此提出了atttention机制

    attention机制的形式

    attention 形式上包括两部分:查询(query)和一组键值对(key-value)
    在这里插入图片描述
    attention 的计算过程:

    1. 计算查询query与键key的相似度,计算相似度的方法包括点积、拼接以及使用感知机
    2. 使用softmax函数进行归一化,计算得到权重
    3. 对value值使用步骤2中计算得到的权重进行加权求和
      注:在nlp领域很多时候key和value 是一样的

    attention的种类

    计算查询query与键key的相似度可以有不同的方式:点积形式、一般形式、连接形式、感知机形式
    在这里插入图片描述
    soft-attention 与 hard-attention
    soft-attention 是给每个单词与当前词match赋予一个概率或者说权重,而hard-attention是在序列中找到一个特定单词与当前词进行对齐,而其他的单词与当前词对齐的概率为0

    global-attention 与 local-attention
    Soft attention 每次对齐的时候都要考虑前面的encoder的所有hih_i,所以计算量会很大,因此一种朴素的思想是只考虑部分窗口内的encoder隐藏输出,其余部分为0,在窗口内使用softmax的方式转换为概率。

    attention在nlp领域的应用

    1. 机器翻译任务上对于一个encoder-decoder模型
      Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” ICLR 2015.
      编码句子里的每个单词为一个向量
      当解码时对于这些向量进行现行组合(使用计算出的attention作为权重)
      利用这个上下文表示对一下一个词进行预测
      在这里插入图片描述
      在这里插入图片描述
      eije_{ij} 对词的相似度打分
      aija_{ij}是归一化的结果
      cic_i是对上下文的表示
      p(y)p(y)是对下一个词进行预测的概率
    2. 关系分类/句子分类
      Zhou, Peng, et al. “Attention-based bidirectional long short-term memory networks for relation classification.” ACL 2016.
      在这里插入图片描述
      在这里插入图片描述
    3. 文本分类
      Yang, Zichao, et al. “Hierarchical attention networks for document classification.” NAACL 2016.
      在这里插入图片描述
      word attention
      在这里插入图片描述
      sentence attention
      在这里插入图片描述
    4. 自然语言推断
      Chen, Qian, et al. "Enhanced lstm for natural language inference.“ ACL 2017.
      在这里插入图片描述
      输入编码:
      在这里插入图片描述
      局部推断建模:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    5. 阅读理解
       Cui, Yiming, et al. “Attention-over-attention neural networks for reading comprehension.” ACL 2017.在这里插入图片描述

    Pair-wise Matching Score
    在这里插入图片描述
    Query-to-document attention
    在这里插入图片描述

    Document-to-query attention
    在这里插入图片描述
    在这里插入图片描述
    Attention-over-Attention
    在这里插入图片描述

    展开全文
  • attention机制

    2021-01-13 18:07:36
    唠一唠attention机制。 一、背景: attention机制出家自NLP中的文本翻译。最朴素的翻译是,一个单词一个单词的蹦。翻译出来的效果那就是七零八落,能稍微明白个意思。那要想翻译好怎么整呢,长难句老师教我们,先看...

    文章有点看不下去了,所以先来输出一波吧。唠一唠attention机制。本文将从attention机制的背景(什么问题推动想出这个解决方案的),到seq2seq中的attention机制与self-attention的详细计算流程进行介绍,最后再说一下啥是multi-head。

    一、背景:

    attention机制出家自NLP中的文本翻译。最朴素的翻译是,一个单词一个单词的蹦。翻译出来的效果那就是七零八落,能稍微明白个意思。那要想翻译好怎么整呢,长难句老师教我们,先看一遍整个句子,然后找出定语从句… 那就是说要关注单词和单词之间的联系了。

    那这个单词和单词之间的联系要怎么度量呢?

    attention 机制!

    我们都知道单词可以用word2vec学习到其向量表示。seq2seq模型中,单词被一个一个的输入encoder,然后再被输出到一个softmax层,输出一个一个翻译后的单词。

    主要有下图的两种模式:(图来自于吴恩达的深度学习视频)
    这个图来自于吴恩达的深度学习视频

    二、 针对第一种模型(seq2seq):

    可以看出,前面翻译的单词是不会注意到后面单词是啥的,那么怎么让它注意到呢?把后面的单词加权加到前面单词表达上:(你可能会说bidirectional RNN也可以,但是它只能选择记住or遗忘,无法对不同单词有不同程度的关注,效果肯定没这种好。而且句子一长,它也记不了那么多信息,翻译效果就没那么好了)
    在这里插入图片描述
    上述都是文字and图,来点公式直观表达一下整个翻译过程:

    这里 x<t>x^{<t>} : 输入的第tt个单词,
    y<t>y^{<t>} :输出的第tt个单词
    g()g(), f()f() :激活函数
    a<0>a^{<0>}S<0>S^{<0>}:初始值,可以设为全零向量Waa,Wax,Wss,ba,bsW_{aa},W_{ax},W_{ss},b_a,b_s都是我们要学习的参数。

    我们的目标是学习到参数 αt,i\alpha^{t,i} :翻译出第 t 个单词时,对第 ii个单词的关注度。
    在这里插入图片描述

    如何学习αt,i\alpha_{t,i}:
    先来看如何计算αt,i\alpha_{t,i}:
    我们先计算当前得到的汇总向量 和其他单词的相似性,然后对所有单词的相似性进行归一。
    在这里插入图片描述
    如果采用第一种点乘的方法,其实我们要学的参数就还是那几个WW。也就是说我们通过反向传播的方式学习到W,bW,b后,就相当于学到了α\alpha

    好的说完第一种模式了,我们再来唠唠第二种模式。第二种模式这个叫self-attention,想出这个方法的人感觉他的脑子一定很神奇。

    三、self-attention(针对第二种模型)

    我们先来看下加了self-attention的翻译模型长什么样:

    在这里插入图片描述

    encoder

    拆出其中的一个包含self-attention模块的encoder模块:
    在这里插入图片描述
    可以看出encoder的目标是把输入的单词向量 xx ,变为包含其他输入单词信息的新向量 rr。 变身过程如下:
    在这里插入图片描述

    来张图形象的看一下这个过程吧

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    4、把 ZiZ_i 放到一个神经网络,训练得到 rir_i

    这里 W=[WQ,WK,WV]W = [W^Q,W^K,W^V] 就是我们要训练的参数。


    multi-head

    ​ 介绍完基本的self-attention, 我们再来介绍一下multihead机制。multi-head就是指,我们可以训练多个 WW ,得到单词之间的多种关系。 eg:张三去银行存了一笔钱。 可能第一个 WW 学到的关系是 “张三” 和 “存”, 第二个 WW 学到的关系是 “张三” 和 “银行” 以及 “钱”

    multi-head 训练过程 :

    ​ 1、随机初始化8个 [WQ,WK,WV][W^Q,W^K,W^V] 矩阵 (当然不是非得要8个,这里只是举个例子)

    ​ 2、[Q,K,V]=XW[Q,K,V] = X\cdot W

    ​ 3、Z=softmax(QK)VZ = softmax(Q\cdot K) \cdot V

    ​ 4、将 Z0,Z1,Z2...Z7Z_0,Z_1,Z_2...Z_7 拼接起来,然后乘以 矩阵 WOW^O ,得到最终的 zz。 再将 zz 放到神经网络中去训练,得到 rr

    ​ 这里 WQ,WK,WV,WOW^Q,W^K,W^V,W^O 都是训练过程中要学习的参数。
    在这里插入图片描述

    decoder

    最后一层encoder输出 一个 KK 和 一个 VV, 作为 decoder的输入。每次decoder 翻译出一个单词(输出),翻译出的单词将一起作为下一步 decoder的输入,直到输出一个代表结束的符号。(这里也会将位置信息 embedding,然后加到单词上。)

    ​ linear 层将decoder的输出,变为one-hot编码维度。(比如有1000个单词,就变为1000维的向量)最后 Softmax 计算概率。
    在这里插入图片描述

    附录、其他训练小细节

    1、position embedding

    ​ 把单词在句子中的位置做一个embedding,加到单词的embedding vector上

    xix_i = xi+positionx_i + position embeddingembedding

    2、residual

    • 在self-attention前后用了 residual,把self-attention之前的embedding vector 加到 self-attention之后的vector上;

      zi=zi+xiz_i = z_i + x_i

    • 在神经网络前后也用了 residual
      在这里插入图片描述

      3、layer normalization

      ​ 相比于batch normalization , layer normalization 可以忽略batch size带来的影响,在layer中把数据变为均值为μ\mu , 方差为σ\sigma 的分布。(没太明白,看论文吧)

    在这里插入图片描述

    源码: 第一个是pytorch,第二个是tensorflow keras
    在这里插入图片描述

    展开全文
  • Attention 机制

    2020-01-07 17:18:21
    Attention是一种近年来较为流行的机制,广泛地在自然语言处理、计算机视觉等领域应用。...本文将尝试细致理解Attention机制及其几个典型变种,以期真正理解attention机制并得以在今后灵活运用和改进。

    Attention是一种近年来较为流行的机制,广泛地在自然语言处理、计算机视觉等领域应用。它的作用机制易于人类理解——给重要区域更多的注意力。
    但是,如何判断什么是“重要”的?注意力又是如何影响决策的?
    本文将尝试细致理解Attention机制及其几个典型变种,以期真正理解attention机制并得以在今后灵活运用和改进。

    Attention alpha

    首先让我们探究最原始的Attention形态及其原理。

    seq2seq

    Attention机制最早在机器翻译任务中被提出,在attention被应用之前,该任务采用Seq2Seq模型来解决这一问题:
    在这里插入图片描述
    xtx_ttt时刻输入,hth_t是对应隐空间编码,cc是代表整段输入的隐空间特征,ht{h'}_{t'}tt'时刻对应的隐空间编码,yt{y}_{t'}是对应时刻的输出。各变量计算关系如图。

    先将整段输入编码为隐变量cc,然后将整段输入的特征向量 cc 输入Decoder进行不断地解码。每次编码时,根据该时刻的隐层特征,和上一时刻的输出,以及全文信息cc,决定这个时刻应该输出什么。
    如,将“我们是学生”翻译为“We are students.”
    首先通过encoder将中文的“我们是学生”编码,编码到一个抽象的语义空间,编码特征为 cc,这代表了整段话的含义。然后decoder进行一个词一个词的翻译, 翻译完“are”的时候,它先看了看整段话需要翻译“我是学生”( 看了看cc),然后看了看现在翻译的进度(yt1y_{t'-1}ht1{h'}_{t'-1}),决定了下一个词输出“students”。

    c的产生方式有很多种:
    1)c=hTc=h_T
    2)c=q(hT)c=q(h_T)
    1)c=q(h1,h2,...,hT)c=q(h_1, h_2, ..., h_T)

    seq2seq with attention

    下面来看有attention的seq2seq:
    在这里插入图片描述
    解码器中的隐变量ht{h'}_{t'}的计算发生了改变,上下文信息由原先固定不变的cc变为了会随时刻变化的ctc_{t'}。它的基本思想是说,翻译每个词时,应该看的是上下文信息而非全局信息。比如在翻译"students"时,要重点看一看“学生”附近的语义信息,而不是整句话的信息。
    那么如何确定重点看哪里呢?一种方式是计算上一时刻的隐变量ht1h'_{t'-1}和各输入对应的隐变量hth_t的点乘:at,t=ht1hta_{t', t}=h_{t'-1}' \cdot h_t。相关性高、长得像,越可能对应,attention越高。

    但这里有一个问题,为什么计算tt'时刻的隐变量hth'_{t'},和它上一时刻隐变量ht1h'_{t'-1}越相似的输入隐变量hth_{t}越重要呢?换句话说,在翻译’students’时,输入’是’时刻的隐变量更重要了,而非输入’学生’。

    这里需要做两点补充说明:

    1. attention机制的提出是为了解决输入序列过长导致遗忘的问题。
    2. encoder是双向模型而不是单向模型。

    首先,attention的提出背景是,当句子的输入过长时,翻译的时候噪音过多。因此,attention的提出可以有效地抑制不相关的部分而着重相关的部分。
    想象一个长句子:“我们走到办公室,对着办公室里的黑帮老大,不禁感到有些紧张,但还是挺起胸膛对他说,我们是学生。”依旧翻译“students”,我们虽然没有直接高亮“学生”,但是“是”所对应的隐变量,相对于整个长句子的信息来说,已经是一个“学生”附近的上下文了。
    其次,attention所应用的模型,更准确地说是一个双向时序模型。所以“是”所对应的隐变量,不但包含了“我们”,也包含了“学生”。

    展开全文
  • Attention机制与Self-Attention机制的区别

    万次阅读 2020-09-08 15:33:20
    本文主要讲解Attention机制与Self-Attention机制的区别,默认读者已经了解过Attention、Self-Attention、Transformer、seq2seq model。 传统的Attention机制在一般任务的Encoder-Decoder model中,输入Source和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,763
精华内容 1,505
关键字:

attention机制