机器学习(三十四)——策略梯度
策略梯度
价值函数可以进行近似的参数化表达,策略本身也同样可以函数化、参数化:
πθ(s,a)=P[a∣s,θ]\pi_\theta(s,a)=P[a | s, \theta]πθ(s,a)=P[a∣s,θ]
所谓函数化是指,通过一个概率分布函数πθ(s,a)\pi_\theta(s,a)πθ(s,a),来表示每一步的最优策略,在每一步根据该概率分布进行action采样,获得当前的最佳action取值。显然概率越高的a,就是该策略最倾向的a。
显然,生成action的过程,本质上是一个随机过程;最后学习到的策略,也是一个随机策略(stochastic policy).
而策略函数的参数化就和价值函数的参数化类似了,无非是用较少的参数,来表示巨大的状态空间而已。
基于策略学习的优点:
基于策略的学习可能会具有更好的收敛性,这是因为基于策略的学习虽然每次只改善一点点,但总是朝着好的方向在改善;但是上讲提到有些价值函数在后期会一直围绕最优价值函数持续小的震荡而不收敛。
在对于那些拥有高维度或连续状态空间来说,使用基于价值函数的学习在得到价值函数后,制定策略时,需要比较各种行为对应的价值大小,这样如果行为空间维度较高或者是连续的,则从中比较得出一个有最大价值函数的行为这个过程就比较难了,这时候使用基于策略的学习就高效的多。
连续行为空间内的action对应一个具体的数值,这个数值可以从上述的策略分布中随机采样产生。因此策略学习天生支持连续行为空间。
能够学到一些随机策略。这一点后文会详述。
有时候计算价值函数非常复杂。比如当小球从从空中某个位置落下你需要左右移动接住时,计算小球在某一个位置时采取什么行为的价值是很难得;但是基于策略就简单许多,你只需要朝着小球落地的方向移动修改策略就行。
缺点:
容易收敛到局部最优,而非全局最优。
因为基于价值函数的策略决定每次都是推促个体去选择一个最大价值的行为;但是基于策略的,更多的时候策略的选择时仅会在策略某一参数梯度上移动一点点,使得整个的学习比较平滑,因此不够高效。
随机策略
随机策略有时是最优策略。对于石头剪刀布的游戏,只要一方有一个确定性的策略,就会被对手抓住进而整体上输掉。这个时候最好的策略就是随机选择每次出法,以得到最大可能的总体奖励。
以上面的Gridworld图为例,如果我们用某一个格子的某个方向是否有墙挡住来描述格子状态的话,就会发生灰色格子的状态是一样的情况,这就是所谓的状态重名(Aliased)。
在这种情况下,如果采用确定性的策略话,在个体处于无论哪个灰色格子时,都只能选取相同的行为。假设个体现在学到了一个价值函数,在这个价值函数里状态就是基于上述特征的参数化表示,此时当个体处在灰色格子中,如果采取的是greedy执行的方式,价值函数给出的策略要么都是向东,要么都是向西。如果是向西,那么当个体处在左侧灰色格子时,它将一直(greedy)或很长时间(ϵ\epsilonϵ-greedy)徘徊在长廊左侧两个格子之间而无法到达有钱袋子的格子,因而很长时间得不到奖励。
当发生状态重名情况时,随机策略将会优于确定性的策略。之前的理论告诉我们,对于任何MDP总有一个确定性的最优策略。不过那是针对状态可完美观测、或者使用的特征可以完美描述状态的情况下的。当发生状态重名无法区分,或者使用的近似函数无法对状态完美描述时,个体得到的状态信息等效于部分观测的环境信息,这时问题将不具备Markov性。而此时的最优策略,也不再是确定性的。
策略目标函数(Policy Objective Functions)
首先,我们看看如何评价一个策略的好坏。
- Start value:
J1(θ)=Vπθ(s1)=Eπθ[v1]J_1(\theta)=V^{\pi_\theta}(s_1)=E_{\pi_\theta}[v_1]J1(θ)=Vπθ(s1)=Eπθ[v1]
上式表示在能够产生完整Episode的环境下,从状态s1s_1s1开始,直到结束状态所能获得的累计奖励。在这种情况下,由于整个Episode的状态、路径都是确定的,因此奖励也是确定的。我们需要做的只是最大化start value,以找到最佳路径(也就是最佳策略)。
- Average Value:
JavV(θ)=∑sdπθ(s)Vπθ(s)J_{avV}(\theta)=\sum_s d^{\pi_\theta}(s)V^{\pi_\theta}(s)JavV(θ)=s∑dπθ(s)Vπθ(s)
对于连续环境条件,不存在一个开始状态,这个时候可以使用average value。上式中的dπθ(s)d^{\pi_\theta}(s)dπθ(s)表示πθ\pi_\thetaπθ对应的MDP过程的Markov chain的稳态分布。
- Average reward per time-step:
JavR(θ)=∑sdπθ(s)∑aπθ(s,a)Rs,aJ_{avR}(\theta)=\sum_s d^{\pi_\theta}(s)\sum_a\pi_\theta(s,a)R_{s,a}JavR(θ)=s∑dπθ(s)a∑πθ(s,a)Rs,a
上式表示每一个time-step在各种情况下所能得到的平均奖励。
当然了,在很多情况下,我们未必可以得到一个真实的奖励值,这时使用相关函数的估计值作为奖励值即可。
策略优化(Policy Optimisation)
主要分为两大类:
1.非gradient算法。
- Hill climbing
- Simplex / amoeba / Nelder Mead
- Genetic algorithms
2.gradient算法。
- Gradient descent
- Conjugate gradient
- Quasi-newton
一般来说,gradient算法的优化效率较高,因此本文只讨论gradient算法。
我们可以仿照ML中的梯度优化算法,定义策略的梯度函数:
Δθ=α∇θJ(θ)\Delta\theta=\alpha\nabla_\theta J(\theta)Δθ=α∇θJ(θ)
其中,
∇θJ(θ)=(∂J(θ)∂θ1⋮∂J(θ)∂θn)\nabla_\theta J(\theta)=\begin{pmatrix} \frac{\partial J(\theta)}{\partial \theta_1} \\ \vdots \\ \frac{\partial J(\theta)}{\partial \theta_n} \end{pmatrix}∇θJ(θ)=⎝⎜⎜⎛∂θ1∂J(θ)⋮∂θn∂J(θ)⎠⎟⎟⎞
然而,梯度函数有的时候并不简单,也许并不可微。这时可以使用有限差分法:
∂J(θ)∂θk≈J(θ+ϵuk)−J(θ)ϵ\frac{\partial J(\theta)}{\partial \theta_k}\approx \frac{J(\theta + \epsilon u_k)-J(\theta)}{\epsilon}∂θk∂J(θ)≈ϵJ(θ+ϵuk)−J(θ)
这里的uku_kuk是第k个元素为1,其余元素为0的单位向量。
有限差分法简单,不要求策略函数可微分,适用于任意策略;但有噪声,且大多数时候不高效。
Monte-Carlo Policy Gradient
∇θπθ(s,a)=πθ(s,a)∇θπθ(s,a)πθ(s,a)=πθ(s,a)∇θlogπθ(s,a)\nabla_\theta \pi_\theta(s,a) = \pi_\theta(s,a)\frac{\nabla_\theta \pi_\theta(s,a)}{\pi_\theta(s,a)}=\pi_\theta(s,a) \nabla_\theta \log \pi_\theta(s,a)∇θπθ(s,a)=πθ(s,a)πθ(s,a)∇θπθ(s,a)=πθ(s,a)∇θlogπθ(s,a)
上式一般被称作Likelihood ratios,这里使用到了一个公式:dlog(y)=dy/y\mathrm{d}\log(y)=\mathrm{d}y/ydlog(y)=dy/y
我们定义Score function为:∇θlogπθ(s,a)\nabla_\theta \log \pi_\theta(s,a)∇θlogπθ(s,a)
下面讨论几种常见的策略。
Softmax Policy
Softmax Policy适用于离散行为空间,它把行为权重看成是多个特征在一定权重下的线性代数和:ϕ(s,a)Tθ\phi(s,a)^T\thetaϕ(s,a)Tθ,则采取某一行为的概率为:
πθ(s,a)∝eϕ(s,a)Tθ\pi_\theta(s,a)\propto e^{\phi(s,a)^T\theta}πθ(s,a)∝eϕ(s,a)Tθ
相应的Score function为:
∇θlogπθ(s,a)=ϕ(s,a)−Eπθ[ϕ(s,⋅)]\nabla_\theta \log \pi_\theta(s,a)=\phi(s,a)-E_{\pi_\theta}[\phi(s,\cdot)]∇θlogπθ(s,a)=ϕ(s,a)−Eπθ[ϕ(s,⋅)]
上式中,等号右边第一部分是采取某行为的Score,第二部分是当前状态的期望分值。
Gaussian Policy
Gaussian Policy适用于连续行为空间。比如,如果控制机器人行走要调整流经某个电机的电流值,而这个电流值是连续值。
它用一个正态分布表示策略:a∼N(μ(s),σ2)a\sim N(\mu(s), \sigma^2)a∼N(μ(s),σ2),其中μ(s)=ϕ(s)Tθ\mu(s)=\phi(s)^T\thetaμ(s)=ϕ(s)Tθ。
相应的Score function为:
∇θlogπθ(s,a)=(a−μ(s))ϕ(s)σ2\nabla_\theta \log \pi_\theta(s,a)=\frac{(a-\mu(s))\phi(s)}{\sigma^2}∇θlogπθ(s,a)=σ2(a−μ(s))ϕ(s)
下面我们用一个图来演示一下相关步骤。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UI1YvCTe-1571621618479)(/images/img3/pg.png)]
左图的蓝点表示采样X,箭头指示该点的梯度方向,既然是正态分布,这些箭头显然是远离中心的。中图表示,X对应的Score function。我们根据Score function更新参数(沿着绿色箭头方向,或者沿着红色箭头的反方向)。最终得到右图中的新的正态分布。
从贝叶斯学习的角度来看,左图相当于先验分布,而中图相当于后验分布。
参考:
https://karpathy.github.io/2016/05/31/rl/
Deep Reinforcement Learning: Pong from Pixels
Policy Gradient Theorem
One-Step MDP是一类特殊的MDP:它从任意状态开始,只执行一次动作,然后就结束了。
J(θ)=Eπθ[r]=∑s∈Sd(s)∑a∈Aπθ(s,a)Rs,aJ(\theta)=E_{\pi_\theta}[r]=\sum_{s\in S} d(s)\sum_{a\in A}\pi_\theta(s,a)R_{s,a}J(θ)=Eπθ[r]=s∈S∑d(s)a∈A∑πθ(s,a)Rs,a
∇θJ(θ)=∑s∈Sd(s)∑a∈A∇θlogπθ(s,a)Rs,a=Eπθ[∇θlogπθ(s,a)r]\nabla_\theta J(\theta)=\sum_{s\in S} d(s)\sum_{a\in A}\nabla_\theta \log \pi_\theta(s,a)R_{s,a}=E_{\pi_\theta}[\nabla_\theta \log \pi_\theta(s,a)r]∇θJ(θ)=s∈S∑d(s)a∈A∑∇θlogπθ(s,a)Rs,a=Eπθ[∇θlogπθ(s,a)r]
One-Step MDP的相关结论可以扩展到multi-step MDP,只需要将即时奖励r,替换为长期奖励(一般使用其估计函数Qπ(s,a)Q^{\pi}(s,a)Qπ(s,a))即可。
在监督学习里,当前状态、行为的好坏由监督信息告知;而在强化学习里,则需要通过价值函数来估计当前状态行为的好坏。
我们将Policy Gradient应用到MC算法上,则得到如下流程:
Initialise θ\thetaθ arbitrarily
for each episode {s1,a1,r2,…,sT−1,aT−1,rT}∼πθ\{s_1,a_1,r_2,\dots,s_{T−1},a_{T−1},r_T\}\sim \pi_\theta{s1,a1,r2,…,sT−1,aT−1,rT}∼πθ {
for t = 1 to T−1T−1T−1 {
θ←θ+α∇θlogπθ(st,at)vt\theta \leftarrow \theta + \alpha\nabla_\theta \log \pi_\theta (s_t , a_t )v_tθ←θ+α∇θlogπθ(st,at)vt
}}
return θ\thetaθ
在基于策略的学习算法中,算法挑选策略的时候不需使用ϵ\epsilonϵ-贪婪搜索,策略是直接根据参数θ\thetaθ得到的。同时在对策略参数更新时有一个学习率α\alphaα,它体现了在梯度方向上更新参数θ的步长(step size),一般的我们在更新参数时是按梯度方向只更新由α\alphaα确定的一定量。
打个比方,当前策略在更新时提示梯度方向倾向于选择“向左”的行为,那么在更新策略参数时,可以朝着向左的方向更新一定的值,如果这个α\alphaα取值增大,则导致决策朝着更容易选择“向左”的行为倾斜,这其实就相当于没有探索的贪婪决策行为。而只要学习在持续,就有可能因为梯度变化而尝试更多的行为,这一过程中参数α\alphaα控制了策略更新的平滑度。
如果基于价值函数制定策略,则使用查表(table look-up)的方式可以保证收敛到全局最优解。即使使用的是直接基于策略的学习方法;但是,如果使用的是通用化的近似函数表示方法,比如神经网络等,则无论是基于价值函数,还是基于策略,都可能陷入局部最优解。
参考
https://zhuanlan.zhihu.com/p/54825295
基于值和策略的强化学习入坑
https://blog.csdn.net/gsww404/article/details/80705950
策略梯度(Policy Gradient)
机器学习(三十四)——策略梯度相关推荐
- 李弘毅机器学习:第四章—梯度下降法
李弘毅机器学习:第四章-梯度下降法 什么是梯度下降法? Review: 梯度下降法 Tip1:调整学习速率 小心翼翼地调整学习率 自适应学习率 Adagrad 算法 Adagrad 是什么? Adag ...
- [Python人工智能] 三十四.Bert模型 (3)keras-bert库构建Bert模型实现微博情感分析
从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章开启了新的内容--Bert,首先介绍Keras-bert库安装及基础用法及文本分类工作.这篇文章将通过keras- ...
- 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法
强化学习基础篇(三十四)基于模拟的搜索算法 上一篇Dyna算法是基于真实经验数据和模拟经验数据来解决马尔科夫决策过程的问题.本篇将结合前向搜索和采样法,构建更加高效的搜索规划算法,即基于模拟的搜索算法 ...
- Python编程基础:第三十四节 文件移动Move a File
第三十四节 文件移动Move a File 前言 实践 前言 当我们需要将一个文件/文件夹移动到另一个指定路径时,就需要用到shutil.move()函数,该函数需要指定两个参数shutil.move ...
- 三十四、深入Java中的泛型(上篇)
@Author:Runsen @Date:2019年10月22日 19:39:21 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件 ...
- FreeSql (三十四)CodeFirst 迁移说明
FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能. 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也 ...
- c语言三级上机题库,2006年9月全国等级考试三级c语言上机题库(三十四)
★☆题目34(无忧id 73,102 素数题) 无忧id 102 题提供了求素数isPrime()函数 程序prog1.c的功能是:选出100以上1000之内所有个位数字与十位数字之和被10除所得余数 ...
- 第三十四章 批量印刷书籍
第三十四章 批量印刷书籍 "不,这次是要必须跪下去的,因为这是对您的敬重,你竟然能够制作出来如此锋利的宝剑,那么我这个长安城的第一铁匠就当的有些太无能了." "哪里无能, ...
- 【零基础学Java】—Calendar类(三十四)
[零基础学Java]-Calendar类(三十四) java.util.Calendar日历类 Calendar类是一个抽象类,里面提供了很多操作日历字段的方法 Calendar类无法直接创建对象,里 ...
- JavaScript学习(三十四)—事件委托
JavaScript学习(三十四)-事件委托 (一).什么是事件委托? 所谓的事件委托就是指将事件添加到祖先元素身上,依据事件冒泡的原理(就是指事件的执行顺序是从当前元素逐步扩展到祖先元素,直到扩展到 ...
最新文章
- js实现审批流_JavaScript实现审核流程状态的动态显示进度条
- 2021新年伊始,25岁“天才少年”曹原再发一篇Nature!9个月的第三篇Nature!
- 美团爱问Kafka?太真实了!
- c3p0 参数 模糊查询_mybatis之动态sql,模糊查询,结果集处理,mybatis分页及特殊字符处理...
- Golang的for range遍历
- 深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?
- 手把手教您解决90%的自然语言处理问题
- php 实例化模型出错,实例化model出错了
- 如何在SQL Server 2017中实现图形数据库
- 628和822大K站:每个站长挥之不去的阴影
- 【通俗易懂的通信】贝叶斯公式 全概率公式 及其理解
- NiCad克隆检测工具
- 云服务服务器免费使用
- CreateCompatibleDC函数的使用
- 【编译原理】词法分析器语法分析器
- 【Python入门】人生苦短,我用Python
- linux环境下ps命令行,Linux系统ps命令详解:查看正在运行的进程
- java代码生成_Java代码生成器CodeX4J介绍
- Facebook Surround360 学习笔记--(2)算法原理
- vue-router有哪几种导航钩子?(具体怎么用的)
热门文章
- Asp.net序中常用代码汇总(五)
- XCTF-Web-高手区-Web_python_template_injection
- XCTF-高手进阶区:web2
- angularjs html5模式,Angularjs $location html5mode浅析
- 数据泵导入远程oracle,数据泵导入导出远程数据库数据
- vb检测电脑温度_电脑硬件温度多少正常?如何查看电脑硬件温度?
- 如何设置顶部和底部固定,中间填满
- 数组去重(JavaScript)先从网上整理一波,待验证
- PCL:PCL可视化显示点云
- 多路由器环境配置的一些小技巧(达内)