学习资料:bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接:强化学习的数学原理 西湖大学 赵世钰
文章目录
- 一、最简单的Actor-Critic(QAC)
- 二、Advantage Actor-Critic(A2C)
- 三、重要性采样和Off-Policy Actor-Critic
- 四、Deterministic Actor-Critic (DPG)
- 五、Summary
一、最简单的Actor-Critic(QAC)
Actor-Critic算法和上节课所学习的policy gradient方法是一种方法,但不同的是,Actor-Critic方法把基于value的方法引入到policy gradient中。
什么是actor?什么是critic?
actor对应的是策略,是更新策略(policy update)的一个过程。
critic对应的是policy evaluation/value estimation的过程。
先回顾一下上节课讲的policy gradient方法。在policy gradient中,最终要计算的是公式1。这个一整个公式1其实就是一个actor,因为这个公式在更新参数
θ
\theta
θ,更新
θ
\theta
θ其实就是更新策略。这就对应着actor的作用。公式1中的
q
t
(
s
t
,
a
t
)
q_t(s_t,a_t)
qt(st,at)其实就是一个critic,通过计算action value来估计当前这个策略好不好。
如何计算
q
t
(
s
t
,
a
t
)
q_t(s_t,a_t)
qt(st,at)?
有两种方法。
第一,蒙特卡洛的方法。从状态
(
s
,
a
)
(s,a)
(s,a)出发收集一个episode,计算这个episode所对应的return作为
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),再配上刚刚说的算法,这就是REINFORCE。(上节课已经讲过)
第二,用TD方法来估计
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),再配上刚刚说的算法,这种方法被称为actor-critic。
最简单的actor critic算法的伪代码。其目标是去优化函数
J
(
θ
)
J(\theta)
J(θ)。首先根据当前的策略生成experience
(
s
t
,
a
t
,
r
t
+
1
,
s
t
+
1
,
a
t
+
1
)
(s_t,a_t,r_{t+1},s_{t+1},a_{t+1})
(st,at,rt+1,st+1,at+1)。然后在critic的部分用Sarsa算法去计算
q
(
s
,
a
)
q(s,a)
q(s,a),在actor部分讲critic部分中计算好的
q
(
s
,
a
)
q(s,a)
q(s,a)拿过来,去更新策略。随后用更新后的策略,去在下一步中生成新的数据。
补充说明:
- Critic对应的是Sarsa+value function approximation
- Actor对应的是策略更新算法
- 这个算法是on-policy的
- 这个算法(QAC)是最简单的actor-critic algorithm之一
二、Advantage Actor-Critic(A2C)
A2C是QAC的推广,其基本思想是在QAC的基础上引入一个偏置量来减少估计的方差。
性质:policy gradient梯度对于引入一个新的偏置是不会变化的。比如下图,引入b(S),对梯度的结果是没有影响的。
1.为什么引入b(S)对计算梯度没有影响呢?
请看下面的推导过程。
2.为什么要考虑这个baseline?它究竟有什么用?
把梯度简写成
E
[
X
]
E[X]
E[X]的形式,经过刚刚的推导,已经知道
E
[
X
]
E[X]
E[X]和
b
(
S
)
b(S)
b(S)是没有任何关系的。但是
v
a
r
(
X
)
var(X)
var(X)(X的方差)和
b
(
S
)
b(S)
b(S)是有关系的。
用
t
r
[
v
a
r
(
X
)
]
tr[var(X)]
tr[var(X)],也就是矩阵的迹(对角线元素的和)来作为评价方差大小的一个工具。通过计算得出,
v
a
r
(
X
)
var(X)
var(X)是和
b
(
S
)
b(S)
b(S)有关的。
目标:找一个最好的baseline,让X的方差达到最小。
方差小的好处是,在采样的时候,误差也更小。
但在以前介绍的REINFORCE 和 QAC 中,是没有baseline的,或者说,b=0。最优的b*,其计算公式如下图公式1所示。但因为公式1比较复杂,所以一般不用,一般我们有公式2对应的
b
(
s
)
b(s)
b(s)。公式2对应的
b
(
s
)
b(s)
b(s)实际上就是
v
π
(
s
)
v_{\pi}(s)
vπ(s)。
把
b
(
s
)
b(s)
b(s)(实际上是
v
π
(
s
)
v_{\pi}(s)
vπ(s))代入到梯度上升算法中。定义一个新的量
δ
π
(
S
,
A
)
\delta_{\pi}(S,A)
δπ(S,A),这个量被称作advantage function。
δ
π
(
S
,
A
)
=
q
π
(
S
,
A
)
−
v
π
(
S
)
\delta_{\pi}(S,A)=q_{\pi}(S,A)-v_{\pi}(S)
δπ(S,A)=qπ(S,A)−vπ(S)。
v
π
(
S
)
v_{\pi}(S)
vπ(S)就是相当于很多
q
π
(
S
,
A
)
q_{\pi}(S,A)
qπ(S,A)加起来的再取平均的一个均值。如果当前这个
q
π
(
S
,
A
)
q_{\pi}(S,A)
qπ(S,A)是大于
v
π
(
S
)
v_{\pi}(S)
vπ(S)的,说明这个动作a的效果还不错,
δ
π
(
S
,
A
)
\delta_{\pi}(S,A)
δπ(S,A)为一个正值。选择
(
S
,
A
)
(S,A)
(S,A)的概率就会变大。
advantage function也可以用TD error来近似(如下图所示)。这样的变换是合理的,因为
q
π
(
S
,
A
)
q_{\pi}(S,A)
qπ(S,A)本来就等于
R
+
γ
v
π
(
S
′
)
R+\gamma v_{\pi}(S')
R+γvπ(S′)。并且这样做有一个好处,原来需要用两个神经网络:一个网络去近似
q
π
(
s
t
,
a
t
)
q_{\pi}(s_t,a_t)
qπ(st,at),另一个网络去近似
v
π
(
S
)
v_{\pi}(S)
vπ(S),现在只需要用一个神经网络
v
π
(
S
)
v_{\pi}(S)
vπ(S)就好了。
这是A2C算法的伪代码。Critic中是TD算法和value function approximation相结合的算法。
三、重要性采样和Off-Policy Actor-Critic
之前讲到的策略都是on policy的,如下图所示,在采样时,要遵循策略
π
\pi
π,更新时,也是更新的这个策略
π
\pi
π。但我们也可以使用重要性采样,把on policy改成off policy。
1.一些简单的例子
假设有一个随机变量X,X是一个集合,里面只有两个值。X的分布如下图所示,据此分布,算出来X的期望为0。那么问题来了,如果这个随机变量的分布是未知的,那是否能通过采样的方式来求
E
[
X
]
E[X]
E[X]?
在第一种情况下,假设
x
i
{x_i}
xi是在X的真实分布
p
0
p_0
p0上进行采样的,那么当采样足够多的时候,
x
i
{x_i}
xi的均值和方差就等于
X
X
X的均值和方差。
在第二种情况下,假设
x
i
{x_i}
xi是在另一个分布
p
1
p_1
p1上进行采样的,那么这个采样的均值算出来肯定和真实分布上的均值不一样。
问题是:我们现在有一个概率分布
p
1
p_1
p1,在
p
1
p_1
p1上产生了一些sample,想用这些sample来估计在分布
p
0
p_0
p0下的expectation。为什么要做这个呢?因为想做off-policy。off-policy中用策略
β
\beta
β来产生数据(相当于分布
p
1
p_1
p1),用策略
π
\pi
π作为target policy(相当于分布
p
0
p_0
p0)。用重要性采样来实现这个目的。
2.重要性采样
如下图所示可以通过估计
E
X
~
p
1
[
f
(
X
)
]
E_{X~p_1}[f(X)]
EX~p1[f(X)],来估计满足分布
p
0
p_0
p0的随机变量
X
X
X的期望。如何估计
E
X
~
p
1
[
f
(
X
)
]
E_{X~p_1}[f(X)]
EX~p1[f(X)]?通过采样
x
i
x_i
xi,然后对
f
(
x
i
)
f(x_i)
f(xi)求和再求平均就可以,平均数用下图中的
f
ˉ
\bar{f}
fˉ来表示。
重要性采样的计算方式如下图所示。
小结:
有一些服从
p
1
p_1
p1分布的sample
x
i
{x_i}
xi,下图中的
x
ˉ
\bar{x}
xˉ是对这些sample求平均,计算结果是在
p
1
p_1
p1分布下的expectation。目标是求
f
ˉ
\bar{f}
fˉ,
f
ˉ
\bar{f}
fˉ的计算结果是在
p
0
p_0
p0分布下的expectation。
3.off-policy policy gradient 的理论
假设
β
\beta
β是一个behavior policy,用来生成很多的经验采样。
π
\pi
π是target policy,目标是优化下面的
J
(
θ
)
J(\theta)
J(θ)函数。
d
β
(
s
)
d_{\beta}(s)
dβ(s)是在策略
β
\beta
β下的一个stationary distribution。
这个目标函数对应的梯度如下所示。和之前在on policy中的区别在于,on policy中,
A
~
π
A~\pi
A~π,但在off policy中,
A
~
β
A~\beta
A~β。除此之外,还多了一个重要性采样的项。
下面用梯度上升的方法去优化。在梯度中加上一个baseline
b
(
s
)
b(s)
b(s),之前已经证明过,这个baseline不改变梯度。一般设置
b
(
S
)
=
v
π
(
S
)
b(S)=v_{\pi}(S)
b(S)=vπ(S)。
公式1中用stochastic gradient去计算梯度,加上了
v
π
(
S
)
v_{\pi}(S)
vπ(S)作为baseline。公式2在公式1的基础上加了一个TD error,得到公式3。最后就以公式3来计算梯度。公式4是对公式3进行一个变形,目的是为了提取出step size,对公式进行定性分析。(详见课程)
这是对应的伪代码。
四、Deterministic Actor-Critic (DPG)
前面几节所讲到的策略,其
π
(
a
∣
s
,
θ
)
\pi(a|s,\theta)
π(a∣s,θ)一定是大于0的,也就是说,这些策略都是stochastic的策略。下面介绍Deterministic Actor-Critic。
在deterministic policy中,策略不再用
π
(
a
∣
s
,
θ
)
\pi(a|s,\theta)
π(a∣s,θ)来表示,而是用下图中的
a
=
μ
(
s
,
θ
)
a=\mu(s,\theta)
a=μ(s,θ)来表示,其输出不再是选择某个动作a的概率值,而直接就是一个实实在在的动作a。所以
μ
\mu
μ是状态空间到动作空间的映射。在实际应用过程中,可以用一个神经网络来实现。
deterministic policy gradient的目标函数
J
(
θ
)
J(\theta)
J(θ)。其中
d
0
(
s
)
d_0(s)
d0(s)表示概率分布。
d
(
s
)
d(s)
d(s)是独立于
μ
\mu
μ的,在这种情况下,梯度更加容易计算。
这是求出来的梯度结果。这是一个off policy的算法。
然后用梯度上升的方法进行优化。
伪代码如下。
补充说明:
- 这是一个off policy的算法,其中behaviour policy 是 β \beta β,target policy 是 μ \mu μ。
-
β
\beta
β可以用
μ
\mu
μ+noise 来代替。
五、Summary
从去年11月底开始断断续续看,到今天为止,这门课终于看完了第一遍了。由于基础有限,部分知识还没能消化完全。希望可以在后续实践过程中不断思考、不断学习。
“关于学具有系统性的知识,建议放弃速成的想法,比如一小时入门,一上午精通。很多焦虑都来源于时间安排不合适。举个例子,读一篇论文需要五天,但你只给自己一天的时间,到晚上也许发现,连introduction部分都没搞明白。但是如果给自己足够的时间,心态放平,稳扎稳打,也许三天就可以读完一篇论文。” 这是赵老师在课程里说过的原话,深受启发。做学问切忌心浮气躁,而是应该放平心态,给自己一些消化和适应的时间。在以后的科研生活中,也一直要铭记在心呀!