标签: 机器学习
一. 什么是DDPG(deep deterministic policy gradient)
DDPG在continuous control with deep reinforcement learning论文中提出并作出了详细的解释
在论文中比较重要的信息有以下:
- DQN无法处理高维输出,并且只能输出离散值,因为一些动作维度结构可能包括一些信息,所以在连续控制问题上可能表现很糟糕。而DDPG可以将DQN的维度变低维,并且可以输出连续值
例如:一个关节可以取值{-k,0,k}三个值,如果有七个关节,那么DQN的输出将是 个单元,训练效果将大打折扣。而对于DDPG来说,输出层是七个关节的取值,输出维度大大降低。 - DQN的两大创新分别是记忆库和时间差异副本(eval网络与target网络异步更新),DDPG有actor网络用于根据状态选择动作,critic网络对状态与动作的选择进行打分,对于每个actor网络和critic网络都有一个时间差异副本,故DDPG一共有四个网络
- 在选取状态输入的时候注意选取的变量量纲是否一致,如果量纲不同,取值范围不同等问题将会影响网络学习效率(在这里被坑过),解决方法是可以使用batch normalization维护平均值和方差,对状态和网络的所有层进行归一化。
- 对eval网络与target网络的异步更新建议用 ,
- DDPG算法如下图:
算法流程:
(1). 初始化
网络
与
,并将
与
的值赋予
与
(如果不赋相同的值可能会影响后面训练效率,同样被坑过)
(2). 初始化记忆库R
(3). 对于每一个回合执行:选取一个噪音N,并且随机初始化状态s(噪音是为了探索环境,可以随着回合增加而降低)
(4). 对于每一个回合的每一步执行以下(5)-(12)
(5). 选取动作
(这里使用的是
网络)
(6). 对
执行
进行仿真获得奖励
与新状态
(使用actor_eval的前向传播,不更新)
(7). 存储
到记忆库R
(8). 随机选取R中的一组数据,执行(9)-(12)
(9). $y_i=r_i+\gamma Q{’}(s_{i+1},\mu{’}(s_{i+1}|\theta{\mu{’}})|\theta{Q^{’}})
actor_target与critic_target$
(10). 通过loss更新critic,
(我一般直接使用均方差公式,同时这里
使用的是
(11). 更新actor,
(这里使用的是actor_eval与critic_eval,这个数学公式有点看不懂,可能理解不对,敬请指正)
(12). 更新两个target网络
二. 什么是swing-up
swing-up 是gym中开源的一个游戏,主要任务是通过对杆子施加力让杆子立起来不倒,越快立起来保持越久分数越高
三. 完全代码
代码已经全部上传至github:https://github.com/allenabx/swing-up-using-ddpg/tree/master/ddpg
包含莫凡写的用TensorFlow实现的DDPG与我参照莫凡与学长代码写的pytorch版本的DDPG(遇到了好多坑一步一步对照改出来的)
四. 了解更多
对DDPG仍然不熟悉的可以参看莫凡的DDPG讲解https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/
还有莫凡的用ddpg搭建机械手臂的全部教程https://morvanzhou.github.io/tutorials/machine-learning/ML-practice/RL-build-arm-from-scratch1/
如果有其他问题可以留言