作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学习的基础知识,后面也会更新强化学习的论文阅读专栏。本来是想每一篇多更新一点内容的,后面发现大家上CSDN主要是来提问的,就把很多拆分开来了(而且这样每天任务量也小一点哈哈哈哈偷懒大法)。但是我还是希望知识点能成系统,所以我在目录里面都好按章节系统地写的,而且在github上写成了书籍的形式,如果大家觉得有帮助,希望从头看的话欢迎关注我的github啊,谢谢大家!另外我还会分享深度学习-基础知识专栏以及深度学习-论文阅读专栏,很早以前就和小伙伴们花了很多精力写的,如果有对深度学习感兴趣的小伙伴也欢迎大家关注啊。大家一起互相学习啊!可能会有很多错漏,希望大家批评指正!不要高估一年的努力,也不要低估十年的积累,与君共勉!

和上一篇一样,我们先介绍一下自然梯度法,再介绍一下自然梯度法在策略上的单调提升的应用。

我们在使用梯度下降时,当优化问题的两个坐标轴的尺度差异比较大时,使用统一的学习率会产生问题:某一个坐标轴可能发散。这是因为,优化问题中参数尺度一般都是不同的。因此,在不同的优化曲面上, 虽然每一轮迭代对参数的更新量相差不多,但是它们对模型的影响完全不同,对不同参数进行同样数值大小的更新,不一定带来同样的模型改变,反过来也是如此。而梯度下降法不简单地使用学习率对参数更新进行量化,而是对模型效果进行量化

自然梯度法的具体形式如下:

​ minimize⁡Δwf(w)+∇wf(w)Δws.t. KL⁡(f(w),f(w+Δw))<ϵ\begin{array}{l} \operatorname{minimize}_{\Delta w} f(w)+\nabla_{w} f(w) \Delta w \\ \text { s.t. } \operatorname{KL}(f(w), f(w+\Delta w))<\epsilon \end{array}minimizeΔw​f(w)+∇w​f(w)Δw s.t. KL(f(w),f(w+Δw))<ϵ​

可以看出,有了模型层面的约束,每一轮迭代无论参数发生多大的变化,模型的变化都会限制在一定的范围内,因此不论我们使用什么样的模型, 这个约束都会起到相同的效果,因此这个约束是具有普适性的,在任何模型上都能发挥同样稳定的效果。但是问题在于,我们怎么求解更新前和更新后的策略的KL散度?

下面我们就通过Fisher信息矩阵来推导一下:
KL⁡(f(w)∥f(w+Δw))=Efw[log⁡f(w)f(w+Δw)]=Efw[log⁡f(w)]−Efw[log⁡f(w+Δw)]\begin{array}{l} \operatorname{KL}(f(w) \| f(w+\Delta w)) \\ =E_{f_{w}}\left[\log \frac{f(w)}{f(w+\Delta w)}\right] \\ =E_{f_{w}}[\log f(w)]-E_{f_{w}}[\log f(w+\Delta w)] \end{array} KL(f(w)∥f(w+Δw))=Efw​​[logf(w+Δw)f(w)​]=Efw​​[logf(w)]−Efw​​[logf(w+Δw)]​
其中 EEE 表示为依 f(w)f(w)f(w) 概率计算得到的期望。对等式右边的第二项进行二阶泰勒展开,可以得到
≈Efw[log⁡f(w)]−Efw[log⁡f(w)+∇wlog⁡f(w)Δw+12ΔwT∇w2log⁡f(w)Δw]=Efw[log⁡f(w)]−Efw[log⁡f(w)]−Efw[∇wlog⁡f(w)Δw]−Efw[12ΔwT∇w2log⁡f(w)Δw]=−Efw[∇wlog⁡f(w)Δw]−Efw[12ΔwT∇w2log⁡f(w)Δw]\begin{array}{l} \approx E_{f_{w}}[\log f(w)]-E_{f_{w}}\left[\log f(w)+\nabla_{w} \log f(w) \Delta w+\frac{1}{2} \Delta w^{\mathrm{T}} \nabla_{w}^{2} \log f(w) \Delta w\right] \\ =E_{f_{w}}[\log f(w)]-E_{f_{w}}[\log f(w)]-E_{f_{w}}\left[\nabla_{w} \log f(w) \Delta w\right]-E_{f_{w}}\left[\frac{1}{2} \Delta w^{\mathrm{T}} \nabla_{w}^{2} \log f(w) \Delta w\right] \\ =-E_{f_{w}}\left[\nabla_{w} \log f(w) \Delta w\right]-E_{f_{w}}\left[\frac{1}{2} \Delta w^{\mathrm{T}} \nabla_{w}^{2} \log f(w) \Delta w\right] \end{array} ≈Efw​​[logf(w)]−Efw​​[logf(w)+∇w​logf(w)Δw+21​ΔwT∇w2​logf(w)Δw]=Efw​​[logf(w)]−Efw​​[logf(w)]−Efw​​[∇w​logf(w)Δw]−Efw​​[21​ΔwT∇w2​logf(w)Δw]=−Efw​​[∇w​logf(w)Δw]−Efw​​[21​ΔwT∇w2​logf(w)Δw]​
​ =−∫xf(w)∇wlog⁡f(w)Δwdx−∫xf(w)12ΔwT∇w2log⁡f(w)Δwdx=−[∫xf(w)1f(w)∇wf(w)dx]Δw−12ΔwT[∫xf(w)∇w2log⁡f(w)dx]Δw=−[∫x∇wf(w)dx]Δw−12ΔwTEfw[∇w2log⁡f(w)]Δw\begin{array}{l} =-\int_{x} f(w) \nabla_{w} \log f(w) \Delta w \mathrm{~d} x-\int_{x} f(w) \frac{1}{2} \Delta w^{\mathrm{T}} \nabla_{w}^{2} \log f(w) \Delta w \mathrm{~d} x \\ =-\left[\int_{x} f(w) \frac{1}{f(w)} \nabla_{w} f(w) \mathrm{d} x\right] \Delta w-\frac{1}{2} \Delta w^{\mathrm{T}}\left[\int_{x} f(w) \nabla_{w}^{2} \log f(w) \mathrm{d} x\right] \Delta w \\ =-\left[\int_{x} \nabla_{w} f(w) \mathrm{d} x\right] \Delta w-\frac{1}{2} \Delta w^{\mathrm{T}} E_{f_{w}}\left[\nabla_{w}^{2} \log f(w)\right] \Delta w \end{array}=−∫x​f(w)∇w​logf(w)Δw dx−∫x​f(w)21​ΔwT∇w2​logf(w)Δw dx=−[∫x​f(w)f(w)1​∇w​f(w)dx]Δw−21​ΔwT[∫x​f(w)∇w2​logf(w)dx]Δw=−[∫x​∇w​f(w)dx]Δw−21​ΔwTEfw​​[∇w2​logf(w)]Δw​

