强化学习系列10:无模型的直接策略搜索

1. 从值函数到策略函数

前面介绍的方法都是基于值函数 v v v或者 q q q来计算的(用定义或者bellman方程),策略根据 π ( s ) = arg ⁡ max ⁡ a q ( s , a ) \pi(s)=\arg \max_a q(s,a) π(s)=argmaxaq(s,a)得到。有时我们可以直接建立状态与策略之间的函数,即 π ( s ) = f θ ( s ) \pi(s)=f_{\theta}(s) π(s)=fθ(s),比如说建立一个神经网络,网络参数为 θ \theta θ,输入是状态 s s s,输出为每一个行动的概率 p p p。直接策略搜索的有点是:直接、简单、易收敛。
同样在直接策略搜索的领域内,也分有模型与无模型两类,无模型算法中,确定性策略一般用DDPG方法,随机策略主要是TRPO、A2C等;有模型算法中,主要是使用GPS等算法。这里首先介绍无模型的算法。
详细的介绍可以参考这篇博客:https://blog.csdn.net/jinzhuojun/article/details/78007628
在这里插入图片描述

2. 随机策略梯度法

首先简单推导一下策略梯度更新方法:
定义采样策略为 Π \Pi Π,采样轨迹为 τ \tau τ,总体回报为 r ( τ ) r(\tau) r(τ),则目标函数为最大化 J π = E τ ∼ π [ r ( τ ) ] J_{\pi}=E_{\tau\sim\pi}[r(\tau)] Jπ=Eτπ[r(τ)],梯度为 ∇ J π = Σ [ r ( τ ) ∇ π ( τ ) ] = Σ [ π ( τ ) r ( τ ) ∇ log ⁡ π ( τ ) ] = E τ ∼ π [ r ( τ ) ∇ log ⁡ π ( τ ) ] \nabla J_{\pi}=\Sigma[r(\tau)\nabla \pi(\tau)]=\Sigma[\pi(\tau)r(\tau)\nabla \log\pi(\tau)]=E_{\tau\sim\pi}[r(\tau)\nabla \log\pi(\tau)] Jπ=Σ[r(τ)π(τ)]=Σ[π(τ)r(τ)logπ(τ)]=Eτπ[r(τ)logπ(τ)]。将 τ \tau τ展开即可得到上式等于 E [ Σ t r t Σ t ∇ log ⁡ π ( a t ∣ s t ) ] E[\Sigma_t r_t\Sigma_t\nabla\log\pi(a_t|s_t)] E[ΣtrtΣtlogπ(atst)]。令 G = Σ t r t G=\Sigma_t r_t G=Σtrt,这个公式可以看做是以长期回报 G G G为加权权重,对所有的( s , a s,a s,a)样本进行最大似然估计的公式,非常简洁: E [ G ∇ l o g π ] E[G\nabla log\pi] E[Glogπ]
将期望用蒙特卡洛采样法进行替换,用当前策略采样 N N N条轨迹,并将权重从长期期望改成从当前时间开始的期望值。则 ∇ J π = 1 N Σ i G i ∇ log ⁡ π ( a i , t ∣ s i , t ) \nabla J_{\pi}=\frac{1}{N}\Sigma_{i} G_i\nabla \log\pi(a_{i,t}|s_{i,t}) Jπ=N1ΣiGilogπ(ai,tsi,t) ,然后进行更新: Δ θ = α ∇ J π \Delta{\theta}=\alpha\nabla J_{\pi} Δθ=αJπ,其中 α \alpha α是学习率。
在实际过程中,我们进行交互的次数往往是有限的,学习成本很高,样本不足会造成策略波动太大的问题,业界发展了一些新的方法来处理这个问题。

2.1 Actor-Critic方法

在Actor-Critic方法中,我们采用几种措施来降低算法的方差,首先是使用独立的模型代替轨迹的长期回报(比如TD-error, g t = Σ i = 1... n γ i r t + i + v ( s t + n ) − v ( s t ) g_t= \Sigma_{i=1...n}\gamma^i r_{t+i}+v(s_{t+n})-v(s_t) gt=Σi=1...nγirt+i+v(st+n)v(st)),称为Critic;原来用于行动的策略模型称为Actor。公式变为: ∇ J π = E [ Σ t g t ∇ log ⁡ π ( a t ∣ s t ) ] \nabla J_{\pi}=E[\Sigma_t g_t\nabla\log\pi(a_t|s_t)] Jπ=E[Σtgtlogπ(atst)]
其次,在实际更新时又有异步和同步两种方法。分别称为A3C(Asynchronous Advantage Actor-Critic)和A2C(Advantage Actor-Critic)。OpenAI在官方博客中提到A2C效果比A3C要好。
再者,目标函数中加入策略的熵,以增加不确定性进行一定量的探索。具体来说,就是加上 β ∇ θ H ( π ( s t ) ) \beta\nabla_{\theta}H(\pi(s_t)) βθH(π(st))
Baselines上的案例如下:

