• 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的维度是相同的,这个时候得到的值不仅是这个词本身的信息,还根据这个词与其他词的关联程度获得了其他词的信息,进行了结合。

  • 相关阅读:
    python_捕获异常
    requests二次封装_捕获异常
    python_flask模块
    python_redis模块
    python_requests模块
    使用pstack和gdb调试死锁
    如何编写go代码
    GDB调试命令手册
    core文件相关
    shared_ptr的线程安全性
  • 原文地址:https://www.cnblogs.com/zhang12345/p/15517400.html
Copyright © 2020-2023  润新知