Transformer笔记
Transformer笔记
Input Embedding
One-Hot Encoding
将输入单词用one-hot形式编码成序列向量,向量长度就是预定义的词汇表中拥有的词汇量,向量在这一维中的值只有一个位置是1,其余都是0,1对应的位置就是词汇表中表示这个单词的地方
劣势:稀疏;长
Word Embedding
设计一个可学习的权重矩阵W,将one-hot词向量与这个矩阵进行点乘,得到新的表示结果
优势:降维
Position Encoding
预定义函数,通过函数计算出位置信息
$PE_{(pos,2i)}=sin(pos/10000^{2i/d})$
$PE_{(pos,2i+1)}=cos(pos/10000^{2i/d})$
这种编码方式保证了不同位置在所有维度上不会被编码到完全一样的值
Transformer对输入的操作概括
word embedding + position embedding = final representation
参考
Transformer 修炼之道(一)、Input Embedding
Encoder
Encoder由多个(通常6个)层组成,每个层内部都有残差连接和归一化操作,主要内容包括多头自注意力层(Multi-Head Self-Attention)和前向反馈网络层(Feed Forward Network),前者用于捕捉特征之间的关系,后者是进一步编码学习,实质上等同于MLP(Multi-Layer Perception)
Multi-Head Self-Attention
多头(多个,通常为8)
对输入做不同的线性变换生成Q(Query)、K(Key)、V(Value)
Scaled Dot-Product Attention(对Q、K、V进行计算得到输出)
$$
Attention(Q,K,V)=softmax(\frac{Q K^T}{\sqrt{d_k}})V \
d_k是Q,K矩阵的列数,即向量维度
$$除以\sqrt{d_k}的原因是防止Q和K的点积值过大(\sqrt{d_k}即Q的列数,也是K的行数),避免在经过softmax后梯度太小
将多个自注意力的输出拼接起来,再进行线性变换
Feed Forward Network(FFN)
两个全连接层,其中一个带ReLU激活,两层中间有Dropout
$FFN(x)=max(0,xW_1+b_1)W_2+b_2$
Add & Norm
$$
LayerNorm(X+MultiHeadAttention(X)) \
LayerNorm(X+FeedForward(X))
$$
Add:输入加输出(残差连接)
Norm:Layer Normalization,通常为$\frac{x-\mu}{\sigma}$,$\mu$表示均值$\sigma$表示标准差
参考
Decoder
Multi-Head Attention with Mask
mask:忽略某些位置(要预测的之后的内容),不计算与其相关的注意力权重(下三角矩阵,以极大负值代替0,从而使得其经过softmax后生成的概率趋近于0,相当于不计算这些位置的注意力权重)
Encoder-Decoder Attention
其实是多头自注意力,K和V来自Encoder的输出,Q:如果是Decoder的第一层,则使用(已解码的)输入序列(最开始则是起始字符);如果是后面的层,则是前面层的输出
Output Generator
实质是线性层,将解码的序列映射回原来的空间维度,然后经过softmax(或log-softmax)生成预测概率
参考
Transformer总结
- Transformer 与 RNN 不同,可以比较好地并行训练
- Transformer 本身是不能利用单词的顺序信息的,因此需要在输入中添加位置 Embedding,否则 Transformer 就是一个词袋模型了
- Transformer 的重点是 Self-Attention 结构,其中用到的 Q, K, V矩阵通过输出进行线性变换得到
- Transformer 中 Multi-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 attention score
整体可参考
变种
Sandwich Transformer
变换了self-attention和FFN的顺序
Universal Transformer
在深度上加上循环,增加通用性