楼层: 首页/ 算法与AI/ 附录 A · 核心公式深度推导
附

附录 A · 核心公式深度推导

Appendix A · 把 4.6 和 4.9 欠的账还清

正文里讲了"是什么"和"怎么用"。这里把反向传播和注意力的完整推导一步一步走完。数学不吓人,就是链式法则乘来乘去。

正文讲了"是什么和怎么用",这一附录把欠的推导账还清。为什么需要?公式会用但不知道怎么来的,换个网络结构你就懵。学完反向传播和自注意力的完整推导,你就敢看论文了。下一模块是毕业装备包。

本模块要学什么(按这个顺序学)
反向传播完整推导 → 自注意力梯度 → 前向/反传对照

A.1 反向传播完整推导(两层网络)

Backprop Step-by-Step · 拿一个具体例子走一遍

推网络定义

最简单两层网络:输入 x ∈ ℝ2,一个隐藏层(2 神经元,sigmoid 激活),一个输出(1 神经元,sigmoid)。损失用二次:L = ½(y−ŷ)²。

前向:

z₁ = W₁x + b₁  ∈ ℝ²,  a₁ = σ(z₁)
z₂ = W₂a₁ + b₂  ∈ ℝ,  ŷ = σ(z₂)

W₁ ∈ ℝ2×2,b₁ ∈ ℝ²,W₂ ∈ ℝ1×2,b₂ ∈ ℝ。σ'(z) = σ(z)(1−σ(z))。

导第一步:输出层梯度

先算最靠近 loss 的一层。定义 δ₂ = ∂L/∂z₂:

∂L/∂ŷ = ŷ − y
∂ŷ/∂z₂ = σ'(z₂) = ŷ(1−ŷ)
δ₂ = (ŷ − y) · ŷ(1−ŷ)

然后:

∂L/∂W₂ = δ₂ · a₁ᵀ(外积,标量×向量转置)
∂L/∂b₂ = δ₂(标量)

传第二步:往回传一层

先传到 a₁:∂L/∂a₁ = W₂ᵀ · δ₂(因为 z₂ = W₂a₁ + b₂,∂z₂/∂a₁ = W₂)。

再传到 z₁:δ₁ = ∂L/∂z₁ = (∂L/∂a₁) ⊙ σ'(z₁) = (W₂ᵀ δ₂) ⊙ [a₁ ⊙ (1−a₁)]。⊙ 是逐元素乘。

最后:

∂L/∂W₁ = δ₁ · xᵀ(2×1 乘 1×2 = 2×2)
∂L/∂b₁ = δ₁

更第三步:梯度下降更新

W₂ ← W₂ − η·∂L/∂W₂,  b₂ ← b₂ − η·∂L/∂b₂
W₁ ← W₁ − η·∂L/∂W₁,  b₁ ← b₁ − η·∂L/∂b₁

就这么简单。深 100 层就是把 δ 多传 98 次,公式一模一样。PyTorch 的 autograd 就是自动帮你算这些偏导。

防坑

为什么用交叉熵而不是 MSE 配 Sigmoid?看上面 δ₂ = (ŷ−y)·ŷ(1−ŷ)。如果 ŷ 接近 0 或 1(自信地错),ŷ(1−ŷ)≈0,梯度被乘没了。换成交叉熵后 δ₂ = ŷ−y(干净!),自信地错时梯度反而最大。这就是 4.4 节说"分类用交叉熵"的数学原因。

记
小结

① 反传就是从输出层往回算 δ = ∂L/∂z。② 每乘一个 Wᵀ 传一层。③ ∂L/∂W = δ·输入ᵀ。④ 交叉熵消除了 σ' 的梯度消失。

A.2 注意力机制完整推导

Attention Full Derivation · 为什么是 QKᵀ 除以 √dₖ 再 softmax

来Q/K/V 的直觉来源

假设我们要为第 i 个词生成新的表示。它需要从所有词那里"借"信息。怎么决定借谁的?

Query:第 i 个词提出的问题——"我需要什么样的信息?"。Key:每个词的"标签"——"我有什么样的信息?"。Value:每个词实际携带的内容。

Q 跟所有 K 比匹配度,匹配度高的词多借它的 V。这就是检索系统:query 搜 key,取 value。

证为什么用点积 QKᵀ

点积 q·k = ‖q‖‖k‖cos θ,两个向量方向越一致,点积越大。这是最简单、最可微的相似度度量,而且能高效矩阵化(GPU 最爱)。

但点积值的范围取决于维度。设 q, k 各分量独立 N(0,1),点积 q·k = ∑j=1..dk qjkj,每个乘积均值 0、方差 1,dk 个求和后方差 = dk,标准差 = √dk。

所以 QKᵀ/√dk 把方差拉回 1,softmax 输入在合理范围,不会饱和。

软softmax 为什么必须

相似度 scores 是任意实数,不能直接当权重。softmax 把它们变成和为 1 的非负概率:softmax(s)i = exp(si)/∑j exp(sj)。

为什么不用简单归一化(除以和)?因为相似度有正负,除以和可能出现负权重。softmax 用 exp 保证非负,且放大差异——大的相似度权重更大,小的趋近 0。这正是"注意力"想要的:只关注最相关的。

记
小结

① Q 找信息,K 提供标签,V 提供内容。② 点积测相似度,√dk 防饱和。③ softmax 归一化为概率并放大差异。④ 整套就是"可微的软检索"。

A.3 梯度下降的收敛性直觉

Why Gradient Descent Converges · 为什么往梯度反方向走能走到谷底

直觉泰勒展开看一步走多少

在当前点 θ 附近做一阶泰勒展开:L(θ − ηg) ≈ L(θ) − η·g·g + O(η²) = L(θ) − η‖g‖²。

只要 η 足够小,每步损失都下降 η‖g‖²。梯度越大走得越多,梯度越小走得越少——自动在陡峭处大步、平缓处小步。

为什么不能太大?η 太大会走过头,甚至跳上更高的山。为什么不能太小?收敛太慢。学习率调度(见 6.5)就是在不同阶段调 η。

凸优化保证收敛:损失函数是凸的(如线性回归的 MSE),梯度下降必到全局最优。神经网络损失非凸,只能到局部最优/鞍点——但实践中大网络"够好的局部最优"已经够用。

记
小结

① 一阶泰勒展开保证小 η 下每步下降。② 凸函数到全局最优,非凸到局部最优。③ 学习率是最重要超参。

费曼学习法:讲给别人听

① 用自己的话解释:对着一个两层网络,从 loss 往回手推一遍 ∂L/∂W₁。

② 举个反例 / 生活例子:反例——为什么网络深了梯度会消失/爆炸?推导里哪一步是连乘?

③ 哪里还说不清:推导中哪一步你还需要翻书?把它标成第一个要复习的点。