提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
reward的主要作用是将任务目标具体化和数值化,实现目标和算法之间的沟通,决定了agent最终能否学习到期望的技能,并直接影响算法的收敛速度和最终性能。
reward负责引导神经网络中的决策相关因素并经过提炼后用于action的生成。
对于违法的action,直接屏蔽掉,不允许出现。
状态代表了agent对环境的感知以及自身的action带来的变化。state直接决定了是否收敛以及收敛速度和最终性能。
增加一个新的状态信息所带来的性能提升明显高于其他的工作(例如调参),性价比非常高。
如果主线回报比较稀疏,此时,只有主线reward是不行的;
此时需要分解子目标,分别给予奖励或者惩罚,从而引导agent趋利避害从而提高主线的概率。此时,称为credit assignment。辅助reward一般都设置较小。
避免有些reward过大,从而使其他reward被掩盖(一棵大树,不给小草生长空间),可以加系数加以调控,但是还不够,是否还有其他(例如vector reward,multiplicative reward)
不要因为某些眼前的奖励,而丧失了主线,饮鸩止渴要不得。
原地打转,或者微小进步,只是为了获得近期奖励,说明惩罚不够,或者说
惩罚项设置大,相对于主线的大,不敢动,畏葸不前。陷入局部
对于一个奖励来说,在整个训练过程中理想情况不应该是保持不变的,而应该越靠近目标 每一步的收获越大,奖励越高,从而更容易引导到目标点,大大加快收敛速度。
非线性的奖励函数
1、强化学习不宜盲目追求end2end的解决方案,无论是状态还是reward的设计;
2、reward设计的奖励尽可能归一化,否则,波动很大,难以收敛;
3、
这个确实比较重要,具体训练的过程和路线是什么样子的,最起码在前期有个大概的把握,做到心中有数。如果符合自己预期,可以把render去掉,毕竟耗时严重。
state和reward可以实时打印,观测是否在正常范围内,是否幅值过大。推荐无条件进行归一化, 和 rescale & clipping,二者会带来效果的很大提升。
参考形式为 r = c l i p ( r / ( s t d ( R e t u r n ) + ϵ ) , − 10 , 10 ) r=clip(r/(std(Return)+\epsilon ),-10,10) r=clip(r/(std(Return)+ϵ),−10,10),其中 R e t u r n = ∑ t = 0 T γ t r t Return = \sum_{t=0}^T\gamma^tr_t Return=∑t=0Tγtrt
reward只能进行rescale,而不可以进行整体平移(减去均值)。
因为回报函数中的各项reward的符号和他们之间的相对大小决定了实际的功能,各项reward的整体缩放对实际功能没有影响。clip操作实际会有影响,不大。
γ : \gamma: γ:此参数调节近远期的影响,也就是做决策时候考虑多长远。
高的折扣 γ = 0.99 \gamma=0.99 γ=0.99会导致原地不动;
低的折扣 γ = 0.9 \gamma=0.9 γ=0.9敢于探索;
折扣因子在算法能够收敛情况下,尽可能的大。
经验公式:
1 / ( 1 − γ ) 1/(1-\gamma) 1/(1−γ) 作为agent做决策时候,往前考虑的步骤数。
不要太大,够用就好
类型取决于state状态空间;
网络深度,虽然越深表征能力越强,但是训练难度高;
大了收敛快,稳定性差;
小了收敛慢,浪费时间;
淬火操作可以使用;
[1] 深度强化学习落地方法论(6)—— 回报函数篇