之前一直用transformer做各种工作,但self-attention 中的QKV 矩阵是啥意思,为啥相乘感觉一直没太理解,今天好好研究了一下,记录下。参考:自然语言处理:从SimpleRNN到BERT - 飞桨AI Studio星河社区 (baidu.com)
1.Seq2Seq+Attention
说self-attention就要先理解下attention到底是咋个意思。Attention 思想主要是来自于Seq2Seq 中。这里假设Seq2seq 的网络层是RNN,在做Seq2Seq 时,网络架构是这样的
详细说明下:
x1,x2...xm 是输入数据,一般都是经过embedding 后的数据,然后A 是RNN , 一个RNN网络输出有两个,一个是直接结果h1, 另一个是隐藏状态,直接传给了下一时刻。Seq2Seq Decode 的最开始输出有两个,一个是x`1,一个是RNN encode层中最后的输出结果,然后传到了Decode层中,这里x`1一般都是start 或者其他的起始状态值,是给定好的。接下来就继续执行,x`2 是x`1+S0 走一次RNN后,得到的状态S1, S1在接分类器得到的结果,x`3.....x`t 就是这么来的。但这里存在的问题就是如果输入过长,就回存在遗忘的问题。LSTM 是一个解决办法,但太长还是不行,就要引用了Attention。
先上图