On-Policy 深度强化的训练经验——Google Brain

概述

原文:What Matters For On-Policy Deep Actor- Critic Methods? A Large-Scale Study
这篇论文真的非常及时,之前自己实践的时候全靠“合理性”、借鉴,强化算法这么多超参怎么调?

看了这篇文章,自己画了个on-policy强化的全景图,并直接给出文章里推荐的实验设置。

(这可是经过25万个agent训练的实验指导哦,真的财大气粗~)

熟悉的兄弟,不想看细节,直接看推荐实验设置。


一、on-policy 流程图

1

以小节的形式梳理一下该图

1.1 环境 T ( s ′ ∣ s , a ) \mathcal T(s'|s,a) T(ss,a)

  1. 环境基于当前状态 s s s,接收来自策略 π ( a ∣ s ) \pi(a|s) π(as)的动作action执行,并反馈奖励 r r r和下一状态 s ′ s' s
  2. 环境内部可能会有一个最大episode的长度,比如T=1000就强行终止,而不是真正的结束。
  3. 环境主要是与策略进行交互,把经验experience存储进memory
  4. 需要注意的是,进入策略的输入一般需要进行Normalization,如observation filter,running_mean_std等

1.2 策略 π ( a ∣ s ) \pi(a|s) π(as)

  1. 策略的输入一般是normalized后的data。这与图像数据的预处理一样,主要是避免不同数据类型数值扰动的干扰
  2. 策略的输出一般是logits,要通过action-distribution的设计,才能真正作为环境中的动作执行。这与图像数据的softmax对网络的输出logits归一化成概率形式进行分类一样。
  3. 策略的表示形式,神经网络。这就涉及到了网络层数(深度)、每层神经元个数(宽度)、激活函数类型、网络架构、参数初始化方式等与深度网络相关的超参进行考虑,即图中的Network initilization/MLP Layers那几个。
  4. 有了策略,就需要策略的目标,最常见的是最大化期望累积奖励即 J ( π ) = E τ ∼ π ( τ ) [ r ( τ ) ] J(\pi)=\mathbb E_{\tau\sim \pi(\tau)}[r(\tau)] J(π)=Eτπ(τ)[r(τ)]。围绕着该目标有许多算法如REINFORCE、PPO、V-trace等objective。
  5. 策略目标有了,需要一些常规的Regularization防止过拟合,如Entropy正则增强策略的多样型、约束behavior policy和learned policy之间的KL Divergence来对策略更新实行一定的约束,其不同的实现方式、约束对象的选取,又形成了许多不同的正则方法。
  6. 策略选了网络的表示形式、最大化奖励的目标、防止过拟合的正则化方法后,就需要优化器Optimizer。优化器又有不同的类型Adam、RMSprop,每种类型有不同的超参。然后学习率一般有schedule来调整,比如一开始学快点,学习率大一点,后面学慢点,这个schedule可通过线性衰减、指数衰减等方式设定。

总结:光一个策略的更新,就有输入、输出、网络结构设计、目标、正则化方式、优化器等因素干扰,更不用说,经过算法的推导,策略更新还很取决于Advantage的”估计“

1.3 优势函数 A ( s , a ) A(s,a) A(s,a)

优势函数的估计方式有很多(V-trace、N-step、GAE等),其中大部分需要用到状态值网络 V ( s ) V(s) V(s),细节发表在2016 ICLR的GAE:High-Dimensional Continuous Control Using Generalized Advantage Estimation

比如:
V ^ t G A E = ( 1 − λ ) ∑ N > 0 λ N − 1 V ^ t N ≈ V π ( s t ) A ^ t G A E = V ^ t G A E − V ( s t ) ≈ A π ( s t , a t ) \begin{array}{l} \hat V_t^{GAE}=(1-\lambda)\sum _{N>0}\lambda^{N-1} \hat V_t^{N}\approx V^\pi(s_t)\\ \hat A_t^{GAE}=\hat V_t^{GAE}-V(s_t)\approx A^\pi(s_t,a_t) \end{array} V^tGAE=(1λ)N>0λN1V^tNVπ(st)A^tGAE=V^tGAEV(st)Aπ(st,at)

这些优势函数的计算,一般都需要在一条trajectory上计算,因此即要Value Network也要从Memory的trajectory结合计算。

1.4 状态值函数 V ( s ) V(s) V(s)

既然优势函数的计算需要较为准确的值函数,于是假设构建一个网络来表示值网络。这样关于策略的那些考虑也全搬过来了。(网络结构、宽度、深度、参数初始化方法、激活函数、输入输出Normalization之类的)

  1. 首先设定一个目标,通常用TD error/Bellman error的MSE进行估算
  2. 其次,考虑目标构建角度的Regularization或目标数值角度的Normalization
  3. 最后,从Memory中Sample一些Batch_Data进行更新

1.5 Memory

Batch_data究竟是什么?Trajectory中来?还是Transition中来?(一般是Transition)

如果是Transition的话,那如何把Trajectory处理成Transition?怎么处理到达episode最大长度的强制终止与真正结束状态?

怎么从Transitions中sample一个Batch? (一般随机,但可以根据重要性采样,如Prioritized Experience Replay这篇文章就针对这个点)

Sample出一个Batch后,要对值函数 V ( s ) V(s) V(s)更新几次?

二、论文推荐的实战技巧


2.1 PPO Objective

  • 推荐使用PPO objective
  • 超参数(clip importance weight)优先推荐值0.25,推荐范围在 0.2 − 0.3 0.2-0.3 0.20.3
  • 另外可尝试超参数 0.2 − 0.5 0.2-0.5 0.20.5

基于此的进一步实践猜想:(超参数衰减合理嘛?记得腾讯有篇Paper提出过double-clip?)

理论直觉:(从实战推荐技巧倒推“合理性”)

  1. PPO Objective的理论推导,实际上就包含了更新前后目标的单调不减性
  2. 理论不减性落实到具体操作上,体现在PPO clip上,损失了一些“单调不减性”的程度

2.2 Network Architecture

  • 策略网络最后的“MLP层”,初始化的权重参数建议缩小一百倍(相对于其它层的参数初始化方式)
  • 策略网络最后的”action distribution层“,处理standard deviation时,将网络输出logits通过“softplus激活函数”映射到标准差std。初始化时对标准差std减去一个微小的增量。(一般控制初始化时的std数值为0.5)
  • 对从action distribution中根据mean和std采样出来的动作值,经过tanh激活函数与环境的action limit 转变成 环境中实际有意义的动作值。
  • 值网络的MLP宽度应该要比策略的MLP宽度要宽,深度两三层差不多。比如值网络一层MLP宽度为1024,而策略网络一层MLP宽度为128;或值网络宽度为256,策略网络为32等
  • 其它MLP层的激活函数,推荐使用tanh。relu效果非常一般

理论直觉:

  1. 值函数的变化较大,需要值网络的容量足够大才能捕捉,因此值网络更宽(针对宽度)
  2. 策略网络过宽,可能结构复杂度比问题最优策略的结构要复杂,就容易过拟合,反而性能差。所以策略网络的宽度设定取决于问题结构的复杂度(针对为什么策略网络不那么宽)
  3. 一开始不希望噪声对策略造成过多的干扰,使得策略的学习更多拟合到噪声而不是奖励函数上,因此初始化时要注意对衡量动作值“噪声”的标准差进行适当降低,让注意力多集中在reward上!(针对策略网络最后MLP层的处理)

2.3 Data Normalization

  • 策略网络 π ( a ∣ s ) \pi(a\mid s) π(as)的状态输入进行State Normalization非常关键!
  • 值网络 V ( s ) V(s) V(s)的Normalization与具体环境有关,可能很有用,可能很一般
  • 如果在意那么一点的性能提升,可以考虑网络更新时的Gradient Clipping
  • Advantage Normalization用处不大

理论直觉:

  1. 状态归一化,就像化简,在各同向性的空间中进行映射,肯定更好(但empirical的mean和std的估计可能会出现误差)
  2. 值函数 V π ( s ) V^\pi(s) Vπ(s)的归一化直觉上很有问题。一是这个网络还没拟合好,为什么要用它来normalized?二是,每个策略 π ( a ∣ s ) \pi(a|s) π(as)对应的 V π ( s ) V^\pi(s) Vπ(s)都只是更新几个batch而已,这个 V V V不断在变动,维持它的mean和variance很不合理。因此,从自身理解角度看,这一步用处不大。
  3. Advantage Normalization同理,因为要经过值函数 V ( s ) V(s) V(s)进行估计,本身学不准的 V ( s ) V(s) V(s),没必要进行Normalization

2.4 Advantage Estimation

  • V-trace和GAE方式差不多,相对来说V-trace比较适合off-policy
  • on-policy推荐使用GAE,discount factor λ \lambda λ推荐值为0.9,推荐范围在0.9-0.99

为什么一般通过拟合 V ( s ) V(s) V(s)来估计 A ( s , a ) A(s,a) A(s,a),大多不直接拟合 Q ( s , a ) Q(s,a) Q(s,a)呢?
答:Q(s,a)拟合的空间包括了动作空间,空间的扩大,拟合所需的样本就越多,准确率就会下降,而且当action是连续值,这个 ( s , a ) (s,a) (s,a)组成的空间也就更大了。

这个不是炼丹,有期望、方差的理论保证,不需要直觉。

2.5 Memory

  • 对于环境而言足够长的episode length,怎么处理强制结束与真正结束并不重要,随便选一种即可
  • 对于image、frame这种observation当作状态,可适当的skip frame
  • 从trajectories变成transitions再到mini-batch时,为了加速适当使用parallel environments,增大batch_size,进行了一次策略迭代后,重新计算advantages这一步比较重要!

2.6 Optimizers

  • 无脑Adam,momentum 推荐值 β \beta β,初始学习率 3 × 1 0 − 4 3\times 10^{-4} 3×104
  • schedule:随着迭代次数,线性衰减学习率即可(会有一点点提升)

2.7 Policy Regularization

  • Entropy term有点用
  • KL Divergence / Decoupled KL Divergence 实验表明无特别用处

可能原因是:PPO Objective的Clipping操作本身就是一种Regularization,其次是Policy 最后MLP层特殊的初始化操作,本身
也是一种不错的Regularization

总结

都是在On-Policy的Setting下跑的。
一般来说,跑实验就按照文中推荐设定就是了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值