【NLP】注意力机制

        Attention 机制最早是在视觉图像领域提出来的,应该是在九几年思想就提出来了,但是真正火起来应该算是 2014 年 Google Mind 团队的这篇论文 Recurrent Models of Visual Attention,他们在 RNN 模型上使用了 Attention机制来进行图像分类。
        随后,Bahdanau 等人在论文 Neural Machine Translation by Jointly Learning to Align and Translate 中,使用类似 Attention 的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是第一个将 Attention 机制应用到 NLP 领域中。
        接着 Attention 机制被广泛应用在基于 RNN/CNN 等神经网络模型的各种 NLP 任务中。2017 年,Google 机器翻译团队发表的 Attention is All You Need 中大量使用了自注意力(self-attention)机制来学习文本表示。自注意力机制也成为了大家近期的研究热点,并在各种 NLP 任务上进行探索。

        Attention 机制的本质来自于人类视觉注意力机制。人们视觉在感知东西的时候一般不会是一个场景从到头看到尾每次全部都看,而往往是根据需求观察注意特定的一部分。而且当人们发现一个场景经常在某部分出现自己想观察的东西时,人们会进行学习在将来再出现类似场景时把注意力放到该部分上。举个例子来说,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但是在我们深入仔细地观察时,其实眼睛聚焦的就只有很小的一块,这个时候人的大脑主要关注在这一小块图案上,也就是说这个时候人脑对整幅图的关注并不是均衡的,是有一定的权重区分的。这就是深度学习里的Attention Model的核心思想。

【NLP】注意力机制_第1张图片
        Attention 函数的本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射,如下图:
【NLP】注意力机制_第2张图片
        在计算 Attention 时主要分为三步,第一步是将 query 和每个 key 进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;然后第二步一般是使用一个 softmax 函数对这些权重进行归一化;最后将权重和相应的键值 value 进行加权求和得到最后的 Attention。
        目前在 NLP 研究中,key 和 value 常常都是同一个,即 key=value。【NLP】注意力机制_第3张图片

seq2seq中的attention机制

        下面的图都是seq2seq的示意图,先放的图,然后再放的图片描述:
【NLP】注意力机制_第4张图片

  • 我们在encoder的过程中保留每个RNN单元的隐藏状态(hidden state)得到(h1……hN)
  • 然后对于decoder的每一个timestep,因为有此时decoder的输入和上一步的隐藏状态输出,所以我们可以得到当前步的隐藏状态。假设第t步的(根据上一步隐藏状态输出与当前输入得到的)隐藏状态为St,
    在每个第t步利用St和hi进行dot点积得到attention score,也称为“相似度“或者“影响度”,或者“匹配得分”
    【NLP】注意力机制_第5张图片
            利用softmax函数将attention scores转化为概率分布。
    【NLP】注意力机制_第6张图片
    在这里插入图片描述
            按照刚才的概率分布,计算encoder的hidden states的加权求和。到这里其实attention的计算就结束了,得到的这个at就已经是decoder的第t时刻的注意力向量了(在后面的文章中,这个at也称作是上下文向量,context vector,符号表示也可能是用ct来表示的)。
    【NLP】注意力机制_第7张图片
            最后将注意力向量at,以及decoder的t时刻的hidden state st,并联起来,然后做后续的步骤(比如加个dense全连接层做标签预测之类的。到这里,seq2seq的最简单最基础的attention机制,就讲完了,如果还有疑问的同学,可以去看原始论文。
            
            

参考链接I
参考链接II

你可能感兴趣的:(个人学习,机器学习)