本文正在参加「金石计划」
导语
本系列笔记为b站Shusen Wang老师的强化学习课程笔记,整体按照老师讲课的思路来记录。本节课主要介绍Policy-gradient算法。
Policy Function的近似
策略函数的输入是状态s,输出是所有动作的概率分布。在执行动作时,Agent采用随机抽样的方式选择下一步要执行的动作。
假如我们有一张表,可以记录所有状态,那么我们只需要填满这个表格就可以了,但实际上,像超级玛丽这样的游戏有着无数种状态,这样的形式是完全不现实的。
因此,我们需要使用函数近似的方式。函数近似有多种方式,如线性函数近似、神经网络近似、kernel近似等。如果使用神经网络,那么就叫这个网络为Policy Network,记为,这里的是神经网络的参数。
如果是超级玛丽这个游戏,我们可以把策略函数设计成这个样子:输入是状态s,也就是当前屏幕的画面,也可以是最近几帧的画面。然后通过一个卷积层得到特征向量,之后通过一个MLP映射为3维的向量,对应于三个动作。最后,连接一个softmax层,得到每个动作的概率值。
由于策略函数是概率密度函数,所以它的积分或求和为1.这就是使用softmax的原因。
State-value Function的近似
状态价值函数是动作价值函数对A求期望得到的,他只跟策略和当前状态有关。给定策略,可以评价当前状态的好坏,越大,表示当前的胜算越大,给定状态s,可以评价策略的好坏。如果很好,就会比较大,说明胜算大。
如果A是离散变量,那么对a求和就可以消掉A,同样的,对于连续变量则可以使用积分。
接下来,我们介绍策略价值函数的近似,同样使用一个神经网络。我们已经把Policy函数用一个Policy Network 来近似
所以,整体的策略函数也变成了,它可以评价状态s和策略的好坏,给定状态s,策略越好,的值就越大,那么该怎样使策略变得越来越好呢?
我们可以学习参数,让的数值越大越好。那么如何改进呢?这里用到了Policy gradient算法,我们让Agent玩游戏,每一步都会观察到一个不同的状态s,这个s就相当于从s的概率分布中随机抽样而来的,观测到s,把关于求一个梯度,然后用梯度上升来更新,这里的是学习率。
Policy Gradient
刚才我们介绍了状态价值函数的近似,这里的是策略网络,策略梯度就是对的导数,其数学推导如下:
这里做了一步简化假设,即与无关,实际上并不是这样,这里是为了方便推导和理解的简化
我们已经推导出了策略梯度的两种等价形式,
有了这两种公式后,我们就可以计算策略梯度了,如果动作是离散的,那么可以使用第一种形式,即
对于连续变量使用第二种形式,但对一个神经网络求积分是不可行的,所以这里采用蒙特卡洛方法进行近似,具体做法如下:
蒙特卡洛就是随机抽一个多多个样本,用他们来近似期望。更新参数时,使用就可以了。其实这种方法对于离散的动作也是适用的。
策略梯度算法的更新流程
策略梯度算法的整体流程如下:
- 在第t个时间点观测到了状态;(接下来使用蒙特卡洛近似来计算策略梯度)
- 将策略网络作为策略密度函数,用它随机抽样得到一个动作。
- 计算动作价值函数的值;
- 对策略网络进行求导,算出关于的导数;
- 近似的算策略梯度
- 更新策略网络。
策略梯度算法在每一轮都会执行以上6步。
但是这里话有一个问题没有解决,即我们不知道,那该如何计算呢?有两个办法计算:
- Reinforce算法:用策略网络来控制Agent运动,从一开始一直玩到游戏结束,把整个游戏轨迹都记录下来。观测到所有的奖励r后可以计算出。由于是的数学期望,我们就可以使用来近似,所以Reinforce算法就是用来代替.
- 用另一个神经网络来近似,这样就有了两个神经网络,这也就是后续的AC算法,将在后续的课程中进行讲解。
总结
这节课讲了Policy-based method,我们希望得到一个好的策略函数,让它自动控制Agent运动,每当Agent观测到状态,Agent就用函数得到动作的分布并进行随机抽样选择动作执行。
直接求策略函数比较困难,所以使用神经网络来近似策略函数,这个神经网络被称为Policy Network,通过Policy gradient进行学习。