Skip to content

Transformer

RNN 的主要问题:

  • 梯度消失/爆炸:长距离依赖难以学习
  • 顺序计算:无法并行处理序列
  • 信息瓶颈:最后时刻隐藏状态需承载全部信息

Transformer 的改进:

  • 并行计算:同时处理整个序列
  • 自注意力机制:直接建立任意位置间的联系
  • 位置编码:显式注入位置信息

结构

Transformer

图:Transformer 单元

Transformer

图:Transformer 的详细结构

  • 输入
    • 编码器输入
    • 解码器输入
  • 输出
    • 线性层
    • Softmax 层
  • 编码器
    • 由 N 个编码器层堆叠而成
    • 每个编码器层由两个子层连接结构组成
    • 第一个子层连接结构包括一个多头自注意力子层规范化层以及一个残差连接
    • 第二个子层连接结构包括一个前馈全连接子层规范化层以及一个残差连接
  • 解码器
    • 由 N 个解码器层堆叠而成
    • 每个解码器层由三个子层连接结构组成
    • 第一个子层连接结构包括一个带掩码的-多头自注意力子层规范化层以及一个残差连接
    • 第二个子层连接结构包括一个多头注意力子层(编码器到解码器)和规范化层以及一个残差连接
    • 第三个子层连接结构包括一个前馈全连接子层规范化层以及一个残差连接

核心组件

自注意力机制(Self-Attention)

定义:

符号维度含义
Xn×d输入矩阵(n=序列长度,d=特征维度)
Qn×dkQuery 矩阵(查询向量)
Kn×dkKey 矩阵(键向量)
Vn×dvValue 矩阵(值向量)
WQ,WK,WVd×dk/dv可学习参数矩阵
Attention(Q,K,V)=Softmax(QKTdk)V

推导过程

将输入转换为 Query、Key、Value:

Q=XWQ,K=XWK,V=XWV

计算注意力分数:

Scores=QKTdk

生成注意力权重矩阵:

A=Softmax(Scores)

得到最终注意力输出:

Output=AV

带掩码自注意力层(Masked Multi-head attention)

编码时,对于 t 时刻的预测,我们知道 x1,x2,,xt,xt+1,,xT 全部的信息。

解码时,对于 t 时刻的预测,我们仅知道 x1,x2,,xt1 的信息。看不到后续的信息,因此需要将后续的信息遮掩起来。

Attention(Q,K,V)=Softmax(QKTMdk)V

多头注意力(Multi-Head Attention)

Transformer

MultiHead(Q,K,V)=Concat(head1,,headh)WO

其中:

headi=Attention(QWiQ,KWiK,VWiV)

位置编码(Positional Encoding)

RNNLSTM 等顺序算法不同,Transformer 没有内置机制来捕获句子中单词的相对位置,所以在 Transformerencoderdecoder 的输入层中,使用了 Positional Encoding,使得最终的输入满足:

input=input_embedding+positional_encoding

原始正弦编码公式:

PE(pos,2i)=sin(pos100002i/d)PE(pos,2i+1)=cos(pos100002i/d)

前馈网络(Feed Forward Network)

包括两个线性变换+ReLU 激活:

FFN(x)=ReLU(xW1+b1)W2+b2