The Illustrated Transformer
Jay Alammar 的可视化讲解
一句话定义:Attention 机制是一种让模型在处理数据时,能够动态关注重要部分并忽略无关部分的机制。它通过计算查询 (Query) 与键 (Key) 的相似度,来决定从值 (Value) 中提取多少信息。
它是 Transformer 架构的核心,解决了长序列依赖问题。
想象你在图书馆查资料写论文。
过程:
观察每个词对其他词的注意力权重分布,理解 Self-Attention 的工作原理。
💡 点击左侧 Query 词高亮其注意力分布 | 调节 Temperature 观察分布变化
Scaled Dot-Product Attention 的核心公式:
多头注意力让模型同时关注不同的语义空间(如一个头关注语法,一个头关注指代)。
其中每个 head:
import torchimport torch.nn.functional as Fimport math
def scaled_dot_product_attention(query, key, value, mask=None): d_k = query.size(-1)
# 1. 计算相似度分数 QK^T / sqrt(d_k) scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k)
# 2. 掩码 (可选,用于 Decoder 屏蔽未来信息) if mask is not None: scores = scores.masked_fill(mask == 0, -1e9)
# 3. Softmax 归一化 -> 得到 Attention 权重 p_attn = F.softmax(scores, dim=-1)
# 4. 加权求和 -> p_attn * V return torch.matmul(p_attn, value), p_attn
# 示例数据d_model = 512heads = 8batch_size = 1
# 假设已经投影好的 Q, K, V# [Batch, Seq_Len, d_model]q = torch.randn(batch_size, 10, d_model)k = torch.randn(batch_size, 10, d_model)v = torch.randn(batch_size, 10, d_model)
output, weights = scaled_dot_product_attention(q, k, v)print(f"Output shape: {output.shape}")print(f"Weights shape: {weights.shape}")逐步观察 Self-Attention 的完整计算过程:Q/K/V 投影 → 分数计算 → Softmax → 输出。
💡 点击步骤查看计算流程 | 悬停 token 查看注意力分布