【强化学习的数学原理】第09课-策略梯度方法-笔记
学习资料: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的伪代码。