import gym
from stable_baselines.common.policies import MlpPolicy
from stable_baselines.common.vec_env import SubprocVecEnv
from stable_baselines import A2C

# multiprocess environment
n_cpu = 4
env = SubprocVecEnv([lambda: gym.make('CartPole-v1') for i in range(n_cpu)])
model = A2C(MlpPolicy, env, verbose=1)
model.learn(total_timesteps=25000)
obs = env.reset()
while True:
    action, _states = model.predict(obs)
    obs, rewards, dones, info = env.step(action)
    env.render()

2.2 TRPO:置信区域策略优化

在上面的算法中,学习率 α \alpha α是固定的。我们想要自动选择合适的步长避免模型震荡,这里就要用到TRPO方法。TRPO全称trust region policy optimization,其目标是每次更新策略后,回报函数的值不能变差。其核心是如下公式: J π ′ = J π + E π ′ [ Σ t γ t A π ] J_{\pi'}=J_{\pi}+E_{\pi'}[\Sigma_t\gamma^tA_{\pi}] Jπ=Jπ+Eπ[ΣtγtAπ]
注意其中 π ′ \pi' π π \pi π分别代表新策略和旧策略,后面计算期望的时候,用新策略采样,用旧策略计算优势函数 A π A_{\pi} Aπ。经过一系列tricky的处理之后,求解函数变为:
min ⁡ ∇ L x ∗ ( θ − x ) \min \nabla L_{x}*(\theta-x) minLx(θx)
s.t. 1 2 ( θ − x ) T I θ ( θ − x ) ≤ δ \frac{1}{2}(\theta-x)^TI_{\theta}(\theta-x)\le\delta 21(θx)TIθ(θx)δ
其中 L x = E [ π x π θ A θ ] L_x=E[\frac{\pi_x}{\pi_{_{\theta}}}A_{\theta}] Lx=E[πθπxAθ] I θ I_{\theta} Iθ为fisher阵,TRPO算法使用共轭梯度法计算fisher阵。
Baselines中的使用方法和A2C类似,把模型名字换掉即可。

2.3 GAE:泛化优势估计

GAE(Generalized Advantage Estimation)可以看做是AC方法的拓展。我们把2.1节中的权重再进行替换。我们将n步TD-error记作 G t n G_t^n Gtn,则新的方法 G t G A E ( λ ) = G t 1 + γ λ G t 2 + ( γ λ ) 2 G t 3 + . . . . . . ) = Σ i ( γ λ ) i G t + i 1 G_t^{GAE(\lambda)}=G_t^1+\gamma \lambda G_t^2+(\gamma \lambda )^2G_t^3+......)=\Sigma_i(\gamma \lambda)^iG_{t+i}^1 GtGAE(λ)=Gt1+γλGt2+(γλ)2Gt3+......)=Σi(γλ)iGt+i1。当 λ = 0 \lambda=0 λ=0时,权重为1阶TD-error;当 λ = 1 \lambda=1 λ=1时,权重为蒙特卡洛和价值函数之间的差值。
Baselines中的使用方法和A2C和TROP类似,把模型名字换掉即可。

2.4 PPO:近似策略优化

PPO(Proximal Policy Optimization)对TRPO方法进行了优化,将置信区域的约束条件改到了目标函数中, L x = E [ π x π θ A θ ] L_x=E[\frac{\pi_x}{\pi_{_{\theta}}}A_{\theta}] Lx=E[πθπxAθ]变为: E [ min ⁡ { π x π θ A θ , c l i p ( π x π θ , 1 − ϵ , 1 + ϵ ) A θ } ] E[ \min \{\frac{\pi_x}{\pi_{_{\theta}}}A_{\theta},clip(\frac{\pi_x}{\pi_{_{\theta}}},1-\epsilon,1+\epsilon)A_{\theta} \}] E[min{πθπxAθ,clip(πθπx,1ϵ,1+ϵ)Aθ}],相当于给 π x π θ \frac{\pi_x}{\pi_{_{\theta}}} πθπx加了2把锁。此外,PPO还将值函数的目标函数和策略模型的熵加入到了目标中。
此外PPO使用了一种称为概率比率剪切的技术,这涉及到计算新策略和旧策略对动作概率的比率。
另外,DPO是分布式版本的PPO。

3. 无模型确定策略

这里的确定策略指的是我们的输出不再是不同行动的概率值,而是直接给出一个具体的行动。
确定策略的信息量比随机策略要少,但是在连续决策空间问题上,只能使用确定策略。比如我们要通过强化学习去得到词汇的32维词向量,每一维都有无穷多的连续取值,我们不可能给出它们每一个概率(除非进行离散化),只能给出最合适的一个词向量值。

3.1 DDPG:深度确定性策略梯度法

DDPG以AC为基础,借鉴使用DQN的replay buffer和target network来进行学习。首先,Actor和Critic都有自己的Behavior和Target Network,其次不同于DQN的隔一段时间同步一次,在DDPG中每次都是更新一点点,称为soft方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值