什么是transformer
最早是2017年在《Attention Is All You Need》,完全舍弃了RNN,CNN,只用到了Attenton与FC全连接层,用来做序列化问题。意在解决RNN的缺点,RNN的串联结构导致层数不能太深,词向量也不会跟新,不会结合语境,只会考虑上文,不会考虑下文。
结构
原论文中的图
Encoding
包含三个部分,输入层,多头注意力机制,前馈神经网络,编码层目的是得到重构后的特征。
input Embedding 位置编码
序列输入 one hot 编码: 0,1编码很稀疏。 Word Embedding:获得词与词之间的关系,将词向量与设计的权重矩阵相乘,可以达到降维的效果,当权重矩阵的参数不断更新,意思相近的词最终的值比较接近。 Position Embedding:获取词在句中的位置关系。 Transformer中是利用函数计算出位置关系,每个维度对应不同的正弦函数。
Multi - Head attenion 多头注意力机制
RNN必须一个接一个的进行输入,多头指的是所有词一起处理,所有词进行位置编码,编码=Word Embedding +Position Embedding
多头注意力用于捕捉词特征之间的关系,相当于MPL(多层感知机),有三个关键值,Q,K,V,这是每一个词的三个辅助向量,用来计算词的注意力权重。 Q,K,V是由词向量与给定的权重矩阵进行相乘得到的; dk是Q,K矩阵的列数,因为不同词向量的Q与K的维度可以不同;
单个注意力输出为Z,将多个注意力输出拼接在一起,最终为多头注意力结构的输出。 这个Z会迭代n遍,这里的n是输入数据的维度,每一个维度中的相同词有不同的Q,K,V,之间没有关系,所以必须要用位置编码来解决词在句中的位置不同而特征相同的问题,因此每一个词向量都会得到n个Z值这里就是指多头注意力机制
Queries用来与其他词向量key做内积计算自己的词向量权重,value是此token的特征值·
Add 结构中由残差网络用来消除梯度消失。 没有用BN(Batch Normalization,批量归一化,趋于正态分布,训练更容易收敛),所有样本的维度不一定相同,没法用总体样本方差进行估计。维度一样语义也不一样,BN这种对同一维度做处理的方法不可取。 用了LN(Layer Normalization),LN是将一句话整个做均值方差,BN取的是不同样本的同一个特征,而LN取的是同一个样本的不同特征。
前馈神经网络
前馈神经网络就是指网络结构是没由反馈的,这里是由两层全连接组成。
Decoder
decoder的目的是利用前面编码得来的特征。
attention中加入mask
前面的词不考虑后面的词
提升
transform中的encoder单独拿出来就是bert,decoder单独拿出来就是GRT; 将transform加入cv中的典型是vition transform(ViT),时间序列 2021best papper informer。huggingface是NLP领域
|