选自GitHub
作者:WilliamFalcon
机器之心编译
参与:乾树、黄小天
本文整理自 John Schulman 题为「深度强化学习研究的具体内容」的演讲,主要内容是作者在加州大学伯克利分校参加夏季深度强化学习训练营时写下的技巧。
GitHub地址:https://github.com/williamFalcon/DeepRLHacks
1. 通过低维状态空间环境的使用简化问题。
2. 为了测试你的算法是否合理,你要构造一个适用于该算法的问题。
3. 熟悉你知道的某些环境。
1. 简化任务
◦ 例如,如果你正在使用图像(巨大的维度空间)学习,那么可能先要手动处理图像特征。示例:如果你觉得你的函数正在尝试近似得到某个参数的位置,请使用 x,y 坐标位置作为步骤 1 的特征。
◦ 一旦前一步开始工作,将使问题更加复杂,直到你解决所有的问题。
◦ 这样你就可以快速地得到反馈,从而知道算法是否正确。
◦ 例如:当机器人击中目标时有奖励(+1)。这通常很难学习,因为在开始和奖励函数之间的不确定因素太多了。将问题重新定位为目标的距离,这将增加学习,并带来更快的迭代速度。
也许现在还不清楚这些特征是什么,奖励是什么,甚至它是否可行。
1. 第一步:可视化处理这个问题的随机策略。
◦ 策略梯度会发现这种行为,并使其更有可能。
2. 确保评论有用:
◦ 示例:自己查看预处理的图像,以确保没有删除必要的细节或某种程度上阻碍了算法。
3. 确保合理地缩放特征。
经验法则:
◦ 评论:取特征均值为 0,标准差为 1。
◦ 奖励: 如果你能控制它,就把它放缩到一个合理的值。
◦ 对当前所有数据进行处理。
4. 每当你碰到一个新问题,都要找好出发点。
◦ 交叉熵法
◦ 策略梯度法
◦ 某种 Q-learning 方法 (点击 OpenAI Baselines 或 RLLab 开始学习)
依托论文来重现其中的实验结果有时(很多时候)很难。下面有一些技巧可能帮到你:
1. 使用多于你当前所需的样本。
2. 采用正确的策略,但这并非绝对。
◦ 如果批量太小,噪声会掩盖信号。
◦ 例如:TRPO,John 用的批量太小,只好设置时间步为 100k。
◦ DQN 的最佳超参数为:10k 时间步,1mm 帧置于 replay buffer。
全面检查你的训练是否奏效。
1. 查看每个超参数的灵敏度
2. 监测优化过程中的指标是有益的。
◦ 预测是否有效?
◦ 预测的返回值正常吗?
◦ 更新范围有多大?
3. 有一个连续的基准测试系统。
◦ 有时,它对于一个问题有效,但对别的问题就错乱了。
◦ 容易过拟合某一个问题。
4. 误以为你的算法有效,但实际上看到的是随机噪音。
5. 尝试不同的随机种子!!
◦ 否则,算法可能会过拟合。
6. 算法大可不必修改。
7. 简化你的算法
8. 实验过程自动化
◦ 大多使用 iPython notebooks。
◦ 似乎不需要将结果存进数据库。
1. 白化(Whiten)和标准化数据(一开始就对所有数据进行处理)。
◦ 通过计算运行平均值和标准差来计算。然后对所有数据进行 z 变换。处理所有数据(不仅仅是最近的数据)。
◦ 评论所有看到的数据(不只是最近的数据)
◦ 至少它会随着时间的推移而缩小,它随时间变化的很快。
◦ 如果你不断改变目标,可能会误导优化器。
◦ 缩放(用新数据)意味着你的优化器可能不认识这些数据,并且性能将大打折扣。
◦ 缩放但不转移数据。
◦ 影响代理发展的意愿。
◦ 会改变问题(换句话说,你想要代理生存多久)。
◦ 与奖励相同。
◦ 有用
◦ 首先看看它是否真的有助于神经网络。
◦ 过度的缩放(-1000,1000)或(-0.001,0.001)肯定会使学习缓慢。
2. 表示折扣因子的参数。
◦ 最好去关注它如何应用于实时数据。
◦ 为了更好的感受,在强化学习中我们通常将时间离散化。
◦ 这 100 步是实际时间的 3 秒吗?
◦ 那段时间里会发生什么?
◦ 算法变得非常稳定。
3. 这个问题可以在离散化的层次上真正解决。
◦ 作为一个人,你是否能控制它?
◦ 看看随机探索的样子
◦ 离散化决定你的布朗运动走多远。
◦ 如果连续做许多动作,那么算法就倾向于进一步探索。
◦ 用一种有效方式来将你的时间离散化。
4. 密切关注每段训练返回值。
◦ 最好的回馈是你的策略可以得到很好的磨合。
◦ 你的策略总是按预期来的吗??
◦ 如果在游戏中你每次都输,所以你可能永远赢不了,但是…episode 长度可以告诉你,如果你输的速度较慢。
◦ 你可能在开始时看到 episode 长度的改进,但不一定是奖励。
1. 密切关注熵
◦ 更关注状态空间中的熵,但没有很好的计算方法。
◦ KL 惩罚
◦ 防止梯度下降过快。
◦ 为熵加权重。
◦ 对于大多数策略,可以解析地计算熵。
◦ 如果熵连续,通常是高斯的,所以可以计算微分熵。
2. KL 散度
3. 以方差为基准。
◦ 如果方差为负可能是过拟合或噪声过大。
◦ 可能需要调整超参数。
4. 初始化策略
◦ 在开始时最大限度地随机探索
1. 谨慎使用 replay buffer 的内存。
2. 指定一份学习率表。
3. 如果收敛缓慢或有一个缓慢的启动期
本文为机器之心编译,转载请联系本公众号获得授权。