想象你是一位山地导航员,手里有张老式地图,地图上画着规整的网格线:横一格、竖一格。可真实的山地不是平整的——有的地方一格对应一公里平地,有的地方一格对应三公里陡坡。如果你只知道“往东走一格、往北走一格”,在陡坡区域你会走得跌跌撞撞,常常绕路;而如果你能先看清楚每个局部的“真实比例尺”,把地图上的移动换算成真实山路的距离,再决定方向,那么每一步都会踏得又快又稳。 机器学习里的梯度下降,很像这个场景。模型的“参数”就是地图上的网格坐标,而模型真正表达的概率分布,才是你脚下的真实地形。普通梯度按参数坐标走,遇到参数缩放就容易跑偏;自然梯度(Natural Gradient)则先用一个叫“Fisher信息矩阵”的尺度修正器,把每步移动换算成“分布空间里的真实距离”,再按分布的方向走。本文就用这个“山地导航”比喻,带你从零看懂:Fisher信息是什么、自然梯度怎么推出来,以及它如何在变分推断和强化学习的TRPO/PPO里大显身手。

岗位关联

对 AI 从业者来说,自然梯度是概率模型、贝叶斯推断、策略优化类任务的“稳定器”,掌握了它,就能解释并改善小批量训练不稳、收敛绕圈、超参数敏感等常见痛点。

目录
  1. 可视化演示
  2. 梯度方向之困
  3. 分布空间视角
  4. Fisher信息
  5. 自然梯度推导
  6. 工程近似
  7. 变分推断应用
  8. 强化学习应用
  9. 实践要点
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示普通梯度与自然梯度在参数空间中的不同下降方向,以及Fisher信息矩阵如何修正梯度方向使优化更稳定。

本节配有交互动效(进入视口后自动加载,约 3KB)。

自然梯度 vs 普通梯度 普通梯度:欧氏空间最速下降方向∇L 自然梯度:分布空间最速下降F⁻¹∇L Fisher矩阵F:度量参数变化对分布的影响 ∇̃L = F⁻¹·∇L 自然梯度按分布空间而非参数空间走

梯度方向之困

导航员拿到两张同一座山的地图:一张以“东-北”为坐标,一张以“山脊线-山谷线”为坐标。按理说目的地相同,但如果你在每张地图上都“垂直于等高线走一格”,两条路线会差得十万八千里。机器学习也有这个现象:同样一个预测分布,你可以用“均值 μ、方差 σ²”来写参数,也可以用“均值 μ、精度 1/σ²”来写。两者表达的是同一个模型,但普通梯度下降在两种写法下的行走轨迹完全不同——这就是“参数化依赖”。

用一个简单例子理解:假设目标损失在参数空间中是 $L(\theta_1,\theta_2)=\theta_1^2+4\theta_2^2$,它的等值线是一圈圈被纵向拉伸的椭圆。从点 $(4,4)$ 出发,普通梯度每一小步都垂直于等值线,也就是按照 $\theta_1$ 和 $\theta_2$ 各自的方向衰减。因为 $\theta_2$ 方向上的坡度更陡,它会先很快地把 $\theta_2$ 压到接近 0,再慢慢挪动 $\theta_1$——看上去就像先垂直冲下悬崖、再沿山脚绕一个大弯。这就是“步长失调”:同一个学习率在一个方向嫌大、在另一个方向嫌小,设置不好就会来回振荡或迟迟不收敛。

这正是导航员感到困惑的地方:我明明是沿着“图上最陡的方向”走的,为什么真实路线这么曲折?因为地图的比例尺在各个方向不一样,而普通梯度把坐标格子当成了真实世界的等长距离。要用好梯度,不该只看地图格子,而该看真实地形——也就是分布空间。等值线被参数化拉成椭圆的那一刻,普通梯度就已经输了方向。

分布空间视角

换个思路:与其纠结参数坐标怎么选,不如直接问“模型预测的分布长什么样”。模型 $p_\theta(x)$ 才是真身,参数 $\theta$ 只是一张地图的坐标标注。同一座山用“东-北”或“山脊-山谷”两张地图表达,但山没变;同一个预测分布用不同参数表达,分布没变。所谓“自然”,就是不依赖地图标注,只依赖真实分布之间的移动。

