目录
略 大部分在ray中都已经有啦,还有openai的baselines
https://github.com/ray-project/ray/blob/master/doc/source/rllib-algorithms.rst
https://github.com/openai/baselines
参考https://blog.csdn.net/jinzhuojun/article/details/72851548
ICML2016,提出了Asynchronous Methods for Deep Reinforcement Learning,即A3C(asynchronous advantage actor-critic)算法。
A3C不仅适用于离散也适用于连续动作空间的控制问题。DRL领域也确实有很成功的分布式机器学习系统,比如Google的Gorila。这篇文章另辟蹊径,发明了“平民版”的DRL算法,而且效果还不比前者差。
传统经验认为,online的RL算法在和DNN简单结合后会不稳定。主要原因是观察数据往往波动很大且前后sample相互关联。像Neural fitted Q iteration和TRPO方法通过将经验数据batch,或者像DQN中通过experience replay memory对之随机采样,这些方法有效解决了前面所说的两个问题,但是也将算法限定在了off-policy方法中。
而A3C是通过创建多个agent,在多个环境实例中并行且异步的执行和学习。于是,在DNN下,解锁了一大批online/offline的RL算法(如Sarsa, AC, Q-learning)。A3C不那么依赖于GPU或大型分布式系统,可以跑在一个多核CPU上。
将value function的估计作为baseline可以使得PG方法有更低的variance。这种设定下,就有了所谓的A - advantage,即,\(R_t−b_t(s_t)\)
,即\(A(s_t,s_t)=Q(a_t,s_t)−V(s_t)\)
,就是advantage function的估计。
将one-step Sarsa, one-step Q-learning, n-step Q-learning和advantage AC扩展至多线程异步架构。
注意,该框架是具有通用性的,例如,AC是on-policy的policy搜索方法,而Q-learning是off-policy value-based方法。
每个线程都有agent运行在环境的拷贝中,每一步生成一个参数的梯度,多个线程的这些梯度累加起来,一定步数后一起更新共享参数。
优点:
A3C和DDPG类似,通过DNN维护了policy和value function的估计,但它没用deterministic policy。在学习过程中使用n-step回报来同时更新policy和value function。
网络结构使用了CNN,其中一个softmax output作为policy,即\(\pi(a_t|s_t;\theta)\)
,另一个linear output为value function,即\(V(s_t;\theta _v)\)
,其余layer都共享。
作者还发现一个古老的技巧,即将policy的entropy加到目标函数可以避免收敛到次优确定性解。直观上,加上该正则项后目标函数更鼓励找entropy大的,即形状“扁平”的分布,这样就不容易在训练过程中聚集到某一个动作上去。
在优化方法上,作者使用了基于RPMProp的一种变体。
ray的a3c代码:https://github.com/ray-project/ray/tree/master/python/ray/rllib/agents/a3c
参考业界 | OpenAI 提出强化学习近端策略优化,可替代策略梯度法
Proximal Policy Optimization Algorithms
openai的blog:https://blog.openai.com/openai-baselines-ppo/
策略梯度法(Policy gradient methods)是近来使用深度神经网络进行控制的突破基础,不论是视频游戏还是 3D 移动或者围棋控制等,它们都基于策略梯度法。但但是通过策略梯度法获得优秀的结果是十分困难的,policy gradient有以下几点不足:
研究人员希望能通过约束或其他优化策略更新(policy update)大小的方法来消除这些缺陷,如 TRPO 和 ACER 等方法。
PPO 算法很好地权衡了实现简单性、样本复杂度和调参难度,它尝试在每一迭代步计算一个更新以最小化成本函数,在计算梯度时还需要确保与先前策略有相对较小的偏差。
之前介绍过一个 PPO 变体(在NIPS2016上有一个talk Deep Reinforcement Learning Through Policy Optimization),即使用一个适应性 KL 惩罚项来控制每一次迭代中的策略改变。这次的目标函数实现了一种与随机梯度下降相匹配的置信域(Trust Region)更新方法,它同时还移除了 KL 惩罚项以简化算法和构建适应性更新。在测试中该算法在连续控制任务中取得了最好的性能,并且尽管实现起来非常简单,但它同样在 Atari 上获得了与 ACER 算法相匹配的性能。
Rainbow: Combining improvements in deep reinforcement learning
参考DeepMind提出Rainbow:整合DQN算法中的六种变体
以上这些算法各自都可以提升 DQN 性能的某个方面,因为它们都着力于解决不同的问题,而且都构建在同一个框架上,所以能够被我们整合起来。
参考最前沿:当我们以为Rainbow就是Atari游戏的巅峰时,Ape-X出来把Rainbow秒成了渣!
Distributed Prioritized Experience Replay
只使用一个learner和一个Replay buffer,但是分布式的使用了多个Actor来生成数据,paper中实验使用了360个Actor(一个Actor一个CPU)。DeepMind产生专门做这个的想法主要是从Rainbow的研究中发现:Prioritization was found to be the most important ingredient contributing
to the agent’s performance.
Replay的优先级对于性能影响是最大的,而之前的Prioritised Replay Buffer只用单一Actor来采集数据,效率偏低。那么这篇文章中,加上分布式,并且让每一个Actor都不完全一样,用\(\varepsilon -greedy\)
采样时的\(\varepsilon \)
不一样。这样可以更好的做explore,并且更全面的寻找优先级最高的replay来训练。
整个算法也就是训练架构上发生改变,算法实质并没有变化。同时,由于使用Replay Buffer是Off-Policy独有,因此,这篇paper就在DQN和DDPG上进行改变验证。
如上图,
- procedure
\(ACTOR(B, T)\)
// 在environment instance中运行agent,并存储experiences
\(\theta_0\leftarrow LEARNER.PARAMETERS()\)
// remote call以获取最新的网络参数\(s_0\leftarrow ENVIRONMENT.INITIALIZE() \)
// 从环境中获取初始状态- for t = 1 to T do
\(a_{t-1}\leftarrow \pi \theta _{t-1}(s_{t-1})\)
// 使用当前policy选择一个动作\(r_t,\gamma_t,s_t\leftarrow ENVIRONMENT.STEP(a_{t-1})\)
// 在环境中执行这个动作\(LOCALBUFFER.ADD((s_{t-1},a_{t-1},r_t,\gamma_t))\)
// 将data放入local buffer中- if
\(LOCALBUFFER.SIZE() \gt B\)
then // 在一个后台线程中,定期地send data to replay
\(\tau \leftarrow LOCALBUFFER.GET(B)\)
// 获取buffered data(例如,batch of multi-step transitions)\(p \leftarrow COMPUTEPRIORITIES(\tau)\)
// 计算experience的优先级(例如,绝对TD error)\(REPLAY.ADD(\tau,p)\)
// remote call以将experience加入replay memory中- endif
\(PERIODICALLY(\theta_t\leftarrow LEARNER.PARAMETERS())\)
// 获取最新的网络参数- endfor
- end procedure
- procedure
\(LEARNER(T)\)
// 使用从memory中sampled的batches来更新网络
\(\theta_0\leftarrow INITIALIZENETWORK()\)
- for t = 1 to T do // 更新参数T次
\(id,\tau \leftarrow REPLAY.SAMPLE()\)
// 在后台线程中sample一个 prioritized batch的transitions\(l_t \leftarrow COMPUTELOSS(\tau;\theta_t)\)
// Apply learning rule,例如double Q-learning或者DDPG\(\theta_{t+1}\leftarrow UPDATEPARAMETERS(l_t;\theta_t)\)
\(p \leftarrow COMPUTEPRIORITIES()\)
// 计算experience的优先级(例如,绝对TD error)【和Actor一样】\(REPLAY.SETPRIORITY(id,p)\)
// remote call以更新优先级\(PERIODICALLY(REPLAY.REMOVETOFIT())\)
// 从replay memory中删掉旧的experience- endfor
- end procedure
效果:
ray的ape-x代码:https://github.com/ray-project/ray/blob/master/python/ray/rllib/agents/dqn/apex.py
参考比TD、MC、MCTS指数级快,性能超越A3C、DDQN等模型,这篇RL算法论文在Reddit上火了
在强化学习中,延迟奖励的存在会严重影响性能,主要表现在随着延迟步数的增加,对时间差分(TD)估计偏差的纠正时间的指数级增长,和蒙特卡洛(MC)估计方差的指数级增长。针对这一问题,来自奥地利约翰开普勒林茨大学 LIT AI Lab 的研究者提出了一种基于返回值分解的新方法 RUDDER。实验表明,RUDDER 的速度是 TD、MC 以及 MC 树搜索(MCTS)的指数级,并在特定 Atari 游戏的训练中很快超越 rainbow、A3C、DDQN 等多种著名强化学习模型的性能。
RUDDER: Return Decomposition for Delayed Rewards
源码:https://github.com/ml-jku/baselines-rudder
参考前沿 | DeepMind提出新型架构IMPALA:帮助实现单智能体的多任务强化学习
IMPALA 受流行的 A3C 架构的启发,A3C架构使用多个分布式actor来学习智能体的参数。在此类模型中,每个actor使用策略参数在环境中动作。actor周期性地暂停探索,和中央参数服务器共享它们计算出的梯度,用于梯度更新
IMPALA的actor不用于计算梯度,而是用于收集经验,然后传输至可计算梯度的中央学习器,生成一个具备完全独立的actor和learner的模型。为了利用现代计算系统,IMPALA可使用单个学习器或执行同步更新的多个学习器来实现。用这种方式分离学习和动作可以有效地提高整个系统的吞吐量,因为 actor不再需要等待学习步(像 batched A2C 架构中那样)。这使得我们可以在多个有趣的环境中训练IMPALA,无需经历帧渲染时间的变动或耗时的任务重启。
IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures
参考一个简单的例子:强化学习异步分布式训练实现
DeepMind开源强化学习游戏框架,25款线上游戏等你来挑战
https://github.com/deepmind/open_spiel
目前大多是棋牌、博弈相关游戏。
https://github.com/astooke/rlpyt
集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt
rlpyt: A Research Code Base for Deep Reinforcement Learning in PyTorch
rlpyt 库的重要特征和能力包括:
rlpyt 库中的已实现算法包括:
参考兼顾公平与效率?北大NeurIPS 19论文提出多智能体强化学习方法FEN
公平有助于人类社会的稳定和生产力的提高,同样对于多智能体系统也十分重要。然而让一组智能体学习提升系统效率并同时保持公平是一个复杂的、多目标的、联合策略优化问题。目前主流的多智能体强化学习算法没有考虑公平性的问题,一些针对特定情景公平性的方法又依赖专家知识,这对于一般性情景并不适用。
作者提出一种分层多智能体强化学习方法 Fair-Efficient Network(FEN,「分」),从三个方面解决这一问题: