Self-Attention 计算公式与 Softmax 数值稳定:从推导到工程实现
副标题 / 摘要 Self-Attention 的公式很短,但工程细节很长:从 Q/K/V 计算到 softmax 数值稳定、mask 与缩放,每一步都影响效果与性能。本文用 ACERS 结构给出推导、实践步骤与可运行示例。 预计阅读时长:12~16 分钟 标签:attention、transformer、softmax SEO 关键词:Self-Attention, Softmax, Scaled Dot-Product, 数值稳定 元描述:Self-Attention 的计算公式与 softmax 稳定实现方法,含工程实践与示例代码。 目标读者 想真正理解 Self-Attention 公式含义的学习者 需要处理训练不稳定/溢出的工程实践者 关注注意力数值稳定与实现细节的开发者 背景 / 动机 在 Transformer 中,Self-Attention 是计算量最大、数值最敏感的模块之一。 很多训练不稳定、输出 NaN 的问题,都来自 softmax 的溢出/下溢或 mask 的错误处理。 理解公式与稳定实现,可以显著减少工程“踩坑”。 核心概念 Q/K/V:查询、键和值,来自输入线性投影 缩放点积注意力:$\text{softmax}(QK^\top/\sqrt{d_k})V$ 数值稳定:通过减去行最大值避免 softmax 溢出 思路推导(从朴素到稳定实现) 朴素做法 先算所有相似度 $S = QK^\top$,再做 softmax 得到权重 $P$,最后 $O = PV$。 这个实现最直观,但当 $S$ 很大时会出现 exp 溢出。 关键观察 softmax 对每行同时加上或减去一个常数不改变输出: $\text{softmax}(x) = \text{softmax}(x - \max(x))$。 ...