由于我们定义的函数 f(w)f(w)f(w) 一般都是一个连续、可导、有界、性质优良的函数,所以这 里第一项的积分和微分可以互换,同时我们将简写的 f(w)f(w)f(w) 用完整的形式写出: f(x;w),f(x ; w),f(x;w),
于是上式的第一项就变为
=−[∇w∫xf(x;w)dx]Δw=−[∇w1]Δw=0\begin{array}{l} =-\left[\nabla_{w} \int_{x} f(x ; w) \mathrm{d} x\right] \Delta w \\ =-\left[\nabla_{w} 1\right] \Delta w \\ =0 \end{array} =−[∇w​∫x​f(x;w)dx]Δw=−[∇w​1]Δw=0​
最终得到
KL(f(w)∥f(w+Δw))=−12ΔwTEfw[∇w2log⁡f(w)]Δw\mathrm{KL}(f(w) \| f(w+\Delta w))=-\frac{1}{2} \Delta w^{\mathrm{T}} E_{f_{w}}\left[\nabla_{w}^{2} \log f(w)\right] \Delta w KL(f(w)∥f(w+Δw))=−21​ΔwTEfw​​[∇w2​logf(w)]Δw
这里包含一个二阶导的期望值,虽然看上去比 KL 散度直观,但它仍然比较复杂。
我们需要用 Fisher 信息矩阵(Fisher Information Matrix ) 来表示它。Fisher 信息是信息几何中的一个概念,它也被应用到机器学习中。前面提到 f(w)f(w)f(w) 表示某个概率分布,我们首先定义 Score 函数( Score Function ) 为对数似然函数的一阶导数
lfw=∇wlog⁡f(x;w)l_{f_{w}}=\nabla_{w} \log f(x ; w) lfw​​=∇w​logf(x;w)
通过计算可以发现,score 函数的期望值为 0,公式推导如下:
Ef(w)[lfw]=∫xf(w)∇wlog⁡f(w)dx=∫xf(w)∇wf(w)f(w)dx=∫∇wf(w)dx=∇w∫xf(x;w)dx=∇w1=0\begin{aligned} E_{f(w)}\left[l_{f_{w}}\right] &=\int_{x} f(w) \nabla_{w} \log f(w) \mathrm{d} x \\ &=\int_{x} f(w) \frac{\nabla_{w} f(w)}{f(w)} \mathrm{d} x \\ &=\int \nabla_{w} f(w) \mathrm{d} x \\ &=\nabla_{w} \int_{x} f(x ; w) \mathrm{d} x \\ &=\nabla_{w} 1 \\ &=0 \end{aligned} Ef(w)​[lfw​​]​=∫x​f(w)∇w​logf(w)dx=∫x​f(w)f(w)∇w​f(w)​dx=∫∇w​f(w)dx=∇w​∫x​f(x;w)dx=∇w​1=0​
Fisher 信息矩阵可以通过 score 函数定义:
Ifw=Efw[∇wlog⁡f(w)∇wlog⁡f(w)T]=Efw[lfwlfwT]\begin{aligned} \boldsymbol{I}_{f_{w}} &=E_{f_{w}}\left[\nabla_{w} \log f(w) \nabla_{w} \log f(w)^{\mathrm{T}}\right] \\ &=E_{f_{w}}\left[l_{f_{w}} l_{f_{w}}^{\mathrm{T}}\right] \end{aligned} Ifw​​​=Efw​​[∇w​logf(w)∇w​logf(w)T]=Efw​​[lfw​​lfw​T​]​

Fisher 信息矩阵有什么用处呢?我们这里有一个重要的结论:一定条件下(概率分布函数要其备良好的性质), Fisher 信息矩阵和KL 散度二阶导的相反数相等。网上证明很多,这里我们就不再证明了。

通过前面的推演,我们的目标函数变为
minimize⁡Δwf(w)+∇wf(w)Δws.t. 12ΔwTIfwΔw<ϵ\begin{array}{l} \operatorname{minimize}_{\Delta w} f(w)+\nabla_{w} f(w) \Delta w \\ \text { s.t. } \frac{1}{2} \Delta w^{\mathrm{T}} \boldsymbol{I}_{f_{w}} \Delta w<\epsilon \end{array} minimizeΔw​f(w)+∇w​f(w)Δw s.t. 21​ΔwTIfw​​Δw<ϵ​
这个有约束的问题可以通过拉格朗日乘子法表示为
minimize⁡Δwf(w)+∇wf(w)Δw+λ[12ΔwTIfwΔw−ϵ]\operatorname{minimize}_{\Delta w} f(w)+\nabla_{w} f(w) \Delta w+\lambda\left[\frac{1}{2} \Delta w^{\mathrm{T}} I_{f_{w}} \Delta w-\epsilon\right] minimizeΔw​f(w)+∇w​f(w)Δw+λ[21​ΔwTIfw​​Δw−ϵ]
对公式进行求导,并求解对应的极限点,可以得到
∇wf(w)+λIfwΔw=0Δw=−1λIfw−1∇wf(w)\begin{array}{l} \nabla_{w} f(w)+\lambda \boldsymbol{I}_{f_{w}} \Delta w=0 \\ \Delta w=-\frac{1}{\lambda} \boldsymbol{I}_{f_{w}}^{-1} \nabla_{w} f(w) \end{array} ∇w​f(w)+λIfw​​Δw=0Δw=−λ1​Ifw​−1​∇w​f(w)​
公式中的 1λ\frac{1}{\lambda}λ1​ 可以当作梯度下降法的学习率类似的分量,那么自然梯度法的优化方 向就可以看作 Ifw−1∇wf(w),I_{f_{w}}^{-1} \nabla_{w} f(w),Ifw​−1​∇w​f(w), 与梯度下降法不同, 它需要额外求解 Fisher 信息矩阵的逆。