那怎么度量两个分布之间的距离?最常用的不是欧氏距离,而是 KL 散度。两个分布的参数只差一个很小的 $\delta$ 时,KL 散度近似为一个二次型:

这个 $\mathcal{F}(\theta)$ 正好就是 Fisher 信息矩阵。它告诉我们:图上移动 $\delta$,在分布空间里实际走出多远。

现在,导航员的工具箱里有了“真实比例尺”:不在地图格子上乱走,而用 KL 散度这个“真实里程表”来度量每一步。接下来的问题是:这个里程表具体怎么读?答案就在 Fisher 信息矩阵里。

DKL(pθ ∥ pθ+δ)  ≈  12 δ⊤F(θ) δD_{\mathrm{KL}}\big(p_\theta\,\|\,p_{\theta+\delta}\big)\;\approx\;\tfrac12\,\delta^\top \mathcal{F}(\theta)\,\delta
公式的通俗意思是:分布之间的距离不是一个简单的“参数差平方”,而是要乘上一个由 Fisher 信息给出的局部比例尺。
  1. KL 散度的定义从分布 $p_\theta$ 到 $p_{\theta+\delta}$ 的 KL 散度衡量的是“用后者近似前者时丢失的信息量”,它不是对称的,但在局部很小范围内可以近似。
    DKL(pθ∥pθ+δ)=Ex∼pθ[log⁡pθ(x)pθ+δ(x)]D_{\mathrm{KL}}(p_\theta \| p_{\theta+\delta}) = \mathbb{E}_{x\sim p_\theta}\left[\log \frac{p_\theta(x)}{p_{\theta+\delta}(x)}\right]
  2. 对 $\delta$ 做泰勒展开把对数似然比按 $\delta$ 展开,零阶项为 0,一阶项期望也为 0,剩下的是二阶项。
    log⁡pθ(x)pθ+δ(x)≈−δ⊤∇θlog⁡pθ(x)+12δ⊤∇θ2log⁡pθ(x) δ\log \frac{p_\theta(x)}{p_{\theta+\delta}(x)} \approx -\delta^\top \nabla_\theta \log p_\theta(x) + \tfrac12 \delta^\top \nabla_\theta^2 \log p_\theta(x)\,\delta
  3. 取期望得到二次型一阶项取期望为 0,二阶项取期望后得到 Fisher 信息矩阵,于是散度近似为半正定二次型。
    E[12δ⊤∇θ2log⁡pθ(x) δ]=12δ⊤F(θ) δ\mathbb{E}\left[\tfrac12 \delta^\top \nabla_\theta^2 \log p_\theta(x)\,\delta\right] = \tfrac12 \delta^\top \mathcal{F}(\theta)\,\delta

Fisher信息

Fisher 信息矩阵 $\mathcal{F}(\theta)$ 有三个等价的直观:它是“对数似然梯度”的外积期望;它是负对数似然的期望二阶导;它是分布流形在参数点处的局部曲率。山地图的比例尺告诉你“此区域一格格子 = 多少公里”,Fisher 信息则告诉你“此参数点附近动一格 = 分布移动多少”。

如果某个参数方向对分布影响很大,那么对数似然沿该方向的梯度也大,Fisher 信息就大——意味着在这个方向上“一格参数变化”会造成很大的分布移动。反之,若某个方向对分布几乎没影响,Fisher 信息就很小,多走几步也无妨。它还等价于负对数似然的期望 Hessian:$\mathcal{F}(\theta)=-\mathbb{E}[\nabla_\theta^2\log p_\theta(x)]$,所以它同时是曲率、方差、信息量三合一。

Fisher 信息矩阵对任意参数化下的真实分布都有效,它就像一张“动态比例尺地图”:无论你把参数写成 $\sigma^2$ 还是 $1/\sigma^2$,它都能换算成分布空间里的真实距离。有了这把尺子,就可以推导自然梯度了。

