美文网首页
Attention机制

Attention机制

作者: 巴拉巴拉_9515 | 来源:发表于2022-10-22 16:30 被阅读0次

    1、引入

    英语长句子优先找出主谓宾,人像油画会先看眼睛,...。人在观察事物的时候会抓住重点,所以想让机器也具备这种“抓住重点”的能力。

    最早用于机器翻译场景。使用固定大小(fixed-size)的representation去概括非常长的句子的所有语言义细节是非常困难的。
    对于一个(RNN\LSTM...)深层网络模型,如何让它知道什么是重点?什么没那么重要?抓住重点可以降低困难。

    那么如何实现“抓住重点”的目的呢?

    2、什么是Attention?

    Transformer中关于Attention的解释,写成公式大概是:
    Attention(Q,K,V) = \alpha(Q,K)V =softmax(f(Q,K))V
    其中\alpha为Attention weight。

    原文: An Attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key.

    翻译: Attention可以描述为将query和一组key-vlaue映射成一个output,其中query,key,value和output都是向量。output的计算为values的加权总和,其中分配给每个value的权重通过query与相应key的兼容函数计算。

    补充

    输入:K,Q,V
    涉及函数: compatibility function f,softmax()
    计算步骤:
    【步骤一】基于KQ计算两个向量相似程度;
    【步骤二】softmax函数可以将各种输入值压缩到0-1的范围上,这样就可以得到对Values关注应该分布的注意力强弱了。
    【步骤三】乘上values得到具有关注信息的新的向量output。

    Attention本身概念并不复杂,就是基于query和key计算一个权重,然后对value重新赋值。

    2.1、f是怎么?

    函数f(Q,K)旨在获得query和key的相似程度,有很多的计算方法

    不过最出名的是Scaled Dot-Product方法,对QK做内积计算,然后乘上缩放因子\frac{1}{\sqrt{d_k}},其中d_k是query和key的维度。
    f(Q,K) = \frac{QK^T}{\sqrt{d_k}}

    讲到Attention,常见到下图,指的就是Scaled Dot-Product Attention,特指f(Q,K)是Scaled Dot-Product的Attention,来源与Transformer论文。

    2.2、QKV是什么东西?

    在不同场景下QKV是不一样的。

    2.2.1、机器翻译场景

    Attention机制最早在机器翻译的场景中出现,引入Attention后提升了长文本的翻译效果。

    随着序列长度的增长,加了Attention的翻译模型仍旧保持较高的Bleu得分。


    机器翻译采用seq2seq的结构,一个encoder,一个decoder。编码器对每次词的输出作为key和value,解码器对上一个词的输出作为query。Attention基于key和query计算权重值,输出对原本的value赋予权重后的结果。

    进一步解释:比如把法语翻译成英语,每个词作为一个输入,经过embedding+双向RNN编码处理,输出的值作为Attention需要的key和value。query取的是上一个词翻译的结果。
    Attention操作后,改变了每个词的重要性。比如翻译出第一个词“Jane”,原本每个法语词对翻译出“Jane”的重要性都是一样的,加入Attention之后,给法语“Jane”更大的权重,使得翻译容易进行。

    所以在翻译场景中,key和value其实是同一个东西,是输入词经过编码处理后的输出;query是上一个词经过解码后的结果。

    2.2.2、Transformer

    Transformer里有三个相关的Attention层。
    1,2的Key,Value,Query,是一根线过来复制三下的,用的是同一个东西;
    3的query来自上一个解码器层,keys和values来自编码器的输出。

    3、常见Attention

    3.1、self-Attention

    传统的Attention是基于source端和target端的隐变量计算Attention,得到的结果是源端的每个词与目标端每个词之间的依赖关系。
    self-Attention,顾名思义,self就是自己,关注自身的注意力,source端和target端都是自身,关注自身的依赖关系。

    虽然self-Attention的query,key,value都是同一个来源I,但还是有点差异的,引入了三个对应的权重W^q, W^k, W^v,由模型训练得到。


    小结:self-Attention就是query,key-value都是同个东西,研究自身内部的关系

    3.2、Multi-Head Attention

    Multi-Head Attention并行计算多个attention,再把输出的结果合并起来。

    MultiHead(Q,K,V) = Concat(head_1,...,head_h)W^O

    其中head_i = Attention(Q, K, V)
    当这个attention是self-attention时,head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)

    3.3、其他Attention

    基于query,key获得attention matrix,当句子很长的时候,N*N的计算量会很大的。

    所以要想办法把这个矩阵的计算复杂度降低。提出了很多杂七杂八的attention,比如Local Attention,stride Attention,Global Attention,...,反正都是想办法把矩阵计算的复杂度降低[4]

    4、其他

    4.1、position信息

    Transformer是完全使用Attention的,没有用之前的循环或者卷积。但Attention是没有记录位置信息的,所以需要有位置信息。

    所以在Transformer的框架图里会有Positional Encoding。

    4.2、Attention代码实现

    【暂放】更多探索

    # Scaled Dot-product attention layer
    tf.keras.layers.Attention(use_scale=True, score_mode="dot", **kwargs)
    

    4.3、补充

    知名的Transformer(变形金刚)论文全名是《Transformer:Attention is all you need》,Transformer框架中涉及self-attention,multi-head attention,masked multi-head attention。

    然后之后就出现了很多“xxx is all you need”的论文。

    参考资料

    [1] 李沐,66 使用注意力机制的seq2seq【动手学深度学习v2】
    [2] 吴恩达,P170 注意力模型直观理解
    [3] 论文, Trandsformer:Attention is all you need
    [4] 李宏毅, P34 各种self-attetion

    相关文章

      网友评论

          本文标题:Attention机制

          本文链接:https://www.haomeiwen.com/subject/lsvuortx.html