深度增强学习之Policy Gradient方法1

  1 前言

  在之前的深度增强学习系列文章中,我们已经详细分析了DQN算法,一种基于价值Value的算法,那么在今天,我们和大家一起分析深度增强学习中的另一种算法,也就是基于策略梯度Policy Gradient的算法。这种算法和基于价值Value的算法结合而成的Actor-Critic算法是目前效果最好的深度增强学习算法。

  那么关于Policy Gradient方法的学习,有以下一些网上的资源值得看:

  Andrej Karpathy blog: Deep Reinforcement Learning: Pong from Pixels

  David Silver ICML 2016:深度增强学习Tutorial

  John Schulman: Machine Learning Summer School

  David Silver的增强学习课程(有视频和ppt): http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html

  那么实际上Andrej Karpathy的blog已经很详细的分析了Policy Gradient的方法,这里我将综合以上的内容根据我自己的理解来说以下Policy Gradient。

  2 Why Policy Network?

  我们已经知道DQN是一个基于价值value的方法。换句话说就是通过计算每一个状态动作的价值,然后选择价值最大的动作执行。这是一种间接的做法。那么,更直接的做法是什么?

  能不能直接更新策略网络Policy Network呢?

  什么是策略网络Policy Network?就是一个神经网络,输入是状态,输出直接就是动作(不是Q值)。

物联网
物联网

或者输出概率:

物联网

这里要提一下概率输出的问题。对于DQN来说,本质上是一个接近于确定性输出的算法。至多就是采用

进行探索。但是有很多时候,在某一个特定状态下,很多动作的选择可能都是可以的。比如说我有20块钱去买饭。那么不管我买的是蛋炒饭还是土豆肉片盖码饭,结果都是一样的填饱肚子。因此,采用输出概率会更通用一些。而DQN并不能输出动作的概率,所以采用Policy Network是一个更好的办法。

  3 Policy Gradient

  要更新策略网络,或者说要使用梯度下降的方法来更新网络,我们需要有一个目标函数。对于策略网络,目标函数其实是比较容易给定的,就是很直接的,最后的结果!也就是

物联网

所有带衰减reward的累加期望

  那么问题就在于如何利用这个目标来更新参数 呢?咋一看这个损失函数和策略网络简直没有什么直接联系,reward是环境给出的,如何才能更新参数?换个说法就是如何能够计算出损失函数关于参数的梯度(也就是策略梯度):

  咋一看根本就没有什么思路是不是,所以先换一个思路来考虑问题。

  4 就给我一个Policy Network,也没有loss,怎么更新?

  改变动作的出现概率!

  现在我们不考虑别的,就仅仅从概率的角度来思考问题。我们有一个策略网络,输入状态,输出动作的概率。然后执行完动作之后,我们可以得到reward,或者result。那么这个时候,我们有个非常简单的想法:

  如果某一个动作得到reward多,那么我们就使其出现的概率增大,如果某一个动作得到的reward少,那么我们就使其出现的概率减小。

  当然,也显然的,用reward来评判动作的好坏是不准确的,甚至用result来评判也是不准确的。毕竟任何一个reward,result都依赖于大量的动作才导致的。但是这并不妨碍我们做这样的思考:

  如果能够构造一个好的动作评判指标,来判断一个动作的好与坏,那么我们就可以通过改变动作的出现概率来优化策略!