F(θ)=Ex∼pθ ⁣[∇θlog⁡pθ(x)  ∇θlog⁡pθ(x)⊤]\mathcal{F}(\theta)=\mathbb{E}_{x\sim p_\theta}\!\left[\nabla_\theta \log p_\theta(x)\;\nabla_\theta \log p_\theta(x)^\top\right]
通俗解释:Fisher 信息就是“参数空间里每单位英寸对应的真实英里数”,它是一个随位置变化的局部比例尺。
  1. 取对数似然给定参数 $\theta$,样本 $x$ 的对数似然是 $\log p_\theta(x)$,它是梯度的“原材料”。
    ℓx(θ)=log⁡pθ(x)\ell_x(\theta)=\log p_\theta(x)
  2. 求梯度并做外积对 $\ell_x(\theta)$ 求梯度,得到一个向量;把向量与自身转置相乘,得到外积矩阵。
    ∇θℓx(θ)  ∇θℓx(θ)⊤\nabla_\theta \ell_x(\theta)\;\nabla_\theta \ell_x(\theta)^\top
  3. 对所有样本取期望在真实分布 $p_\theta$ 下对 $x$ 求期望,得到半正定矩阵 $\mathcal{F}(\theta)$,这就是 Fisher 信息矩阵。
    F(θ)=Ex∼pθ[∇θℓx(θ)∇θℓx(θ)⊤]\mathcal{F}(\theta)=\mathbb{E}_{x\sim p_\theta}\left[\nabla_\theta \ell_x(\theta)\nabla_\theta \ell_x(\theta)^\top\right]

自然梯度推导

导航员的新策略:每走一步,先用比例尺换算一下“这一步会让真实位置移动多远”,然后选择在真实地形上最陡的下坡方向。数学上,这对应一个带约束的最优化问题:

目标函数是损失的一阶近似,约束条件是“分布空间里的移动距离不超过一个小常数 $\varepsilon$”。用拉格朗日乘子法解这个约束极值,可以得到最优移动方向正比于 $\mathcal{F}(\theta)^{-1}\nabla_\theta L(\theta)$。因此自然梯度定义为:

自然梯度与牛顿法的区别要分清:牛顿法用的是损失函数的 Hessian $\nabla_\theta^2 L$,自然梯度用的是 Fisher 信息矩阵 $\mathcal{F}$。后者只依赖模型分布本身,不依赖损失的具体形状,因此对不同参数化有天然的“不变性”。有了这个不变量,导航员不管换哪张地图,都能走出同一条真实路线。

min⁡δ  ∇θL(θ)⊤δs.t.12 δ⊤F(θ) δ≤ε\min_{\delta}\;\nabla_\theta L(\theta)^\top \delta\quad\text{s.t.}\quad\tfrac12\,\delta^\top \mathcal{F}(\theta)\,\delta\le \varepsilon
∇natL(θ)=F(θ)−1 ∇θL(θ)\nabla_{\mathrm{nat}} L(\theta)=\mathcal{F}(\theta)^{-1}\,\nabla_\theta L(\theta)
通俗解释:普通梯度告诉你“在这个坐标系里往哪走最陡”,自然梯度则告诉你“在真实分布地形上往哪走最陡”。两者差一个 $\mathcal{F}^{-1}$ 的修正。
  1. 写出局部优化问题在当前参数 $\theta$ 附近,用一阶泰勒展开近似损失变化量,并加入 KL 移动距离的约束。
    min⁡δ  ∇θL⊤δs.t.  12δ⊤Fδ≤ε\min_{\delta}\; \nabla_\theta L^\top \delta \quad \text{s.t.}\; \tfrac12\delta^\top \mathcal{F}\delta\le \varepsilon
  2. 构造拉格朗日函数把约束并入目标函数,引入乘子 $\lambda$,转成无约束优化。
    L(δ,λ)=∇θL⊤δ+λ ⁣(12δ⊤Fδ−ε)\mathcal{L}(\delta,\lambda)=\nabla_\theta L^\top \delta+\lambda\!\left(\tfrac12\delta^\top \mathcal{F}\delta-\varepsilon\right)
  3. 对 $\delta$ 求导并令其为零得到 $\nabla_\theta L+\lambda \mathcal{F}\delta=0$,移项得到最优移动方向正比于 $\mathcal{F}^{-1}\nabla_\theta L$。
    \delta^\*=-\frac{1}{\lambda}\,\mathcal{F}^{-1}\nabla_\theta L
  4. 舍去标量因子并入学习率常数 $1/\lambda$ 可以合并到学习率里,得到自然梯度的标准形式。
    θt+1←θt−η F−1∇θL\theta_{t+1}\leftarrow \theta_t-\eta\,\mathcal{F}^{-1}\nabla_\theta L

