第一部分:PPO的学习率机制
1. 学习率是什么?
在深度学习中,学习率是一个超参数,它控制了我们在每次参数更新时,沿着梯度反方向前进的步长。
- 公式表示:
新参数 = 旧参数 - 学习率 * 梯度 - 学习率过大:更新步伐太大,可能会在最优解附近来回震荡,甚至无法收敛,导致训练不稳定。
- 学习率过小:更新步伐太小,收敛速度极慢,可能会陷入局部最优解。
在PPO中,学习率通过优化器(如Adam)作用于策略网络和价值网络的所有参数。
2. PPO中学习率的具体作用
PPO的目标函数本身就包含了防止一次更新步子太大的约束(通过Clipping或KL散度)。但学习率在此基础上提供了第二道、更细粒度的保障。
学习率在PPO中的具体影响:
-
控制总体更新幅度:即使PPO的比率
r(θ) = π_新(a|s) / π_旧(a|s)因为Clipping机制被限制在[1-ε, 1+ε]的范围内,其计算出的梯度本身也是有“大小”的。学习率决定了这个梯度值最终会对网络参数产生多大的改变。- 假设梯度向量是方向,学习率就是在这个方向上走的“距离”。
-
影响训练稳定性和收敛速度:这是学习率最核心的作用。
- 合适的学习率:能使策略平稳、持续地改进,最终收敛到一个较好的性能水平。
- 过高的学习率:即使有Clipping,参数更新也可能过于剧烈,导致策略发生突变,破坏之前学到的经验。表现为训练曲线剧烈波动,累计奖励突然崩溃。
- 过低的学习率:训练会非常缓慢,需要更多的交互样本和时间才能收敛。
-
与PPO-Clip协同工作:
- PPO-Clip (Epsilon):像一个“安全阀”,主要在目标函数层面阻止那些对策略有巨大负面影响的更新(即当新策略与旧策略差异太大时)。
- 学习率:则在参数更新层面,对所有更新(包括那些有益的、小幅的更新)进行微调,控制其整体的幅度。
一个简单的比喻:
想象你在下山(寻找损失函数的最低点)。
- PPO-Clip (Epsilon) 就像在你脚上绑了一根绳子,防止你一步迈得太大而跨到山对面去。
- 学习率 则决定了你每步正常的步伐是50厘米还是1米。即使有绳子保证你不会飞跃,但1米的步幅仍然比50厘米更不稳定。
3. 学习率衰减
在PPO以及大多数深度学习任务中,常常会使用学习率衰减策略。
- 原因:在训练初期,参数离最优解较远,使用较大的学习率可以快速收敛。随着训练进行,参数接近最优解,需要更精细的调整,过大的学习率会导致在最优解附近来回震荡。
- 做法:随着训练步数或轮数的增加,让学习率逐渐减小(例如,线性衰减、指数衰减等)。这有助于提高训练的稳定性和最终的性能。
第二部分:学习率 vs. Epsilon (Clip Epsilon)
这是一个非常经典的对比,因为它们都在控制“变化”,但作用的层面和方式完全不同。
| 特性 | 学习率 | Epsilon (Clip Epsilon) |
|---|---|---|
| 作用对象 | 优化过程。控制所有参数基于梯度更新的步长。 | PPO目标函数。直接限制新策略与旧策略的概率比率的变化范围。 |
| 作用层面 | 参数空间。在反向传播和参数更新时生效。 | 策略/动作空间。在计算代理优势函数和损失函数时生效。 |
| 主要目标 | 控制每次迭代中网络参数的整体变化幅度,确保训练稳定收敛。 | 确保每次迭代中策略本身的改变是微小的,满足策略梯度理论中的信任域约束。 |
| 影响范围 | 全局性。影响策略网络和价值网络的每一个权重和偏置。 | 局部性/条件性。只对那些“优势函数为正且比率大于1+ε”或“优势函数为负且比率小于1-ε”的样本进行限制。对大部分“好”的更新没有影响。 |
| 功能类比 | 油门和刹车的灵敏度。控制你每次踩油门或刹车时,车辆加速或减速的力度。 | 方向盘的角度限位器。防止你急转弯,保证车辆始终平稳地改变方向,不会失控。 |
协同工作流程举例:
假设一个状态-动作对 (s, a) 具有很大的正优势函数,意味着这个动作非常好。
- 没有Clipping的情况:比率
r(θ)可能会远大于1,导致目标函数值激增,从而产生一个巨大的梯度,使新策略过度偏向于选择动作a。 - 有Clipping的情况 (Epsilon起作用):PPO会将
r(θ)限制在1+ε。这样,即使这个动作很好,目标函数的值也不会无限增大,从而产生一个温和得多的梯度。 - 学习率起作用:优化器获取到这个被Clipping缓和后的梯度,然后用学习率这个系数来决定参数实际要更新多少。一个较小的学习率会让这次更新更加微小和稳定。
总结与建议
- 学习率 是深度学习的基础超参数,它在整个参数更新过程中控制步长。
- Epsilon 是PPO算法特有的核心超参数,它在目标函数层面构建了一个信任域,直接防止策略的剧烈变化。
- 它们的关系是互补的:Epsilon首先“修剪”掉那些可能有害的巨大梯度信号,然后学习率再对这个修剪过的信号进行整体缩放,最终应用于参数更新。
调参实践:
- 当训练不稳定(奖励曲线剧烈抖动)时,首先尝试降低学习率,或者启用学习率衰减。这是最常见且有效的稳定训练的方法之一。
- 如果降低学习率效果不明显,或者发现策略更新过于保守,可以调整Epsilon。增大Epsilon允许策略在单次更新中变化更大,减小Epsilon则约束更强。
- 通常,学习率需要仔细调整,而Epsilon有一个比较常用的默认值(如0.1或0.2),相对更鲁棒一些。
实际测试
实际测试发现同时指数衰减出现学习效果变差的问题。而把指数衰减策略网络学习率至初始值的10%,保持策略网络学习率对于训练后期震荡有显著改善。但是依旧无法改变减少回合数和减少晶圆数出现剧烈震荡的问题。
初步解决方案
1)使epsilon衰减速度快些
2)查看奖励函数设计,并合理改变奖励值