本人学习强化学习(PPO,DQN,SAC,DDPG等算法),在gym环境下写的代码集。
主要研究了PPO和DQN类算法,根据各个论文复现了如下改进:
- PPO: dual-PPO, clip-PPO, use-RNN, attention, PPG etc.
- DQN: rainbow DQN
注:最新尝试集中在PPO算法进行,建议参阅ppo(full)以及ppo(lstm)
经实验,PPO算法是最具鲁棒性的算法,为主要选择。
PPO可以加入以下几个trick(部分是当今大模型RL的trick),基本都有指标提升:
- value_clip
- clip-higher
- ent_coef
- decouple-lamda
- dual-clip
- clip-covs
- RND-reward
- use-LSTM
- adam-eps
具体我已经实现在ppo(lstm),可以参考代码以及相关的论文。
PPO是一种策略优化算法,通过限制每次策略更新的幅度来稳定训练过程。
DQN使用深度神经网络来逼近Q值函数,并结合经验回放和固定Q目标来稳定训练。
SAC是一种最大化策略熵的算法,旨在提高策略的探索能力。
DDPG是一种结合了策略梯度和Q学习的算法,适用于连续动作空间。
TD3是对DDPG的改进,通过延迟更新策略网络和目标网络来减少Q值的过估计。
我在离散动作空间的代码探索主要在PPO和PPO+LSTM代码进行,读者可以重点关注。
我在其中一些代码(PPO, RDQN)加入了tensorboard的使用来获取训练和评估指标,使用方法:
- 正在运行训练,或等到训练结束,代码运行目录会生成exp文件夹,里面存放了数据文件
- 代码运行目录下打开命令行窗口,输入:
tensorboard --logdir=exp如下图所示:
然后打开http://localhost:6006/ 即可。
可以直观地看到评估和训练的数据图。
如果多条数据线重合在一起影响观看,左边可以取消勾选,如果还是无法解决,建议在exp目录下手动删除不需要的数据文件,然后重启tensorboard即可。理论上eval/reward这条曲线应该是不断上升的,如果不是则需要调参(玄学)。
想要在训练过程直接观看训练效果的读者,可以在设置里面写:
class Config(BasicConfig):
def __init__(self):
super(Config, self).__init__()
......
self.render_mode = 'human' # 默认是"rgb_array"
.....将其设置成human后,可以直接观看训练过程:
本项目采用MIT许可证,详见LICENSE。
对DQN感兴趣的读者可以使用CartPole(RDQN),即Rainbow-DQN。如果是初学者,建议先看CartPole(DQN),这是DQN算法的基本实现,其它如DDQN,PER, DUEL均是在其基础上的改进实验。其中改进最显著的方法是DDQN(double-DQN),PER和DUEL并不是很显著,并且会降低训练速度,因此读者可以参照只使用DDQN。
对PPO感兴趣的读者可以参考其中PPO以及PPO+RNN的算法,使用了RNN,PSCN等技巧。
对于连续动作空间,最推荐使用的算法是TD3,参考Pendulum(TD3)。离散空间DQN和PPO均可。