工程近似

理论上自然梯度很漂亮,可真正算起来,Fisher 信息矩阵的维度等于参数个数。大模型里参数动辄百万,你不可能真的把 $F$ 存下来再求逆——就像你不可能给整座山每一寸都测一次比例尺。工程上怎么办?答案是近似。

第一种是对角近似:只保留 Fisher 矩阵对角线元素,把矩阵变成一个向量,逐元素缩放梯度。这等于假设各参数方向互不影响,像把山地比例尺简化成“每个格点单独一个换算系数”,虽然粗糙但成本极低。第二种是共轭梯度法:不求 $F^{-1}$ 本身,而是每次需要乘以 $F^{-1}v$ 时,用数十次矩阵向量乘法迭代逼近,适合 TRPO 这类需要高精度的场景。第三种是小批量经验估计:用当前 batch 的梯度外积的平均来替代期望,类似用一小段真实山路来估比例尺,batch 越大越准但噪声越小越慢。

还有一种经典结构能精确计算:当模型是高斯分布时,$\mathcal{F}$ 有闭式解,比如均值的 Fisher 信息就是精度矩阵,方差的 Fisher 信息是 $1/(2\sigma^4)$。这解释了为什么很多概率模型、变分推断代码里会出现“方差方向学习率自动缩小”的现象——那不是玄学,而是 Fisher 比例尺在起作用。工程近似让自然梯度从理论走向实用,代价是精度换速度。

变分推断应用

变分推断的目标是用一个简单分布 $q_\phi(z)$ 去逼近复杂的后验 $p(z|x)$,优化目标是最小化两者之间的 KL 散度,等价于最大化证据下界 ELBO。问题是 $q_\phi$ 的参数 $\phi$ 怎么更新?普通梯度在参数空间里走,依然会遇到“均值方向很好走、方差方向很敏感”的失调问题。

自然梯度在这里如鱼得水。对变分分布来说,$\mathcal{F}$ 就是 $q_\phi$ 的 Fisher 信息矩阵,而自然梯度更新公式为:

这等于对 ELBO 梯度做了分布空间的比例尺修正:均值方向的梯度会被缩小(因为均值一个单位对应分布较大的真实位移),方差方向的梯度会被自动校准(防止一步跨太远)。实际观感是:同样的学习率下,自然梯度收敛更稳,不再需要为每个变分参数单独调学习率。

在贝叶斯神经网络、概率编程库(如 Pyro、TensorFlow Probability)中,很多优化器都直接支持自然梯度。你只要选一个“NaturalGradient”优化器,它内部维护并近似 Fisher 矩阵,然后把 ELBO 当普通损失传进去即可。对从业者来说,这意味着不用再为了“方差崩了”“均值不动”而手调学习率。

ϕ←ϕ+η F−1 ∇ϕELBO(ϕ)\phi \leftarrow \phi + \eta\,\mathcal{F}^{-1}\,\nabla_\phi \mathrm{ELBO}(\phi)
通俗解释:变分推断就像在云雾里给后验山画轮廓线,自然梯度保证你每画一笔都落在“真实地形”而不是“地图格子”上,所以轮廓线一次比一次准。

强化学习应用

强化学习中,策略梯度方法要更新策略网络 $\pi_\theta(a|s)$ 的参数 $\theta$,通常用采样回报来估计梯度。但策略梯度的方差大、步长难设,一步走太大政策分布就可能崩坏,就像导航员在大雾里猛地跨出一大步,结果踩空。TRPO 和 PPO 正是针对这个问题提出的。

