一、介绍
之前的控制方法都是Value-based,而在确定价值函数之后,其实我们是在价值函数的基础上确定了某种策略(贪婪, ϵ -贪婪)找到action。那么我们为什么不直接通过策略函数控制action呢?
这样做的好处:
- 连续的动作空间(或者高维空间)中更加高效;
- 可以实现随机化的策略;
- 某种情况下,价值函数可能比较难以计算,而策略函数较容易。
二、Finite Difference Policy Gradient
首先,对某种参数化策略 πθ ,我们需要确定一个目标函数 J(θ) ,这里给出了三种:
- start value
- average value
- average reward per time-step
由于要最大化目标函数,因此使用梯度上升的方法优化参数 θ 。
那么要怎么计算策略梯度呢,使用了一种叫做finite difference的方法,也就是在每个维度k上增加一个很小的值,然后求出一个接近偏导数的值:
likelihood ratio,如下的公式: ∂θπ(s,a)=π(s,a)×∂θlogπ(s,a)
Softmax Policy:利用特征的线性组合进行softmax,决定动作的概率的策略。
Gaussian Policy:利用特征的线性组合作为分布的均值 μ , π∼N(μ,σ2) 。
对于任意可微的策略函数 π ,其在MDP中的梯度计算如下:
所以最后,以上面这个梯度计算的公式为基础,给出了Monte-Carlo-Policy-Gradient的流程,其中以样本中的return作为Q的无偏估计:
三、Actor-Critic
上一讲中的MC-PG方法造成的方差太大,引入Actor-Critic方法解决。
actor,参数θ,在环境中学习策略并且执行,进行一个Policy-Gradient的过程更新θ;
critic,参数w,用来估计价值函数Q,进行一个策略评估的过程更新w。
减少方差的trick:
- 减去一个Baseline函数,也就是在PG的过程中,不再使用Q函数,而是使用Advantage函数,即Q-V,这里Baseline函数也就是状态价值函数V。(Dueling)
估计Advantage函数,可以使用TD error,因为这两者是等价的。
原文地址: http://cairohy.github.io/2017/09/06/deeplearning/%E3%80%8ADavid%20Silver%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E5%85%AC%E5%BC%80%E8%AF%BE%E3%80%8B-7%EF%BC%9APolicy%20Gradient/