1.attention
与人类学习相同,机器学习过程中我们也希望能有侧重点,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。所以就有了Attention的出现。
2.Encoder-Decoder框架
在学习attention模型之前,我们先回忆encoder-decoder框架。

如果我们把中间语义编码C换成根据当前输出来调整成加入注意力模型的变化的Ci,那么增加了注意力模型的Encoder-Decoder框架如下:

3.Attention机制的本质思想
下面我们来看下注意力模型的Encoder-Decoder框架Ci具体是什么。
Attention函数的本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射。

其计算方式是先计算Query和各个Key的相似性或者相关性(这里用点乘),得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数

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

4.例子
我们以李宏毅深度学习授课资料:Attention-based Model所讲述的机器翻译为例。
将‘机器学习’翻译为‘machine learning’

attention其实就是一个当前的输入与输出的匹配度,即为h1和z0的匹配度。
h1为当前时刻RNN的隐层输出向量,而不是原始输入的词向量,z0初始化向量,如rnn中的初始记忆。
第一步:求z与h的相似性得到a

第二步:softmax归一化处理得到概率值a^

第三步:对h加权求和得c


以上便是求attention得3个过程。
那么再算出了co之后,我们就把这个向量作为rnn的输入(如果我们decoder用的是RNN的话),然后第一个时间点的输出的编码z1由co和初始状态z0共同决定。

将z1替代z0做下一步计算。再和每一个输入的encoder的vector计算匹配度,然后softmax,计算向量加权,作为第二时刻的输入……如此循环直至结束。


5.Self-Attention
Self-Attention是Attention的特殊形式。自注意模型其实就是我们前面的query、key和value是相等的。在序列内部做Attention,寻找序列内部的联系。
例如输入一个句子,那么里面的每个词都要和该句子中的所有词进行attention计算。目的是学习句子内部的词依赖关系,捕获句子的内部结构。
6.Self-Attention GAN中的Self-Attention模型

在这个模型中用的就是一个自监督模块关注全局信息,它的Q、K、V都是相同的是convolution feture map,再计算attention
第一步:求相似度再归一化

第二步:注意层输出

网友评论