1.Policy Gradient和DQN系列强化算法最大的区别在于:
DQN系列基于Value,也就是说执行完所有的动作并保存所得到的价值,根据这些价值计算出最优价值函数,并以此选择动作,最终获得一个特定的策略。
Policy Gradient基于策略来选择动作,Value Based方法中将动作价值函数进行近似,引入了一个动作价值函数q^,状态s和动作a为输入,价值函数输出,得到近似的动作价值。
PG中采用类似的思路,将策略表示成一个连续的函数之后,使用连续函数的优化方法寻找最优策略。
2.Policy Gradient要想得到最优策略需要经过这么几个步骤:
1.得有一个连续的函数,有了连续的函数才能使用连续 函数的优化方法寻找最优策略。我们类比DQN中的方法,将策略Π表示为一个连续的函数(这里只是把她表示出来,具体是需要详细的设计的):
2.找到一个可以优化的函数目标。最简单的优化目标是初始状态收获的期望
但有的问题没有明确的初始状态,这时可以将优化目标定义为平均价值
或者每一步的平均奖励
得到这个目标函数之后,我们要对他求一个梯度,为啥要求梯度呢,特意去翻了翻高数知识,梯度是指方向导数的最大值,梯度向量的方向即为函数值增长最快的方向,所以。有了梯度之后我们就可以随时找到函数值变化最大的方向,就可以实时的更新策略函数的参数从而找到最优策略了。
其中,我们把
这块称为分值函数
这大概就是PG的大概思路,所以我们接下来只要设计一个合适的策略函数,前面的就通了。
关于设计合适的策略函数,最常用的策略函数就是softmax策略函数了,它主要应用于离散空间,使用描述状态和行为的特征 ϕ(s,a)和参数
θ的线性组合来权衡一个行为发生的几率
策略函数表示出来了!接下来就按照前面的流程,求导得对应的分值函数:
好了我们现在想要的东西都得到了,接下来我们设计策略梯度算法,给它把数学符号和公式想办法变成代码就完工了!
下面这个就是一种最简单的策略梯度算法:
3.Softmax是什么?
https://blog.csdn.net/bitcarmanlee/article/details/82320853?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161853644116780366579767%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161853644116780366579767&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-82320853.pc_search_result_no_baidu_js&utm_term=softmax
如果将max看成一个分类问题,就是非黑即白(两个变量a,b,如果a>b,则max为a,fan’zhi),最后的输出是一个确定的变量。更多的时候,我们希望输出的是取到某个分类的概率,或者说,我们希望分值大的那一项被经常取到,而分值较小的那一项也有一定的概率偶尔被取到,所以我们就应用到了soft的概念,即最后的输出是每个分类被取到的概率。
4.交叉熵损失函数
https://blog.csdn.net/bitcarmanlee/article/details/105619286
图片参考:
刘建平Pinard
https://www.cnblogs.com/pinard/p/10137696.html
下一篇是我的PG代码注释版本