自然梯度法,即Natural Gradient,是一种优化算法,其他常见的优化算法比如一维搜索、牛顿法、最速下降法、共轭梯度法等。个人认为自然梯度的思想非常类似于最速下降法
,只不过一个是寻找最优的标量
α
∈
R
\alpha\in\mathbb{R}
α∈R,而NG是在一定约束下寻找最优的搜索方向
s
∗
=
α
d
s^*=\alpha d
s∗=αd(严格来说搜索方向应该不包括学习率,但是为了便于说明,接下来的搜索方向都暗指包括学习率)。
另外NG算法还被广泛用于强化学习中,比如NPG、TRPO以及PPO算法都涉及到了自然梯度法思想的影响,因此对于强化学习领域的研究者来说,NG还是有必要了解的。
参考列表:
①费舍尔信息矩阵及自然梯度法或英文原版
②TRPO与NPG
③TRPO共轭梯度优化
1. 优化目标与约束
自然梯度法是梯度下降法的一个分支,因此参数的更新遵从:
θ
(
k
+
1
)
←
θ
(
k
)
−
α
(
k
)
⋅
g
(
k
)
\theta^{(k+1)}\gets\theta^{(k)}-\alpha^{(k)}\cdot g^{(k)}
θ(k+1)←θ(k)−α(k)⋅g(k)其中
g
g
g为梯度,作为一个优化算法,这里设目标函数为
f
(
θ
)
f(\theta)
f(θ),则目标函数为:
θ
∗
=
arg min
θ
f
(
θ
)
\theta^* = \argmin_\theta f(\theta)
θ∗=θargminf(θ)那么由于在机器学习中,我们很难直接求得解析解,故一般都是通过迭代的方式去求得数值解,因此梯度下降法里面最重要的自然就是学习率以及搜索方向了,不同的梯度下降法也就是搜索方向或者学习率的选择不同。那么在Natural Gradient中的选择是这样的:
s
∗
=
arg min
d
f
(
θ
k
+
s
(
k
)
)
s
.
t
.
D
K
L
(
θ
k
,
θ
(
k
+
1
)
)
≤
ϵ
s^* = \argmin_d f(\theta^{k}+s^{(k)})\\ s.t. \,\,D_{KL}(\theta^{k},\theta^{(k+1)})\leq \epsilon
s∗=dargminf(θk+s(k))s.t.DKL(θk,θ(k+1))≤ϵ其表达的意思是:参数搜索范围在参数空间受限的情况下,找到最小化目标函数
f
f
f的搜索方向
s
∗
s^*
s∗,这就是自然梯度法。在NG里约束参数搜索范围采用了
K
L
−
d
i
v
e
r
g
e
n
c
e
KL-divergence
KL−divergence法。
2. 必要知识点
在推导出自然梯度发最优搜索方向 d ∗ d^* d∗的过程中,还需要了解一些必备知识点,比如①费雪信息矩阵FIM的定义②FIM与黑塞矩阵的关系③FIM与KL散度的关系等等。
2.1 费雪信息矩阵
什么是费雪信息矩阵(Fisher Information Matrix)?
定义某个分布关于模型
θ
\theta
θ的分布为
p
(
x
∣
θ
)
p(x|\theta)
p(x∣θ)。
记得分函数
s
p
(
θ
)
=
∇
θ
log
p
(
x
∣
θ
)
,
s
p
∈
R
d
s_p(\theta)=\nabla_\theta\log p(x|\theta),s_p\in\mathbb{R}^d
sp(θ)=∇θlogp(x∣θ),sp∈Rd,关于得分函数,在
K
S
D
KSD
KSD中也出现过,只不过在
K
S
D
KSD
KSD中是
E
p
[
A
p
f
(
x
)
]
=
0
\mathbb{E}_p[\mathcal{A}_pf(x)]=0
Ep[Apf(x)]=0,而在这里我们有
E
p
[
s
p
(
θ
)
]
=
0
\mathbb{E}_p[s_p(\theta)]=0
Ep[sp(θ)]=0,证明如下:然后给出协方差的定义:
c
o
v
(
X
,
Y
)
=
E
[
(
X
−
E
X
)
⋅
(
Y
−
E
Y
)
]
cov(X,Y)=\mathbb{E}[(X-\mathbb{E}X)\cdot(Y-\mathbb{E}Y)]
cov(X,Y)=E[(X−EX)⋅(Y−EY)],因此得分函数的协方差表示为:
c
o
v
(
s
p
,
s
p
)
=
E
[
(
s
p
−
0
)
⋅
(
s
p
−
0
)
T
]
cov(s_p,s_p)=\mathbb{E}[(s_p-0)\cdot(s_p-0)^T]
cov(sp,sp)=E[(sp−0)⋅(sp−0)T]我们可以将其看成一种信息,因此可以说得分函数的协方差就是费雪信息。又因为费雪信息是以矩阵
R
d
×
d
\mathbb{R}^{d\times d}
Rd×d形式存在的,因此将得分函数展开:
F
=
E
p
[
∇
θ
log
p
(
x
∣
θ
)
⋅
∇
θ
T
log
p
(
x
∣
θ
)
]
F=\mathbb{E}_p[\nabla_\theta\log p(x|\theta)\cdot\nabla^T_\theta\log p(x|\theta)]
F=Ep[∇θlogp(x∣θ)⋅∇θTlogp(x∣θ)]
Note:
- F F F就是费雪信息矩阵FIM。
- 用样本估计的方式近似FIM的
F
^
\hat{F}
F^叫
经验费雪信息矩阵
: F ≈ F ^ = 1 N ∑ i = 1 N ∇ θ log p ( x ∣ θ ) ⋅ ∇ θ T log p ( x ∣ θ ) F\approx \hat{F}=\frac{1}{N}\sum_{i=1}^N\nabla_\theta\log p(x|\theta)\cdot\nabla^T_\theta\log p(x|\theta) F≈F^=N1i=1∑N∇θlogp(x∣θ)⋅∇θTlogp(x∣θ)
2.2 FIM&Hessian
这一节讨论FIM与黑塞矩阵
H
H
H之间的关系。
记
H
log
p
(
x
∣
θ
)
=
∂
2
log
p
(
x
∣
θ
)
∂
θ
2
H_{\log p(x|\theta)}=\frac{\partial^2{\log p(x|\theta)}}{\partial{\theta^2}}
Hlogp(x∣θ)=∂θ2∂2logp(x∣θ),则:
H
log
p
(
x
∣
θ
)
=
J
(
∇
θ
log
p
(
x
∣
θ
)
)
=
J
(
∇
θ
p
(
x
∣
θ
)
p
(
x
∣
θ
)
)
H_{\log p(x|\theta)}=J(\nabla_\theta\log p(x|\theta))=J(\frac{\nabla_\theta p(x|\theta)}{p(x|\theta)})
Hlogp(x∣θ)=J(∇θlogp(x∣θ))=J(p(x∣θ)∇θp(x∣θ))Note:
- J J J表示雅克比矩阵(Jocobin-matrix)。
对上式求期望可得:
E
x
∼
p
[
H
log
p
(
x
∣
θ
)
]
=
−
F
\mathbb{E}_{x\sim p}[H_{\log p(x|\theta)}]=-F
Ex∼p[Hlogp(x∣θ)]=−F证明如下:
记住这个结论:
F
=
−
E
p
[
H
log
p
(
x
∣
θ
)
]
F=-\mathbb{E}_p[H_{\log p(x|\theta)}]
F=−Ep[Hlogp(x∣θ)],意思就是说得分函数的一阶导数期望取反就是费雪信息矩阵
F
F
F,接下来会用到。
2.3 FIM&KL-divergence
做强化学习的,对于KL散度应该不陌生了,之前在高斯平滑
Q
Q
Q函数、TRPO、PPO这些论文中都出现过,这里还是啰嗦的给出其公式:
D
K
L
(
p
(
x
)
∣
∣
q
(
x
)
)
=
∫
p
(
x
)
⋅
log
p
(
x
)
q
(
x
)
d
x
=
E
p
[
log
p
(
x
)
q
(
x
)
]
=
E
p
[
log
p
(
x
)
]
−
E
p
[
log
q
(
x
)
]
D_{KL}(p(x)||q(x))=\int p(x)\cdot\log\frac{p(x)}{q(x)}\mathrm{d}x=\mathbb{E}_p[\log\frac{p(x)}{q(x)}]\\ =\mathbb{E}_p[\log p(x)]-\mathbb{E}_p[\log q(x)]
DKL(p(x)∣∣q(x))=∫p(x)⋅logq(x)p(x)dx=Ep[logq(x)p(x)]=Ep[logp(x)]−Ep[logq(x)]Note:
- KL散度衡量的就是两个分布之间相似程度。这里不用距离的概念,是因为KL散度不是对称函数,因此不能算是距离。
- KL散度的特性曲线如下:
记
θ
\theta
θ为旧参数
θ
o
l
d
\theta_{old}
θold,
θ
′
=
θ
+
s
\theta'=\theta+s
θ′=θ+s为新参数
θ
n
e
w
\theta_{new}
θnew,那么相对熵运用到NG算法中就是:
D
K
L
(
p
(
x
∣
θ
)
∣
∣
p
(
x
∣
θ
′
)
)
=
E
p
(
x
∣
θ
)
[
log
p
(
x
∣
θ
)
]
−
E
p
(
x
∣
θ
)
[
log
p
(
x
∣
θ
′
)
]
D_{KL}(p(x|\theta)||p(x|\theta'))=\mathbb{E}_{p(x|\theta)}[\log p(x|\theta)]-\mathbb{E}_{p(x|\theta)}[\log p(x|\theta')]
DKL(p(x∣θ)∣∣p(x∣θ′))=Ep(x∣θ)[logp(x∣θ)]−Ep(x∣θ)[logp(x∣θ′)]
接下来我们试着求取
K
L
KL
KL散度的一阶导数和二阶导数。
一阶导数和二阶导数所求如下:
也就是说
K
L
KL
KL散度在
θ
′
=
θ
\theta'=\theta
θ′=θ处的Hessian矩阵就是费雪信息矩阵
F
F
F。
3. 最优搜索方向
接下来就开始推导出自然梯度法所优化出的搜索方向
s
∗
s^*
s∗了。
我们把目标函数和约束重新列一下:
min
θ
f
(
θ
′
)
s
.
t
.
k
l
(
θ
′
)
≤
ϵ
\min_\theta f(\theta')\\ s.t.\,\,kl(\theta')\leq\epsilon
θminf(θ′)s.t.kl(θ′)≤ϵ
接下来我们对目标函数和约束用泰勒公式在
θ
′
=
θ
\theta'=\theta
θ′=θ处展开
对于目标函数:
f
(
θ
′
)
≈
f
(
θ
)
+
g
T
⋅
(
θ
′
−
θ
)
+
高
阶
项
f(\theta')\approx f(\theta)+g^T\cdot(\theta'-\theta)+高阶项
f(θ′)≈f(θ)+gT⋅(θ′−θ)+高阶项Note:
- 这里我们忽略高阶项,直接做一阶近似。
- 第一项是常数项,一般优化都省略掉。或者你也可以先留着,到后面就会发现常数项没有用。
- g = ∂ f ∂ θ ∣ θ ′ = θ g=\frac{\partial{f}}{\partial\theta}|_{\theta'=\theta} g=∂θ∂f∣θ′=θ。
对于约束项:
k
l
(
θ
∣
∣
θ
′
)
≈
k
l
(
θ
∣
∣
θ
)
+
∇
θ
′
T
k
l
(
θ
∣
∣
θ
′
)
∣
θ
′
=
θ
(
θ
′
−
θ
)
+
1
2
(
θ
′
−
θ
)
T
∇
θ
′
2
k
l
(
θ
∣
∣
θ
′
)
∣
θ
′
=
θ
(
θ
′
−
θ
)
+
高
阶
项
kl(\theta||\theta')\approx kl(\theta||\theta)+\nabla^T_{\theta'}kl(\theta||\theta')|_{\theta'=\theta}(\theta'-\theta)+\frac{1}{2}(\theta'-\theta)^T\nabla_{\theta'}^2kl(\theta||\theta')|_{\theta'=\theta}(\theta'-\theta)+高阶项
kl(θ∣∣θ′)≈kl(θ∣∣θ)+∇θ′Tkl(θ∣∣θ′)∣θ′=θ(θ′−θ)+21(θ′−θ)T∇θ′2kl(θ∣∣θ′)∣θ′=θ(θ′−θ)+高阶项Note:
- 第一项为0,第二项根据我们2.3节推导来看也是为0,因此只剩下二阶项,因此 K L KL KL散度我们都是做二阶近似的。
- 令 s = θ ′ − θ s=\theta'-\theta s=θ′−θ,然后结合2.3节的重要结论,则KL散度可近似为: k l ( θ ∣ ∣ θ ′ ) ≈ 1 2 s T F s kl(\theta||\theta')\approx\frac{1}{2}s^TFs kl(θ∣∣θ′)≈21sTFs这里的 F F F就是费雪信息矩阵,是一个Hessian矩阵。从这里也可以看出 K L KL KL散度的二阶导数就是FIM。
然后我们将近似后的约束问题通过拉格朗日乘子法转为无约束问题:
m
i
n
i
m
i
z
e
L
(
θ
′
,
λ
)
=
f
(
θ
)
+
g
T
⋅
s
+
λ
(
1
2
s
T
F
s
−
ϵ
)
minimize\,\,L(\theta',\lambda)=f(\theta)+g^T\cdot s+\lambda(\frac{1}{2}s^TFs-\epsilon)
minimizeL(θ′,λ)=f(θ)+gT⋅s+λ(21sTFs−ϵ)整理加入
K
K
T
KKT
KKT条件:
m
i
n
i
m
i
z
e
L
(
θ
′
,
λ
)
=
λ
2
s
T
F
s
+
g
T
⋅
s
+
f
(
θ
)
−
λ
ϵ
K
K
T
:
{
1
2
s
T
F
s
≤
ϵ
λ
=
0
λ
(
1
2
s
T
F
s
−
ϵ
)
=
0
minimize\,\,L(\theta',\lambda) = \frac{\lambda}{2}s^TFs+g^T\cdot s+f(\theta)-\lambda\epsilon\\ KKT:\begin{cases} \frac{1}{2}s^TFs\leq\epsilon\\ \lambda=0\\ \lambda(\frac{1}{2}s^TFs-\epsilon)=0 \end{cases}
minimizeL(θ′,λ)=2λsTFs+gT⋅s+f(θ)−λϵKKT:⎩⎪⎨⎪⎧21sTFs≤ϵλ=0λ(21sTFs−ϵ)=0显然我们现在的目的在于优化出最好的
s
∗
s^*
s∗使得拉格朗日函数
L
L
L达到最小值:因此我们求
∂
L
∂
s
=
0
\frac{\partial{L}}{\partial{s}}=0
∂s∂L=0。
易得:
λ
F
s
+
g
=
0
⇔
s
∗
=
−
1
λ
F
−
1
g
\lambda Fs+g=0\\ \Leftrightarrow s^*=-\frac{1}{\lambda}F^{-1}g
λFs+g=0⇔s∗=−λ1F−1gNote:
- 至此我们就推导出了自然梯度法每次迭代的最佳搜索方向 s ∗ s^* s∗。我们在TRPO里面也得出过这个式子,只不过那个是求 m a x i m i z e maximize maximize,因此不带“负号”。
- 前面说过 s s s包含了学习率和梯度 g g g的乘积,因此常数 1 λ \frac{1}{\lambda} λ1可以吸收到学习率里面去,因此NG算法真正意义上的搜索方向为: F − 1 g F^{-1}g F−1g
- 再来看这个
K
K
T
KKT
KKT条件中的第三个,
K
L
KL
KL散度用于约束参数搜索范围在满足目标函数最小化的同时不要太大,因此在边界上的
K
L
KL
KL值是最好的,根据
K
K
T
KKT
KKT性质所知,此时
λ
≥
0
\lambda\ge0
λ≥0,也就是说:
1 2 s T F s = ϵ ⇔ 1 2 ( α g ) T F ( α g ) = ϵ ⇔ α = 2 ϵ g T F g \frac{1}{2}s^TFs=\epsilon\\ \Leftrightarrow\frac{1}{2}(\alpha g)^TF(\alpha g)=\epsilon\\ \Leftrightarrow\alpha=\sqrt{\frac{2\epsilon}{g^TFg}} 21sTFs=ϵ⇔21(αg)TF(αg)=ϵ⇔α=gTFg2ϵ
至此我们总算可以得出NG最重要的更新公式了:
θ
(
k
+
1
)
←
θ
k
−
2
ϵ
g
T
F
g
⋅
F
−
1
g
\theta^{(k+1)}\gets\theta^{k}-\sqrt{\frac{2\epsilon}{g^TFg}}\cdot F^{-1}g
θ(k+1)←θk−gTFg2ϵ⋅F−1g
4. TRPO&NPG
这里给出了NG算法应用于强化学习中形成的Natural Policy Gradient算法,可以看到它最下面的更新公式,就是我们上述推导出来的。
NPG伪代码:
这一份是TRPO的伪代码,可以说TRPO进一步优化了NPG算法,关键在于TRPO可以推出这么一个式子:
θ
−
θ
o
l
d
=
s
=
1
λ
F
−
1
g
\theta-\theta_{old}=s=\frac{1}{\lambda}F^{-1}g
θ−θold=s=λ1F−1g而TRPO采用共轭梯度优化算法可以通过迭代求出共轭搜索方向
d
d
d,乘上学习率就可以求得
s
s
s,因此可以用
d
d
d来近似NPG算法中的搜索方向
F
−
1
g
F^{-1}g
F−1g,即
d
≈
F
−
1
g
d\approx F^{-1}g
d≈F−1g。这样最大的好处就是不用计算费雪信息矩阵,因为FIM的计算量是非常大的。
TRPO伪代码:
5. 总结
- 将上述整合在一起,就是
自然梯度下降法
的伪代码: - 自然梯度法(NG)和最速下降法(steepest descent)很相似,只是两者优化的目标不一样,前者是为了求出使得 f ( θ + s ) f(\theta+s) f(θ+s)最小的最佳搜索方向,后者是为了求出使得 f ( θ + s ) f(\theta+s) f(θ+s)最小的最佳学习率。此外,共轭梯度算法(CG)可以对NG算法进行改进:CG通过迭代的方式去近似掉NG中的FIM。三者都是梯度下降法的分支,都可以应用到机器学习算法中去。
- 此外,在推导出NG算法的过程中,认识到了FIM的定义、FIM与Hessian矩阵的关系、FIM与 K L KL KL散度的关系。