深度强化学习领域的经典算法有很多,如DQN、DDPG、SAC、PPO等。RL的算法分为两种,一种是value-based方法,难以扩展到连续的动作空间,且其容易带来高偏差(high bias)问题;另一种是policy-based方法,利用蒙特卡罗采样训练策略,训练不稳定策略收敛困难, 且容易带来高方差(high variance)问题。为了解决这些问题,将两种方法进行结合,产生了Actor-Critic架构。
应用DRL算法进行实验,rewards和loss无法收敛,查找了一些资料,进行了大量的试错,将问题分为以下几种:
Q & A
问题结构设计
RL类问题建模通常分为三部分(以model free型为例):
- state space :在设计状态空间时,避免state固定不动(即状态空间内只有一个状态)
- action space:动作空间分为离散动作空间和连续动态空间,对于离散动作空间,通常采用DQN、SAC-discrete、PPO;对于连续动作空间,可以采用DDPG、TD3、SAC、PPO。
- reward:奖励函数的设计至关重要,负责引导智能体朝着优化方向前进,简单的奖励函数设计方法有优化目标取负、优化目标取倒数、加惩罚项等(高级的方法还未研究学习)
实验采取连续动作空间,但action的取值范围不尽相同,在A = [a1, a2, …, a2n]中,A1=[a1, a2, …, an]的取值范围是[200, 400], A2=[an+1, an+2, …, a2n]的取值范围是[0.1, 0.5],对于这种情况,显然要对action进行scaling。
如何scaling?
在environment中进行scaling
如果在算法中进行scaling,容易造成网络训练不稳定,猜想在AC架构中,Critic的输入为state和action,输出为Q值,action的数值范围相差太大,导致Critic的loss巨大。具体见下图,上图为在算法中scaling,下图为在environment中scaling。
下图的Critic loss一下子降低了10^2 ~ 10^3的数量级,有助于整体稳定收敛。
算法参数设置
学习率
Actor-Critic架构中,通常Critic的学习率比Actor大一个数量级,如actor_lr 为1e-4,critic_lr为1e-3。可以设置学习率递减(随着训练梯度下降变缓)
神经网络结构
DRL中神经网络的层数不必过多,3-4层即可,隐藏层的维度要根据输入输出维度来设置。实验中输入输出维度为100维,hidden_dim为512比256能更好拟合值函数。
batch size & buffer size
确保buffer中有足够的训练数据,最少是10^5条数据;batch size根据实验结果调整,这里batch size 为64的效果最佳。
梯度截断
为了防止梯度爆炸等问题,要对梯度进行截断。
数据归一化
关于数据是否需要归一化,众说纷纭,若实验效果不太好,可以尝试进行归一化处理,能够在一定程度上提高算法性能。这里注意reward不能归一化,可以scaling以放缩。
————————————————————————————————————————
参考内容:
【1】https://blog.csdn.net/Lyn_S/article/details/113776181
【2】https://zhuanlan.zhihu.com/p/658733397
【3】https://zhuanlan.zhihu.com/p/210761985
【4】https://xylu926.blog.csdn.net/article/details/103850537
【5】https://blog.csdn.net/weixin_42365324/article/details/105727916
【6】https://blog.csdn.net/weixin_44405644/article/details/106223590
【7】https://blog.csdn.net/ytusdc/article/details/107738749
【8】https://zhuanlan.zhihu.com/p/382501240