在这里我们可能会想到牛顿法,牛顿法是一个二阶梯度算法,它求解优化方向的公式为:
g=−∇w2f(w)−1∇wf(w)g=-\nabla_{w}^{2} f(w)^{-1} \nabla_{w} f(w) g=−∇w2​f(w)−1∇w​f(w)
我们很容易看出两个公式的区别与联系。根据 Fisher 信息矩阵的求解方法,自然梯度法可以变成一个一阶优化问题,也可以变成一个二阶优化问题。如果把它看作一个一阶优化问题,那么需要对优化步长做更多的考量; 如果把它看作一个二阶优化问题,那么牛顿法中可能遇到的一些问题同样会在自然梯度法中出现

那么到这里我们其实就可以将前面的策略单调提升的问题转化为下面的问题:
minimize⁡Δwf(w)+∇wf(w)Δws.t. 12ΔwTIfwΔw<ϵ\begin{array}{l} \operatorname{minimize}_{\Delta \boldsymbol{w}} f(\boldsymbol{w})+\nabla_{\boldsymbol{w}} f(\boldsymbol{w}) \Delta \boldsymbol{w} \\ \text { s.t. } \quad \frac{1}{2} \Delta \boldsymbol{w}^{\mathrm{T}} \boldsymbol{I}_{f_{w}} \Delta \boldsymbol{w}<\epsilon \end{array} minimizeΔw​f(w)+∇w​f(w)Δw s.t. 21​ΔwTIfw​​Δw<ϵ​
其中 www 表示参数, fff 表示待优化的函数, IfwI_{f_{w}}Ifw​​ 表示 Fisher 信息矩阵。令策略 π\piπ 的参数为 θ,\theta,θ, 首先,对目标函数进行一阶泰勒展开,可以得到
Lπold (π)=Lπold (π;θold +Δθ)≃Lπold (πold ;θold )+∇πLπold (π;θold )∣π=πold (Δθ)\begin{aligned} L_{\pi_{\text {old }}}(\pi) &=L_{\pi_{\text {old }}}\left(\pi ; \theta_{\text {old }}+\Delta \theta\right) \\ & \simeq L_{\pi_{\text {old }}}\left(\pi_{\text {old }} ; \theta_{\text {old }}\right)+\left.\nabla_{\pi} L_{\pi_{\text {old }}}\left(\pi ; \theta_{\text {old }}\right)\right|_{\pi=\pi_{\text {old }}}(\Delta \theta) \end{aligned} Lπold ​​(π)​=Lπold ​​(π;θold ​+Δθ)≃Lπold ​​(πold ​;θold ​)+∇π​Lπold ​​(π;θold ​)∣π=πold ​​(Δθ)​
其次,对约束条件进行变换:
KL(f(w)∥f(w+Δw))=−12ΔwTEfw[∇w2log⁡f(w)]Δw\mathrm{KL}(f(\boldsymbol{w}) \| f(\boldsymbol{w}+\Delta \boldsymbol{w}))=-\frac{1}{2} \Delta \boldsymbol{w}^{\mathrm{T}} E_{f_{w}}\left[\nabla_{w}^{2} \log f(\boldsymbol{w})\right] \Delta \boldsymbol{w} KL(f(w)∥f(w+Δw))=−21​ΔwTEfw​​[∇w2​logf(w)]Δw
可以对约束条件做第一步变换:
DˉKLρπold (πold ,π)=DˉKLρπold (π(θold ),π(θold +Δθ))=Es∼ρ[DKL(π(θold ∣s)∥π(θold +Δθ∣s))]=Es∼ρ[−12ΔθTEπold [∇θ2log⁡π(θold ∣s)]Δθ]\begin{aligned} \bar{D}_{\mathrm{KL}}^{\rho_{\pi_{\text {old }}}}\left(\pi_{\text {old }}, \pi\right) &=\bar{D}_{\mathrm{KL}}^{\rho_{\pi_{\text {old }}}}\left(\pi\left(\theta_{\text {old }}\right), \pi\left(\theta_{\text {old }}+\Delta \theta\right)\right) \\ &=E_{s \sim \rho}\left[D_{\mathrm{KL}}\left(\pi\left(\theta_{\text {old }} \mid s\right) \| \pi\left(\theta_{\text {old }}+\Delta \theta \mid s\right)\right)\right] \\ &=E_{s \sim \rho}\left[-\frac{1}{2} \Delta \theta^{\mathrm{T}} E_{\pi_{\text {old }}}\left[\nabla_{\theta}^{2} \log \pi\left(\theta_{\text {old }} \mid s\right)\right] \Delta \theta\right] \end{aligned} DˉKLρπold ​​​(πold ​,π)​=DˉKLρπold ​​​(π(θold ​),π(θold ​+Δθ))=Es∼ρ​[DKL​(π(θold ​∣s)∥π(θold ​+Δθ∣s))]=Es∼ρ​[−21​ΔθTEπold ​​[∇θ2​logπ(θold ​∣s)]Δθ]​
因为:Ifw=−Efw[∇w2log⁡f(w)],: \boldsymbol{I}_{f_{w}}=-E_{f_{w}}\left[\nabla_{\boldsymbol{w}}^{2} \log f(\boldsymbol{w})\right],:Ifw​​=−Efw​​[∇w2​logf(w)], 继续推导得到
=Es∼ρ[12ΔθTIπold(s)Δθ]=E_{\boldsymbol{s} \sim \rho}\left[\frac{1}{2} \Delta \theta^{\mathrm{T}} I_{\pi_{\mathrm{old}}}(s) \Delta \theta\right] =Es∼ρ​[21​ΔθTIπold​​(s)Δθ]

