zoukankan      html  css  js  c++  java
  • 【自然语言处理】:seq2seq当中的Attention注意力机制

    一.seq2seq机制

    传统的seq2seq机制在语言翻译当中使用了两个RNN,一个是encoder,将语言进行编码,另一个是decoder,将我们的得到的语言编码进行解码,解码的过程当中就可以对我们的语言进行翻译成另外一种语言。其机制如下所示:

     当然这种机制了,就会出现一定的问题,比如说我们的一个hidden layer就需要捕捉到整句话的所有信息,但是实际上我们有些位于前面的一些信息可能就会有所遗漏,同样的,一些本来应该是比较重要的信息,可能模型觉得并没有那么重要。

    例如输入的英文句子是:Tom chase Jerry,目标的翻译结果是:汤姆追逐杰瑞。在未考虑注意力机制的模型当中,模型认为 汤姆 这个词的翻译受到 Tomchase 和 Jerry 这三个词的同权重的影响。但是实际上显然不应该是这样处理的,汤姆 这个词应该受到输入的 Tom 这个词的影响最大,而其它输入的词的影响则应该是非常小的。显然,在未考虑注意力机制的 Encoder-Decoder 模型中,这种不同输入的重要程度并没有体现处理,一般称这样的模型为 分心模型

    因此我们引入注意力机制,也就是attention来改变这个现状。

    二.Attention注意力机制的原理

    Attention is all you need 是 杨力坤的名言。我们来看看attention注意力机制具体是怎么实现的。首先,我们将decoder的第一个hidden layer的值分别和encoder当中的每一个值进行相乘,也就是进行dot product,得到一个attention score。如下图所示:

    然后我们对这些dot product的结果使用softmax,得到一个概率分布,众所周知,softmax得到的概率只和为1. 而使用softmax之后的概率分布,我们这里称之为attention distribution。我们发现这些第一个encoder unit的attention score经过softmax之后,其概率。说明当前我们的attention,注意力主要集中在了第一个encoder unit上。机器的主要注意力在于翻译当前这个unit所对应的单词。

     然后我们对这个attention distribution使用weighted sum来计算当前encoder的hidden states作为一个我们的attention output,形成一个vector。应该就是将attention distribution的结果转换成了一个vector。

    然后我们将这个vector和attention作用于的那个decoder进行拼接,用这个拼接的结果来计算我们最后输出的翻译结果。

    最后使用刚才的这个结果作为我们第二个hidden layer的一个输入(一般可以这样做)。然后再进行第二次attention,得到我们得二个hidden layer的预测结果为单词:hit。然后依次重复这样的过程,得到我们最后的翻译结果。

     最后的最后,我们对attention机制进行一个总结。

    其中,我们的hidden states或者hidden layer可以称之为h1,h2.....hN,然后我们通过dot product可以得到我们的一个attention score:et

    将这个et放入softmax函数当中,得到attention distribution: at 我们再使用这个at 来计算weighted sum ,而这个weight是我们hidden state(layer)的一个权重(终于豁然开朗,知道这个weighted sum怎么来的了!)

    最后进行组合和拼接(左右互相拼接,不是上下),就得到了我们的预测值啦!具体公式如下图所示:

    ,

  • 相关阅读:
    jTopo——js库
    node.js
    php 入门笔记
    D3 入门笔记
    webpack笔记
    React.js
    Grunt等前端自动化构建工具
    vue3.0的新特性
    electron-builder 打包流程
    vue里面如何下载图片,如何下载文件
  • 原文地址:https://www.cnblogs.com/geeksongs/p/15463620.html
Copyright © 2011-2022 走看看