Review - Transformer
回顾《 attention is all your need 》,transformer 的结构如下图所示,Inputs 包括 embedding 和 positional encodeing,将词嵌入结合位置信息;Encoder 包括 N 个堆叠的层,每个层中的多头注意力机制和前馈神经网络后都进行了残差和归一化连接;Decoder 包括 N 个堆叠的层,与 Encoder 不同的是,它还多了一层 masked multi-head attention;Output 包括简单的线性层和 softmax 。
Inputs
embedding 将文本处理为向量,如word embedding。
1 | class Embeddings(nn.Module): |
positional ecoding 添加位置信息,采用正余弦可以避免句子长短不一时对位置带来的影响。
1 | class PositionalEncoding(nn.Module): |
可视化位置信息
Encoder
encoder由 N 层堆叠,将层复制 N 次。
1 | def clones(module, N): |
构造掩码,这里掩码的作用是屏蔽空白区域,decoder中掩码还有屏蔽未来信息的作用。
1 | def subsequent_mask(size): |
encoder层包括多头注意力层和前馈全连接层这两个子层,每个子层后面都用归一和残差连接。
1 | class SublayerConnection(nn.Module): |
规范化层
1 | class LayerNorm(nn.Module): |
1 | class EncoderLayer(nn.Module): |
attention层,采用多头注意力机制。
1 | def attention(query, key, value, mask=None, dropout=None): |
多头注意力,设计多种Q均衡偏差,让词义有多种表达。给每个头分配等量的词特征,四个线性层中有三个分别对应QKV,最后一个是对应拼接后的。
1 | class MultiHeadedAttention(nn.Module): |
feed forward 层包括两个线性层和一个relu层。
1 | class PositionwiseFeedForward(nn.Module): |
Decoder
decoder 根据 encoder 的输出和上一次的预测结果,预测序列的下一个输出,由 N 个相同的层堆叠。
1 | class Decoder(nn.Module): |
Output
1 | class Generator(nn.Module): |
Overview
1 | class EncoderDecoder(nn.Module): |
Review - Transformer