≃1N∑n=1N[12ΔθTIπold(s)Δθ]\simeq \frac{1}{N} \sum_{n=1}^{N}\left[\frac{1}{2} \Delta \theta^{\mathrm{T}} \boldsymbol{I}_{\pi_{\mathrm{old}}}(s) \Delta \theta\right] ≃N1​n=1∑N​[21​ΔθTIπold​​(s)Δθ]

这样我们就从求解新策略的目标函数变成了求解策略参数更新量的目标函数:
maximize⁡Δθ∇πLπold (π;θold )∣π=πold (Δθ)s.t. 1N∑n=1N[12ΔθTIπold (s)Δθ]⩽ϵ\begin{array}{l} \left.\operatorname{maximize}_{\Delta \theta} \nabla_{\pi} L_{\pi_{\text {old }}}\left(\pi ; \theta_{\text {old }}\right)\right|_{\pi=\pi_{\text {old }}}(\Delta \theta) \\ \text { s.t. } \quad \frac{1}{N} \sum_{n=1}^{N}\left[\frac{1}{2} \Delta \theta^{\mathrm{T}} \boldsymbol{I}_{\pi_{\text {old }}}(s) \Delta \theta\right] \leqslant \epsilon \end{array} maximizeΔθ​∇π​Lπold ​​(π;θold ​)∣π=πold ​​(Δθ) s.t. N1​∑n=1N​[21​ΔθTIπold ​​(s)Δθ]⩽ϵ​
虽然自然梯度法可以解决策略单调提升的问题,但是它的计算复杂度过高,特别是矩阵求逆,它是立方级的复杂度,对于大的网络而言,这种复杂度是无法接受的。

