RNN不容易被平行化,先计算得到b1,再计算得到b2,再b3,再b4
Self-attention输入和输出也和RNN一样都是sequence,每一个输出和Bi-RNN一样,都由所有的输入序列得到。但是不同之处在于输出是同时得到的,不需要再按照顺序得到。
每一个q和所有k做一次attention得到对应的值。
把值经过softmax:
得到α^与对应的v相乘,再累加得到b,可以看到b是把所有的输入值都利用到了。
要得到b2:只需要用q2与每一个k做乘积:
矩阵表示:
但是这个网络没有关于输入的位置信息,它不考虑哪一个和它更近,哪一个更远。所以在得到的ai还要加上一个代表位置信息的值ei
等同于是我把xi后面接一个pi,pi代表目前的xi处于哪个位置:
但是Wp是手动设置的:
对于Seq2seq我们是直接把里面的RNN部分给取代掉,都变成self-attention:
相关文章
- 12-11Self-Attention 和 Transformer
- 12-11Transformer中的Self-Attention
- 12-11[论文阅读]Character-Level Language Modeling with Deeper Self-Attention
- 12-11Self-Attention理解
- 12-11self-attention
- 12-11Self-Attention
- 12-11李宏毅《深度学习》- Self-attention 自注意力机制
- 12-11李宏毅2021春季机器学习课程笔记6:Self-attention
- 12-11self-attention 的 pytorch 实现
- 12-11self-attention为什么要除以根号d_k