policy gradient
突然从基于值的算法到基于策略的算法,有点很难以理解,代码理解也不是那么顺畅。关于policy gradient的算法原理讲解的内容不较少,或者说所写的内容不容易让人理解,这里推荐下面这些链接供大家学习参考:
深度增强学习之Policy Gradient方法1
Policy gradient(策略梯度详解)
一、Policy Gradient算法
二、Policy Gradient算法新理解
1、与Q-learning,Sarsa,DQN的区别
(1)Q-learning,Sarsa,DQN:这些输出是状态动作的值,根据值的大小选择适当的动作。
policy gradient :输出直接是动作或者每个动作的概率,根据概率选择适当的动作。
(2)一个是value based,一个是policy based。
(3)Q-learning,Sarsa,DQN:有误差,减少loss,进行反向传播。
Policy Gradient:没有误差,根据奖励结果提高奖励大的动作的概率,降低奖励小的动作的概率。
(4)Q-learning,Sarsa,DQN:适用于离散动作
Policy Gradient:适用于连续动作
(5)Q-learning,Sarsa,DQN:单步更新,从一个状态,执行一个动作,到达下一个状态并获得奖励之后就进行更新。
Policy Gradient:回合更新,当一个episode执行完之后,获得总奖励,得到梯度,最后再进行参数更新。
2、理解
Policy Gradient算法的思想是先将策略表示成一个连续函数,然后用连续函数的优化方法去寻找最优的策略。最常用的是优化方法是梯度上升法(与最小化loss的梯度下降相对),这样,得先找出梯度优化的目标函数,有以下三种情况:
(1)最简单的优化目标就是初始状态收获的期望
(2)但是有的问题是没有明确的初始状态的,那么我们的优化目标可以定义平均价值
(3)或者定义为每一时间步的平均奖励
无论采用哪一种情况来表示优化目标,最终对参数求导的梯度都结果都是一样的可以表示为:
∇𝜃𝐽(𝜃)=𝔼𝜋𝜃[∇𝜃𝑙𝑜𝑔𝜋𝜃(𝑠,𝑎)𝑄𝜋(𝑠,𝑎)]
具体证明步骤可以参考策略梯度的论文附录1里面,有详细的证明过程。
Policy Gradient不通过误差反向传播,它通过观测信息选出一个行为直接进行反向传播,出人意料的是他并没有误差,而是利用reward奖励直接对选择行为的可能性进行增强和减弱,好的行为会被增加下一次被选中的概率,不好的行为会被减弱下次被选中的概率。
总的来说,可以这样理解Policy Gradient算法:根据当前policy参数采样得到N个Trajectory,计算一次期望reward,然后梯度上升的方法更新policy参数,用更新后的policy再进行下一轮采样,如此往复直到收敛,得到期望reward最大的policy。最终该policy(神经网络表示)就学会了根据游戏画面做合适的action,最终赢得游戏。
梯度上升 法方法更新policy参数:
3、Policy Gradient算法优缺点
优点:
- 连续的动作空间(或者高维空间)中更加高效;
- 可以实现随机化的策略;
- 某种情况下,价值函数可能比较难以计算,而策略函数较容易。
缺点:
- 通常收敛到局部最优而非全局最优;
- 评估一个策略通常低效(这个过程可能慢,但是具有更高的可变性,其中也会出现很多并不有效的尝试,而且方差高)。
三、tips
这里列举了使用policy gradient算法的一个小tips,使用tips是让我们慢慢发现我们现在正在学的这个算法还要哪些不足,还可以怎么优化,如何去更改,逐步锻炼我们的思考能力,其实还有其他tips,想了解的同学可以看李宏毅老师的视频:
李宏毅深度强化学习(国语)课程(2018)
四、总结
这次策略梯度算法看了好长时间,莫烦Python的代码又看了大概三遍,才把代码完全看明白。建议在学习强化学习算法的时候要看,就一次性学明白,再进行下一个算法,不建议看一遍什么都看不懂,觉得好难就放弃了,这样到最后还是什么也没有学到。强化学习的小伙伴们加油哦!