TRPO 的优化目标是:

PPO 则更“工程化”:它不直接解约束,而是把约束换成目标里的裁剪项,限制重要性权重在 $[1-\epsilon,1+\epsilon]$ 之间。这样既保留了“别走太远”的思想,又只需一次前向就能算出梯度,训练更快。可以说,TRPO 是自然梯度的“教科书版”,PPO 是自然梯度的“量产版”。策略梯度从业者即使不直接算 Fisher 矩阵,也每天都在享受自然梯度的红利。

\max_{\theta}\;\mathbb{E}_{s,a}\!\left[\frac{\pi_\theta(a|s)}{\pi_{\theta_{\mathrm{old}}}(a|s)}\,A^{\pi_{\theta_{\mathrm{old}}}}(s,a)\right]\quad\text{s.t.}\quadD_{\mathrm{KL}}\big(\pi_{\theta_{\mathrm{old}}}\,\|\,\pi_\theta\big)\le \delta
通俗解释:TRPO 的约束“新旧策略的 KL 散度不能超过 δ”,和自然梯度的“KL 约束球”是同一个思路——策略只能在信任域里稳步前进。
  1. 写出重要性采样目标用旧策略采样的数据来估计新策略的回报,比值 $\pi_\theta/\pi_{\theta_{\mathrm{old}}}$ 是重要性权重。
    max⁡θ  Es,a[πθ(a∣s)πθold(a∣s) A(s,a)]\max_\theta\; \mathbb{E}_{s,a}\left[\frac{\pi_\theta(a|s)}{\pi_{\theta_{\mathrm{old}}}(a|s)}\,A(s,a)\right]
  2. 加入 KL 约束新策略不能离旧策略太远,用 KL 散度度量并设置上限 $\delta$。
    DKL(πθold∥πθ)≤δD_{\mathrm{KL}}(\pi_{\theta_{\mathrm{old}}}\|\pi_\theta)\le\delta
  3. 近似求解自然梯度方向对 KL 约束做二阶展开,得到 $F^{-1}\nabla_\theta L$,再用共轭梯度求近似解,最后用线搜索确保 KL 不超限。
    θ←θ+η F−1∇θL\theta\leftarrow \theta+\eta\,F^{-1}\nabla_\theta L

实践要点

自然梯度虽好,落地时另有三条心得。第一,学习率自动缩放:Fisher 矩阵天然编码了每个参数方向上的敏感度,所以你常看到一个现象——均值类参数用大学习率没事,方差类参数用同样学习率就爆炸;自然梯度能一次性解决,但如果你只用普通 SGD,就必须手动按比例缩小方差方向的学习率。第二,善用结构:高斯策略、高斯变分分布这些常见结构,Fisher 矩阵有解析式,不要盲目采样估计;例如高斯均值的 F 等于精度,方差的 F 等于 $1/(2\sigma^4)$,知道这个闭式解能省下大量计算。第三,与 Adam 配合而非对立:Adam 按梯度二阶矩的对角线做缩放,类似“自适应学习率”,但它没有使用分布结构信息;实践中可以先做“自然梯度方向”的变换、再用 Adam 的动量做平滑,两者分工明确。

落地时的迭代代价也要心里有数:完整 Fisher 矩阵求逆是 $O(n^3)$,对角近似是 $O(n)$,共轭梯度是 $O(k n^2)$——你要根据模型规模和精度需求选一个档位。低维概率模型可以用精确逆,中等维度用对角近似,超大模型干脆用 K-FAC 或 Shampoo 这类更花哨的拟自然梯度方法。导航员最后总结:没有一张万能地图,但知道比例尺在哪、怎么用,比换十张地图都管用。

AI 应用场景

贝叶斯神经网络的变分推断

阶段:模型训练与优化

解决的问题:训练贝叶斯神经网络时,权重后验用均值场高斯近似,普通梯度在方差参数上极不稳定,经常出现“均值还没收敛、方差先崩了”的情况。自然梯度通过对 Fisher 矩阵的修正,让均值方向和方差方向按分布空间统一尺度更新,大幅减少超参数调优成本。

