首页 > 编程知识 正文

交叉注意力机制,自注意力机制和注意力机制

时间:2023-05-05 23:58:17 阅读:160139 作者:1519

作者: lyjr

链接: https://www.zhi Hu.com/question/68482809/answer/26463289

来源:知乎

版权归作者所有。 商业转载请联系作者取得许可。 非商业转载请注明出处。

注意力模型近年来广泛应用于深度学习的各个领域,在图像处理、语音识别、自然语言处理等多种类型的任务中,很容易遇到注意力模型的身影。 因此,对于关注深度学习技术发展的技术人员来说,理解注意力的结构是非常必要的。

人类的视觉注意力

从注意力模型的命名方式来看,显然借鉴了人类的注意力机制,所以首先简要介绍人类视觉的选择性注意力机制。

图1人类视觉注意事项

注意力机制是人类视觉特有的大脑信号处理机制。 人类视觉通过快速扫描全局图像,获得需要关注的目标区域,即所谓的注意焦点,然后在该区域投入更多的注意资源,获得更多需要关注的目标详细信息,抑制其他无用信息。

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

图1是当人们看到图像时,如何有效地分配有限的注意资源的形象化图。 其中,红色的区域表示视觉系统更关注的目标,相对于图1所示的场景,人类显然受到了更多的关注。 是文本的标题和文章的第一句等。

深度学习中的注意力机制本质上与人类选择性视觉注意力机制相似,中心目标也是从众多信息中选择对当前任务目标更重要的信息。

Encoder-Decoder框架

要理解深度学习中的注意力模型,首先要谈Encoder-Decoder框架。 目前,大多数注意力模型都在Encoder-Decoder框架下,当然,需要注意的是,实际上注意力模型可以看作是共同的思想,本身并不依赖于特定的框架。

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

图2抽象文本处理领域的编码解码器框架

可以直观地理解,文本处理领域的Encoder-Decoder框架可以被认为是适合于从一个句子(或章节)产生另一个句子(或章节)的处理的通用处理模型。 关于句子对Source,Target,以给出输入句子Source为目标,期待通过Encoder-Decoder框架生成目标句子Target。 Source和Target可以是同一种语言,也可以是两种不同的语言。 Source和Target由各自的单词串构成。

Encoder正如其名,对输入句子Source进行编码,将输入句子通过非线性变换变换为中间意思表现c

对译码器Decoder来说,其任务是通过句子Source的中间意义来表示c和以前生成的历史信息

生成在I时间点生成的单词

当各个yi依次生成时,整个系统看起来像是从输入句子Source中生成了目标句子Target。 如果Source是中文句子,Target是英语句子,这就是解决机器翻译问题的Encoder-Decoder框架。如果Source是文章,Target是摘要的一些说明文,这是文本摘要的Encoder-Decoder。 如果Source是问句,而Target是答案,则这是答疑系统或交互式自动机的Encoder-Decoder框架。 由此可见,在文档处理领域,Encoder-Decoder的应用领域相当广泛。

Encoder-Decoder框架不仅应用于文本领域,而且经常应用于语音识别、图像处理等领域。 例如,关于语音识别,图2所示的框架完全符合,不同之处无非是Encoder部分的输入为语音流,输出为对应的文本信息; 对于“图像说明”任务来说,Encoder部分的输入是图像,Decoder的输出是能够说明图像含义和内容的描述语。 一般来说,文本处理和语音识别的Encoder部分通常使用RNN模型,图像处理的Encoder使用CNN模型。

Attention模型

本节首先以机器翻译为例说明了最常用的Soft Attention模型的基本原理,然后抛弃Encoder-Decoder框架抽象注意力机制的本质思想,提出了最近广泛使用的Self Attention的基本思路

Soft Attention模型(就理解为soft max 的吧!)

图2所示的加密解码器框架没有表示“注意”

力模型”的,所以可以把它看作是注意力不集中的分心模型。为什么说它注意力不集中呢?请观察下目标句子Target中每个单词的生成过程如下:

    

    其中f是Decoder的非线性变换函数。从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入句子Source的语义编码C都是一样的,没有任何区别。

    而语义编码C是由句子Source的每个单词经过Encoder 编码产生的,这意味着不论是生成哪个单词,y1,y2还是y3,其实句子Source中任意单词对生成某个目标单词yi来说影响力都是相同的,这是为何说这个模型没有体现出注意力的缘由。这类似于人类看到眼前的画面,但是眼中却没有注意焦点一样。

    如果拿机器翻译来解释这个分心模型的Encoder-Decoder框架更好理解,比如输入的是英文句子:Tom chase 高挑的橘子,Encoder-Decoder框架逐步生成中文单词:“pydmj”,“追逐”,“杰瑞”。

    在翻译“杰瑞”这个中文单词的时候,分心模型里面的每个英文单词对于翻译目标单词“杰瑞”贡献是相同的,很明显这里不太合理,显然“高挑的橘子”对于翻译成“杰瑞”更重要,但是分心模型是无法体现这一点的,这就是为何说它没有引入注意力的原因。

    没有引入注意力的模型在输入句子比较短的时候问题不大,但是如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失很多细节信息,这也是为何要引入注意力模型的重要原因。

    上面的例子中,如果引入Attention模型的话,应该在翻译“杰瑞”的时候,体现出英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:

    (Tom,0.3)(Chase,0.2) (高挑的橘子,0.5)

    每个英文单词的概率代表了翻译当前单词“杰瑞”时,注意力分配模型分配给不同英文单词的注意力大小。这对于正确翻译目标语单词肯定是有帮助的,因为引入了新的信息。

    同理,目标句子中的每个单词都应该学会其对应的源语句子中单词的注意力分配概率信息。这意味着在生成每个单词yi的时候,原先都是相同的中间语义表示C会被替换成根据当前生成单词而不断变化的Ci。理解Attention模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。增加了注意力模型的Encoder-Decoder框架理解起来如图3所示。

图3 引入注意力模型的Encoder-Decoder框架


即生成目标句子单词的过程成了下面的形式:

而每个Ci可能对应着不同的源语句子单词的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下:


    

    其中,f2函数代表Encoder对输入英文单词的某种变换函数,比如如果Encoder是用的RNN模型的话,这个f2函数的结果往往是某个时刻输入xi后隐层节点的状态值;g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般的做法中,g函数就是对构成元素加权求和,即下列公式:

    

    其中,Lx代表输入句子Source的长度,aij代表在Target输出第i个单词时Source输入句子中第j个单词的注意力分配系数,而hj则是Source输入句子中第j个单词的语义编码。假设下标i就是上面例子所说的“ pydmj” ,那么Lx就是3,h1=f(“Tom”),h2=f(“Chase”),h3=f(“高挑的橘子”)分别是输入句子每个单词的语义编码,对应的注意力模型权值则分别是0.6,0.2,0.2,所以g函数本质上就是个加权求和函数。如果形象表示的话,翻译中文单词“pydmj”的时候,数学公式对应的中间语义表示Ci的形成过程类似图4。

    

图4 Attention的形成过程

    这里还有一个问题:生成目标句子某个单词,比如“pydmj”的时候,如何知道Attention模型所需要的输入句子单词注意力分配概率分布值呢?就是说“pydmj”对应的输入句子Source中各个单词的概率分布:(Tom,0.6)(Chase,0.2) (高挑的橘子,0.2) 是如何得到的呢?

    为了便于说明,我们假设对图2的非Attention模型的Encoder-Decoder框架进行细化,Encoder采用RNN模型,Decoder也采用RNN模型,这是比较常见的一种模型配置,则图2的框架转换为图5。

    


图5 RNN作为具体模型的Encoder-Decoder框架

    那么用图6可以较为便捷地说明注意力分配概率分布值的通用计算过程。

    

图6 注意力分配概率计算

    对于采用RNN的Decoder来说,在时刻i,如果要生成yi单词,我们是可以知道Target在生成Yi之前的时刻i-1时,隐层节点i-1时刻的输出值Hi-1的,而我们的目的是要计算生成Yi时输入句子中的单词“Tom”、“Chase”、“高挑的橘子”对Yi来说的注意力分配概率分布,那么可以用Target输出句子i-1时刻的隐层节点状态Hi-1去一一和输入句子Source中每个单词对应的RNN隐层节点状态hj进行对比,即通过函数F(hj,Hi-1)来获得目标单词yi和每个输入单词对应的对齐可能性,这个F函数在不同论文里可能会采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的注意力分配概率分布数值。

    绝大多数Attention模型都是采取上述的计算框架来计算注意力分配概率分布信息,区别只是在F的定义上可能有所不同。图7可视化地展示了在英语-德语翻译系统中加入Attention机制后,Source和Target两个句子每个单词对应的注意力分配概率分布。

    

图7 英语-德语翻译的注意力概率分布

接下一篇

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。