Transformer 结构速览:自注意力机制笔记
《Attention Is All You Need》发表至今,Transformer 已经成为大模型的标配骨架。这篇笔记记录我对其核心组件的理解。
一、Self-Attention:一句话内部的"互相关注"
自注意力的核心思想:序列中每个 token 都根据内容计算与其他 token 的相关程度,然后加权汇总信息。每个 token 会生成三个向量:
- Q(Query):我在找什么
- K(Key):我是什么
- V(Value):我能提供什么信息
计算流程:Attention(Q,K,V) = softmax(QKᵀ / √d_k) · V。除以 √d_k 是为了防止点积过大导致 softmax 梯度消失。
二、Multi-Head Attention
单个注意力头只能学一种关注模式,多头机制把向量切成多份并行计算注意力,让模型同时捕捉"语法关系""指代关系""语义相似"等不同类型的依赖,最后拼接回原始维度。
三、位置编码
自注意力本身不区分词序(打乱顺序结果一样),所以必须额外注入位置信息。原始论文用正弦/余弦函数,现代模型多用可学习位置向量或旋转位置编码(RoPE)。
四、PyTorch 最小示例
import torch
import torch.nn as nn
# 多头自注意力,PyTorch 内置实现
mha = nn.MultiheadAttention(embed_dim=64, num_heads=8, batch_first=True)
x = torch.randn(2, 10, 64) # (batch, seq_len, dim)
out, weights = mha(x, x, x) # 自注意力:Q=K=V=x
print(out.shape) # torch.Size([2, 10, 64])
print(weights.shape) # 注意力权重 (2, 8, 10, 10) 可可视化
五、其他要点
- 残差连接 + LayerNorm:让深层网络可训练,现在主流是 Pre-Norm 结构。
- FFN 前馈层:每个位置独立的两层 MLP,参数量其实比注意力部分还大。
- Causal Mask:解码器生成时屏蔽未来 token,保证自回归特性。
一句话总结:Transformer = 自注意力(信息交换)+ FFN(信息加工)+ 残差归一化(稳定训练),堆叠 N 层就是现代大模型的主体。