强化学习笔记(三):基于策略函数的强化学习(Policy-based Reinforcement Learning)

1,197 阅读5分钟

本文正在参加「金石计划」

导语

本系列笔记为b站Shusen Wang老师的强化学习课程笔记,整体按照老师讲课的思路来记录。本节课主要介绍Policy-gradient算法。

Policy Function的近似

策略函数π\pi的输入是状态s,输出是所有动作的概率分布。在执行动作时,Agent采用随机抽样的方式选择下一步要执行的动作。

1_Basics_3-03.png

假如我们有一张表,可以记录所有状态,那么我们只需要填满这个表格就可以了,但实际上,像超级玛丽这样的游戏有着无数种状态,这样的形式是完全不现实的。

1_Basics_3-05.png

因此,我们需要使用函数近似的方式。函数近似有多种方式,如线性函数近似、神经网络近似、kernel近似等。如果使用神经网络,那么就叫这个网络为Policy Network,记为π(as;θ)\pi(a|s;\theta),这里的θ\theta是神经网络的参数。

如果是超级玛丽这个游戏,我们可以把策略函数设计成这个样子:输入是状态s,也就是当前屏幕的画面,也可以是最近几帧的画面。然后通过一个卷积层得到特征向量,之后通过一个MLP映射为3维的向量,对应于三个动作。最后,连接一个softmax层,得到每个动作的概率值。

1_Basics_3-07.png

由于策略函数是概率密度函数,所以它的积分或求和为1.这就是使用softmax的原因。

1_Basics_3-08.png

State-value Function的近似

状态价值函数Vπ(st)V_{\pi}(s_t)是动作价值函数Qπ(st,at)Q_{\pi}(s_t, a_t)对A求期望得到的,他只跟策略π\pi和当前状态sts_t有关。给定策略π\piVπ(st)V_{\pi}(s_t)可以评价当前状态的好坏,Vπ(st)V_{\pi}(s_t)越大,表示当前的胜算越大,给定状态s,Vπ(st)V_{\pi}(s_t)可以评价策略π\pi的好坏。如果π\pi很好,Vπ(st)V_{\pi}(s_t)就会比较大,说明胜算大。

如果A是离散变量,那么对a求和就可以消掉A,同样的,对于连续变量则可以使用积分。

1_Basics_3-13.png

接下来,我们介绍策略价值函数的近似,同样使用一个神经网络。我们已经把Policy函数用一个Policy Network π(as;θ)\pi(a|s;\theta)来近似

1_Basics_3-16.png

所以,整体的策略函数也变成了V(s;θ)V(s;\theta),它可以评价状态s和策略π\pi的好坏,给定状态s,策略越好,V(s;θ)V(s;\theta)的值就越大,那么该怎样使策略变得越来越好呢?

1_Basics_3-18.png

我们可以学习参数θ\theta,让J(θ)J(\theta)的数值越大越好。那么如何改进J(θ)J(\theta)呢?这里用到了Policy gradient算法,我们让Agent玩游戏,每一步都会观察到一个不同的状态s,这个s就相当于从s的概率分布中随机抽样而来的,观测到s,把V(s;θ)V(s;\theta)关于θ\theta求一个梯度,然后用梯度上升来更新θ\theta,这里的β\beta是学习率。

Policy Gradient

刚才我们介绍了状态价值函数的近似V(s;θ)V(s;\theta),这里的π(as;θ)\pi(a|s;\theta)是策略网络,策略梯度就是V(s;θ)V(s;\theta)θ\theta的导数,其数学推导如下:

1_Basics_3-23.png

这里做了一步简化假设,即Qπ(s,a)Q_{\pi}(s,a)θ\theta无关,实际上并不是这样,这里是为了方便推导和理解的简化

1_Basics_3-25.png

1_Basics_3-30.png

1_Basics_3-31.png

我们已经推导出了策略梯度的两种等价形式,

image.png

有了这两种公式后,我们就可以计算策略梯度了,如果动作是离散的,那么可以使用第一种形式,即

image.png

对于连续变量使用第二种形式,但对一个神经网络求积分是不可行的,所以这里采用蒙特卡洛方法进行近似,具体做法如下:

1_Basics_3-35.png

蒙特卡洛就是随机抽一个多多个样本,用他们来近似期望。更新参数θ\theta时,使用g(a^,θ)g(\hat{a}, \theta)就可以了。其实这种方法对于离散的动作也是适用的。

1_Basics_3-36.png

策略梯度算法的更新流程

策略梯度算法的整体流程如下:

  1. 在第t个时间点观测到了状态sts_t;(接下来使用蒙特卡洛近似来计算策略梯度)
  2. 将策略网络π(st;θt)\pi(\cdot|s_t;\theta_t)作为策略密度函数,用它随机抽样得到一个动作ata_t
  3. 计算动作价值函数的值qtq_t
  4. 对策略网络π\pi进行求导,算出logπ\log\pi关于θ\theta的导数;
  5. 近似的算策略梯度g(at,θt)=qtd theta,tg(a_t,\theta_t)=q_t\cdot d_{\ theta,t}
  6. 更新策略网络。

策略梯度算法在每一轮都会执行以上6步。

1_Basics_3-40.png

但是这里话有一个问题没有解决,即我们不知道Qπ(st,at)Q_{\pi}(s_t,a_t),那该如何计算qtq_t呢?有两个办法计算:

  1. Reinforce算法:用策略网络π\pi来控制Agent运动,从一开始一直玩到游戏结束,把整个游戏轨迹都记录下来。观测到所有的奖励r后可以计算出utu_t。由于Qπ(st,at)Q_{\pi}(s_t,a_t)UtU_t的数学期望,我们就可以使用utu_t来近似Qπ(st,at)Q_{\pi}(s_t,a_t),所以Reinforce算法就是用utu_t来代替qtq_t.

1_Basics_3-42.png

  1. 用另一个神经网络来近似,这样就有了两个神经网络,这也就是后续的AC算法,将在后续的课程中进行讲解。

总结

这节课讲了Policy-based method,我们希望得到一个好的策略函数π\pi,让它自动控制Agent运动,每当Agent观测到状态sts_t,Agent就用π\pi函数得到动作的分布并进行随机抽样选择动作执行。

直接求策略函数比较困难,所以使用神经网络来近似策略函数,这个神经网络被称为Policy Network,通过Policy gradient进行学习。

1_Basics_3-45.png