具体案例:某推荐系统团队用 Pyro 训练贝叶斯用户嵌入模型,之前每 500 步就要衰减一次学习率防振荡,换成 NaturalSGD 后,一套初始学习率跑完整轮训练,AUC 提升稳定,线上推理的置信区间也更贴合实测。

强化学习 TRPO/PPO 训练机器人策略

阶段:策略优化与采样训练

解决的问题:策略梯度更新时,一步跨太大策略分布就崩坏,跨太小又学得慢。TRPO 用 KL 信任域约束策略更新,本质上是自然梯度加线搜索;PPO 用裁剪近似实现同一思想,让大规模并行采样训练稳定推进。

具体案例:某机器人实验室用 PPO 训练四足机器人步态,旧实现每 10 万步就会因策略突变导致仿真崩溃,加入信任域约束后连续训练 100 万步无发散,真实机器人转移成功率提高一倍。

概率模型的小批量稳健训练

阶段:小批量梯度估计

解决的问题:隐变量模型(如高斯混合模型、因子分析)用普通批量梯度下降时,参数空间存在“窄谷”,小批量估计的噪声会放大振荡。自然梯度通过 Fisher 矩阵的曲率缩放,把噪声方向压平,使小批量训练稳定。

具体案例:某风控团队训练高斯混合模型做异常检测,batch size 从 4096 降到 256 后普通梯度损失曲线剧烈抖动,改用自然梯度后曲线平滑,且训练时间缩短了 60%。

Python 演示

python55 行
import numpy as np  def make_data(n=200, seed=42):    rng = np.random.default_rng(seed)    X = rng.normal(0.0, 1.0, (n, 2))    w_true = np.array([3.0, -1.5])    y = X @ w_true + rng.normal(0.0, 0.5, n)    return X, y  def nll(theta, X, y):    w = theta[:2]    sigma2 = np.exp(theta[2])    n = len(y)    r = y - X @ w    return 0.5 * n * np.log(2 * np.pi * sigma2) + np.sum(r * r) / (2 * sigma2)  def grad_nll(theta, X, y):    w = theta[:2]    sigma2 = np.exp(theta[2])    n = len(y)    r = y - X @ w    g_w = -(X.T @ r) / sigma2    g_log_s2 = 0.5 * n - np.sum(r * r) / (2 * sigma2)    return np.concatenate([g_w, [g_log_s2]])  def fisher_matrix(theta, X, y):    n = len(y)    sigma2 = np.exp(theta[2])    F = np.zeros((3, 3))    F[:2, :2] = (X.T @ X) / sigma2    F[2, 2] = n / 2.0    return F  def run():    X, y = make_data()    theta0 = np.array([0.0, 0.0, 0.0])    lr = 0.05    th_gd = theta0.copy()    th_ng = theta0.copy()    for _ in range(100):        g = grad_nll(th_gd, X, y)        th_gd -= lr * g        g = grad_nll(th_ng, X, y)        th_ng -= lr * np.linalg.solve(fisher_matrix(th_ng, X, y), g)    print("GD final loss:    %.4f" % nll(th_gd, X, y))    print("NaturalGD loss:   %.4f" % nll(th_ng, X, y))  if __name__ == "__main__":    run()
目的:在高斯线性回归上对比普通梯度与自然梯度的收敛效果,演示 Fisher 矩阵修正带来的稳定性提升。
  1. def fisher_matrix(theta, X, y):构造线性回归的高斯似然 Fisher 矩阵,均值部分用 XᵀX/σ²,方差部分用 n/2,这是该模型的闭式解。
  2. g_w = -(X.T @ r) / sigma2计算损失对权重参数的梯度,普通梯度就是直接用它更新。
  3. np.linalg.solve(fisher_matrix(th_ng, X, y), g)用线性求解器计算 F⁻¹g,比显式求逆更数值稳定,这就是自然梯度方向。
  4. th_gd -= lr * g普通梯度只按坐标方向走,容易在窄谷中绕路。
  5. if __name__ == "__main__":提供独立可执行的入口,方便读者直接运行对比。

