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)

  1. 对输入做不同的线性变换生成Q(Query)、K(Key)、V(Value)

  2. 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后梯度太小

  3. 将多个自注意力的输出拼接起来,再进行线性变换

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$表示标准差

参考

Transformer 修炼之道(二)、Encoder

Decoder

Multi-Head Attention with Mask

mask:忽略某些位置(要预测的之后的内容),不计算与其相关的注意力权重(下三角矩阵,以极大负值代替0,从而使得其经过softmax后生成的概率趋近于0,相当于不计算这些位置的注意力权重)

Encoder-Decoder Attention

其实是多头自注意力,K和V来自Encoder的输出,Q:如果是Decoder的第一层,则使用(已解码的)输入序列(最开始则是起始字符);如果是后面的层,则是前面层的输出

Output Generator

实质是线性层,将解码的序列映射回原来的空间维度,然后经过softmax(或log-softmax)生成预测概率

参考

Transformer 修炼之道(三)、Decoder

Transformer总结

  • Transformer 与 RNN 不同,可以比较好地并行训练
  • Transformer 本身是不能利用单词的顺序信息的,因此需要在输入中添加位置 Embedding,否则 Transformer 就是一个词袋模型了
  • Transformer 的重点是 Self-Attention 结构,其中用到的 Q, K, V矩阵通过输出进行线性变换得到
  • Transformer 中 Multi-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 attention score

整体可参考

Transformer模型详解(图解最完整版)

变种

Sandwich Transformer

变换了self-attention和FFN的顺序

Universal Transformer

在深度上加上循环,增加通用性


Transformer笔记
https://wangaaayu.github.io/blog/posts/7b049359/
作者
WangAaayu
发布于
2022年11月11日
更新于
2023年6月4日
许可协议