本章我们将用一个神经网络来近似策略函数,这个神经网络叫做policy network,用于控制agent的运动,我们将使用policy gradient算法来训练这个网络。
用神经网络近似策略函数π(a|s)
1 策略网络
考虑离散动作空间,比如A = {左, 右, 上}。策略函数π定义为:
策略函数π 的输入是状态s 和动作a,输出是一个0 到1 之间的概率值。举个例子,把马里奥游戏当前屏幕上的画面作为s,策略函数会输出每个动作的概率值:
有了三个概率值,agent会进行一次随机抽样,得到动作a,但是动作“左”被抽到概率最大。
如果我们有这样一个策略函数,我们就可以拿它控制智能体。每当观测到一个状态s,就用策略函数计算出每个动作的概率值,然后做随机抽样,得到一个动作a,让智能体执行a。
那么如何得到策略函数呢?
如果状态数和动作空间都很小,我们便可以用一张表格对其进行记录, 但是对于类似马里奥游戏,其状态数相当大,因此我们需要学习一个函数来近似策略函数,这个函数我们用policy network来近似:
其中,θ是神经网络的参数,一开始是随机初始化的,通过学习来更新。
在马里奥游戏中,我们可以使用如下的神经网络:
其中,策略π需要满足:
回忆一下上节中状态价值函数的定义:
我们将Vπ中的策略函数π替换为神经网络,即:
2 策略学习的主要思想
2.1 主要思想
通过不断改进神经网络参数θ,使得目标函数值越大越好。
2.2 目标函数
状态价值函数进一步可以写为:
我们的目标是通过不断改进模型(学习参数θ ),使得V(s;θ)增大。
因此我们这样定义目标函数:
这里状态s是随机变量,积分积掉后,变量只剩下θ。
这个目标函数排除掉了状态S 的因素,只依赖于策略网络π 的参数θ;策略越好,则J(θ) 越大。所以策略学习可以描述为这样一个优化问题:
那么怎么去改进模型呢?下面介绍策略梯度算法(policy gradient)
2.3 策略梯度算法
注:使用梯度上升,我们要求的是目标函数的最大值。
2.3.1 策略梯度的简单证明
首先介绍简单的证明方法,这个方法不太严谨,但是对于初步理解policy gradient已经足够了~
2.3.2 两种形式的policy gradient
综上,我们得到了两种形式的策略梯度:
如果动作是离散的,例如动作空间A={左、右、上},则使用Form1:
我们对于A集合中的每个动作a,都求一个函数值:
然后求和,即:
但是对于连续动作,我们便无法枚举每个动作。例如A=[0,1]。此时使用form2:
但是A是连续变量,求其期望需要做积分,由于神经网络的复杂性,积分无法实现。因此我们需要一个函数来近似这个期望值。
2.4 蒙特卡洛近似
我们使用蒙特卡洛近似来近似出这个期望值。
具体方法:
1.根据策略π随机抽样一个动作;
2.求出下面函数的值(是个确定的值)。
很显然:
因此,g函数是,是 的一个无偏估计。因此可以用g函数来近似期望值。
3 策略梯度算法
总结:
此时,还存在一个问题:我们并不知道Qπ,那么怎么计算 ?
方法1:REINFORCE算法
1.用策略网络来控制agent运动,从一开始一直玩到游戏结束,我们可以得到一条游戏轨迹:
2.计算所有的回报:
由于 ,因此我们可以使用ut来近似Qπ(st,at)。也就是说用观测到的ut来代替Qπ函数。
3.用(st, at) 作为数据,做反向传播计算:
4.做随机梯度上升更新策略网络参数:
方法2:用一个神经网络来做函数近似
这就有了两个神经网络,也就是actor-critic算法,将在下一讲进行介绍。
本章中的代码正在整理中。