lecture5: Policy Optimizatiob(策略优化)
一、引言
之前的学习方法都是基于价值函数的,而不是通过选择策略输出中取值大的值。
之前基于值函数的学到的都是 确定性的策略(值函数离散化后用table表示或者用网络近似)
我们需要的是策略函数,输出是一个概率,取argmax的动作。
对其进行采样,就可以得到具体的行为了(这种情况下不是取最大值)
强化学习基于策略的优化的化,可以让优化更容易。、
分类:
在价值函数中是通过价值函数隐士的表示策略
在策略函数中,不涉及价值函数
两种的结合是Actor-critic。
优势:
不管数据多少都可以得到一个策略函数,通过策略函数进行交互,而在价值函数的时候必须需要很多数据的遍历
在高维空间更有效
学习的是概率,更有优势
不足:
经常收敛到局部最优解,因为对策略函数建模的时候不是最优的
评估的时候有很高的方差,使测试结果不稳定
PART1
二、策略函数
一种是确定性的,一种是以概率形式返回,或者在连续行为中是高斯分布(可以从分布中采样得到)
比如在石头剪刀布中的策略应该是概率的形式
应用:aliased gridworld游戏
agent在灰色区域不知道自己是在左边还是在右边
如果用价值函数,就会得到确定性策略。即在灰色区域也会采取确定性策略,get!
如果采用基于策略的方法,则两个方向的概率就都会是50%。
三、优化函数
策略函数
Π
θ
(
s
,
a
)
\Pi_{\theta}(s,a)
Πθ(s,a)是关于
θ
\theta
θ的函数,优化函数
怎么衡量策略的价值?
(一)、
1、如果在可以结束的环境中,可以用开头状态的值,用最开始的价值决定后面的好不好;
2、如果持续性的,可以用average vale来衡量。
3、或者用每一步获得的平均奖励作为客观函数去优化。
(二)、
从轨迹的角度去看
根据策略与环境交互,得到很多轨迹,然后将奖励平均,这个奖励也可能值有在结束时候得到。
我们希望
四、具体做法
如果J是可微,可以用梯度的方法优化,或者其他方法
如果J不可微,或者梯度难算,可以用**“黑箱优化”**
####(一)、梯度方法
首先看梯度方法
让客观函数取大。
有一个tricks:
注:李宏毅老师课程中也有。
(二)、“黑箱”— cross-entropy
cross-entropy方法(CEM)
参数有一个集合,一开始是一个高斯分布,得到很多参数,得到很多策略函数,对于每一个策略函数,算J1,存在C中。
然后进行排序,取前10%的参数
用极大似然的优化更新分布的参数,然后再从中采样,一值下去。
这里就没有显式的J,首先我们需要确定策略函数的形式,然后根据上面介绍的方法将参数带到策略函数中,就会产生轨迹,然后计算J,这样去更新。
代码:
(三)、“黑箱”— finite difference
finite difference
没法算梯度的情况下,对于每个维度加一个很小的扰动,然后减原来的值,再除以很小的扰动。近似在在那一个上的梯度
虽然是近似的,而且效率比较低。但是对所有的策略函数都是work的。
五、策略函数的形式
(一)、softmax形式
(二)、高斯策略
用于动作空间是连续的
mean:状态特征量的加和
Variance:既可以是参数化的也可以是常数
a:从分布中采样
score function:可以求出
六、策略梯度方法应用
(一)、one-step MDPs
只走了一步的MDP
(二)、multi-step MDPs
产生的是很多轨迹τ
如何优化:
值有P是关于θ的,然后再利用log,这里的log可以将练乘变成加和。之前的log可以让函数取期望。
然后因为是MDP方法,因此可以通过采样,代替P。
然后将log那一项单独拆开后,因为中间那一项与θ没有关系,因此在求导的过程中就直接去掉了。得到的就是每一部分score function的加和。
最终:
这里及以下建议自己推导一下。
PART2
一、策略优化
(一)、策略梯度估计
首先是梯度的估计,这里的x代表的就是τ(从p中采样得到),即一条轨迹。f(x)代表一条轨迹的收益。
期望对θ求导得到score function,然后用采样的方式估计。
从p中采样的x,可以让f(x)尽可能大,其实也就是在优化下面的形状。
第一个是采样的图,第二个图是f(x)后的值(绿色值大),第三个图是根据梯度更新以后的p的分布。
(二)、最大似然估计
采样的点扔到似然函数中,让似然函数最大化。两者对比如下:
两者唯一的不同是策略梯度估计多了个reward function,相当于一个正负的值,相当于加权后的最大似然古迹。意义是策略鼓励策略进入奖励更高的区域。
形象来看,让轨迹向红色区域移动
二、改进
策略梯度的方法在这里是用MC的方法进行采样的,虽然是unbiased,但是very noisy。
(一)、利用时序的因果关系
周老师讲的是后面是一个log likehold,然后整个式子相当于用前面的reward进行normalization,但是前面的log likehold并不会影响后面的reward,因此有个时序关系。
我的理解是这里用到了一个技巧,因为前面是用每一个奖励乘以到他之前所有的likehold的乘积。举个例子,对于每一个reward,都需要乘以第一个likhold的分量。因此可以将两者的位置换一下。相当于对于第一个likehold,先乘以以后的每一个reward。
reinforce算法就是利用了这种思想
(二)、引入一个baseline
还是沿用(一)中的想法,然后因为Gt也是采样出来的一个量,因此具有high variance。
所以让他减去一个b(st),这样可以使Gt-b(st)的variance比Gt小很多。
b(st)的求法
1、可以利用很多Gt的平均值。
证明不会改变梯度的实际的值,但会减小方差。
2、可以通过参数化的方法求b(st)
(三)、引入Critic
评论家
用Q函数替代Gt
(四)、Actor-Critic
Actor是策略函数,Critic是Q函数,用于评价表演者好不好。
两者都有各自的参数。
Critic做的就是策略评估MC、TD、least-squares policy evaluation等方法。
1、基本做法
这里的一个算法是用TD策略评估,用线性方法去拟合。策略更新的时候用前一步得到的进行自举。
或者可以用两个不同的神经网络去拟合,一种节省计算的方法是分享特征提取,然后一部分输出价值函数,一部分输出策略函数。
2、考虑baseline的方法
这里叫Advantage function
现在面临的问题是Q和V都有自身的参数。
但是如果有分段不可微分的情况时,可以对这一点进行采样,然后计算后面每分支传回来的梯度,进行加和,再往前传递。
(四)、扩展
价值函数和策略函数的两个学派
经典RL 控制论背景
伯克利 机器人北京
周老师的评价
但是最后都回归到Actor-Critic。
**在机器人中需要考虑怎么减少采样。**策略函数只要有样本就可以去拟合。
代码
第一篇是策略迭代的总结
第二篇是RL代码
第三个是策略迭代在pong中实现
第四个是加入了baseline,让训练更加稳定