强化学习Q learning与policy gradient

开始学习强化学习:

包括alphago等都是强化学习的典型。

最典型的强化学习的算法为Q learning,这个算法的简介博客:

https://www.zhihu.com/question/26408259

强化学习的github项目:https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow

里面包含了很多算法的例子,非常值得学习。

强化学习的算法进展:从基本的Q Learning与Sarsa到后期的DQN(结合深度神经网络的强化学习)

这方面的一个专栏:http://blog.csdn.net/songrotek/article/details/50580904

关于DQN的实现,上面的github中有相应的实现。

double DQN算法的实现流程如下图:

强化学习Q learning与policy gradient_第1张图片

——————————————————————————————————————————————

policy gradient增强学习算法的一个博客:

https://zhuanlan.zhihu.com/p/21725498

没有用框架的纯代码实现的一个github:https://gist.github.com/karpathy/a4166c7fe253700972fcbc77e4ea32c5

关于算法的说明与代码说明如下:

一个episode是一个一系列的observation、action、reward的序列。

对一个游戏来讲,一个episode由一个初始的observation开始,到最后游戏胜利或失败表示一个episode。

整个训练数据的observation可以表示为一个满多叉树,不同的节点表示不同的observation,树杈表示action。

具体代码实现中,为了能够在“取最佳action”与“充分利用训练数据”二者之间平衡,在选择action时加入了随机的因素。

policy gradient是在一个episode结束时学习的。

policy gradient的实现流程如下(针对gym的Pong-V0):

(1)首先构建dense网络,网络的输入为obervation,网络的输出为向上走UP的概率(经过softmax后一个0——1的值)

(2)在一个episode结束时(游戏胜利或死亡),将env重置,即observation恢复到了初始状态obser0。下一次循环时,

输入obser0,输出一个概率值p0,random一个值r0,若r0

否则action为3(下),y为0。将(y - p0)作为梯度的一部分待用。

(3)reward为大于0的数,根据上面的action得到reward,将整个episode的reward放到一个序列里。在episode结束后,

计算discount_reward,将上面的(y-p0)与discount_reward相乘,作为整个梯度部分。

(4)攒够一个batch,进行梯度下降更新。在每一个episode结束后,将更新,即observation更新到整个树的根节点。

——————————————————————————————————————————————

注:情况1:若p0为0.9,y为0,则y与概率相偏离,那么reward肯定会较小,如reward为1,(y-p0)*reward= - 0.9

情况2:而若p0为0.9,y为1,则y与概率不偏离,那么reward肯定会比较大,如reward为5,(y-p0)*reward= 0.5

这样,神经网络的目的是为了减小情况2的值,而情况1的值则一定程度上削弱了情况2的值,这样的结果就是使得结果更加平滑。

——————————————————————————————————————————————

Q learning及DQN算法与policy gradient算法的不同:

(1)policy gradient可以处理连续的action,如倒立摆的角度是个连续问题,而走方格则是离散的。

policy gradient的step(action)是个连续函数。而Q learning则只能处理离散问题,通过枚举的方式来实现,针对连续的action,

只能离散化后再处理。

(2)policy gradient通过输出的action概率值大小随机选择action,而Q learning则通过贪婪选择法ε-greedy选择action。

ε-greedy先通过一个较大的概率p选择最好的action,通过(1-p)随机选择别的action,兼顾了深度与广度两个方面。

(3)Q learning的更新是一个一个的reward进行更新,即当前的reward只跟邻近的一个相关,而policy gradient则将一个episode

的reward全部保存起来,然后用discount的方式修正reward,并且将reward减均值,除以标准差。

——————————————————————————————————————————————

Actor Critic算法:

一个非常好的启发性的专栏:https://zhuanlan.zhihu.com/p/21378532?refer=intelligentunit

Actor Critic算法与policy gradient算法类似,都是将网络输出的概率与reward相乘作为梯度,不同的地方在于,policy gradient中

的reward是在一个episode结束后以此计算出来的,也就是说,policy gradient算法只有在一个episode结束后才能更新,

做不到实时更新。而Actor Critic算法的reward则是由另一个网络得到的,具体的公式可以参考上面的专栏。这样,Actor Critic算法

既能针对连续动作进行处理,又能实现单步更新。Actor Critic思想是对Actor给出的动作的好坏进行评估,如果动作是好的,

则调整网络让这个动作出现的概率变大。

Actor Critic算法的一个结构图如下:

强化学习Q learning与policy gradient_第2张图片

注:这里采用r+GAMMA*V_ - V作为td_error与p(a)相乘是因为,r+GAMMA*V_是动作的价值,而r_GAMMA*V_ - V是动作相对于当前状态的价值。

在实际操作中,有时可以直接使用Q值即r+GAMMA*V_作为td_error。具体的分析可以参考专栏:

https://zhuanlan.zhihu.com/p/26882898?group_id=846763653305860096

你可能感兴趣的:(强化学习Q learning与policy gradient)