「自然语言处理(NLP)」良心推荐:一文了解注意力机制(Attention)

最后都变了- 提交于 2021-02-20 16:47:43

喜欢我们,点击上方AINLPer,关注一下,极品干货即刻送达!


本文主要参考博 客: https://blog.csdn.net/intflojx/article/details/85338778

引言

    相信很多小伙伴在看论文的时候,会时不时的遇到注意力机制(Attention)这个关键词。其实注意力模型最近几年在深度学习各个领域被广泛使用,无论是在图像处理、语音识别还是自然语言处理中,都很容易遇到注意力模型的身影。它其实是深度学习技术中最值得关注与深入了解的核心技术之一。了解注意力机制的工作原理对于关注深度学习技术发展的技术人员来说有很大的必要。

本文概要

1

什么是注意力机制(Attention)


2

Encoder-Decoder框架


3

Attention注意力机制


4

Attention小结

正文开始

1
什么是注意力机制(Attention)
    深度学习中的注意力机制借鉴了人类的注意力思维方式。 我们首先人类的视觉注意力机制介绍开始。 举个例子: 比如当你看到一篇论文的时候,你的眼睛会快速的扫描论文第一页,接着首先将注意力集中到论文的标题(如果论文的第一页有图片,你也会去关注第一页中的图片是什么),然后你就会关注论文的摘要是什么,对于摘要区域,你会渐渐投入到更多地注意力,然后读懂摘要,进而了解文章的大概内容。 这其实是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制。 人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。

    上图就是介绍注意力机制最经典的示例图,其中红色区域表明视觉系统更关注的目标。深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。


2
Encoder-Decoder框架

    要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,因为目前大多数注意力模型附着在Encoder-Decoder框架下,当然,其实注意力模型可以看作一种通用的思想,本身并不依赖于特定框架,这点需要注意    

    Encoder-Decoder框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。下图是是文本处理领域里常用的Encoder-Decoder框架最抽象的一种表示。

    我们选取Encoder和Decoder都是RNN。在RNN中,当前时刻隐藏层状态是由上一时刻的隐藏层状态和当前时刻的输入决定的,如公式(1)所示。

 (1)

    在编码阶段,获得了各个时刻的隐藏层状态后,我们把这些隐藏层的状态进行汇总,生成最后的语义编码向量C,如公式(2)所示,其中q表示某种非线性神经网络,在这里表示多层RNN。

 (2)

    一种简单的方法是将最后的隐藏层状态作为语义编码向量C,即公式(3)所示。

 (3)

    在解码阶段,我们要根据给定的语义向量C和之前已经生成的输出序列  来预测下一个输出的单词,即公式(4)所示。

 (4)

    公式(4)可以简写成公式(5)。

 (5)

    而在RNN中,公式(5)可以表示为公式(6)。

 (6)

    公式(6)中,表示Decoder中RNN神经元的隐藏层状态,表示前一时刻的输出,C代表的是语义向量。而g则是一个非线性的多层神经网络,可以输出 的概率。g一般情况下是多层RNN后接softmax层。

    Encoder-Decoder框架虽然非常经典,但是局限性也非常大。主要两大局限性

    一、最大的局限性就在于编码器和解码器之间的唯一联系就是一个固定长度的语义向量C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量中。这样做存在两个弊端,一是语义向量C可能无法完全表示整个序列的信息;

    二、先输入到网络的内容携带的信息会被后输入的信息覆盖掉,输入序列越长,这个现象就越严重。这两个弊端使得在解码的时候解码器一开始就没有获得输入序列足够多的信息, 那么解码的准确度自然也就不高了。


3
Attention注意力机制

    为了解决Encoder-Decoder框架中的两个弊端,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中提出使用Attention机制。在深度学习领域,该论文是非常有影响力且具有开创性的,文中提出的Attention机制不仅应用于机器翻译中,还被推广到了其他应用领域。因此,该论文提出的Attention机制是非常值得深入学习。

编码器(Encoder)

    上图展示了Bahdanau等人提出的机器翻译模型,在该模型中编码器就比较普通了,只是用了双向循环神经网络。在前向RNN中,数据是按顺序输入的,因此第j个隐藏层状态只能携带第j个单词本身以及之前的一些信息。在逆向RNN中,数据是逆序输入的,则包含第j个单词及之后的信息。如果把这两个隐藏层状态结合起来,就包含了第j个输入的前后信息。

解码器(Decoder)

    上图中展示的机器翻译模型中,编码过程相当简单,我们主要看一下解码的过程。

    第一步,计算各个编码器隐藏层状态与解码器隐藏层状态之间的相关程度,并进行softmax归一化操作得到每个隐藏层向量的权重  ,计算公式如下:

其中就表示第i个输出前一个隐藏层状态与第j个输入隐层向量之间的相关性,可以通过一个MLP神经网络进行计算,在上图中没有显示出来。得到之后,将其传入到softmax函数就可以获得归一化的权重值 。

    第二步,对进行加权求和得到此次解码所对应的输入序列(source)  的编码向量 ,计算公式如下:

    第三步,有了之后,我们根据编码向量进行解码即可,先计算解码器时刻的隐藏层状态再计算解码器时刻的输出 ,计算公式如下:

    这里的Attention机制采用的是Soft Attention,也就是对所有的编码器隐藏层状态向量都分配权重,可以将其理解为对其模型,作用是匹配输出序列(target)与source之间的对应关系。


4
Attention小结

    Attention机制最重要的步骤是如何在每一时刻产生不同的语言编码向量 ,表示接下来输出的时候要重点关注输入序列中的哪些部分,然后根据关注的区域来产生下一个输出。模型可以形象化的表示为下图所示。

Encoder-Decoder+Attention机制

    相比于原始的Encoder-Decoder模型,加入Attention机制后最大的区别就是它不在要求编码器将所有输入信息都编码进一个固定长度的向量之中。而是,编码器需要将输入编码成一个向量的序列,在解码的时候,每一步都会选择性的从向量序列中挑选一个子集进行进一步处理。这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。而且这种方法在翻译任务中取得了非常不错的成果。


Attention: 欢迎关注 AINLPer 微信公众号,了解更多最新的关于深度学习、自然语言处理相关的知识。

长按识别下方二维码,关注我们吧(づ ̄3 ̄)❤~

来都来了,点个【好看】再走吧~~~

本文分享自微信公众号 - AINLPer(gh_895a8687a10f)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!