常见误区

误区自然梯度用了二阶信息,一定比普通 SGD 慢一个数量级,训练大模型根本没法用。

正解自然梯度确实要构造 Fisher 矩阵,但工程上常配合对角近似、共轭梯度、K-FAC 等方法使用,并不是每次都要算完整逆矩阵。它在收敛步数和调参成本上往往更省。比如高斯模型里 Fisher 有闭式解,几乎零额外开销。

为何常见:人们容易把“理论公式里的矩阵求逆”直接等同于“实际实现”,忽略了工程近似这一层。

误区反正都是二阶导,Fisher 就是负对数似然的 Hessian,两者可以随便互换。

正解Fisher 是 $-\mathbb{E}[\nabla^2\log p]$,而损失 Hessian 是 $\nabla^2 L$。只有当模型分布正确且损失就是负对数似然时两者才相等。在不匹配的模型下,Hessian 可能不是半正定的,Fisher 则永远半正定,所以自然梯度更稳定。

为何常见:两者在 Gaussian 模型的最优点附近数值接近,容易让人误以为等价。

误区KL 散度是分布距离,距离应该对称,Fisher 矩阵作为它的二阶近似自然对称。

正解KL 散度本身不对称:$D_{KL}(p\|q)\ne D_{KL}(q\|p)$。但局部二阶近似后,二次项系数恰好是 Fisher 矩阵,它是对称半正定的。这个“局部对称性”是几何流形的性质,不代表全局 KL 对称。

为何常见:人们把“二阶近似后对称”误当成“原度量对称”,忽略了泰勒展开只在小邻域内有效。

误区既然 TRPO 等价于自然梯度,PPO 又比 TRPO 好,那 PPO 就是自然梯度的完整实现。

正解PPO 用梯度裁剪近似 TRPO 的 KL 约束,不再显式计算 Fisher 矩阵,也不再做共轭梯度和线搜索。它继承了“信任域”的思想,但走的是工程捷径,严格说只是自然梯度的近似变体。

为何常见:两种方法的目标函数长得像,且都被归为“信任域策略优化”,容易混淆实现细节。

面试题

Q1. Fisher 信息矩阵的定义中,是用哪一项构造矩阵的?

单选题 · easy

  • A.对数似然一阶导的外积期望← 正确答案
  • B.损失函数梯度的二阶矩
  • C.参数后验分布的协方差
  • D.似然函数的二阶中心矩

答案:A。Fisher 信息是 $F=\mathbb{E}[\nabla\log p\,\nabla\log p^\top]$,即对数似然梯度与其自身转置做外积后取期望。B 少了“对数似然”和“外积”结构;C 是贝叶斯后验的量;D 是普通矩的定义,都和 Fisher 无关。

Q2. 普通梯度方向会随参数化变化,根本原因是?

单选题 · easy

  • A.未按 Fisher 矩阵做尺度归一化← 正确答案
  • B.学习率设置得太大
  • C.训练数据不够多
  • D.模型不是深度网络

答案:A。普通梯度在参数网格上垂直于等高线,参数换了坐标系(如从 σ 换成 σ²),同一个“单位步长”的真实分布位移就变了。Fisher 矩阵负责记录这个尺度变化,缺了它梯度方向就随参数化漂移。

Q3. KL 散度在二阶近似下等于下列哪一项?

单选题 · mid

  • A.$-\tfrac12\delta^\top F\delta$
  • B.$\tfrac12\delta^\top F\delta$← 正确答案
  • C.$\delta^\top F^{-1}\delta$
  • D.$\tfrac13\delta^\top F\delta$

答案:B。对 $D_{KL}(p_\theta\|p_{\theta+\delta})$ 做泰勒展开,一阶项期望为 0,二阶项给出 $\tfrac12\delta^\top F\delta$。负号或反了矩阵都是错的,系数 1/3 也没有依据。

Q4. 自然梯度的更新公式是?

