self-attention学习笔记

1.引入Slef-Attention的原因

image.png

在自然语言处理中,使用RNN(这里指的的是LSTM)处理输入输出数据的时候,LSTM可以解决长文本依赖,因为他可以依赖于前面的文本,且不能够做并行计算,导致运算的速度非常慢。


image.png

所以有很多学者就会使用CNN去替代RNN,CNN需要叠加许多层,就可以看到所有的序列信息,并且可以并行计算。但是存在一个问题,就是需要叠加很多层,这样也间接的导致了效率变低。


image.png

所以引入的self-attention机制,就可以解决这两个问题:

  • 1.看到每一个节点对所有节点的依赖
  • 2.可以进行叠加运算
    如右图所示,b1可以依赖于a1,a2,a3,a4,b2也是如此。

2.self-attention原理讲解

2.1大致原理讲解

image.png
  • 1.计算a
    x1,x2,x3,x4会乘上一个矩阵W得到a1,a2,a2,a3
  • 2.计算q,k,v
    通过a与一个矩阵w计算可以得到q,k,v,三个值
    其中每个值的作用和计算过程如下:
    q:query(用于去匹配其他值的), qi=Wqai
    k:key(用于被匹配), ki=Wkai
    v:抽取的信息, vi=Wvai
  • 3.计算 \alpha
    image.png

    那每一个query q去对每一个key k做attention,其实就是q1与ki做点乘计算
    其中:\alpha1,i=q1ki\sqrt{d}
  • 4.计算\widehat{\alpha}
    这个算法就是将所有的 \alpha<sub>1,i</sub>相加在一起,然后进行一个soft-max输出,得到每一个\alpha的概率分布。
    image.png
  • 5.计算b
    将的\widehat{\alpha}与每个vi做一个点乘,然后再相加,就得到了b,也就最终的输出。
    这整个过程就是self-attention机制,计算每个节点与其他节点之间的依赖.
    image.png

2.2 数学计算方式

  • q,k,v的矩阵计算
    image.png

    因为q是wq与每一个a进行点乘得到的,所以可以把所有的a看做一个矩阵,就是wq与a矩阵计算的结果,这样就达到了并行计算了.
    k,v的计算过程也是如此.
  • 计算\alpha
    image.png

    \alpha是由q1与每一个k计算的结果(忽略\sqrt{d}),所以可以把所有的k看做一个矩阵,这样就是k矩阵与q的矩阵计算.
  • 计算\widehat{\alpha}
    image.png

    把之前计算的\alpha放入一个soft-max函数得到\widehat{\alpha}
  • 计算b
    image.png

    \widehat{\alpha}与v矩阵做点乘,然后把所有点乘的结果相加就得到了b
    整个过程抽象化如下图所示:
    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容