深度强化学习落地调参技巧
转载文章,学习一下强化学习.
天下苦深度强化学习久矣,这有一份训练与调参技巧手册
https://geek.csdn.net/65d5ab8ab8e5f01e1e460619.html
©作者 | 申岳
单位 | 北京邮电大学
研究方向 | 机器人学习
使用RL的建议
太长不看版
- 学习 RL 和 Stable Baselines3
- 如有必要,进行定量的实验和超参数调整
- 使用单独的测试环境评估效果(记得要检查 wrappers!)
- 想要更好的效果,就增加训练预算
目前RL的局限
- Sample Inefficient:Model-free RL 算法通常需要大量样本(有时需要上百万次交互)才能学到有用的信息。
- 对超参数和随机种子敏感:RL 的结果可能因超参数或随机种子的不同而变化。
- Reward Function Design:设计良好的奖励函数需要专业知识和多次迭代。
如何评估RL算法?
- 使用独立的测试环境评估算法,建议每交互 N 次后测试 n 个 episodes,取平均值作为单个 episode 的 reward。
- 在测试时,对于 A2C、PPO 等算法,调用
.predict()
时应设置deterministic=True
。 - 查看 training curve 是一种不错的方式,但可能会低估 agent 的真实表现。
我该使用哪种算法?
- 离散动作空间:DQN
- 连续动作空间:SAC
- 扩展版本:DQN 的连续版本 NAF,SAC 的离散版本 SAC-Discrete
- 并行训练:A2C 和 PPO 适合并行训练,可参考 Vectorized Environment。
创建自定义环境的Tips和Tricks
- Normalization:尽量对 observation space 和 action space 进行归一化。
- Reward Shaping:从 shaped reward 开始,简化问题。
- 测试环境:使用随机动作测试环境是否正常。
示例代码:检查自定义环境是否正常
from stable_baselines3.common.env_checker import check_env
env = CustomEnv(arg1, ...)
check_env(env) # 检查自定义环境并输出警告
示例代码:使用随机动作测试环境
env = YourEnv()
obs = env.reset()
n_steps = 10
for _ in range(n_steps):
action = env.action_space.sample()
obs, reward, done, info = env.step(action)
if done:
obs = env.reset()
实现RL算法的Tips和Tricks
- 步骤:
- 多次阅读原始论文。
- 查看现有实现。
- 在简单环境中测试算法。
- 在更复杂的环境中运行算法,并进行调参。
个人心得
- Normalization:对于机械臂的末端位置,建议使用相对工具系的归一化,增强泛化能力。
- Reward Engineering:先进行 reward shaping,再考虑 sparse reward。
- 网络结构:向量输入时,通常 2~3 层隐藏层(每层 128 或 256 节点)即可。
其他资源
- 深度强化学习调参技巧:知乎专栏
- 深度强化学习落地指南:知乎专栏
- 知乎问题:深度学习调参有哪些技巧?
- **原文参考 **: 知乎
参考文献
- Stable Baselines3 文档
- RL Tips and Tricks
- RL 教程
- RL 教程代码
- RL Zoo
- RL 的困难
- ANYmal 机器人
- Deep Mimic
- Evaluation 模块
- Callbacks 模块
- Deep Reinforcement Learning that Matters
- Cédric Colas 的博客
- Stable Baselines Issues
- NAF 算法
- SAC-Discrete 算法
- Vectorized Environment
- Ape-X 算法
- Stable Baselines3 Pull Request
- RL 算法指南
- HER 算法
- 自定义环境指南
- Colab Notebook 示例
- Stable Baselines Issues
- Stable Baselines Issues
- RL 研究的 Nuts and Bolts
- RL 研究视频
- Spinning Up
- 机械臂环境
- Spinning Up 代码
缘起
随着这波人工智能浪潮的兴起,强化学习(Reinforcement Learning,RL)这坛陈年老酒也借势找到了深度学习这个新瓶子,重新吸引了学术界、工业界乃至吃瓜群众的注意力。对于很多人来说,AI闯入他们视野的标志性事件不是2012年AlexNet的横空出世,而是AlphaGo击败李世石引起的轩然大波。可以这样说,深度强化学习(DRL)不仅点燃了世人对AI的热情,而随着CV方向性能瓶颈的出现,作为一个缺点多多、槽点满满的算法框架,DRL正在吸引越来越多的学者前来填坑,从各大AI顶会RL方向文章数量的逐年上升可见一斑。
算法工作者的“知行合一”
如今网上关于DRL的科普文可谓汗牛充栋,图文与公式并茂,paper与代码齐飞。我自知水平有限,无意在DRL科普界班门弄斧。另一方面我认为算法工作者不应只局限在原理层面,看懂很多公式不代表拥有动手能力;也不应满足于跑通toy tasks的demo,知其然不知其所以然,面对实际问题时可能依旧一头雾水。算法工作者的“知行合一”,需要经历从抽象算法原理到广泛动手实践再上升到统一方法论这三个必要阶段,唯有如此才算真正掌握了知识。