文章目录
- Fisher矩阵及自然梯度法
- Fisher矩阵
- 自然梯度法
- 总结
- 参考链接
Fisher矩阵及自然梯度法
自然梯度法相比传统的梯度下降法具有以下优势:
更好的适应性:自然梯度法通过引入黎曼流形上的梯度概念,能够更好地适应参数空间的几何结构。这使得自然梯度法在求解具有复杂几何结构的参数优化问题时具有更高的效率。
更高的收敛速度:由于自然梯度法考虑了参数空间的几何结构,因此它在参数更新过程中能够更准确地找到下降方向。这有助于加快算法的收敛速度,提高优化效率。
避免局部最优解:自然梯度法通过调整参数空间的几何结构,有助于避免陷入局部最优解。这使得自然梯度法在求解全局优化问题时具有更好的性能。
Fisher矩阵
我们使用迭代法求解问题时,计算每个参数相对于损失函数的导数,即雅可比矩阵。这些导数表示可以更新参数,以获得损失函数最大变化的方向,称为梯度。
得到梯度后,我们在梯度方向的负方向上,更新参数,从而减少损失函数。但是由于参数所带的噪声的不同,不同的参数应该据此调整步长。
如上两个图,同样的期望差异,但是明显参数的差异对符合第二图中的分布的函数影响更大。
因此,定义Fisher矩阵用来衡量参数空间的曲率,即参数对函数模型的敏感性。
定义一个最大似然问题: max p ( x ∣ θ ) \max p(x|\theta) maxp(x∣θ)
再设立一个得分函数 s ( θ ) s(\theta) s(θ),定义为似然函数的对数梯度,
s ( θ ) = ∇ θ log p ( x ∣ θ ) s(\theta)=\nabla_\theta\log p(x\mid\theta) s(θ)=∇θlogp(x∣θ)
用来评估我们最大化似然函数的好坏以及参数对似然函数的敏感度。其期望值为0, E p ( x ∣ θ ) [ s ( θ ) ] = 0 \mathbb{E}_{p(x|\theta)}[s(\theta)]=0 Ep(x∣θ)[s(θ)]=0,证明过程见参考文献。
Fisher矩阵定义为函数 s ( θ ) s(\theta) s(θ)的方差: F ( θ ) = E p ( x ∣ θ ) [ ( s ( θ ) − 0 ) ( s ( θ ) − 0 ) T ] = E p ( x ∣ θ ) [ ∇ θ log p ( x ∣ θ ) ∇ θ log p ( x ∣ θ ) T ] F(\theta) =\mathbb{E}_{p(x|\theta)}\left[(s(\theta)-0)(s(\theta)-0)^\mathrm{T}\right] =\mathbb{E}_{p(x|\theta)}\left[\nabla_\theta\log p(x\mid\theta)\nabla_\theta\log p(x\mid\theta)^\mathrm{T}\right] F(θ)=Ep(x∣θ)[(s(θ)−0)(s(θ)−0)T]=Ep(x∣θ)[∇θlogp(x∣θ)∇θlogp(x∣θ)T]
= E [ ( ∂ log p ( x , θ ) ∂ θ ) ( ∂ log p ( x , θ ) ∂ θ ) T ] = E\left[\left(\frac{\partial \log p(x, \theta)}{\partial \theta}\right)\left(\frac{\partial \log p(x, \theta)}{\partial \theta}\right)^{\rm T} \right] =E[(∂θ∂logp(x,θ))(∂θ∂logp(x,θ))T]
其中 E E E表示期望操作。Fisher矩阵可以帮助我们理解参数对模型的影响,以及在优化过程中如何调整参数以更有效地学习函数。
自然梯度法
同样使用传统的Euclidean 距离来衡量参数的差异时,参数的噪声分布并未被考虑。使用KL散度用来衡量,然而,同样观察文中的两图,如果我们只在参数空间中工作,我们就不能考虑关于参数实现的分布的这些信息。但在分布空间中,即当我们考虑高斯的形状时,第一和第二图像中的距离是不同的。在第一幅图像中,KL散度应该更低,因为这些高斯之间有更多的重叠。因而,我们使用KL散度来衡量参数的正确性:
D K L ( p ∥ q ) = ∑ i = 1 n p ( x i ) log ( p ( x i ) q ( x i ) ) D_{KL}\left(p\|q\right)=\sum_{i=1}^{n}p\left(x_{i}\right)\log\left(\frac{p(x_{i})}{q(x_{i})}\right) DKL(p∥q)=i=1∑np(xi)log(q(xi)p(xi))
设 θ \theta θ为参数期望, θ ′ \theta' θ′为参数估计,则定义其损失函数(KL散度)如下:
L ( θ ) = K L [ p ( x ∣ θ ) ∥ p ( x ∣ θ ′ ) ] = E p ( x ∣ θ ) [ log p ( x ∣ θ ) ] − E p ( x ∣ θ ) [ log p ( x ∣ θ ′ ) ] \mathcal{L}(\theta)=\mathrm{KL}\left[p(x\mid\theta)\|p\left(x\mid\theta^{\prime}\right)\right]=\underset{p(x\mid\theta)}{\operatorname*{\mathbb{E}}}\left[\log p(x\mid\theta)\right]-\underset{p(x\mid\theta)}{\operatorname*{\mathbb{E}}}\left[\log p\left(x\mid\theta^{\prime}\right)\right] L(θ)=KL[p(x∣θ)∥p(x∣θ′)]=p(x∣θ)E[logp(x∣θ)]−p(x∣θ)E[logp(x∣θ′)]
Fisher信息矩阵 F F F等同于两个分布 p ( x ∣ θ ) p(x|\theta) p(x∣θ)和 p ( x ∣ θ ′ ) p(x|\theta') p(x∣θ′)之间关于 θ ′ \theta' θ′的KL散度的Hessian矩阵。 证明过程见参考文献
算法伪代码:
自然梯度下降循环:
对我们的模型进行正向传递,并计算损失 L ( θ ) \mathcal{L}(\theta) L(θ)。
计算梯度 ∇ θ L ( θ ) \nabla_\theta \mathcal{L}(\theta) ∇θL(θ)。
计算Fisher信息矩阵 F F F或其经验版本。
计算自然梯度 ∇ ~ θ L ( θ ) = F − 1 ∇ θ L ( θ ) \tilde{\nabla}_\theta\mathcal{L}(\theta)=\mathrm{F}^{-1}\nabla_\theta\mathcal{L}(\theta) ∇~θL(θ)=F−1∇θL(θ)。
更新参数: θ = θ − α ∇ ~ θ L ( θ ) \theta = \theta - \alpha\tilde{\nabla}_\theta\mathcal{L}(\theta) θ=θ−α∇~θL(θ),其中 α \alpha α是学习率。
直到收敛。
总结
Fisher矩阵和自然梯度法是机器学习中重要的概念和方法,用于优化问题的求解。Fisher矩阵可以帮助我们理解参数空间的曲率,而自然梯度法则利用Fisher矩阵的信息来更好地学习函数。通过结合这两个概念,我们可以更有效地优化模型参数,并提高学习的效率和性能。
参考链接
Fisher矩阵 https://agustinus.kristia.de/techblog/2018/03/11/fisher-information/
自然梯度法 https://agustinus.kristia.de/techblog/2018/03/14/natural-gradient/
自然梯度法 https://kvfrans.com/what-is-the-natural-gradient-and-where-does-it-appear-in-trust-region-policy-optimization/
https://zhuanlan.zhihu.com/p/546885304