单选题 · mid

  • A.$\theta \leftarrow \theta - \eta\, F\,\nabla L$
  • B.$\theta \leftarrow \theta - \eta\, F^{-1}\nabla L$← 正确答案
  • C.$\theta \leftarrow \theta - \eta\, \nabla L\, F^{-1}$
  • D.$\theta \leftarrow \theta - \eta\, (\nabla L)^\top F$

答案:B。从 KL 约束优化问题推出的最优方向是 $F^{-1}\nabla L$,所以更新式是 $\theta-\eta F^{-1}\nabla L$。A 把矩阵放反了;C 是向量乘矩阵顺序错;D 根本不出现在梯度更新里。

Q5. 下列关于自然梯度与牛顿法区别的说法正确的是?

单选题 · mid

  • A.两者完全等价
  • B.牛顿法用损失 Hessian,自然梯度用 Fisher 矩阵← 正确答案
  • C.自然梯度用二阶导但牛顿法不用
  • D.自然梯度只适用线性模型

答案:B。牛顿法是 $\nabla^2 L$ 的逆乘以梯度,自然梯度是 $F$ 的逆乘以梯度。Fisher 只依赖模型分布,因此对参数化有不变性;Hessian 依赖损失曲面。两者在模型正确时偶有重合,但不能画等号。

Q6. TRPO 与自然梯度的关系,最准确的描述是?

单选题 · hard

  • A.TRPO 是自然梯度思想加共轭梯度近似和线搜索← 正确答案
  • B.TRPO 就是 Adam 优化器
  • C.TRPO 直接用完整 Fisher 矩阵求逆
  • D.TRPO 用二阶 Hessian 替代 Fisher

答案:A。TRPO 目标函数里带 KL 约束,展开后正是自然梯度方向;实际实现用共轭梯度近似 $F^{-1}$ 并加线搜索确保约束满足。它不是 Adam,也不会显式求完整逆矩阵,更不用 Hessian。

Q7. 变分推断中自然梯度的主要收益是?

单选题 · mid

  • A.避免变分参数不同方向上的尺度失调← 正确答案
  • B.让后验分布必须是高斯分布
  • C.完全不需要计算期望
  • D.让 ELBO 变成凸函数

答案:A。变分参数中均值方向和方差方向对分布位移的敏感度差很大,普通梯度需要分别调学习率。自然梯度用 Fisher 矩阵统一了尺度,更新更稳。它不要求高斯后验,也不能免除期望计算,更不会改变 ELBO 的凹凸性。

Q8. Fisher 信息矩阵的等价表述有哪些?

多选题 · easy

  • A.$E[\nabla\log p\,\nabla\log p^\top]$← 正确答案
  • B.$-E[\nabla^2\log p]$← 正确答案
  • C.$E[\nabla^2\log p]$
  • D.损失 Hessian 的逆

答案:AB。对数似然梯度外积的期望等于负对数似然 Hessian 的期望,这是 Fisher 信息的两种经典写法。C 的符号反了;D 是牛顿法要用的量,不是 Fisher 的本质定义。

Q9. 大模型场景中,替代完整 Fisher 矩阵求逆的工程方法有哪些?

多选题 · hard

  • A.对角近似← 正确答案
  • B.共轭梯度迭代求解← 正确答案
  • C.一次性显式计算并存储逆矩阵
  • D.用小批量梯度外积估计 Fisher← 正确答案

答案:ABD。对角近似把矩阵变成向量,共轭梯度用矩阵向量乘法逼近 $F^{-1}v$,小批量采样则用经验分布替代真实期望,这些都是实际可行的近似。显式存储并求逆在百万参数规模下不可行。

Q10. 关于普通梯度与自然梯度的对比,哪些结论正确?

多选题 · mid

  • A.普通梯度方向依赖参数化选择← 正确答案
  • B.自然梯度方向对参数化具有不变性← 正确答案
  • C.自然梯度通常需要计算 Fisher 矩阵的逆← 正确答案
  • D.普通梯度在椭圆等值线上走的是直线

答案:ABC。A 是参数化依赖问题的根源;B 是自然梯度的核心性质;C 是自然梯度的定义式要求。D 说反了:普通梯度在椭圆等值线上走的是弧线或 Z 字形,自然梯度才走直线。