1. 引言
Transformer模型彻底改变了自然语言处理领域,它摒弃了传统的循环神经网络(RNN)结构,完全基于自注意力机制构建。这种架构在机器翻译、文本生成等任务中表现出色,成为当今NLP模型的基石。
2. Seq2Seq模型与Encoder-Decoder架构
传统的序列到序列(Seq2Seq)模型基于Encoder-Decoder架构:
- Encoder将输入序列编码为固定长度的上下文向量
- Decoder基于该向量生成目标序列
传统RNN-based模型的瓶颈在于:
lim L → ∞ ∂ h t ∂ h t − L ⏟ 长距离依赖 ≈ 0 \underset{\text{长距离依赖}}{\underbrace{\lim_{L \to \infty} \frac{\partial h_t}{\partial h_{t-L}}}} \approx 0 长距离依赖
L→∞lim∂ht−L∂ht≈0
其中 L L L表示时间步距离,导致梯度消失问题。
3. Transformer整体架构
Transformer创新性地采用堆叠的自注意力层:
4. Embedding层与位置编码
4.1 词嵌入
将离散词汇映射为连续向量空间:
E ∈ R V × d model \mathbf{E} \in \mathbb{R}^{V \times d_{\text{model}}} E∈RV×dmodel
其中 V V V是词汇表大小, d model d_{\text{model}} dmodel是嵌入维度。
4.2 位置编码
由于Transformer不含时序结构,需显式注入位置信息:
P E ( p o s , 2 i ) = sin ( p o s 10000 2 i / d model ) P E ( p o s , 2 i + 1 ) = cos ( p o s 10000 2 i / d model ) \begin{aligned} PE_{(pos,2i)} &= \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) \\ PE_{(pos,2i+1)} &= \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) \end{aligned} PE(pos,2i)PE(pos,2i+1)=sin(100002i/dmodelpos)=cos(100002i/dmodelpos)
其中 p o s pos pos是位置索引, i i i是维度索引。
5. Encoder结构
每个Encoder层包含两个核心子层:
5.1 多头自注意力
将输入拆分为 h h h个头并行处理:
MultiHead ( Q , K , V ) = Concat ( head 1 , … , head h ) W O \text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1,\dots,\text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,…,headh)WO
其中每个头计算:
head i = Attention ( Q W i Q , K W i K , V W i V ) \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)
5.2 前馈神经网络
位置全连接层提供非线性变换:
FFN ( x ) = max ( 0 , x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 FFN(x)=max(0,xW1+b1)W2+b2
5.3 层归一化与残差连接
每个子层都采用残差连接和层归一化:
LayerNorm ( x + Sublayer ( x ) ) \text{LayerNorm}(x + \text{Sublayer}(x)) LayerNorm(x+Sublayer(x))
这解决了深层网络的梯度消失问题:
∂ L ∂ x ≈ ∂ L ∂ ( Sublayer ( x ) ) ⋅ 1 \frac{\partial \mathcal{L}}{\partial x} \approx \frac{\partial \mathcal{L}}{\partial (\text{Sublayer}(x))} \cdot 1 ∂x∂L≈∂(Sublayer(x))∂L⋅1
6. Decoder结构
Decoder在Encoder基础上增加:
- 掩码多头注意力:防止位置关注后续信息
- Encoder-Decoder注意力:融合源语言信息
掩码机制确保位置 i i i只能关注 j ≤ i j \leq i j≤i:
Mask ( Q , K ) = { Q K T / d k if j ≤ i − ∞ otherwise \text{Mask}(Q,K) = \begin{cases} QK^T/\sqrt{d_k} & \text{if } j \leq i \\ -\infty & \text{otherwise} \end{cases} Mask(Q,K)={QKT/dk−∞if j≤iotherwise
7. 搭建Transformer关键组件
7.1 注意力计算核心
def scaled_dot_product_attention(Q, K, V, mask=None):
d_k = Q.size(-1)
scores = torch.matmul(Q, K.transpose(-2,-1)) / math.sqrt(d_k)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
attn = F.softmax(scores, dim=-1)
return torch.matmul(attn, V)
7.2 层归一化实现
class LayerNorm(nn.Module):
def __init__(self, features, eps=1e-6):
super().__init__()
self.gamma = nn.Parameter(torch.ones(features))
self.beta = nn.Parameter(torch.zeros(features))
self.eps = eps
def forward(self, x):
mean = x.mean(-1, keepdim=True)
std = x.std(-1, keepdim=True)
return self.gamma * (x - mean) / (std + self.eps) + self.beta
8. 总结
Transformer通过以下创新解决了传统序列模型的局限:
- 完全注意力机制:捕获长距离依赖
- 并行计算结构:大幅提升训练效率
- 残差连接+层归一化:支持深层网络训练
- 位置编码:保留序列顺序信息
其架构公式可概括为:
Transformer ( X ) = Decoder ( Encoder ( Embedding ( X ) + PE ) ) \text{Transformer}(X) = \text{Decoder}(\text{Encoder}(\text{Embedding}(X) + \text{PE})) Transformer(X)=Decoder(Encoder(Embedding(X)+PE))
Transformer已成为BERT、GPT等革命性模型的基础,持续推动NLP领域的发展。