文章目录

  • 注意力机制模型
  • encoder-decoder框架
  • 不加注意力机制的问题
  • 如何计算注意力概率分布值
  • attention机制的本质思想
  • self_attention机制


本文部分内容参考于张俊林的博客,每一次不输出的学习,归根到底就是一场偷懒式的学习,切记切记。

注意力机制模型

encoder-decoder框架

注意力权重计算方法_结点


一般来说该模型适合于使用一个句子来生成另一个句子,适用于机器翻译等自然语言处理模型。

这里的source=注意力权重计算方法_机器翻译_02,而target=注意力权重计算方法_结点_03

encoder:对输入的句子进行编码,将句子通过非线性变换转为中间语义C,可以抽象为以下公式:

注意力权重计算方法_注意力权重计算方法_04

decoder:解码器是对中间语义C和之前已经生成的历史信息来生成当前时刻需要的单词:例如针对注意力权重计算方法_机器翻译_05,那么历史信息就是注意力权重计算方法_结点_06

注意力权重计算方法_注意力权重计算方法_07

现在将输出注意力权重计算方法_结点_08抽象为输出的单词数量有i个,那么整个系统可以根据source来生成target,source是中文,那么target就是英文。这是解决机器翻译的框架。

不加注意力机制的问题

通过观察可以看出来:

注意力权重计算方法_结点_09

由于C的产生是通过encoder编码产生的,它们是一样的,没有任何区别。这便意味着输入(source)中的单词对于输出yi的作用是一样的,这就像是人的眼睛可以看到一幅画面,但是却没有焦点。

举一个例子:

假如我们的source是[Tom chase Jerry],生成的中文单词是[“汤姆”,“追逐”,“杰瑞”],那么在翻译Tom单词的时候,chase和jerry对于‘汤姆’的影响力应该很小。如下所示,目标中的单词应该需要学会根据source单词的注意力分配概率信息,这意味着生成的每个单词yi的时候,原先句子中的C会替换为当前的Ci

注意力权重计算方法_注意力权重计算方法_10


即有:

注意力权重计算方法_机器翻译_11

对应的每一个ci:

注意力权重计算方法_ci_12

注意力权重计算方法_注意力权重计算方法_13

如果给定的encode框架是RNN框架,这里的f2其实就是输入xi结点之后隐层结点的状态值。

注意力权重计算方法_注意力权重计算方法_14

其中注意力权重计算方法_结点_15代表的是输入单词中第j个单词的语义编码。注意力权重计算方法_ci_16代表的是输入句子source的长度。

注意力权重计算方法_机器翻译_17代表的是输出为第注意力权重计算方法_ci_18个单词的时候,对应的source中,针对source中第注意力权重计算方法_注意力权重计算方法_19个单词分配的概率值,例如输出的注意力权重计算方法_机器翻译_20,对应的单词为汤姆,那么注意力权重计算方法_注意力权重计算方法_21,如果注意力权重计算方法_结点_22,输出的为追逐,那么注意力权重计算方法_注意力权重计算方法_23

如何计算注意力概率分布值

注意力权重计算方法_ci_24


如果了解过RNN网络结构的朋友们知道,当前时刻的输出和当前时刻的输入和上一个结点的输出都有关系,这里的注意力权重计算方法_ci_25就是前一个隐藏结点的输出值。当前时刻yi输出是由前一时刻的注意力权重计算方法_ci_25和当前时刻的注意力权重计算方法_结点_27共同决定的。

1.计算source中的每一个注意力权重计算方法_注意力权重计算方法_28注意力权重计算方法_ci_25的关联性即可,常用的方法是求内积,当然在不同论文里可能会采取不同的方法。称这里计算关联性的函数为注意力权重计算方法_ci_30.

2.F输出之后经过softmax归一化之后,就可以得到概率分布的数值。

注意力权重计算方法_机器翻译_31

是target中的某个query。

source(key,value)。

计算query和每个key的相似度或者相关性,得到每个key值对应value的权重洗漱,之后对value加权求和,得到最终的attention的数值。

attention机制的本质思想

注意力权重计算方法_结点_32


如上图所示,将attention机制从encoder-decoder编码中剥离,那么它的本质如下所示。

我们将source想象成:包含一系列的<key,value>键值对组成 ,此时给定了target元素中某个元素query,例如汤姆,通过计算key和target的相似度,然后将得到key对于value的权重系数,然后权重系数和value进行加权求和的操作。

注意力权重计算方法_机器翻译_33


注意,Lx代表的是source的长度。机器翻译的例子中:key和value指的是同一个东西,即输入句子中每个单词的语义编码,我们将以上表述的过程再次抽象一下,可以明白注意力机制的大致流程。

注意力权重计算方法_ci_34


阶段1:

计算某一个query和所有Key的相似度,从而可以得到针对不同的Key值的权重系数。

常用的权重系数的计算公式如下:第一个是用的最多的。

注意力权重计算方法_注意力权重计算方法_35


阶段2:

由于得到的系数可能处于不同的范围之内,所以需要对其进行归一化的处理,使得它们的取值都落在[0,1]之间,使用的是softmax函数,最终它们的概率值相加之后的结果为1。

为什么使用softmax函数:可以更加突出重要元素的权重,记得之前看过一篇文章,通过softmax归一化处理之后,使得系数大的占比更大,而系数小的占比很小。

公式如下:

注意力权重计算方法_机器翻译_36

其中注意力权重计算方法_结点_37是句子的长度.

阶段3:

这里value值对应的权重系数就是注意力权重计算方法_ci_38,将每一个权重系数和对应的注意力权重计算方法_机器翻译_39相乘再相加,就可以得到最终的注意力数值。

self_attention机制

这里大概的提一下self_attention,它又被称为(intra-attention),大部分的机器翻译模型都采用的该模型。文章中指出,self_attention机制可任意捕获一个句子中单词之间的句法特别或者语义特征,因此它更有助于捕获句子中长距离的相互依赖特征。

使用RNN或者LSTM,需要依照序列的次数进行计算,如果两个单词相距比较远,那么有效捕获的可能性比较小。这就是self_attention被广泛使用的主要原因。

一般的attention:source和target是不一样的,它计算的是target的元素query和source的元素key的关联度的计算。

source attention:它计算的是source元素之间关联度或者是target元素之间的相似度

如下图所示:计算的是source之间的,也可以理解成source=target。

注意力权重计算方法_结点_40


以上是对所学知识的一个总结,下一篇将会记录self_attention(李宏毅教授的笔记)。