精华内容
下载资源
问答
  • 深入理解attention机制
    千次阅读
    2020-10-22 20:45:34

    前言

    attention机制在深度学习各个领域都被广泛使用,尤其是CV和NLP任务中经常会出现attention机制的身影。本文将从原理角度深入分析attention机制。

    Attention是一种用于提升基于RNN(LSTM或GRU)的Encoder + Decoder模型的效果的的机制(Mechanism),一般称为Attention Mechanism。Attention Mechanism目前非常流行,广泛应用于机器翻译、语音识别、图像标注(Image Caption)等很多领域,之所以它这么受欢迎,是因为Attention给模型赋予了区分辨别的能力,例如,在机器翻译、语音识别应用中,为句子中的每个词赋予不同的权重,使神经网络模型的学习变得更加灵活(soft),同时Attention本身可以做为一种对齐关系,解释翻译输入/输出句子之间的对齐关系,解释模型到底学到了什么知识,为我们打开深度学习的黑箱,提供了一个窗口,如下图所示 [ 1 ] ^{[1]} [1]
    图1NLP中的attention可视化

    attention机制的产生

    attention机制并不是一个新概念,在很久之前(90年代)就有学者提出,其最早产生并且应用在计算机视觉(CV)领域,之后在自然语言处理(NLP)领域快速发展,最近又在CV领域火了起来。

    attention机制来源于人类的视觉注意力机制,可以算是仿生学的一个应用,视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。

    这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。

    图2人类的视觉注意力机制
    图2形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,其中红色区域表明视觉系统更关注的目标,很明显对于图1所示的场景,人们会把注意力更多投入到人的脸部,文本的标题以及文章首句等位置。

    深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息 [ 2 ] ^{[2]} [2]

    attention机制的发展

    attention第一次火起来是2014年Google Mind团队发表的论文《Recurrent Models of Visual Attention》。

    随后Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是第一个将attention机制应用到NLP领域中。

    2017年,Google机器翻译团队发表的《Attention is all you need》中完全使用自注意力(Self-attention)机制来学习文本表示。这篇论文算是开起了Self-attention机制(这个结构也被叫做Transformer结构)的研究浪潮,之后的Bert预训练模型也是在这个基础(Transformer)上构建。

    2018年底,Google发布了论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,Bert的出现,刷新了NLP领域的11个方向的记录,当时属于霸榜的存在,之后的预训练模型基本上离不开基于Self-attention的Transformer结构了 [ 3 ] ^{[3]} [3]

    attention机制的原理

    讲到attention的原理,就不得不提RNN的缺陷了,下图是一个基于RNN的神经翻译系统,红色部分是encoding部分,蓝色的是decoding部分,encoding部分输入的是被翻译语言单词的嵌入式表示,进过RNN网络,得到包含有整个句子的信息的向量hidden vector,然后在经过decoding解码得到目标语言向量。这个结构主要存在以下几个问题:
    1.RNN本身所具有的梯度消失问题,对于较长的句子,我们很难寄希望于将输入的序列转化为定长的向量而保存所有的有效信息,所以随着所需翻译句子的长度的增加,这种结构的效果会显著下降。
    2.这个结构得到的hidden vector虽然包含了整句话的全部信息,但是这个全部信息具有局部依赖的特性,也就是说越近的句子对hidden vector的贡献越大,很多时候hidden vector其实只学到了每句话最后几个词的信息
    3.不能够支持并行计算,训练起来会很慢,每个词向量对应的导数依赖后续的词的导数,这样递归求导也是梯度消失问题的主要原因 [ 4 ] ^{[4]} [4]
    基于RNN的神经翻译模型
    这些问题并不是一下子解决的,每个问题的解决都间隔了一段时间。引入attention机制能够解决前两个问题,下面我们来看看attention的原理。Attention机制跟人类翻译文章时候的思路有些类似,即将注意力关注于我们翻译部分对应的上下文。同样的,Attention模型中,当我们翻译当前词语时,我们会寻找源语句中相对应的几个词语,并结合之前的已经翻译的部分作出相应的翻译,如下图所示,当我们翻译“knowledge”时,只需将注意力放在源句中“知识”的部分,当翻译“power”时,只需将注意力集中在"力量“。这样,当我们decoder预测目标翻译的时候就可以看到encoder的所有信息,而不仅局限于原来模型中定长的hidden vector,并且不会丧失长距离的信息,尤其是在翻译一些倒装句等特殊句式的时候,attention机制就能比传统的RNN起到一个更好的效果。

    attention机制的原理图解
    为了便于解释attention的详细原理,我们采用下图作为神经机器翻译的原理图。

    神经机器翻译NMT原理图

    首先我们利用RNN结构得到encoder中的hidden state ( h 1 h_1 h1- h t h_t ht),这个 h 1 h_1 h1- h t h_t ht代表着上文提到的hidden vector,只不过上文提到的hidden vector是最后一个状态的hidden vector,即 h t h_t ht的hidden vector。

    假设当前decoder的hidden state 是 s t − 1 s_{t-1} st1,我们可以计算每一个输入位置j的hidden vector与当前输出位置的关联性similarity( s t − 1 s_{t-1} st1, h j h_j hj),这个有很多种计算方式,其实就是相似度的计算方式。

    对于所有的similarity( s t − 1 s_{t-1} st1, h j h_j hj)进行softmax操作后将其normalize得到attention的分布,这一步得到的就是下图中的 a t , 1 a_{t,1} at,1- a t , t a_{t,t} at,t,也就是decoder的下一层输出与所有输入之间的权重关系。 α t , j = e s i m i l a r i t y ( s t − 1 , h j ) ∑ k = 1 T e s i m i l a r i t y ( s t − 1 , h k ) \alpha_{t,j}={e^{similarity(s_{t-1},h_j)}\over{\sum_{k=1}^{T}e^{similarity(s_{t-1},h_k)}}} αt,j=k=1Tesimilarity(st1,hk)esimilarity(st1,hj)

    利用 α t , j \alpha_{t,j} αt,j我们可以进行加权求和得到相应的context vector c t = ∑ j = 1 T α t , j h j c_t=\sum_{j=1}^{T}\alpha_{t,j}h_j ct=j=1Tαt,jhj

    由此,我们可以计算decoder的下一个hidden state s t = f ( s t − 1 , y t − 1 , c t ) s_t=f(s_{t-1},y_{t-1},c_t) st=f(st1,yt1,ct)以及该位置的输出 p ( y t ∣ y 1 , . . . , y t − 1 , x ) = g ( y i − 1 , s t , c t ) p(y_t|y_1,...,y_{t-1},x)=g(y_{i-1},s_t,c_t) p(yty1,...,yt1,x)=g(yi1,st,ct)
    attention机制的数学原理
    这里关键的操作是计算encoder与decoder state之间的关联性的权重,得到Attention分布,从而对于当前输出位置得到比较重要的输入位置的权重,在预测输出时相应的会占较大的比重。

    注意力分配概率的计算

    attention的形成过程

    通过Attention机制的引入,我们打破了只能利用encoder最终单一向量结果的限制,从而使模型可以集中在所有对于下一个目标单词重要的输入信息上,使模型效果得到极大的改善。还有一个优点是,我们通过观察attention 权重矩阵的变化,可以更好地知道哪部分翻译对应哪部分源文字,有助于更好的理解模型工作机制,如下图所示。

    attention的工作机制图解
    如果把Attention机制从上文讲述例子中的Encoder-Decoder框架中剥离,并进一步做抽象,可以更容易看懂Attention机制的本质思想。

    attention本质
    我们可以这样来看待Attention机制:将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:
    A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 L x S i m i l a r i t y ( Q u r e y , K e y i ) ∗ V a l u e i Attention(Query,Source)=\sum_{i=1}^{L_x}Similarity(Qurey,Key_i)*Value_i Attention(Query,Source)=i=1LxSimilarity(Qurey,Keyi)Valuei
    其中, L x L_x Lx=||Source||代表Source的长度,公式含义即如上所述。上文所举的机器翻译的例子里,因为在计算Attention的过程中,Source中的Key和Value合二为一,指向的是同一个东西,也即输入句子中每个单词对应的语义编码,所以可能不容易看出这种能够体现本质思想的结构。

    当然,从概念上理解,把Attention仍然理解为从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息,这种思路仍然成立。聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

    从上图可以引出另外一种理解,也可以将Attention机制看作一种软寻址(Soft-Addressing):Source可以看作存储器内存储的内容,元素由地址Key和值Value组成,当前有个Key=Query的查询,目的是取出存储器中对应的Value值,即Attention数值。通过Query和存储器内元素Key的地址进行相似性比较来寻址,之所以说是软寻址,指的不像一般寻址只从存储内容里面找出一条内容,而是可能从每个Key地址都会取出内容,取出内容的重要性根据Query和Key的相似性来决定,之后对Value进行加权求和,这样就可以取出最终的Value值,也即Attention值。所以不少研究人员将Attention机制看作软寻址的一种特例,这也是非常有道理的。

    至于Attention机制的具体计算过程,如果对目前大多数方法进行抽象的话,可以将其归纳为两个过程:第一个过程是根据Query和Key计算权重系数,第二个过程根据权重系数对Value进行加权求和。而第一个过程又可以细分为两个阶段:第一个阶段根据Query和Key计算两者的相似性或者相关性;第二个阶段对第一阶段的原始分值进行归一化处理;这样,可以将Attention的计算过程抽象为如下图展示的三个阶段。

    attention的三个阶段
    在第一个阶段,可以引入不同的函数和计算机制,根据Query和某个 K e y i Key_i Keyi,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值,即如下方式:
    点 积 : S i m i l a r i t y ( Q u e r y , K e y i ) = Q u e r y ⋅ K e y i 点积:Similarity(Query,Key_i)=Query·Key_i Similarity(Query,Keyi)=QueryKeyi
    c o s 相 似 度 : S i m i l a r i t y ( Q u e r y , K e y i ) = Q u e r y ⋅ K e y i ∣ ∣ Q u e r y ∣ ∣ ⋅ ∣ ∣ K e y i ∣ ∣ cos相似度:Similarity(Query,Key_i)={Query·Key_i\over{||Query||·||Key_i||}} cosSimilarity(Query,Keyi)=QueryKeyiQueryKeyi
    M L P 网 络 : S i m i l a r i t y ( Q u e r y , K e y i ) = M L P ( Q u e r y , K e y i ) MLP网络:Similarity(Query,Key_i)=MLP(Query,Key_i) MLPSimilarity(Query,Keyi)=MLP(Query,Keyi)
    第一阶段产生的分值根据具体产生的方法不同其数值取值范围也不一样,第二阶段引入类似softMax的计算方式对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过softMax的内在机制更加突出重要元素的权重。即一般采用如下公式计算:
    a i = s o f t m a x ( S i m i ) = e s i m i ∑ j = 1 L x e s i m i a_i = softmax(Sim_i)={e^{sim_i}\over{\sum_{j=1}^{L_x}e^{sim_i}}} ai=softmax(Simi)=j=1Lxesimiesimi
    第二阶段的计算结果 a i a_i ai即为 v a l u e i value_i valuei对应的权重系数,然后进行加权求和即可得到Attention数值:
    A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 L x a i ⋅ V a l u e i Attention(Query,Source)=\sum_{i=1}^{L_x}a_i·Value_i Attention(Query,Source)=i=1LxaiValuei
    通过如上三个阶段的计算,即可求出针对Query的Attention数值,目前绝大多数具体的注意力机制计算方法都符合上述的三阶段抽象计算过程。

    说完了attention的机制,现在还有一个最重要的问题没有解决,那就是并行计算的问题,解决这个问题就要提到self-attention了。

    Self Attention也经常被称为intra-Attention(内部Attention),最近几年也获得了比较广泛的使用,比如Google最新的机器翻译模型内部大量采用了Self-Attention模型。

    在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素Query和Source中的所有元素之间。而Self-Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已,所以此处不再赘述其计算过程细节。

    如果是常规的Target不等于Source情形下的注意力计算,其物理含义正如上文所讲,比如对于机器翻译来说,本质上是目标语单词和源语单词之间的一种单词对齐机制。那么如果是Self-Attention机制,一个很自然的问题是:通过Self Attention到底学到了哪些规律或者抽取出了哪些特征呢?或者说引入Self-Attention有什么增益或者好处呢?我们仍然以机器翻译中的Self Attention来说明,下图是可视化地表示Self-Attention在同一个英语句子内单词间产生的联系。
    self-attention可视化例子

    self-attention可视化例子
    从两张图可以看出,Self-Attention可以捕获同一个句子中单词之间的一些句法特征(比如第一张图展示的有一定距离的短语结构)或者语义特征(比如第二张图展示的its的指代对象Law)。

    很明显,引入Self-Attention后会更容易捕获句子中长距离的相互依赖的特征,因为如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。

    但是Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self-Attention对于增加计算的并行性也有直接帮助作用。这是为何Self-Attention逐渐被广泛使用的主要原因。到此为止,关于RNN的三个问题就都被解决了。

    attention的应用

    在NLP领域几乎到处都能见到attention的身影,尤其是近几年self-attention的兴起,基于self-attention的机器翻译、机器阅读理解、文本情感分析、文本生成、语音识别等方法相继出现,使得NLP领域近些年来火了一把。

    attention机制除了在NLP各类任务中应用广泛之外,在图像领域也有很多应用,例如图片描述(Image-Caption)领域,输入一张图片,人工智能系统输出一句描述句子,语义等价地描述图片所示内容。通过attention机制就能够动态捕捉到整张图像中的重要信息,通过这些信息对图像内容进行描述。

    参考文献

    [1] 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用,深度学习于NLP,https://zhuanlan.zhihu.com/p/31547842
    [2] 深度学习中的注意力模型,张俊林,https://zhuanlan.zhihu.com/p/37601161
    [3] 浅谈Attention机制的理解,TheLongGoodbye,https://zhuanlan.zhihu.com/p/35571412
    [4] Attention机制详解,川陀学者,https://zhuanlan.zhihu.com/p/47063917
    [5] attention机制原理及简单实现,不分享的知识毫无意义,https://www.jianshu.com/p/1d67638139da

    更多相关内容
  • 使用attention机制实现和可视化一个自定义RNN层
  • Attention注意机制现在大热,很多深度学习的框架都带上了注意力机制,而且也取得了很好的性能指标。乘着大热也来水一水文章,发表发表自己的看法。事先说明老哥我在NLP上萌新一枚,粗糙想法不登大雅,呆萌的逻辑思维...
  • Attention机制

    2019-10-29 21:35:24
    Attention机制的本质思想 Hard-Attention模型 Local-Attention模型 静态Attention模型 Self-Attention机制 为什么要引入Attention机制 Attention机制有哪些 Self-Attention在长距离序列中强大的原因 Encoder...

    目录

    Encoder-Decoder框架

    Soft-Attention模型

    Attention机制的本质思想

    Hard-Attention模型

    Local-Attention模型

    静态Attention模型

    Self-Attention机制

    为什么要引入Attention机制

    Attention机制有哪些

    Self-Attention在长距离序列中强大的原因


    Encoder-Decoder框架

    目前大多数Attention机制都是依附在Encoder-Decoder框架下,但其实Attention机制是一种通用的思想,本身并不依赖于特定框架

    image.png

     

    文本处理领域的Encoder-Decoder框架:对于句子对<Source,Target>,给定输入句子Source,通过Encoder-Decoder框架来生成目标句子Target。

    \Large Source = <x_1,x_2,...,x_m>

    \Large Target = <y_1,y_2,...,y_m>

    Encoder通过非线性变化将输入句子Source转化成中间语义表示C

    \Large C = G(x_1,x_2,...,x_m)

    Decoder根据中间语义表示C和之前已经生成的历史信息y_1,y_2,...,y_m来生成i时刻要生成的单词

    \Large y_i = F(C,y_1,y_2,...,y_m)

    Encoder和Decoder具体使用的模型可以灵活设定,如CNN,RNN,LSTM等,但上面这个Encoder-Decoder框架没有体现Attention思想,因为对不同的y_i使用的中间语义表示C是相同的,即句子X中任意单词对生成某个目标单词y_i来说影响力都是相同的(其实如果Encoder是RNN的话,理论上越是后输入的单词影响越大,并非等权的)。

    未引入Attention的Encoder-Decoder框架的缺点:输入句子较短时影响不大,但如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,会丢失很多细节信息。

    Soft-Attention模型

    引入Attention机制后,固定的中间语义表示C变换成根据当前输出单词来调整加入Attention机制的变化的

    image.png

    生成目标句子单词的过程:

    \Large y_1 = F(C_1)

    \Large y_2 = F(C_2,y_1)

    \Large y_i = F(C_i,y_1,y_2,...,y_m)

    每个\large C_i可能对应着不同的源语句子单词的Attention分配概率分布,

    \large \Large C_i = \sum_{j=1}^{Lx}a_{ij}h_{j}

     

    Lx表示输入句子Source的长度, 代表在Target输出第i个单词时,Source输入句子中第j个单词的Attention分配系数,是Source输入句子中第j个单词的语义编码

    image.png

    image.png

    对于采用RNN的Decoder,目标是计算生成\large y_i时输入句子X中每个单词对\large y_i的Attention分配概率,可以用Target输出句子i-1时刻的隐层节点状态\large H_{i-1}和输入句子中每个单词对应的RNN隐层节点状态\large h_i进行对比,即通过\large F(h_j,H_{i-1})来获得目标单词\large y_i和每个输入单词对齐的可能性。F函数可以采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的Attention分配概率分布数值。

    Attention模型的物理含义:Attention模型看作是输出Target句子中某个单词和输入Source句子每个单词的对齐模型,目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率。

    Attention机制的本质思想

    image.png

    将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和

    Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:

    \large \Large Attention(Query,Source) = \sum_{i=1}^{Lx}Sim(Query,Key_i)*Value_i

    Attention的理解:从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

    Attention也可以看作是一种软寻址,通过Query和存储器Sourece内元素Key的地址进行相似性比较来寻址,每次寻址可能从每个Key地址中取值,然后加权求和。

    Attention机制的计算过程:

    1、根据Query和Key计算权重系数

    1)根据Query和Key计算两者的相似性或者相关性

    点积:\large Similarity(Query,Key_i) = Query \cdot Key_i

    Cosine相似性:\large Similarity(Query,Key_i) = \frac{Query \cdot Key_i}{||Query||\cdot||Key_i||}

    MLP网络:\large \Large Similarity(Query,Key_i) = MLP(Query , Key_i)

    2、据权重系数对Value进行加权求和

    image.png

    Hard-Attention模型

    Hard-Attention:直接从输入句子中找到某个特定的单词,然后将目标句子单词和这个单词对齐,而其他输入句子的单词对齐概率为0。Hard AM在图像里证明有用,但是在文本里面用处不大,因为这种单词一一对齐明显要求太高,如果对不齐对后续处理负面影响很大。

    image.png

    Local-Attention模型

    先找到Hard AM在输入句子中单词对齐的那个单词大致位置,然后以这个单词作为轴心,向左向右拓展出一个大小为D的窗口,在这个2D+1窗口内的单词内进行类似Soft AM的对齐概率计算即可

    image.png

    静态Attention模型

    静态Attention:对于一个文档或者句子,计算每个词的注意力概率分布,然后加权得到一个向量来代表这个文档或者句子的向量表示;和Soft-Attention的区别:静态Attention只计算一次得到句子的向量表示,Soft-Attention在Decoder的过程中每一次都需要重新对所有词计算一次Attention概率分布,然后加权求和。

    下图是静态Attention模型

    image.png

     

    下图是动态Attention模型(Soft-Attention)

    image.png

    Self-Attention机制

    Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。

    计算过程是相同的,只是计算对象发生变化。

    Self-Attention可以捕获同一个句子中单词之间的一些句法特征或者语义特征

    Self-Attention相较于RNN或LSTM更容易捕获句子中长距离的相互依赖的特征,因为RNN或LSTM需要依次序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。

    但是Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self-Attention有助于增加计算的并行性。

    为什么要引入Attention机制

    1、计算能力的限制:当要记住很多“信息”,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。

    2、优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离问题,信息“记忆”能力并不高。

    引入Attention机制相当于借助人脑处理信息过载的方式,例如Attention机制可以提高神经网络处理信息的能力。

    Attention机制有哪些

    聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;

    显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意——基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看作是自下而上的基于显著性的注意力机制。

    在神经网络中,Attention默认指聚焦式Attention。

    Self-Attention在长距离序列中强大的原因

    1、CNN或RNN不能处理长距离序列

    无论CNN或者RNN都是对变长序列的一种“局部编码”,CNN是基于n-gram的局部编码,RNN因为梯度消失的问题,只能建立短距离依赖。

    2、解决这种短距离依赖的“局部编码”问题的方法:

    1)增加网络的层数,通过一个深层网络来获取远距离的信息交互

    2)全连接网络

    3)Self-Attention利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列。

     

    最后如果转载,麻烦留个本文的链接,因为如果读者或我自己发现文章有错误,我会在这里更正,留个本文的链接,防止我暂时的疏漏耽误了他人宝贵的时间。

     

    展开全文
  • Attention 机制

    千次阅读 2019-10-29 10:58:40
    SENet 详解 ... 图解 1.基础网络结构 2.各阶段计算方式公式 ...为了更清楚地介绍计算机视觉中的注意力机制,这篇文章将从注意力域(attention domain)的角度来分析几种注意力的实现方法。其中主要是...

    SENet 详解

    https://blog.csdn.net/xjz18298268521/article/details/79078551

    图解

    1.基础网络结构

    2.各阶段计算方式公式 

     

    3.结构图:

     

    简介

    为了更清楚地介绍计算机视觉中的注意力机制,这篇文章将从注意力域(attention domain)的角度来分析几种注意力的实现方法。其中主要是三种注意力域,空间域(spatial domain)通道域(channel domain)混合域(mixed domain)。

    还有另一种比较特殊的强注意力实现的注意力域,时间域(time domain),但是因为强注意力是使用reinforcement learning来实现的,训练起来有所不同。

    (1) 空间域

    设计思路

    Spatial Transformer Networks(STN)模型是15年NIPS上的文章,这篇文章通过注意力机制,将原始图片中的空间信息变换到另一个空间中并保留了关键信息。这篇文章的思想非常巧妙,因为卷积神经网络中的池化层(pooling layer)直接用一些max pooling 或者average pooling 的方法,将图片信息压缩,减少运算量提升准确率。但是这篇文章认为之前pooling的方法太过于暴力,直接将信息合并会导致关键信息无法识别出来,所以提出了一个叫空间转换器(spatial transformer)的模块,将图片中的的空间域信息做对应的空间变换,从而能将关键的信息提取出来。

    (2) 通道域

    设计思路:

    通道域的注意力机制原理很简单,我们可以从基本的信号变换的角度去理解。信号系统分析里面,任何一个信号其实都可以写成正弦波的线性组合,经过时频变换之后,时域上连续的正弦波信号就可以用一个频率信号数值代替了。

    在卷积神经网络中,每一张图片初始会由(R,G,B)三通道表示出来,之后经过不同的卷积核之后,每一个通道又会生成新的信号,比如图片特征的每个通道使用64核卷积,就会产生64个新通道的矩阵(H,W,64),H,W分别表示图片特征的高度和宽度。每个通道的特征其实就表示该图片在不同卷积核上的分量,类似于时频变换,而这里面用卷积核的卷积类似于信号做了傅里叶变换,从而能够将这个特征一个通道的信息给分解成64个卷积核上的信号分量。既然每个信号都可以被分解成核函数上的分量,产生的新的64个通道对于关键信息的贡献肯定有多有少,如果我们给每个通道上的信号都增加一个权重,来代表该通道与关键信息的相关度的话,这个权重越大,则表示相关度越高,也就是我们越需要去注意的通道了。

    可参考 SENet模型结构。

    (3) 混合域

    了解前两种注意力域的设计思路后,简单对比一下。首先,空间域的注意力是忽略了通道域中的信息,将每个通道中的图片特征同等处理,这种做法会将空间域变换方法局限在原始图片特征提取阶段,应用在神经网络层其他层的可解释性不强。

    而通道域的注意力是对一个通道内的信息直接全局平均池化,而忽略每一个通道内的局部信息,这种做法其实也是比较暴力的行为。所以结合两种思路,就可以设计出混合域的注意力机制模型

     

     

    其他attention机制理解

     

     

     

    作者:言有三
    链接:https://www.zhihu.com/question/68482809/answer/770228379
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     

    2 Attention模型架构

    注意力机制的本质就是定位到感兴趣的信息,抑制无用信息,结果通常都是以概率图或者概率特征向量的形式展示,从原理上来说,主要分为空间注意力模型,通道注意力模型,空间和通道混合注意力模型三种,这里不区分soft和hard attention。

    2.1 空间注意力模型(spatial attention)

    不是图像中所有的区域对任务的贡献都是同样重要的,只有任务相关的区域才是需要关心的,比如分类任务的主体,空间注意力模型就是寻找网络中最重要的部位进行处理。

    我们在这里给大家介绍两个具有代表性的模型,第一个就是Google DeepMind提出的STN网络(Spatial Transformer Network[1])。它通过学习输入的形变,从而完成适合任务的预处理操作,是一种基于空间的Attention模型,网络结构如下:

    这里的Localization Net用于生成仿射变换系数,输入是C×H×W维的图像,输出是一个空间变换系数,它的大小根据要学习的变换类型而定,如果是仿射变换,则是一个6维向量。

    这样的一个网络要完成的效果如下图:

    即定位到目标的位置,然后进行旋转等操作,使得输入样本更加容易学习。这是一种一步调整的解决方案,当然还有很多迭代调整的方案,感兴趣可以去有三知识星球星球中阅读。

    相比于Spatial Transformer Networks 一步完成目标的定位和仿射变换调整,Dynamic Capacity Networks[2]则采用了两个子网络,分别是低性能的子网络(coarse model)和高性能的子网络(fine model)。低性能的子网络(coarse model)用于对全图进行处理,定位感兴趣区域,如下图中的操作fc。高性能的子网络(fine model)则对感兴趣区域进行精细化处理,如下图的操作ff。两者共同使用,可以获得更低的计算代价和更高的精度。

    由于在大部分情况下我们感兴趣的区域只是图像中的一小部分,因此空间注意力的本质就是定位目标并进行一些变换或者获取权重。

    2.2 通道注意力机制

    对于输入2维图像的CNN来说,一个维度是图像的尺度空间,即长宽,另一个维度就是通道,因此基于通道的Attention也是很常用的机制。

    SENet(Sequeeze and Excitation Net)[3]是2017届ImageNet分类比赛的冠军网络,本质上是一个基于通道的Attention模型,它通过建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道,原理图如下。

    在正常的卷积操作后分出了一个旁路分支,首先进行Squeeze操作(即图中Fsq(·)),它将空间维度进行特征压缩,即每个二维的特征图变成一个实数,相当于具有全局感受野的池化操作,特征通道数不变。

    然后是Excitation操作(即图中的Fex(·)),它通过参数w为每个特征通道生成权重,w被学习用来显式地建模特征通道间的相关性。在文章中,使用了一个2层bottleneck结构(先降维再升维)的全连接层+Sigmoid函数来实现。

    得到了每一个特征通道的权重之后,就将该权重应用于原来的每个特征通道,基于特定的任务,就可以学习到不同通道的重要性。

    将其机制应用于若干基准模型,在增加少量计算量的情况下,获得了更明显的性能提升。作为一种通用的设计思想,它可以被用于任何现有网络,具有较强的实践意义。而后SKNet[4]等方法将这样的通道加权的思想和Inception中的多分支网络结构进行结合,也实现了性能的提升。

    通道注意力机制的本质,在于建模了各个特征之间的重要性,对于不同的任务可以根据输入进行特征分配,简单而有效。

    2.3 空间和通道注意力机制的融合

    前述的Dynamic Capacity Network是从空间维度进行Attention,SENet是从通道维度进行Attention,自然也可以同时使用空间Attention和通道Attention机制。

    CBAM(Convolutional Block Attention Module)[5]是其中的代表性网络,结构如下:

    通道方向的Attention建模的是特征的重要性,结构如下:

    同时使用最大pooling和均值pooling算法,然后经过几个MLP层获得变换结果,最后分别应用于两个通道,使用sigmoid函数得到通道的attention结果。

    空间方向的Attention建模的是空间位置的重要性,结构如下:

    首先将通道本身进行降维,分别获取最大池化和均值池化结果,然后拼接成一个特征图,再使用一个卷积层进行学习。

    这两种机制,分别学习了通道的重要性和空间的重要性,还可以很容易地嵌入到任何已知的框架中。

    除此之外,还有很多的注意力机制相关的研究,比如残差注意力机制,多尺度注意力机制,递归注意力机制等。

    感兴趣的同学可以去我们知识星球中阅读相关的网络结构主题。

     

     

    作者:言有三
    链接:https://www.zhihu.com/question/68482809/answer/770228379
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     

    3 Attention机制典型应用场景

    从原理上来说,注意力机制在所有的计算机视觉任务中都能提升模型性能,但是有两类场景尤其受益

    3.1 细粒度分类

    关于细粒度分类的基础内容,可以参考。

    【图像分类】细粒度图像分类是什么,有什么方法,发展的怎么样

    我们知道细粒度分类任务中真正的难题在于如何定位到真正对任务有用的局部区域,如上示意图中的鸟的头部。Attention机制恰巧原理上非常合适,文[1],[6]中都使用了注意力机制,对模型的提升效果很明显。

    3.2 显著目标检测/缩略图生成/自动构图

    我们又回到了开头,没错,Attention的本质就是重要/显著区域定位,所以在目标检测领域是非常有用的。

    上图展示了几个显著目标检测的结果,可以看出对于有显著目标的图,概率图非常聚焦于目标主体,在网络中添加注意力机制模块,可以进一步提升这一类任务的模型。

    除此之外,在视频分析,看图说话等任务中也比较重要,相关内容将在有三AI知识星球中每日更新。

    [1] Jaderberg M, Simonyan K, Zisserman A. Spatial transformer networks[C]//Advances in neural information processing systems. 2015: 2017-2025.

    [2] Almahairi A, Ballas N, Cooijmans T, et al. Dynamic capacity networks[C]//International Conference on Machine Learning. 2016: 2549-2558.

    [3] Hu J, Shen L, Sun G. Squeeze-and-excitation networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7132-7141.

    [4] Li X, Wang W, Hu X, et al. Selective Kernel Networks[J]. 2019.

    [5] Woo S, Park J, Lee J Y, et al. Cbam: Convolutional block attention module[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 3-19.

    [6] Fu J, Zheng H, Mei T. Look closer to see better: Recurrent attention convolutional neural network for fine-grained image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4438-4446.

    总结

    注意力机制是一个原理简单而有效的机制,符合人眼的视觉感知原理,在实现上也容易嵌入当前的主流模型架构,是值得采用和学习的技术。

    展开全文
  • 融合元数据及attention机制的深度联合学习推荐.pdf
  • Attention机制介绍

    2021-03-10 16:05:55
    文章目录attention机制介绍(基于encoder-decoder框架)直观对比改进的依据(为什么能够做到改进)具体解释(soft attention)如何获得每个语义编码C如何获得每个输入的权重如何计算相似度attention机制本质(获得...

     

    attention机制介绍(基于encoder-decoder框架)

    直观对比

    1. 分心模型
      在这里插入图片描述

    此处公式不是很严谨,每个f进行的操作应该是各不相同的。或者可以理解为重载函数,因为输入的参数个数本就不同。例如当decoder为RNN时,若y1=f(C),则y2=f(g(C,y1)),其中g(C,y1)是当前时刻的隐藏层的值。
    image

    1. 注意力模型
      在这里插入图片描述
      在这里插入图片描述

    关键点:每一个输出的语义编码C都是不同的,每个输入对不同C的影响不同(i.e. 每个输入对不同的C有不同的权重)。

    改进的依据(为什么能够做到改进)

    以机器翻译为例,翻译’Tom chase Jerry’时,如果是分心模型,decoder使用的是同一个C,那么同一个输入对所有输出产生的影响是相同的。但是,输入’Tom’对输出’汤姆’的影响应该远大于其他输入,输入’Jerry’对输出’杰瑞’的影响应该远大于其他输入。因此,对不同输出,C应当不同。

    具体解释(soft attention)

    如何获得每个语义编码C

    在这里插入图片描述

    C1、C2和C3的运算方式也有多种,一种可能的方式是根据源语句子单词的注意力分配概率分布(权重)进行计算。
    image
    其中f2是encoder对输入单词进行的某种变换,例如使用RNN模型的得到的结果就是隐藏层的值。g就是为获得不同的向量C而对参数进行的某种计算,一般方式就是求和。
     

    图形表示每个C的计算过程

    在这里插入图片描述

    如何获得每个输入的权重

    以encoder和decoder都为RNN的模型为例。
    注意:要么在encoder的最后有个结束,要么在decoder的开头有个开始。一定有个过渡的过程。

    1. 分心模型
      在这里插入图片描述

    2. 加入注意力机制
      (1)我自己的理解(前一个输出和前一个隐藏层共同决定当前隐藏层,当前隐藏层再和attention value产生中间向量,最后得到当前输出结果)
      下图方式是使用Ht和hi计算得ati,原始方式是使用Ht-1和hi计算得ati。
      F是进行的某种运算(某种函数),得到的是该输入在当前时刻对应的注意力分数。

    第一步(输出Y1)
    在这里插入图片描述

    后续是相同操作
    在这里插入图片描述

    (2)另一种理解(前一个输出、前一个隐藏层和attention value共同决定当前隐藏层,并由隐藏层直接获得当前输出结果)
    在这里插入图片描述

    如何计算相似度

    1)点乘:最简单的方法,  s ( q , k ) = q T k s(q, k) = q^Tk s(q,k)=qTk

    2)矩阵相乘:  s ( q , k ) = q T W k s(q, k) = q^TWk s(q,k)=qTWk

    3)cos相似度:  s ( q , k ) = q T k ∣ ∣ q ∣ ∣ ⋅ ∣ ∣ k ∣ ∣ s(q, k) = \frac{q^Tk} {||q||·||k||} s(q,k)=qkqTk

    4)串联方式:把q和k拼接起来,  s ( q , k ) = W [ q ; k ] s(q, k) = W[q; k] s(q,k)=W[q;k]

    5)用多层感知机也可以:  s ( q , k ) = v a T t a n h ( W q + U k ) s(q, k) = v^T_atanh(Wq + Uk) s(q,k)=vaTtanh(Wq+Uk)

    attention机制本质(获得attention value过程的本质)

    将attention机制从encoder-decoder框架中剥离。

    大概过程抽象图

    image
    Query就是target里的某个元素(对应RNN的Hi),source的构成元素是<key, value>对(对应RNN的<hi, hi>,在上面提到的RNN中,key的值就是value的值)。

    计算query和所有key的相似性(对应RNN的F(hi, Hj)),得到key对应value的权重(对应RNN的aij),再对value进行加权求和,得到attention value(对应RNN的Cj)。

    image

    具体计算步骤抽象图

    image

    阶段1:计算query和每个key的相似性或者相关性(或者就是其他某种函数运算的结果)
    阶段2:对上一步计算的结果进行归一化(为了变成概率分布的形式)
    阶段3:计算每个key对应value的加权和(或者使用其他计算也可以),即attention value

    attention的种类

    从计算区域、所用信息、结构层次和模型等方面对Attention的形式进行归类。

    1. 计算区域

    根据Attention的计算区域,可以分成以下几种:

    (1)Soft Attention(Global Attention),这是比较常见的Attention方式,对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式(也可以叫Global Attention)。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。

    (2)Hard Attention,这种方式是直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。(或者使用gumbel softmax之类的)

    (3)Local Attention,这种方式其实是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。

    2. 所用信息

    假设我们要对一段原文计算Attention,这里原文指的是我们要做attention的文本,那么所用信息包括内部信息和外部信息,内部信息指的是原文本身的信息,而外部信息指的是除原文以外的额外信息。

    (1)General Attention,这种方式利用到了外部信息,常用于需要构建两段文本关系的任务,query一般包含了额外信息,根据外部query对原文进行对齐。比如在阅读理解任务中,需要构建问题和文章的关联,假设现在baseline是,对问题计算出一个问题向量q,把这个q和所有的文章词向量拼接起来,输入到LSTM中进行建模。那么在这个模型中,文章所有词向量共享同一个问题向量,现在我们想让文章每一步的词向量都有一个不同的问题向量,也就是,在每一步使用文章在该步下的词向量对问题来算attention,这里问题属于原文,文章词向量就属于外部信息。

    (2)Local Attention,这种方式只使用内部信息,key和value以及query只和输入原文有关,在self attention中,key、value、query来源相同。既然没有外部信息,那么在原文中的每个词可以跟该句子中的所有词进行Attention计算,相当于寻找原文内部的关系。还是举阅读理解任务的例子,上面的baseline中提到,对问题计算出一个向量q,那么这里也可以用上attention,只用问题自身的信息去做attention,而不引入文章信息。

    3. 结构层次

    结构方面根据是否划分层次关系,分为单层attention,多层attention和多头attention:

    (1)单层Attention,这是比较普遍的做法,用一个query对一段原文进行一次attention。

    (2)多层Attention,一般用于文本具有层次关系的模型,假设我们把一个document划分成多个句子,在第一层,我们分别对每个句子使用attention计算出一个句向量(也就是单层attention);在第二层,我们对所有句向量再做attention计算出一个文档向量(也是一个单层attention),最后再用这个文档向量去做任务。

    (3)多头Attention,这是Attention is All You Need中提到的multi-head attention,用到了多个query对一段原文进行了多次attention,每个query都关注到原文的不同部分,相当于重复做多次单层attention:在这里插入图片描述

    最后再把这些结果拼接起来:在这里插入图片描述

    4. 模型方面

    从模型上看,Attention一般用在CNN和LSTM上,也可以直接进行纯Attention计算。

    (1)CNN+Attention
    CNN的卷积操作可以提取重要特征,我觉得这也算是Attention的思想,但是CNN的卷积感受视野是局部的,需要通过叠加多层卷积区去扩大视野。另外,Max Pooling直接提取数值最大的特征,也像是hard attention的思想,直接选中某个特征。
    CNN上加Attention可以加在这几方面:
    a. 在卷积操作前做attention,比如Attention-Based BCNN-1,这个任务是文本蕴含任务需要处理两段文本,同时对两段输入的序列向量进行attention,计算出特征向量,再拼接到原始向量中,作为卷积层的输入。
    b. 在卷积操作后做attention,比如Attention-Based BCNN-2,对两段文本的卷积层的输出做attention,作为pooling层的输入。
    c. 在pooling层做attention,代替max pooling。比如Attention pooling,首先我们用LSTM学到一个比较好的句向量,作为query,然后用CNN先学习到一个特征矩阵作为key,再用query对key产生权重,进行attention,得到最后的句向量。

    (2)LSTM+Attention
    LSTM内部有Gate机制,其中input gate选择哪些当前信息进行输入,forget gate选择遗忘哪些过去信息,我觉得这算是一定程度的Attention了,而且号称可以解决长期依赖问题,实际上LSTM需要一步一步去捕捉序列信息,在长文本上的表现是会随着step增加而慢慢衰减,难以保留全部的有用信息。
    LSTM通常需要得到一个向量,再去做任务,常用方式有:
    a. 直接使用最后的hidden state(可能会损失一定的前文信息,难以表达全文)
    b. 对所有step下的hidden state进行等权平均(对所有step一视同仁)。
    c. Attention机制,对所有step的hidden state进行加权,把注意力集中到整段文本中比较重要的hidden state信息。性能比前面两种要好一点,而方便可视化观察哪些step是重要的,但是要小心过拟合,而且也增加了计算量。

    (3)纯Attention
    Attention is all you need,没有用到CNN/RNN,乍一听也是一股清流了,但是仔细一看,本质上还是一堆向量去计算attention。

    self attention

    概念

    在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的。比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素Query和Source中的所有元素之间。

    而Self Attention,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。

    使用self attention的好处

    比卷积网络和循环网络更好地处理长距离序列,相比全连接模型,可以处理变长的信息序列。

    处理长距离序列

    卷积网络和循环网络虽然通过改进也能够处理长序列(例如LSTM),但是距离过长也不能很好处理(梯度消失等等),并没有self attention强大。
    self attention可以通过计算query和整个序列中key的相关性确定权重,从而很好地体现上下文关系。
    例如下图的句子中,its的指代对象law的权重很大。
    在这里插入图片描述

    处理变长序列

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

    image

    以上为全连接模型和自注意力模型。实线表示可学习的权重,虚线表示动态生成的权重。

    由上图可以看出,全连接网络虽然是一种非常直接的建模远距离依赖的模型, 但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(self-attention model)。由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列。

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

    具体计算流程

    第一步:计算每个元素的Q、K、V
    其中 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XCzqROS9-1615363527107)(en-resource://database/591:1)]是我们模型训练过程学习到的合适的参数。
    image
    image

    第二步:计算query和key的相似度
    attention中的query来自source外部,source和target不同。
    self attention的query、key和value是相同来源。
    image

    第三步:为了防止结果过大,要除以一个尺度标准 d k \sqrt d_k d k,其中 d k d_k dk为一个query和key向量的维度。然后进行归一化。
    image

    第四步:计算value的加权和
    image

    二-四步公式总结
    image

    最后的z就是结果(如果没有其他multi-head等后续步骤的话)。

    最后

    文章有问题欢迎提出。

    参考文章

    nlp中的Attention注意力机制+Transformer详解

    Attention机制详解(二)——Self-Attention与Transformer

    动画图解Attention机制,让你一看就明白

    一文看懂 Attention(本质原理+3大优点+5大类型)

    展开全文
  • CV中的Attention机制总结

    千次阅读 2022-04-06 10:05:26
    SENet注意力机制的理解与PyTorch实现什么是注意力机制 什么是注意力机制 注意力机制是深度学习常用的一个小技巧,它有多种多样的实现形式,尽管实现方式多样,但是每一种注意力机制的核心都是类似的,就是注意力。 ...
  • Attention机制详解

    千次阅读 2020-02-23 16:33:01
    一、Attention 原理 在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译...
  • Attention 注意力焦点更多专门获取某一区域的注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息 Encoder-Decoder框架:在<Source,Target>结构中,encoder通过对source的非线性变化转变成...
  • 结合李宏毅老师机器学习2021——Self-Attention课程和网上查阅的资料,总结一下对Attention机制的理解 Attention机制就是权重分布 Attention机制的核心就是,决定整段输入的哪个部分需要更加关注。 Attention机制...
  • 本文介绍Attention机制,其经典使用是在NLP中搭配RNN(一般为LSTM)做编码解码器(Seq2Seq),用于给编码过程中每一步的状态分配权重,然后加权求和得到解码过程中每一步解码时的状态向量,参与计算,得到本步的输出...
  • 一文详解Attention机制

    千次阅读 2020-07-27 21:13:27
    Attention机制 我们知道Seq2Seq模型有一个缺点就是句子太长的话encoder会遗忘,那么decoder接受到的句子特征也就不完全,我们看一下下面这个图,纵轴BLUE是机器翻译的指标,横轴是句子的单词量,我们可以看出用了...
  • attention 机制

    2019-04-06 16:58:29
    attention 机制motivationattention机制的形式attention的种类attention的应用 motivation attention 机制最早是在图像领域提出来的,它受人类在观察事物时会重点关注某一部分而不是全部的启发。attention 机制最早...
  • 目录1 attention机制原理2 attention类型2.1 依据attention是否参数化可导分类2.1.1 Soft attention2.1.2 Hard attention2.2 依据输入是否全部用来计算attention向量分类2.2.1 Global attention2.2.2 Local ...
  • attention机制

    2018-06-18 14:11:51
    Attention神经科学和计算神经科学中的neural processes已经广泛研究了注意力机制[1,2]。视觉注意力机制是一个特别值得研究的方向:许多动物专注于视觉输入的特定部分,去计算适当的反映。这个原理对神经计算有很大的...
  • 作者:张俊林 ...来源:知乎 著作权归作者所有。...所以,了解注意力机制的工作原理对于关注深度学习技术发展的技术人员来说有很大的必要。 人类的视觉注意力 从注意力模型的命名方式看,很明显其借鉴了人.
  • self-attention机制

    千次阅读 2021-08-28 04:46:59
    传统的CNN得弱点在于一般...self-attention就是一种可以考虑全局信息的机制。相关论文为: attention is all you need self-attention可以和CNN和FC结合使用。 self-attention计算方法如下: 计算a1a^1a1与其他输入的相
  • Attention机制与Self-Attention机制的区别

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

    千次阅读 2020-09-10 10:03:44
    Attention机制 文章目录Attention机制一、概述二、发展历史三、Seq2Seq模型四、Attention模型五、对齐函数六、自注意力Self-Attention6.1 Transformer中的Self-Attention6.2 Multi-Head Attention七、其它的注意力...
  • attention 机制整理

    2020-04-28 21:39:21
    在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是...没有区分,没有辨识度,下图二中我们引入了attention机制,每个输出的词y受输入X1,X2,X...
  • Transformer详解(二):Attention机制

    千次阅读 2019-12-04 15:01:38
    1.Encoder-Decoder中的attention机制 上一篇文章最后,在Encoder-Decoder框架中,输入数据的全部信息被保存在了C。而这个C很容易受到输入句子长度的影响。当句子过长时,C就有可能存不下这些信息,导致模型后续的...
  • Attention机制总结

    2020-09-17 19:21:44
    关于attention机制的总结 目录Attention机制总结Seq2Seq模型RNN模型分类[^1]:Attention的提出:解决了什么问题 Attention机制总结 Seq2Seq模型 Seq2Seq模型的输入和输出是不等长的序列,模型由一个encoder和一个...
  • 注意力机制中较为重要的是self-attention机制,直接做了个小白能看懂的总结,也便于自己复习。
  • AttentionModel的使用,利用Keras框架实现的,具体代码,以后会在GitHub上公布
  • 注意力机制是在每个时刻解码时,基于当前时刻解码器的隐状态、输入或输出等信息,计算其对输入序列各位置隐状态的注意力(分数)并加权生成context向量用于当前时刻解码。引入注意力机制,使得不同时刻的解码能够...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,599
精华内容 12,639
关键字:

attention机制

友情链接: permutations.zip