Transformer架构详解:从自注意力到现代应用
引言
在深度学习的发展历程中,序列建模一直是一个核心挑战。传统的循环神经网络(RNN)和长短期记忆网络(LSTM)在处理序列数据时面临着梯度消失、难以并行化等固有局限。2017年,Vaswani等人在论文《Attention Is All You Need》中提出的Transformer架构,彻底改变了自然语言处理领域的格局。
Transformer的核心创新在于完全摒弃了循环结构,转而使用自注意力机制(Self-Attention)来捕捉序列中的依赖关系。这一设计不仅解决了RNN的并行化问题,还显著提升了模型对长距离依赖的建模能力。如今,Transformer已成为BERT、GPT、T5等现代NLP模型的基石,并扩展到计算机视觉、语音处理等多个领域。
技术原理详解
1. 自注意力机制
自注意力机制是Transformer的核心组件,它允许序列中的每个位置直接与其他所有位置交互,从而计算每个位置的表示。
技术术语解释:
- 查询(Query)、键(Key)、值(Value):注意力机制中的三个核心概念,分别用于计算注意力权重和加权求和
- 缩放点积注意力(Scaled Dot-Product Attention):通过点积计算相似度,并用缩放因子防止梯度消失
- 多头注意力(Multi-Head Attention):并行运行多个注意力头,捕捉不同类型的依赖关系
自注意力的数学公式如下:
1 | Attention(Q, K, V) = softmax(QK^T / √d_k)V |
其中d_k是键向量的维度,缩放因子√d_k用于防止点积过大导致softmax梯度消失。
2. Transformer架构组成
完整的Transformer架构包含以下关键组件:
2.1 编码器-解码器结构
- 编码器:由N个相同的层堆叠而成,每层包含多头自注意力层和前馈神经网络
- 解码器:同样由N个相同的层堆叠,但额外包含编码器-解码器注意力层
2.2 位置编码
由于Transformer没有循环结构,需要显式地注入位置信息:
1 | import numpy as np |
2.3 前馈神经网络
每个注意力层后接一个前馈网络:
1 | FFN(x) = max(0, xW1 + b1)W2 + b2 |
3. 关键技术细节
3.1 残差连接和层归一化
每个子层后都应用残差连接和层归一化:
1 | LayerNorm(x + Sublayer(x)) |
3.2 掩码机制
- 填充掩码:忽略填充位置
- 前瞻掩码:防止解码器看到未来信息
实战代码示例
示例1:实现缩放点积注意力
1 | import torch |
示例2:多头注意力实现
1 | class MultiHeadAttention(nn.Module): |
示例3:Transformer编码器层
class TransformerEncoderLayer(nn.Module):
"""Transformer编码器层"""
def __init__(self, d_model=512, num_heads=8, d_ff=2048, dropout=0.1):
super().__init__()
# 自注意力层
self.self_attention = MultiHeadAttention(d_model, num_heads, dropout)
# 前馈网络
self.feed_forward = nn.Sequential(
nn.Linear(d_model, d_ff),
nn.ReLU(),
nn.Dropout(dropout),
nn.Linear(d_ff, d_model)
)
# 层归一化
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
# Dropout
self.dropout = nn.Dropout(dropout)
def forward(self, x, mask=None):
# 自注意力子层
attention_output = self.self_attention(x, x, x, mask)
# 前馈网络子层
ff_output = self.feed_forward(attention_output)
ff_output =
- 本文作者: 来的太快的龙卷风
- 本文链接: https://my-hexo-blog-4i4.pages.dev/2026/02/03/2026-02-03-Transformer架构详解-fde8b1db/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!