transformer

用decoder的输入做Query(y_i),用encoder的输出去做key和value(X)

1. 引入




抛弃RNN,只用attention

2. Transformer :Attention is All You Need

你不需要RNN,你只需要attention就可以参数化语言模型
还是有encoder+decoder(基于self-Attention)

3. Self-Attention

Softmax、加权平均(见上图)

Self-attention得到什么,能有什么好处:不用额外引入变量
在nlp中的缺点:x的位置改变的时候,会带来顺序问题(后续在引入self-attention的到transformer的时候,会引入位置编码)(可以尝试拼接加上自己x的向量,但是输出的y会变长,在cuda中计算也会更加困难)

3.1 尝试区分Query Key Value

在不同的模型中query、key、value可能相同可能不同

先做线性变换,再做self-attention

3.2 transformer 中的trick:Scaling the Dot Attention

求q、k、v的w_{ij}的时候用的softmax,softmax很大就会很敏感(梯度消失),解决办法:

4. Multi-Head Attention

把输入的向量分为多个头(等长的几份)

5. Position Embedding(后面也会有改进)

为什么要做position Embedding呢?
因为在做self-attention的时候,顺序是无关的,因此加多一个position

6. Transformer


Self-attention == multi-head Self-attention
Norm = 正则化
MLP:单层神经网络(relu激活)
蓝色:残差连接(训练更快+更稳定<--阻止梯度消失)

7. Application


Mark:加权平均的时候不带入后面的数据x进行计算attention(防止偷窥)

https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html

posted @ 2020-12-27 11:02  TOWERB  阅读(171)  评论(0编辑  收藏  举报