Transformer 是一种基于自注意力机制的深度学习模型,广泛应用于自然语言处理任务。以下是实现 Transformer 的关键步骤和注意事项:

核心概念 🔍

  • 自注意力机制:通过计算词与词之间的相关性,捕捉序列的全局依赖
  • 位置编码:为序列添加位置信息(如 sin/cos 函数或学习型编码)
  • 编码器-解码器结构:包含多层自注意力和前馈神经网络(如 encoder_layerdecoder_layer

实现步骤 🧰

  1. 构建注意力层

    # 示例:多头注意力机制
    class MultiHeadAttention(nn.Module):
        def __init__(self, d_model, num_heads):
            super().__init__()
            self.attention = nn.MultiheadAttention(d_model, num_heads)
    
    transformer_model
  2. 添加位置编码
    使用 position_encodinglearned_position_embeddings 处理序列位置信息

  3. 堆叠编码器/解码器块
    每个块包含:

    • 自注意力层(如 attention_mechanism
    • 前馈神经网络(如 feed_forward_network
    • 层归一化(layer_norm
    • 残差连接(residual_connection

代码示例 🧪

import torch
import torch.nn as nn

class TransformerModel(nn.Module):
    def __init__(self, vocab_size, d_model, nhead, num_layers):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, d_model)
        self.positional_encoding = nn.PositionalEncoding(d_model, dropout=0.1)
        self.transformer = nn.Transformer(d_model, nhead, num_layers)
        self.fc = nn.Linear(d_model, vocab_size)
    
    def forward(self, src, tgt):
        src = self.embedding(src) * torch.sqrt(torch.tensor(self.d_model, dtype=torch.float32))
        src += self.positional_encoding(src)
        tgt = self.embedding(tgt) * torch.sqrt(torch.tensor(self.d_model, dtype=torch.float32))
        tgt += self.positional_encoding(tgt)
        out = self.transformer(src, tgt)
        return self.fc(out)

扩展阅读 📚

attention_mechanism

注意:实际训练中需处理 padding_masksrc_key_padding_mask 等细节,建议参考 完整实现案例 获取更详细的代码结构