zoukankan      html  css  js  c++  java
  • Attention模型

    1.seq2seq模型有遗忘问题和对齐问题,attention在原来的seq2seq模型上做出了改进,在decoder编码阶段它的输入变为原来向量的加权求和,赋予每个向量不同的权重。

    获取权重的方式:找一个向量q与输入句子的每个词的向量进行比较,如果两个向量相近则获得的权重比较高。

    计算权重的方式:一种就是在预测t时刻的输出时,用decoder阶段上一时刻的输出作为q向量。另一种就是用ht作为q向量。可以将两个向量做内积,如果维数不同可以先让一个向量乘以一个矩阵,使两个向量维数相同再进行内积运算。还可以训练神经网络,进行计算。

    attention模型中的编码阶段有一个前向的RNN和一个后向的RNN,将两个过程输出的向量进行结合,再decoder阶段,输入时encoder阶段不同时候输出向量的加权求和值。

    2.self-attention(参考博客:https://blog.csdn.net/u012526436/article/details/86295971)

    self-attention能够计算出一个句子中一个词与其他词之间的关联程度。

    (1)首先,self-attention会计算出三个新的向量,在论文中,向量的维度是512维,我们把这三个向量分别称为Query、Key、Value,这三个向量是用embedding向量与一个矩阵相乘得到的结果,这个矩阵是随机初始化的.

    (2)

    计算self-attention的分数值,该分数值决定了当我们在某个位置encode一个词时,对输入句子的其他部分的关注程度。这个分数值的计算方法是Query与Key做点成,以下图为例,首先我们需要针对Thinking这个词,计算出其他词对于该词的一个分数值,首先是针对于自己本身即q1·k1,然后是针对于第二个词即q1·k2

    (3)接下来,把点成的结果除以一个常数,这里我们除以8,这个值一般是采用上文提到的矩阵的第一个维度的开方即64的开方8,当然也可以选择其他的值,然后把得到的结果做一个softmax的计算。得到的结果即是每个词对于当前位置的词的相关性大小,当然,当前位置的词相关性肯定会会很大

     

    (4)下一步就是把Value和softmax得到的值进行相乘,并相加,得到的结果即是self-attetion在当前节点的值。

     

     就是用一个词的Q向量和其他词的v向量相乘,进行归一化,获得这个词与其他词的近似程度,之后再成V向量,最后得到的维度和embedding的维度是相同的,这个时候得到的值不仅是这个词本身的信息,还根据这个词与其他词的关联程度获得了其他词的信息,进行了结合。

  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/zhang12345/p/15517400.html
Copyright © 2011-2022 走看看