策略搜索(强化学习方法)

前面介绍的所有方法都是先把 V 值或者 Q 值估计出来,再从中推导出策略,我们称这一类方法为基于值函数(Value-based)的方法。使用基于值函数的方法可以采用表格的形式,如果使用函数近似的话,就会出现策略退化问题。

为了解决这个问题,我们可以直接去寻找策略,而不是通过值函数来导出策略,这种直接学习策略的方法称为基于策略函数(Policybased)的方法。我们一般直接在策略空间中搜索得到最优策略,该方法称为策略搜索(Policy Search)。

策略梯度

在策略搜索中,可以使用基于梯度的方式来优化策略,这种方法称为策略梯度(Policy Gradient)。假设策略函数为 πθ=(a|s),θ 为这个函数的参数,目标函数则可定义为:

J(θ)=∫Pθ(τ)R(τ)dτ

有了目标函数 J(θ),可以使用梯度上升的方法来优化参数 θ 使得目标函数 J(θ) 增大,梯度就是函数 J(θ) 关于参数 θ 的导数,即

上式中 G(τt:T) 是从起始时刻 t 直至结束后得到的累积奖励。

Monte Carlo Policy Gradient 算法

在前面介绍蒙特卡罗方法的时候介绍过,期望可以通过采样的方法近似。对于当前的策略 πθ,可以通过让智能体在环境中运行,得到多条运动轨迹。对于每一条运动轨迹,可以计算每个时刻的梯度,将得到的梯度乘以一个学习率用来更新参数。这就是 Monte Carlo Policy Gradient 算法(或称 REINFORCE 算法),伪代码如下所示:

Input: a differentiable policy parameterization πθ(a|s)
Initialize policy parameter θ
Repeat:
    Generate an episode τ: S0, A0, R1,···,ST-1, AT-1, RT, following πθ(a|s)
    For each step of the episode t = 0, ···, T-1:
        G ← return from step t
            θ←θ+αγtG(τt:T)(∂/∂θ)logπθ(at|st)
    End
Until θ is converged
Output: πθ

Actor-Critic 算法

Actor-Critic 算法在 Monte Carlo Policy Gradient 算法中,只有每次都要走完一条完整的轨迹才能得到累积奖励,我们希望像时序差分方法一样,可以实现单步更新。Actor-Critic 算法是一种结合了策略梯度和时序差分的强化学习方法。

在 Actor-Critic 算法中,既要学习策略 πθ(a|s),同时还要学习值函数 Vφ(s),伪代码如下所示:

Input: a differentiable policy parameterization πθ(a|s)
Input: a differentiable state-value parameterization V(s)
Repeat:
    Initialize state s
λ=1
    Repeat:
        On state s, choose an action a = πθ(a|s)
        Execute a, get reward r and new state s'
        δ←r+γV(s')-V(s)         
        ∅←∅+βλδ(∂/∂∅)V(s)  #更新值函数的参数
        θ←θ+βλδ(∂/∂θ)logπθ(a|s)  #更新策略函数的参数
        λ←γλ
        s←s'
        until s is terminal
until θ is converged
Output: πθ