Transformer:现代自然语言处理的革命性架构

发布于:2025-06-22 ⋅ 阅读:(12) ⋅ 点赞:(0)

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 长距离依赖 LlimhtLht0
其中 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}}} ERV×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 xL(Sublayer(x))L1

6. Decoder结构

Decoder在Encoder基础上增加:

  1. 掩码多头注意力:防止位置关注后续信息
  2. Encoder-Decoder注意力:融合源语言信息

掩码机制确保位置 i i i只能关注 j ≤ i j \leq i ji
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 jiotherwise

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通过以下创新解决了传统序列模型的局限:

  1. 完全注意力机制:捕获长距离依赖
  2. 并行计算结构:大幅提升训练效率
  3. 残差连接+层归一化:支持深层网络训练
  4. 位置编码:保留序列顺序信息

其架构公式可概括为:
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领域的发展。


网站公告

今日签到

点亮在社区的每一天
去签到