Transformer
RNN 的主要问题:
- 梯度消失/爆炸:长距离依赖难以学习
- 顺序计算:无法并行处理序列
- 信息瓶颈:最后时刻隐藏状态需承载全部信息
Transformer 的改进:
- 并行计算:同时处理整个序列
- 自注意力机制:直接建立任意位置间的联系
- 位置编码:显式注入位置信息
结构
图:Transformer 单元
图:Transformer 的详细结构
- 输入
- 编码器输入
- 解码器输入
- 输出
- 线性层
- Softmax 层
- 编码器
- 由 N 个编码器层堆叠而成
- 每个编码器层由两个子层连接结构组成
- 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
- 第二个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接
- 解码器
- 由 N 个解码器层堆叠而成
- 每个解码器层由三个子层连接结构组成
- 第一个子层连接结构包括一个带掩码的-多头自注意力子层和规范化层以及一个残差连接
- 第二个子层连接结构包括一个多头注意力子层(编码器到解码器)和规范化层以及一个残差连接
- 第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接
核心组件
自注意力机制(Self-Attention)
定义:
符号 | 维度 | 含义 |
---|---|---|
输入矩阵(n=序列长度,d=特征维度) | ||
Query 矩阵(查询向量) | ||
Key 矩阵(键向量) | ||
Value 矩阵(值向量) | ||
可学习参数矩阵 |
推导过程
将输入转换为 Query、Key、Value:
计算注意力分数:
生成注意力权重矩阵:
得到最终注意力输出:
带掩码自注意力层(Masked Multi-head attention)
编码时,对于
解码时,对于
多头注意力(Multi-Head Attention)
其中:
位置编码(Positional Encoding)
与 RNN 和 LSTM 等顺序算法不同,Transformer 没有内置机制来捕获句子中单词的相对位置,所以在 Transformer 的 encoder 和 decoder 的输入层中,使用了 Positional Encoding,使得最终的输入满足:
原始正弦编码公式:
前馈网络(Feed Forward Network)
包括两个线性变换+ReLU 激活: