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都依赖于大量的动作才导致的。但是这并不妨碍我们做这样的思考:
如果能够构造一个好的动作评判指标,来判断一个动作的好与坏,那么我们就可以通过改变动作的出现概率来优化策略!