学习资料:bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接:强化学习的数学原理 西湖大学 赵世钰
文章目录
- 一、该方法的基本思路
- 二、该方法的目标函数1-Average value
- 二、该方法的目标函数2-Average reward
- 三、目标函数的梯度计算
- 四、梯度上升算法和REINFORCE
一、该方法的基本思路
In this lecture, we will move
- from value-based methods to policy-based methods
- from value function approximation to policy function approximation
以前介绍的方法都是value-based,这次课和下次课所介绍的方法都是policy-based。value-based的方法以value为核心,比如以前有的方法通过估计action value做policy evaluation,然后在此基础上去选择更好的策略,在此过程中value发挥了重要的作用。policy-based方法直接建立一个关于策略的目标函数,通过优化这个目标函数就可以直接得到最优的策略。
在之前,策略的表示是用表格呈现的。要想知道状态 s 1 s_1 s1下选择动作 a 1 a_1 a1的概率,直接去查表 π ( a 1 ∣ s 1 ) \pi(a_1|s_1) π(a1∣s1)就行。
下面,尝试把策略的表示方法从表格转换成函数。其中 θ \theta θ是参数。
(1)这个函数可以是神经网络的形式。输入是状态 s s s,输出是采取动作action的概率,神经网络的参数是 θ \theta θ。
(2)用函数表达的优点是:存储空间小、泛化性强。(和前面value function approximation类似,不再分析)
(3)函数的表达形式可能有多种,也可以写成 π ( a , s , θ ) \pi(a,s,\theta) π(a,s,θ)、 π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(a∣s)或者 π θ ( a , s ) \pi_{\theta}(a,s) πθ(a,s)。
表格和函数表示的区别有哪些?
1. 定义最优策略的方法有差别
在表格情况下,如果在策略 π \pi π下,每个状态的state value都要大于其他策略,那这个策略就是最优策略。在函数情况下,会定义一个标量的目标函数scalar metrics,并去优化这个目标函数。
2.获取一个动作的概率的方法有差别
在表格情况下,查表即可。在函数情况下,需要输入到神经网络计算 π ( a ∣ s , θ ) \pi(a|s,\theta) π(a∣s,θ)。
2.更新策略的方法有差别
在表格的情况下,直接修改表格里的值就行。在函数情况下,需要去修改参数 θ \theta θ。
policy gradient的基本思路:
(1)用一个函数 J ( θ ) J(\theta) J(θ)来定义最优策略。
(2)用梯度上升法来优化函数,使 J ( θ ) J(\theta) J(θ)最大化。
二、该方法的目标函数1-Average value
我们所选中的目标函数是什么?
第一类目标函数是average state value,或者被称作average value。函数的定义如下图所示。实际上就是对 v π ( s ) v_{\pi}(s) vπ(s)的加权平均, d ( s ) d(s) d(s)是权重,所有 d ( s ) d(s) d(s)加起来等于1。 v ˉ π \bar{v}_{\pi} vˉπ是一个关于策略的函数,策略不同, v ˉ π \bar{v}_{\pi} vˉπ对应的值也不同。因此需要找到一个最优的策略,让这个值达到最大。 d ( s ) d(s) d(s)也可以被当做一个概率分布。
v ˉ π \bar{v}_{\pi} vˉπ也可以被写成向量乘积的形式,如下图所示。
v ˉ π \bar{v}_{\pi} vˉπ中,如何去选择distribution d呢? 有两种情况。
第一种情况:distribution d和策略 π \pi π是独立的。
在这种情况下,求 v ˉ π \bar{v}_{\pi} vˉπ梯度就会变得简单,因为d中不含 π \pi π,只有 v π v_{\pi} vπ中含有 π \pi π。在这种情况下,把 d d d表示为 d 0 d_0 d0, v ˉ π \bar{v}_{\pi} vˉπ表示为 v ˉ π 0 \bar{v}_{\pi}^0 vˉπ0。
如何选择 d 0 d_0 d0?
(1)假设每个状态都是同等重要。
(2)我们只关注某一个特定的状态,就把这个状态的权重赋值为1,其他状态的权重赋值为0
第二种情况:distribution d和策略 π \pi π不是独立的。
这里用stationary distribution的方法去选择d作为 d π ( s ) d_{\pi}(s) dπ(s)。stationary distribution在上节课中也有提到,简单说就是,现在有一个策略,根据这个策略不断地和环境进行交互,执行这个策略很多次之后,就可以预测,agent在某一个状态的概率是多少。并且这个概率能够直接通过下面这个式子计算出来(知道 P π P_{\pi} Pπ之后,可以求解出 d π T d_{\pi}^T dπT)。
二、该方法的目标函数2-Average reward
第二种目标函数是average one-step reward,或者被简单称作average reward。
下面这个式1就是目标函数,和上一节的差异就是 v π ( s ) v_{\pi}(s) vπ(s)变成了 r π ( s ) r_{\pi}(s) rπ(s), r π ( s ) r_{\pi}(s) rπ(s)是从s出发所得到的immediate reward的平均值。 d π ( s ) d_{\pi}(s) dπ(s)是对应的权重,这里所用的是stationary distribution。式1也可以被展开成式2、式3的形式。
下面给出average reward的另外一种形式。这种形式在论文和书籍中比较常见。
基于给定策略生成了一个trajectory,这个trajectory 包含 ( R t + 1 , R t + 2 , . . . ) (R_{t+1}, R_{t+2},...) (Rt+1,Rt+2,...)。假设从状态 s 0 s_0 s0出发,把所有这些 R R R加起来
求期望,再除以n(平均),再将n趋于无穷大取极限。这就代表着从某一个状态出发跑无穷多步,其reward的平均是什么。
又可以写成下面的形式(去掉了 s 0 s_0 s0,因为跑了无穷多步之后,从哪里出发已经不重要了),这个形式和本节中一开始给出的形式是等价的。
一些补充:
- 所有这些目标函数都是关于策略 π \pi π的函数。
- 策略 π \pi π的参数都是 θ \theta θ,所以它是关于 θ \theta θ的函数。
- 希望找到最优的 θ \theta θ值来最大化目标函数,从而得到最好的策略 π \pi π。
- r ˉ π \bar{r}_{\pi} rˉπ和 v ˉ π \bar{v}_{\pi} vˉπ分别是两个不同的目标函数,这两个函数满足下面这个等式,对其中一个函数做优化的时候,另外一个函数也会达到极值。
三、目标函数的梯度计算
本节的任务是,给定目标函数,计算其梯度。梯度求解结果如下:
下面对梯度求解结果进行分析。如下图所示,求解结果可以把求和符号全都去掉,改成expectation的形式。其中,S、A是随机变量,S满足 η \eta η的分布,A满足 π ( A ∣ S , \pi(A|S, π(A∣S,theta ) ) )的分布。下面就可以用这个expectation形式的梯度去做优化。
下图给出了上面等式的证明过程。
上面公式中有一个 l n π ( a ∣ s , θ ) ln \pi(a|s,\theta) lnπ(a∣s,θ),对数的存在要求 π ( a ∣ s , θ ) \pi(a|s,\theta) π(a∣s,θ)一定要大于0。因此使用softmax函数将向量归一化,这样就不会存在负值的情况了。引入softmax后, π ( a ∣ s , θ ) \pi(a|s,\theta) π(a∣s,θ)可以写成如下图所示的形式,其中 h ( s , a , θ ) h(s,a,\theta) h(s,a,θ)是另外一个函数,这个函数通常是一个神经网络。
用神经网络来实现时,输入的参数是状态 s s s,输出的结果是 π ( a 1 ∣ s , θ ) \pi(a_1|s,\theta) π(a1∣s,θ)到 π ( a n ∣ s , θ ) \pi(a_n|s,\theta) π(an∣s,θ)。
四、梯度上升算法和REINFORCE
梯度上升方法的计算公式如下图所示,公式中有一个期望,这就涉及到一些分布的信息,这些信息我们是不知道的,所以无法求出,因此使用随机梯度上升来代替真实的梯度。
不过,在上面这个式子中, q π ( s t , a t ) q_{\pi}(s_t,a_t) qπ(st,at)也是不知道的。所以对其进行近似/采样,把 q π ( s t , a t ) q_{\pi}(s_t,a_t) qπ(st,at)换成 q t ( s t , a t ) q_{t}(s_t,a_t) qt(st,at)。
第一种方法是基于蒙特卡洛的方法,要估计 q t ( s t , a t ) q_{t}(s_t,a_t) qt(st,at),那么就从(s,a)出发,收集一个episode的return,把这个return用来近似 q t ( s t , a t ) q_{t}(s_t,a_t) qt(st,at)。这个方法叫REINFORCE,后面会详细讲。
第二种方法是TD的方法,下节课会详细讲。
下面补充 几个说明:
1.如何去做采样?
梯度公式中涉及的随机变量是S和A,所以对S和A进行采样。
如何采样S? S服从分布d,这个分布本来是经过很长的时间,达到平稳状态,再去用这个数据。但是在实际使用中,一般不太考虑,因为耗费的时间有点长。
如何采样A? A服从分布 π ( A ∣ S , θ ) \pi(A|S,\theta) π(A∣S,θ)。所以,应当根据当前的策略 π \pi π去采样。
2.如何去理解这个算法?
梯度上升算法可以被改写成如下图所示的形式。这么一看呢,我们这个计算过程其实是在优化 π ( a t ∣ s t , θ t ) \pi(a_t|s_t,\theta_t) π(at∣st,θt)。
当 β t > 0 \beta_t>0 βt>0的时候,选择 ( s t , a t ) (s_t,a_t) (st,at)的概率增加了;反之,选择 ( s t , a t ) (s_t,a_t) (st,at)的概率减小了。
β t > 0 \beta_t>0 βt>0的作用是能够在exploration和exploitation之间取得一个较好的平衡。
如果 q t ( s t , a t ) q_t(s_t,a_t) qt(st,at)的是比较大的,那么选择 ( s t , a t ) (s_t,a_t) (st,at)的概率会增大。算法倾向于提高已经比较好的动作的概率。(exploitation)
如果 π ( a t ∣ s t , θ t ) \pi(a_t|s_t,\theta_t) π(at∣st,θt)是比较小的,那么选择 ( s t , a t ) (s_t,a_t) (st,at)的概率会增大。算法倾向于对低概率的动作再探索探索。(exploration)
下面给出了REINFORCE算法。该算法是最早的,也是最简单的一个policy gradient算法。
这是reinforce的伪代码。