day5-Transformer

和seq2seq模型相似,Transformer同样基于编码器-解码器架构,其区别主要在于以下三点:

Transformer blocks:将seq2seq模型重的循环网络替换为了Transformer Blocks,该模块包含一个多头注意力层(Multi-head Attention Layers)以及两个position-wise feed-forward networks(FFN)。对于解码器来说,另一个多头注意力层被用于接受编码器的隐藏状态。
Add and norm:多头注意力层和前馈网络的输出被送到两个“add and norm”层进行处理,该层包含残差结构以及层归一化。
Position encoding:由于自注意力层并没有区分元素的顺序,所以一个位置编码层被用于向序列元素里添加位置信息。


以下分为三个部分:

  • Encoder
  • Decoder
  • 数据预处理:Positional Encoding

Encoder:

分为三个部分:

  • Multi-Head Attention
  • Add & Norm
  • Feed Forward

Multi-Head Attention

是多个self-attention架构,self-attention是Q, K, V同一个的attention

attention = Attention(Q, K, V)
Multi-Head Attention是首先将Q, K, V通过线性变换投影到高维
ps:此处Q, K, V相同

head_i = attention(QW_i^Q, KW_i^K, VW_i^V)
Multihead(Q, K, V) = concat(head1, head2.....,head_h)W^O
将h个head输出连接并通过全连接层

其中Attention函数有很多种,其中一种为


image.png

Feed Forward

Z = Multihead
out = ReLU(ZW_1 + b1) W_2 + b_2

通过Feed Forward以后就输出encoder的编码

Decoder

Decoder和Encoder的结构差不多,但是多了一个attention的sub-layer,这里先明确一下decoder的输入输出和解码过程:

输出:对应i位置的输出词的概率分布
输入:encoder的输出 & 对应i-1位置decoder的输出。所以中间的attention不是self-attention,它的K,V来自encoder,Q来自上一位置decoder的输出
解码:这里要特别注意一下,编码可以并行计算,一次性全部encoding出来,但解码不是一次把所有序列解出来的,而是像rnn一样一个一个解出来的,因为要用上一个位置的输入当作attention的query

数据预处理

之前都是用rnn一个一个处理,是有顺序的,现在是一次性并行处理没有顺序,需要有变量记录顺序,也就是位置信息


image.png

image.png

最开始通过上述公式,可以得到单词的位置信息,然后在编码和解码之前,和单词的embedding相加

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容