本文记录了我见到的一些强化学习问题,并会持续更新。

学习

我建议按以下顺序学习:

  1. Python(或其它语言)
  2. PyTorch(或其它深度学习软件包)
  3. 深度监督学习(例如 MNIST 手写识别)
  4. 表格型强化学习(例如 Q-Learning、TD($\lambda$))
  5. 深度 Q-Learning(例如 DQN、D3QN)
  6. 策略梯度方法(例如 DDPG、SAC、PPO、TD3)
  7. 进阶成果(例如 AlphaGo、MuZero、Agent57)

Python

菜鸟教程(中文)

多臂老虎机

多臂老虎机问题及其解决方案,LiLian Weng

深度强化学习

强化学习长篇概览,LiLian Weng

策略梯度算法,LiLian Weng

进阶成果

MuZero,知乎(中文)

现有工具包

RLlib

https://docs.ray.io/en/master/rllib.html

  • 流行的全能型开源库
  • 需要花时间学习

ElegentRL

https://github.com/AI4Finance-Foundation/ElegantRL

  • 轻量且可扩展的开源库
  • 容易学习
  • 仍在开发和改进中

环境

一般来说,Environment 类派生自 gym.Env,并遵循其接口定义。

一般来说,Environment 的计算开销主要集中在 CPU。

状态

表示

许多流行的 CNN 结构并不适合强化学习,包括:

  • Batch Norm
  • 平移不变操作,例如池化

有时还需要:

  • 在深层网络的输出层使用正交归一化
  • 随参数数量增加而采用较低的学习率,或冻结参数

奖励

设计

奖励设计没有统一标准。原则上,奖励越密集,学习越快;收敛性能则取决于奖励所提供的引导。

经验回放缓冲区

经验回放缓冲区应尽可能大,以便描述环境和策略

当经验回放缓冲区无法足够大时,可以尝试降低学习率。

优先经验回放(PER)

优先经验回放会使深度网络的数据发生分布偏移;当奖励密集时,这会对性能产生很大影响。通常,我们在训练早期使用 PER。

作为一种改进,可以尝试自模仿学习

自我博弈

没有可用基线时,如何评估策略?

一种思路是:维护一个由历史策略组成的基线策略集合。

  1. 在训练期间记录历史策略。
  2. 按“支配关系”对策略分级,也就是更高等级的策略压制更低等级的策略。
  3. 从每个等级抽取策略,组成基线策略集合。

测试方法

强化学习方法比监督学习方法更复杂。出现 BUG 时,往往会不知道该如何继续。下面是一些建议:

  • 从易到难。 例如,通过 DQN 构建 D3QN,通过基础环境构建困难环境,在“gridworld”“cartpole”等简单环境上测试强化学习方法,或者基于成熟工作修改强化学习方法。
  • 为方法中的每个模块编写测试,例如经验回放缓冲区。
  • 进一步学习强化学习、PyTorch/Tensorflow、Python 等知识。

工具

  • PyCharm profiler
  • memory_profiler、line_profiler
  • Pytorch.autograd:profiler、grad_check、anomaly_detection
  • 断点
  • Print()