Transformer机制(Attention Is All You Need)在自然语言处理NLP领域取得了席卷全领域的作用。
此前的时序网络模型有:(参阅梗直哥丶、跟李沐学AI)
1.RNN
RNN输出:
可以用于多种与时间有关的智能使命,例如:
- 1 to N的使命:依据图片输出音乐;
- N to 1的使命:依据一年内的用户评价估测商品的质量;
- N to N的使命:依据一段话输出等长的诗篇或许更优美的润饰过的文章;
- N to M的使命:依据一段汉语翻译一段英文,对文本进行概括。
RNN虽然回忆力较短,对当时tt时间信息的猜测只是依据上一时间t−1t-1的猜测成果和当时时间输入得到,但在小数据量,低算力的状况下十分有用。
可是假如一个女生只有前一天的回忆,那么作为她的男朋友,假如隔了一天不碰头,后天就成陌生人了,关于这位女生,咱们认为她需要一个日记本对长时间回忆进行记录,以便她记住自己的一生。
2.LSTM
LSTM便是为此而生的,
在RNN的躲藏层上进行改善,{ct−1,ct,ct+1}\{c_{t-1},c_t,c_{t+1}\}序列便是长时间回忆链条:
RNN躲藏层单元短期回忆链条{st−1,st,st+1}\{s_{t-1},s_t,s_{t+1}\}、当时时间输入xtx_t和长时间回忆链条{ct−1,ct,ct+1}\{c_{t-1},c_t,c_{t+1}\}之间的联系是:
- 擦除长时间回忆中的无用信息;
- 收拾t−1t-1和tt两个信息源,并增加在ctc_t中;
- ct=f1ct−1+f2c_t=f_1\times c_{t-1}+f_2。 f1f_1是forgetgateforget gate遗忘操作,f2f_2是inputgateinput gate写入操作:
3.Attention基本观点
Attention其实本质上与权重Weight共同,Transformer模型等模型就依据Attention机制。
假如前半段时序为将来的时序片段供给的信息只有一份cc,那么未来的每一个时间,模型都将无视自己的独特状况,只是凭仗cc做参阅。例如Encoder-Decoder模型,是两个RNN的结合:
上述结构将各时间的输入信息经过RNN编码为单一向量,作为后续时间的输入,无法让后续的每个时间依据自己的需求,从单一编码中选择性提取不同的参阅信息。
映射到现实中,举个例子,假如tt年份的决策者遇到当下的一个状况,想要参阅以往5000年的中国前史资料去解决,可是他们只能拿到一本融汇了整部史书ct−1c_{t-1}和上一年中国开展状况st−1′s’_{t-1},可是写史书的作者或许是以他在t−1t-1年份的视角描绘他觉得对时局重要的信息,作为tt年份的决策者可以参阅的史书ct−1c_{t-1}和上一年中国开展状况st−1′s’_{t-1}就充满了限制,由于部分对这位决策者有用的前史信息都被那位史书作者一带而过,这会为决策者形成极大地误导。
Attention机制的做法如下:
每个时间都以不同的编码ctc_t作为输入,c1=11s1+12s2+13s3+14s4c_1=\alpha_{11}s_1+\alpha_{12}s_2+\alpha_{13}s_3+\alpha_{14}s_4,c1c_1为不同时间的输入分配了不同程度的注意力因子。关于不同时间的揣度模型st′s’_t,注意力因子ti\alpha_{ti}散布也由于tt时间的状况而不共同。
练习过程中,将\alpha作为练习参数经过学习调整优化,经过这种机制可以让每个时间的模型可以动态地看到大局信息,将注意力会集到该时间更为重要的信息上。
4.Self-Attention
可是上述Attention结构并不合适并行加快核算,且引进Attention机制后,来源于RNN的次序结构失去了其本身的意义,所以删去次序结构,删去次序结构的Attention即为Self-Attention。
5.Attention机制的优势
参数更少、速度更快、作用更好。
经过加权求和的简略原理,帮助模型理解上下文。
相较于RNN中的循环层,Attention没有次序核算的限制,可以并行核算并且由于可以考虑整个时间序列所以避免了RNN中循环层不断传递导致古早信息严重丢掉的缺点。
相较于CNN中的卷积层,Attention无需多个卷积层堆叠就可以经过一层获得输入序列中相距很远的两个单元,即单元AA和单元ZZ之间的联系。可是CNN可以完成多通道输出然后得到多种不同的形式特征,可是Attention机制只能输出单通道特征,所以在后续的Transformer中提出了Multi-Headed Attention机制,然后完成多通道输出。
6.Transformer
Transformer最初提出的意图是为了进行机器翻译作业,此前该使命均运用具有Encoder-Decoder结构的RNN或CNN进行,引进注意力机制,就能使得模型的功能得到提高,而Transformer模型则彻底依靠自注意力机制Self-Attention机制的架构去完成该使命,运用Transformer意味着更好地并行核算和更高的指标。后来由于其优胜功能,Transformer被引进视频、图画等多种使命中,具体结构如图所示:
这个图乍一看十分难明,所以咱们可以依据论文的解释从微观到微观去理解它:
6.1.Encoder-Decoder架构
微观上Transformer运用的是Encoder-Decoder结构,Encoder的输入是一段时序信息,例如一句英文,每个单词会被编码为一个向量(类似于word2vec的嵌入层Input Embedding),一句话就转为多个向量的堆叠,即相当于多个时间向量组成的序列(x0,…,xn)(x_0,…,x_n);经过编码器Encoder的编码,将(x0,…,xn)(x_0,…,x_n)编码为模型可理解的向量序列(z0,…,zn)(z_0,…,z_n);Decoder解码器依据该向量序列一个词一个词地找到每个英文单词对应的中文词汇组成输出序列(y0,…,ym)(y_0,…,y_m),在这个解码过程中运用自回归auto-regression机制:当要生成yty_t时,之前的输出(y0,…,yt−1)(y_0,…,y_{t-1})和(z0,…,zn)(z_0,…,z_n)均作为猜测过程的输入。Decoder在练习时,解码器最底层输入是方针序列(y0,…,ym)(y_0,…,y_m),由于考虑到有mask操作,是想要掩盖猜测方位tt之后的词信息。练习完模型在猜测时,底层输入就不再是方针序列了,而是当时tt时间之前的一切时间发生的输出(y0,…,yt−1)(y_0,…,y_{t-1})。
模型架构中,Encoder和Decoder都是由NN个Block或称为Layer堆叠在一起的,N一般取值为6。
Encoder的一个Block包含两个Sub-Layer:
- 带有残差衔接Add和LayerNorm的Multi-headed Attention;
- 带有残差衔接Add和LayerNorm的前馈神经网络Feed Forward(position-wise)。
Decoder的一个Block包含三个Sub-Layer:
- 带有残差衔接Add和LayerNorm的Masked Multi-headed Attention;
- 带有残差衔接Add和LayerNorm的Multi-headed Attention(输入来自Encoder的Blocke输出和1.的输出);
- 带有残差衔接Add和LayerNorm的前馈神经网络Feed Forward。
终究,Decoder的输出将经过一个线性层和Softmax得到规范神经网络的输出概率散布。
6.2.Add&LayerNorm注解
Add&LayerNorm:LayerNorm(x+Sublayer(x))LayerNorm(x+Sublayer(x))
为了确保Add残差衔接简略方便,每一个子层sub-layer的输出维度dmodel=512d_{model}=512
LayerNorm v.s. BatchNorm
例如,咱们的输入是二维的那么两种操作如下图所示:
LayerNorm在时序使命中更常用,原因是时序使命中的数据会集样本在时序Sequence维度上长度不持平,如:”Hey Guys!” “We are bloody win!”两句英文时序上长度就不持平。假如长度良莠不齐,运用BatchNorm则Batch与Batch之间均值方差差异极大,形成抖动,且关于猜测阶段的不知道语句,咱们练习时对均值和方差的假设有或许不可以泛化到测验集上。假如运用LayerNorm,则每个样本的均值方差只受自己内容影响,那么猜测阶段也可以直接算猜测样本自己的均值和方差。
6.3.Mask完成自回归机制
经过Mask Multi-headed Attention机制中运用的Mask掩膜,将当时时间tt及以后时间的方针向量遮住,将解码器的可见规模限制在tt时间曾经的方针向量;而在测验阶段,经过自回归机制,让解码器依据tt曾经做出的猜测向量做判别。上述操作确保练习测验两种场景下解码器模型的使命共同性。
6.4.Scaled Dot-Product Attention
给定一个查询向量Query,输入一个序列样本被拆分成若干Key-Value Pair,其间Key和Value均为向量。 咱们的意图是依据Query向量查询那些Value需要被侧重整合到终究向量中,然后将终究向量上交。而这些Value的Attention配比则依托Query与Value们所对应的Key之间的compatibility function核算得到,简略的方法是经过矩阵间的Dot-Product核算余弦类似度作为Attention配比。上述一段话落实到公式完成上:
带有Mask操作的Attention核算流程如下图:
其间Mask会将Scale后的Query与Key的内积中,tt时间及以后的值全部替换成大负数,然后让Softmax屏蔽为0。
6.5.Multi-Headed Attention
单个的注意力函数或许存在不够安稳,偶然性大等问题,且不具有多通道特征的提取功能,Multi-Headed可以解决这一问题。
- 将Query、Key和Value经过线性层映射到较低维度的向量(从单个Attention输出512维向量缩短到先映射为512h\frac{512}{h}维向量);
- 经过Scaled Dot-Product Attention输出512h\frac{512}{h}维向量;
- 重复1.2.两步hh次,得到的512h\frac{512}{h}维向量共hh个,拼接为512512维向量。
这种改善可以在线性层引进可练习的参数,比Scaled Dot-Product Attention更灵活,为Transformer的Block供给多样化的核算方式,给模型hh次机会学习各种提取特征战略,得到的特征可以去匹配不同的形式。
一般h=8,dk=dv=dmodelh=64h=8, d_k=d_v=\frac{d_{model}}{h}=64。
6.6.Self-Attention和Attention
可以从上述两图中看到,编码器和解码器中的第一个sub-layer中,三个输入箭头都来自于同一个序列,这儿表明输入Key、Value和Query三个向量,都是单词word2ve后的同一个向量,所以咱们称这种Attention为自注意力机制Self-Attention。 这也意味着Attention(Queries,Keys,Values)=softmax(QueriesndkKeymdkTdk)nmValuesmdvAttention(Queries, Keys, Values)=softmax(\frac{Queries_{n\times d_{k}}Key_{m\times d_{k}}^T}{\sqrt{d_k}})_{n\times m}Values_{m\times d_{v}}中的nn和mm持平。即输入输出形状相同。
当然,假如没有Multi-Headed,那么咱们的Attention输出便是在某一种规矩下一句话中单词A与其他单词之间的间隔散布状况。可是假如由Multi-Headed,那咱们就能得到hh种不同的间隔度量规矩,终究能构建出hh种不同的间隔散布空间。
可是解码器的第二个Sub-Layer:
可以看到输入的Key和Value来源于编码器Encoder,Query来源于解码器的第一个SubLayer。 假设Encoder的输入Input序列长度为aa,而Decoder的输入Output序列长度为bb,那么Encoder输出的Key和Value的维度即为a512a\times 512,而Decoder供给的Query维度为b512b\times 512。即”Hello Word”这个a=2a=2的序列和”你好世界”这个b=4b=4的序列之间做类似度衡量,并依据类似度得到b512b\times512的Value加权和向量。这个过程便是编码器与解码器的仅有信息传递通道。
6.7.Multi-Headed Attention + position-wise Feed-Forward Networks
position-wise Feed-Forward Networks即对Multi-Head Attention输出的序列中的每个向量单独做前馈神经网络,然后完成整合后序列信息的语义空间转化。
其实Transformer便是将依据RNN的Encoder-Decoder中一切的循环层换成了Multi-Headed Attention。
循环层实际上便是经过一个同享MLP,将上一时间的MLP输出向量与当时时间输入向量作为这个同享MLP当时时间的新输入,串联构成;运用Multi-Headed Attention替代则是将各个时间的信息经过注意力机制整组成新的序列,经过一个同享的MLP映射到需要的语义空间。
6.8.Embedding + Position Encoding
Embedding便是将序列中的每个单词转化为长度为dmodel=512d_{model}=512的向量,组成向量序列。
别的,关于一句话,词汇间的相对方位是十分重要的信息,可是可以从Attention机制中看到,模型会忽略方位联系,这其实关于翻译使命是不对的。所以咱们经过为每个词汇向量设置一个长dmodel=512d_{model}=512的方位编码向量,经过词汇向量+=方位编码向量的操作,将方位编码传递进Transformer中。