参考:策略梯度理解及TensorFlow实现
李宏毅深度强化学习笔记(二)Proximal Policy Optimization (PPO)
李宏毅,深度强化学习
DQN的缺点:
在DQN中,我们通过神经网络计算价值函数Q(s,a,w)近似表示Q(s,a),即:
Q ( s , a , w ) ≈ Q ( s , a ) Q(s,a,w) \approx Q(s,a) Q(s,a,w)≈Q(s,a)
这个函数用参数w来描述。我们是根据最大的价值选择动作。
在策略梯度法中,采取类似的思路,这是是对策略近似表示,即:
π θ ( s , a ) = P ( a ∣ s , θ ) ≈ π ( s , a ) {\pi _\theta }(s,a) = P(a|s,\theta ) \approx \pi (s,a) πθ(s,a)=P(a∣s,θ)≈π(s,a)
这个策略函数用参数 θ \theta θ描述。因为是概率,所以是个连续函数,可以直接跳过用值函数进行评估,直接用梯度上升(或者下降)求最优的策略。
对于dqn,对连续动作的处理不足,我们都知道DQN的Q网络输入为离散的state,输出为action,无法处理连续的动作。
为什么采取pd
agent可能在每次玩游戏的时候走的路径都不一定完全相同。假设策略会引导agent经历一个轨迹。
τ = ( s 1 , a 1 , s 2 , a 2 , ⋯ s T , a T ) \tau = \left( {{s_1},{a_1},{s_2},{a_2}, \cdots {s_T},{a_T}} \right) τ=(s1,a1,s2,a2,⋯sT,aT)
如下图:
定义:这条轨迹在策略 π \pi π的引导下出现的概率:
R ( τ ) = ∑ t = 1 T r t R\left( \tau \right) = \sum\limits_{t = 1}^T {{r_t}} R(τ)=t=1∑Trt是某一条轨迹的的总汇报,是一个随机变量。因为轨迹是个随机变量
因为轨迹是个随机变量,所以最好的方法是对该回报求期望,有:
J ( θ ) = E τ ∼ P θ ( τ ) R ( τ ) = ∑ τ R ( τ ) P θ ( τ ) J\left( \theta \right) = {E_{\tau \sim {P_\theta }\left( \tau \right)}}R\left( \tau \right) = \sum\limits_\tau {R\left( \tau \right)} {P_\theta }\left( \tau \right) J(θ)=Eτ∼Pθ(τ)R(τ)=τ∑R(τ)Pθ(τ)
我们希望期望最大化,所以需要对其求梯度,注意这里是对参数θ求偏导:
图中即为梯度公式,然后根据梯度上升公式更新参数θ, θ ← θ + η ∇ θ J ( θ ) \theta \leftarrow \theta + \eta {\nabla _\theta }J\left( \theta \right) θ←θ+η∇θJ(θ)。注意这里有几个转换的过程.
上面提到第n条轨迹的累积回报 R ( τ n ) R\left( {{\tau ^n}} \right) R(τn)可看成对后面对数概率的加权。但是会出现两个问题:
t时刻所做的动作只能影响t时刻之后的回报,而不应该影响t时刻之前的。这两个问题会导致结果出现较大波动,即较大的方差,这是策略梯度算法最大的缺陷。
针对问题1,Williams等人提出了REINFORCE算法。即添加基线,即把权重项变为 R ( τ n ) − b R\left( {{\tau ^n}} \right)-b R(τn)−b,这里b指基线。通常b取 E ( R ( τ n ) ) E\left( {R\left( {{\tau ^n}} \right)} \right) E(R(τn)),也就是对所有的权重求期望,然后分别用每个权重减掉这个值,最后可给差的策略以负的权重。可用来减少方差。
针对问题2,引入合理的评价方法,即把权重项变为 ∑ t ′ = t T γ t ′ − t r t \sum\limits_{t' = t}^T {{\gamma ^{t' - t}}} {{\bf{r}}_{\bf{t}}} t′=t∑Tγt′−trt, γ \gamma γ表示衰减系数。该式表示只计算t时刻之后的回报,即未来不影响过去。
在后续提出的诸多改进算法中将权重项写作 A θ ( s t , a t ) {A^\theta }({s_t},{a_t}) Aθ(st,at),称作优势函数(Advantage function),可以理解为处于状态 s时采取 a 相较其他动作的优势。