深度强化学习之策略梯度(Policy Gradient)
前言
本文算是对于策略梯度做一个简单介绍,因为敲公式巨麻烦,所以也不想写得太长,如果以后有机会(当我说这句话的时候,就代表大概率没有)做相关的视频的话,会更加详细的说明其中的细节。
注意:本文中会出现很多英文术语。

一、什么是策略梯度
首先,策略梯度是一种所谓的policy based learning,即我们的对象是我们的策略(policy),而非某个value function(虽然我们可能会间接地用到value function)。
在这种policy based learning下,我们用θ参数化(parameterize)我们的策略,换言之,我们希望用某些参数θ来控制我们的
。比方说——我们可以用一个神经网络来参数化我们的
。我们给模型输入某个state
,然后模型输出对应的action
。
确立模型之后,我们还需要一个衡量标准,即我们的objective,这个标准可以是我们的Reward的期望值(expected reward):
这里的代表我们的路径。
这个objective的意义很明确——我们希望我们的策略π能够给出高return.
当我们明确了我们的objective以后,自然我们就用gradient ascent来更新我们的参数θ,让我们的参数向高处爬:
但是问题是,如果我们想要用gradient ascent,我们首先需要计算我们的.
我们知道期望的计算是,这里的
对应我们的
,
对应我们的
.
在将变形之后(这里省略过程),我们得到:
*公式在不同的地方可能会有不同的版本。

二、REINFORCE
REINFORCE(所有字母都是大写)是用total reward (这里先不考虑γ)来估测
:
将这个转变为我们的objective:
(注意这里有一个负号)

三、Actor-Critic
相比REINFOECE,actor-critic有两个参数化的模型——Actor和Critic,Actor是策略,Critic是一个用
参数化的value function
,你可以用另一个神经网络来代表这个
,这个神经网络我们输入state
,输出我们的state value
.
所以在训练的时候,我们既更新我们的θ,也更新我们的w:
传统的Actor-Critic用TD Learning来确立objective:
Actor-Critic下面衍生出了很多个版本,如A2C,A3C,还有Unity用户熟悉的SAC和PPO。

后记
策略梯度的方法和我们平时常见的supervised learning形式不太一样,所以刚接触会有点不适应。多看几下就习惯了(?)
参考资料:
Richard S. Sutton, Andrew G Barto - Reinforcement Learning: An Introduction
Zihan Ding, Yanhua Huang, Hang Yuan, and Hao Dong - Introduction to Reinforcement Learning

THE END.