上一篇:强化学习的学习之路(四十五)2021-02-14共轭梯度法实现策略上的单调提升(Monotonic Improvement with Dual gradient descent)
下一篇:强化学习的学习之路(四十七)2021-02-16 TRPO实现策略上的单调提升(Monotonic Improvement with TRPO )

强化学习的学习之路(四十六)2021-02-15自然梯度法实现策略上的单调提升(Monotonic Improvement with Natural gradient descent)相关推荐

  1. 测开之路四十六:正则表达式

    表达式 所以在上一篇的url匹配的正则代表空 准备数据 data = [ 'https://www.baidu.com/', 'https://www.qq.com/', 'https://i.cnb ...

  2. 打怪升级之小白的大数据之旅(四十六)<HDFS各模块的原理>

    打怪升级之小白的大数据之旅(四十六) HDFS各模块的原理 上次回顾 上一章,我们学习了HDFS的基本知识以及一些常用的操作,本章,我们对HDFS各模块的原理进行讲解,了解清楚这些,可以更好的辅助我们 ...

  3. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  4. JavaScript学习(四十六)—练习题

    JavaScript学习(四十六)-练习题 练习1 练习2

  5. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  6. Slicer学习笔记(四十六)slicer 常用的几个模块

    Slicer学习笔记(四十六)slicer 常用的几个模块

  7. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  8. 四十六、深入Java的网络编程(下篇)

    @Author:Runsen @Date:2020/6/9 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  9. 第四十六章:SpringBoot RabbitMQ完成消息延迟消费

    在2018-3-1日SpringBoot官方发版了2.0.0.RELEASE最新版本,新版本完全基于Spring5.0来构建,JDK最低支持也从原来的1.6也改成了1.8,不再兼容1.8以下的版本,更 ...

最新文章

  1. wannafly 12 删除子串 dp
  2. OpenAI高调站队:深度学习框架以后主要用PyTorch
  3. [UI] 精美UI界面欣赏[1]
  4. OpenVAS漏洞扫描基础教程之连接OpenVAS服务
  5. STM32开发 -- patch生成和使用
  6. 爬虫——模拟点击动态页面
  7. 如何从Java EE无状态应用程序连接到MongoDB
  8. SQL 中为什么经常要加NOLOCK?
  9. react-native 错误捕捉与处理
  10. linux以命令行下配置连接wlan无线网卡
  11. tcs标准编写软件_tcs 2010软件下载
  12. 现代操作系统(原书第四版)课后题答案 —— 第一章 引论
  13. ILSVRC2015_VID数据集说明
  14. uhttpd php安装u盘,如何使用u盘安装linux系统
  15. python写一个数字字典生成器
  16. php扒皮,扒皮b站美妆up主兰花
  17. 贴海报 (线段树染色-离散化
  18. B站韩顺平老师Linux笔记(截止到85集)
  19. opencv图像全景拼接
  20. 推荐一款开源的ICO制作神器——greenfish

热门文章

  1. 诚之和:Pytorch 统计模型参数量的操作 param.numel()
  2. Mac 微信定制化快捷键【截屏、标记、添加文字不再是问题】
  3. ChatGPT常用提问技巧
  4. 线粒体提取试剂盒丨Biogradetech线粒体分离提取试剂盒(细胞样品)
  5. c语言运算符优先级问题
  6. 51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版)
  7. Pronunciation Guide for 25 Common Fruits
  8. 【c++】哈希---unordered容器+闭散列+开散列
  9. html表格自动序号,word实用技巧:表格中自动添加序号
  10. NuttX的学习笔记 8