Transformer 学习笔记之可缩放点积注意力(Scaled‑Dot‑Product Attention)

Transformer 学习笔记之可缩放点积注意力(Scaled‑Dot‑Product Attention)

Q1: 在 scaled_dot_product_attention 中,Q、K、V 是张量吗?它们的形状是什么?
A: 是的,Q、K、V 都是 torch.Tensor。在进入注意力计算前,它们的形状为
(batch_size, n_heads, seq_len, d_k),其中 d_k = d_model // n_heads

Q2: 为什么需要 batch_size 参数?它的作用是什么?
A: batch_size 表示一次前向传播同时处理的样本数量。它用于并行计算,提高 GPU/CPU 利用率,并在训练时对多个样本的梯度进行累计,从而加速训练和提升数值稳定性。

Q3: scores = torch.matmul(Q, K.transpose(-2, -1)) / sqrt(d_k) 计算得到的矩阵是什么?
A: 该矩阵是 每个查询位置对所有键位置的注意力分数(相似度),形状为 (batch_size, n_heads, seq_len, seq_len),即每个头的分数矩阵。

Q4: 为什么对 scoressoftmax,得到的就是注意力权重?
A: softmax 将任意实数的分数映射为非负且归一化的概率分布(每行和为 1),因此得到的 attn_weights 表示查询在所有键上的关注程度,即注意力权重。

Q5: self.dropout(attn_weights) 的作用是什么?
A: Dropout 在训练时随机将部分注意力权重置为 0(并对剩余权重做尺度补偿),起到 正则化 的作用,防止模型过度依赖少数高权重位置,提高泛化能力。推理时自动关闭。

Q6: 为什么要把注意力权重乘以 V?
A: 乘以 V 实现 加权求和:对每个查询位置,将所有位置的 value 向量按注意力权重加权求和,得到该位置的上下文感知特征表示。即实现了“在考虑其它位置相关性后得到的聚合特征”。

Q7: 注意力分数矩阵是否包含所有头的分数?
A: 是的,scores 的第二维 n_heads 包含了每个注意力头的分数矩阵,形状 (batch_size, n_heads, seq_len, seq_len)

Q8: 在实际例子 “今天的天气真” 中,位置 “真” 对 “天气” 的注意力分数会高于对 “今天” 的分数吗?
A: 通常情况下,语义上更相关的词(如 “天气” 与 “真”)会得到更大的分数,但这取决于模型已学习的参数和具体任务。模型可能会给 “天气” 更高的分数,也可能给自身或其他词更高的分数,只有实际模型输出才能确认。

Q9: 总结注意力计算的完整流程是什么?
A:

  1. 投影:将输入 x 通过线性层得到 Q、K、V。
  2. reshape(batch, heads, seq_len, d_k)
  3. 计算分数scores = Q·Kᵀ / √d_k → shape (batch, heads, seq_len, seq_len)
  4. softmaxattn_weights(归一化注意力分布)。
  5. dropout(训练时) → 正则化。
  6. 加权求和output = attn_weights · V → 聚合特征。
  7. 拼接 & 投影:多头输出合并后通过线性层 W_o 恢复 d_model 维度。

附录
Paper: https://arxiv.org/abs/1706.03762
Transformer‑from‑Scratch: https://github.com/Breeze648/Transformer-from-Scratch

--END--

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容