直接看名字就能看出DDPG(Deep Deterministic Policy Gradient )其实就是DPG(Deterministic Policy Gradient )的深度神经网络版本,它采用Actor-Critic架构,用来解决连续控制问题。
其实当初在我刚学了解决离散控制问题的方法的时候,就思考过如果换成连续控制问题该怎么办,然后再看DPG所使用的方法之后,发现跟我想的是一模一样....
所以,DDPG解决强化学习问题的思路跟那些解决离散问题的AC架构方法并没多大区别,就是做了点微小的改动以适应连续问题罢了。因此,有离散控制问题经验的你,并且比较懂深度学习的话,在理解DDPG的时候可以说是非常简单,甚至觉得不值一提...
来看一个连续控制问题
如图,假如我们想用强化学习训练一个策略来控制机械手臂,上面的轴可以在之间转动, 下面的轴可以在 之间转动,那么它的动作空间将会是一个多维的连续空间:
在有无穷多个action的时候,我们要怎么来实现策略网络呢?
回想一下在离散AC框架下的策略网络,它是输入状态, 输出的概率分布 :
因为连续控制问题有无数个action, 显然像离散问题那样通过输出层softmax后的n个有限action的概率的方式是行不通的。
因为我太了解深度学习这一套东西了,所以面对这个问题的时候,直接就想到了两个解决方案:
- 确定策略(就是本文要讲的DDPG的方法): 既然没法输出动作的概率分布,那我用整个策略网络代表概率分布,将分类问题改为回归问题,直接输出确定动作不就可以了嘛...
- 随机策略:不是要输出分布嘛,不能一个个给,我输出一个高斯分布的均值和方差不就行了嘛...
就这样两个我想当然就想到的方法,然后发现业界就是这么玩的....
既然本文是讲DDPG,自然,我们就沿着第一个想法来实现。
于是我们可以把上面的策略网络改造成这样:
让神经网络直接输出每个机械臂需要转动多少的动作,几根机械臂就输出几维。
这样,我们就可以利用这个网络的输出动作来操作机械臂,得到相应的transition , 接下来就可以按照AC架构的老路来训练模型了~
再来看看模型的更新过程
Critic更新 (更新价值网络参数)
价值网络拟合的目标一般跟DQN网络一样是最大动作价值函数, 期望显然没法求,于是通过蒙特卡洛方法,使用观测值来近似,再通过TD算法来改进:
于是 TD error为:
然后通过TD error 梯度下降来更新网络参数 :
Actor更新 (更新策略网络参数)
Critic 输出的价值代表了Actor预测动作的好坏,因此策略网络的目标是最大化价值 ,自然就想到了用梯度上升法来最大化 ,于是,我们可以对 求 的梯度,让我们将策略网络记作:
然后用梯度上升更新 :
优化高估或低估问题
观察上面的推导过程,我们容易发现,这玩意跟DQN类似,因为bootstraping的通病,一开始低估了就会不断低估,一开始高估了就会不断高估,将会使得估计误差一边倒,导致学习的效果不好。为了处理这个问题,有很多种解决方案,大概就是跟DQN 差不多,DDPG就是这么做的。
引入target network
其实就是加入一个延迟更新策略,分别用两个网络来分别估计时刻和 时刻的值,即:
这样一来就隔断了用自己的估计来估计自己,避免了不断被强化的倾向。但是,实际更新target network参数的过程采用的是这样一种方式:
因为target net的参数还是依赖于原来的网络参数,这种传递无法完全避免。
经验回放
通常经验回放可以使算法更加稳定,因为仅仅使用新数据容易导致网络过拟合使得训练终止,这给了样本有了更多的学习机会,当然如果使用过多的经验也会降低学习速度,这需要一定程度上进行权衡。
当然,还有很多常见的方法都可以... 根据需要来。
总结
- DDPG是一种off-policy的算法
- DDPG只能用于连续动作空间的环境
- DDPG可以被看作是连续动作空间环境下的DQN