3.1系列中的方法对应课程的5~9,本节内容对应课程的lecture5,9,内容分别是Policy gradient和advanced policy gradient,Lecture 6是actor-critic方法,lecture7-8是Q-learning相关算法和DRL中的Q-learning。
1. Policy Gradient推导与REINFORCE算法
1.1 Policy Gradient公式推导
RL的目标回顾
首先,RL的目标函数就是每个回合智能体与环境交互过程中获得的累计收益的期望,如下所示。
Policy gradient的一般思路就是直接对上式进行求梯度,之后根据该梯度更新策略的参数。先对目标函数做一些简写处理,令
r
(
τ
)
=
∑
t
=
1
T
r
(
s
t
,
a
t
)
r(\tau)=\sum_{t=1}^Tr(\bold s_t,\bold a_t)
r(τ)=∑t=1Tr(st,at),将其带入到目标函数并展开,可以写成:
J
(
θ
)
=
E
τ
∼
p
θ
(
τ
)
[
r
(
τ
)
]
=
∫
p
θ
(
τ
)
r
(
τ
)
d
τ
J(\theta)=E_{\tau\sim p_{\theta}(\tau)}[r(\tau)]=\int p_{\theta}(\tau)r(\tau)d\tau
J(θ)=Eτ∼pθ(τ)[r(τ)]=∫pθ(τ)r(τ)dτ
其梯度为:
∇
θ
J
(
θ
)
=
∫
∇
θ
p
θ
(
τ
)
r
(
τ
)
d
τ
=
∫
p
θ
(
τ
)
∇
θ
p
θ
(
τ
)
p
θ
(
τ
)
r
(
τ
)
d
τ
\nabla_{\theta} J(\theta)=\int \nabla_{\theta} p_{\theta}(\tau)r(\tau)d\tau=\int p_{\theta}(\tau) \frac{\nabla_{\theta} p_{\theta}(\tau)}{p_{\theta}(\tau)}r(\tau)d\tau
∇θJ(θ)=∫∇θpθ(τ)r(τ)dτ=∫pθ(τ)pθ(τ)∇θpθ(τ)r(τ)dτ
因为这里的
p
θ
(
τ
)
p_{\theta}(\tau)
pθ(τ)的定义式是连乘,所以尽量将上式向log函数靠拢,所以利用
∇
p
θ
(
τ
)
p
θ
(
τ
)
=
∇
θ
log
p
θ
(
τ
)
\frac{\nabla p_{\theta}(\tau)}{p_{\theta}(\tau)}=\nabla_{\theta} \log p_{\theta}(\tau)
pθ(τ)∇pθ(τ)=∇θlogpθ(τ)上式可以进一步化简成:
∇
θ
J
(
θ
)
=
∫
p
θ
(
τ
)
∇
θ
p
θ
(
τ
)
p
θ
(
τ
)
r
(
τ
)
d
τ
=
∫
p
θ
(
τ
)
∇
θ
log
p
θ
(
τ
)
r
(
τ
)
d
τ
=
E
τ
∼
p
θ
(
τ
)
[
∇
θ
log
p
θ
(
τ
)
r
(
τ
)
]
\nabla_{\theta} J(\theta)=\int p_{\theta}(\tau) \frac{\nabla_{\theta} p_{\theta}(\tau)}{p_{\theta}(\tau)}r(\tau)d\tau=\int p_{\theta}(\tau) \nabla_{\theta} \log p_{\theta}(\tau)r(\tau)d\tau=E_{\tau\sim p_{\theta}(\tau)}[ \nabla_{\theta} \log p_{\theta}(\tau)r(\tau)]
∇θJ(θ)=∫pθ(τ)pθ(τ)∇θpθ(τ)r(τ)dτ=∫pθ(τ)∇θlogpθ(τ)r(τ)dτ=Eτ∼pθ(τ)[∇θlogpθ(τ)r(τ)]
所以策略梯度就表示成了:
E
τ
∼
p
θ
(
τ
)
[
∇
θ
log
p
θ
(
τ
)
r
(
τ
)
]
E_{\tau\sim p_{\theta}(\tau)}[ \nabla_{\theta} \log p_{\theta}(\tau)r(\tau)]
Eτ∼pθ(τ)[∇θlogpθ(τ)r(τ)],该式子还能进行进一步化简。这里的
p
θ
(
τ
)
=
p
θ
(
s
1
,
a
1
,
…
,
s
T
,
a
T
)
=
p
(
s
1
)
∏
t
=
1
T
π
θ
(
a
t
∣
s
t
)
p
(
s
t
+
1
∣
s
t
,
a
t
)
p_{\theta}(\tau)=p_{\theta}(s_1,a_1, \dots,s_T,a_T)=p(s_1)\prod_{t=1}^T\pi_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t)
pθ(τ)=pθ(s1,a1,…,sT,aT)=p(s1)∏t=1Tπθ(at∣st)p(st+1∣st,at),为了简写公式代码, 这里的
s
t
,
a
t
\bold s_t,\bold a_t
st,at均为向量。求对数之后,
log
p
θ
(
τ
)
=
log
p
(
s
1
)
+
∑
t
=
1
T
log
π
θ
(
a
t
∣
s
t
)
+
log
p
(
s
t
+
1
∣
s
t
,
a
t
)
\log p_{\theta}(\tau)=\log p(s_1)+\sum_{t=1}^T\log\pi_{\theta}(a_t|s_t)+\log p(s_{t+1}|s_t,a_t)
logpθ(τ)=logp(s1)+∑t=1Tlogπθ(at∣st)+logp(st+1∣st,at),所以求梯度之后,
∇
θ
log
p
θ
(
τ
)
=
∑
t
=
1
T
∇
θ
log
π
θ
(
a
t
∣
s
t
)
\nabla_{\theta}\log p_{\theta}(\tau)=\sum_{t=1}^T\nabla_{\theta}\log\pi_{\theta}(a_t|s_t)
∇θlogpθ(τ)=∑t=1T∇θlogπθ(at∣st),代入Policy gradient中就是:
∇
θ
J
(
θ
)
=
E
τ
∼
p
θ
(
τ
)
[
(
∑
t
=
1
T
∇
θ
log
π
θ
(
a
t
∣
s
t
)
)
(
∑
t
=
1
T
r
(
s
t
,
a
t
)
)
]
\nabla_{\theta} J(\theta)=E_{\tau\sim p_{\theta}(\tau)}\bigg[\Big(\sum_{t=1}^T\nabla_{\theta}\log\pi_{\theta}(a_t|s_t)\Big)\Big( \sum_{t=1}^Tr(\bold s_t, \bold a_t)\Big)\bigg]
∇θJ(θ)=Eτ∼pθ(τ)[(t=1∑T∇θlogπθ(at∣st))(t=1∑Tr(st,at))]
通过Monte Carlo采样进行近似就是:
∇
θ
J
(
θ
)
≈
1
N
∑
i
=
1
N
[
(
∑
t
=
1
T
∇
θ
log
π
θ
(
a
i
,
t
∣
s
i
,
t
)
)
(
∑
t
=
1
T
r
(
s
i
,
t
,
a
i
,
t
)
)
]
\nabla_{\theta} J(\theta)\approx \frac{1}{N}\sum_{i=1}^N\bigg[\Big(\sum_{t=1}^T\nabla_{\theta}\log\pi_{\theta}(\bold a_{i,t}|\bold s_{i,t})\Big)\Big( \sum_{t=1}^Tr(\bold s_{i,t}, \bold a_{i,t})\Big)\bigg]
∇θJ(θ)≈N1i=1∑N[(t=1∑T∇θlogπθ(ai,t∣si,t))(t=1∑Tr(si,t,ai,t))]
以上的公式推导是基于fully observed的假设,如果是Partially observed场景,尽管Markov property不满足了,但以上的公式仍可以改为以下形式,这里将状态
s
t
s_t
st改为观测
o
t
o_t
ot:
∇
θ
J
(
θ
)
≈
1
N
∑
i
=
1
N
[
(
∑
t
=
1
T
∇
θ
log
π
θ
(
a
i
,
t
∣
o
i
,
t
)
)
(
∑
t
=
1
T
r
(
s
i
,
t
,
a
i
,
t
)
)
]
\nabla_{\theta} J(\theta)\approx \frac{1}{N}\sum_{i=1}^N\bigg[\Big(\sum_{t=1}^T\nabla_{\theta}\log\pi_{\theta}(\bold a_{i,t}|\bold o_{i,t})\Big)\Big( \sum_{t=1}^Tr(\bold s_{i,t}, \bold a_{i,t})\Big)\bigg]
∇θJ(θ)≈N1i=1∑N[(t=1∑T∇θlogπθ(ai,t∣oi,t))(t=1∑Tr(si,t,ai,t))]
(能进行以上修改的原因就是智能体在交互中得到的奖赏值
r
(
s
,
a
)
r(s,a)
r(s,a)本身就是环境给出的,与环境是否部分可观没有关系)
1.2 REINFORCE算法
REINFORCE算法就是将上一节推导出来的策略梯度应用到强化学习的一般框架中,第一步是智能体通过某种任意策略与环境交互,得到采样数据,第二步是按照公式计算梯度,最后根据梯度上升算法更新参数。
一个具体的例子如下,这里的策略采用高斯分布,该分布的均值是某个神经网络的输出值,方差固定。
1.3 如何理解policy gradient公式
根据上文的策略梯度公式:
∇
θ
J
(
θ
)
=
E
τ
∼
p
θ
(
τ
)
[
(
∑
t
=
1
T
∇
θ
log
π
θ
(
a
t
∣
s
t
)
)
(
∑
t
=
1
T
r
(
s
t
,
a
t
)
)
]
\nabla_{\theta} J(\theta)=E_{\tau\sim p_{\theta}(\tau)}\bigg[\Big(\sum_{t=1}^T\nabla_{\theta}\log\pi_{\theta}(a_t|s_t)\Big)\Big( \sum_{t=1}^Tr(\bold s_t, \bold a_t)\Big)\bigg]
∇θJ(θ)=Eτ∼pθ(τ)[(t=1∑T∇θlogπθ(at∣st))(t=1∑Tr(st,at))]
非常直观解释就是,如果奖赏值
r
(
s
t
,
a
t
)
r(s_t,a_t)
r(st,at)值越大,则策略梯度就越大,梯度上升的方法中更新的就越多。
从另一个角度看,该表达式与深度学习中用交叉熵损失函数(极大似然方法)训练神经网络是类似的,只不过在梯度前加上了
R
(
τ
)
R(\tau)
R(τ)这个权值。交叉熵的表达式可以写成:
f
(
y
,
y
^
)
=
−
∑
i
=
1
N
y
i
^
log
y
i
f(y,\hat{y})=-\sum_{i=1}^N\hat{y_i}\log y_i
f(y,y^)=−∑i=1Nyi^logyi,这里的
y
i
^
\hat{y_i}
yi^为样本的真实标签,且一般来说标签都是独热表示,例如
[
1
,
0
,
0
,
…
,
0
]
[1,0,0,\dots,0]
[1,0,0,…,0]求交叉熵的梯度时与之无关,交叉熵的梯度为:
∇
f
(
y
,
y
^
)
=
−
∇
log
y
i
\nabla f(y,\hat{y})=-\nabla\log y_i
∇f(y,y^)=−∇logyi
1.4 Policy Gradient算法的高方差问题
策略梯度方法有一个重要的缺陷就是方差会很高(下文将系统说明Policy gradient存在的问题)。这里用一个简单例子进行说明,如下图:
这里横坐标代表不同的采样样本,绿色线段是采样得到的智能体与环境交互后得到的奖赏值;第二步向第一步得到的奖赏值上加一个常量,该常量并不会影响策略梯度(下文也有相关推导)。但这两次得到的策略的概率分布结果却相差很多,这就是策略梯度方法高方差问题的直观体现,而高方差带来的问题就是算法更新的过程不稳定。
1.5 减小方差的两种方法
有了上文对高方差的直观理解,下一步就是思考采取什么样的方法trick能解决这个问题,有以下两种方法。
Causality
第一个是进行causality的假设:未来时刻的策略并不能影响之前时刻的奖赏值。为了理解,我做了以下简图:
有了以上的假设,就可以对原有的策略梯度公式中的奖赏值部分进行修改,原先的公式中后两项是先求和再相乘,如下:
∇
θ
J
(
θ
)
≈
1
N
∑
i
=
1
N
[
(
∑
t
=
1
T
∇
θ
log
π
θ
(
a
i
,
t
∣
o
i
,
t
)
)
(
∑
t
=
1
T
r
(
s
i
,
t
,
a
i
,
t
)
)
]
\nabla_{\theta} J(\theta)\approx \frac{1}{N}\sum_{i=1}^N\bigg[\Big(\sum_{t=1}^T\nabla_{\theta}\log\pi_{\theta}(\bold a_{i,t}|\bold o_{i,t})\Big)\Big( \sum_{t=1}^Tr(\bold s_{i,t}, \bold a_{i,t})\Big)\bigg]
∇θJ(θ)≈N1i=1∑N[(t=1∑T∇θlogπθ(ai,t∣oi,t))(t=1∑Tr(si,t,ai,t))]
修改之后如下:
∇
θ
J
(
θ
)
≈
1
N
∑
i
=
1
N
[
∑
t
=
1
T
∇
θ
log
π
θ
(
a
i
,
t
∣
s
i
,
t
)
(
∑
t
′
=
t
T
r
(
s
i
,
t
′
,
a
i
,
t
′
)
)
]
\nabla_{\theta} J(\theta)\approx \frac{1}{N}\sum_{i=1}^N\bigg[\sum_{t=1}^T\nabla_{\theta}\log\pi_{\theta}(\bold a_{i,t}|\bold s_{i,t})\Big( \sum_{t'=t}^Tr(\bold s_{i,t'}, \bold a_{i,t'})\Big)\bigg]
∇θJ(θ)≈N1i=1∑N[t=1∑T∇θlogπθ(ai,t∣si,t)(t′=t∑Tr(si,t′,ai,t′))]
修改后的奖赏值这一部分又被称为"reward to go",这里要注意下标的变化。该量又可以表示为:
Q
^
(
i
,
t
)
\hat{Q}(i,t)
Q^(i,t),即
∇
θ
J
(
θ
)
≈
1
N
∑
i
=
1
N
[
∑
t
=
1
T
∇
θ
log
π
θ
(
a
i
,
t
∣
s
i
,
t
)
Q
^
(
i
,
t
)
]
\nabla_{\theta} J(\theta)\approx \frac{1}{N}\sum_{i=1}^N\bigg[\sum_{t=1}^T\nabla_{\theta}\log\pi_{\theta}(\bold a_{i,t}|\bold s_{i,t})\hat{Q}(i,t)\bigg]
∇θJ(θ)≈N1∑i=1N[∑t=1T∇θlogπθ(ai,t∣si,t)Q^(i,t)],直观理解就是只考虑从当前策略的时间往后推移的奖赏值,而不考虑之前的,我用以下的表格形象表示一下,表格中的每一行代表每一时刻下
∇
θ
log
π
θ
(
a
i
,
t
∣
s
i
,
t
)
\nabla_{\theta}\log\pi_{\theta}(\bold a_{i,t}|\bold s_{i,t})
∇θlogπθ(ai,t∣si,t)后的奖赏值乘积项:(这里只以四个时刻为例)
加入Baseline
第二种方法在奖赏值的基础上减去一个常数(均值),这个常数叫作baseline,公式化表示就是:
∇
θ
J
(
θ
)
=
E
[
∇
θ
log
p
θ
(
τ
)
(
r
(
τ
)
−
b
)
]
\nabla_{\theta} J(\theta)=E[ \nabla_{\theta}\log p_{\theta}(\tau)(r(\tau)-b)]
∇θJ(θ)=E[∇θlogpθ(τ)(r(τ)−b)]或
∇
θ
J
(
θ
)
=
1
N
∑
i
=
1
N
∇
θ
log
p
θ
(
τ
)
(
r
(
τ
)
−
b
)
\nabla_{\theta} J(\theta)=\frac{1}{N}\sum_{i=1}^N \nabla_{\theta}\log p_{\theta}(\tau)(r(\tau)-b)
∇θJ(θ)=N1i=1∑N∇θlogpθ(τ)(r(τ)−b)
最简单情况下的baseline取值是:
b
=
1
N
∑
i
=
1
N
r
(
τ
)
b=\frac{1}{N}\sum_{i=1}^Nr(\tau)
b=N1∑i=1Nr(τ)。
另一个需要考虑的问题是添加的baseline是否会影响原先策略梯度的accuracy,也就是是否会引入bias,以下是相关推导(只考虑多出来的一项):
可以看出baseline并不影响策略梯度的精确度。接下来就是分析如何选择最优的baseline以最小化策略梯度本身的方差(方差的计算公式
Var
[
x
]
=
E
[
x
2
]
−
(
E
[
x
]
)
2
\text{Var}[x]=E[x^2]-(E[x])^2
Var[x]=E[x2]−(E[x])2),策略梯度的公式:
∇
θ
J
(
θ
)
=
E
[
∇
θ
log
p
θ
(
τ
)
(
r
(
τ
)
−
b
)
]
\nabla_{\theta} J(\theta)=E[ \nabla_{\theta}\log p_{\theta}(\tau)(r(\tau)-b)]
∇θJ(θ)=E[∇θlogpθ(τ)(r(τ)−b)],以下是方差的公式表示:
Var
[
∇
θ
log
p
θ
(
τ
)
(
r
(
τ
)
−
b
)
]
=
E
[
(
∇
θ
log
p
θ
(
τ
)
(
r
(
τ
)
−
b
)
)
2
]
−
(
E
[
∇
θ
log
p
θ
(
τ
)
(
r
(
τ
)
−
b
)
]
)
2
=
E
[
(
∇
θ
log
p
θ
(
τ
)
(
r
(
τ
)
−
b
)
)
2
]
−
(
E
[
∇
θ
log
p
θ
(
τ
)
r
(
τ
)
]
)
2
\text{Var}[ \nabla_{\theta}\log p_{\theta}(\tau)(r(\tau)-b)]=E[ (\nabla_{\theta}\log p_{\theta}(\tau)(r(\tau)-b))^2]-(E[ \nabla_{\theta}\log p_{\theta}(\tau)(r(\tau)-b)])^2\\ =E[ (\nabla_{\theta}\log p_{\theta}(\tau)(r(\tau)-b))^2]-(E[ \nabla_{\theta}\log p_{\theta}(\tau)r(\tau)])^2
Var[∇θlogpθ(τ)(r(τ)−b)]=E[(∇θlogpθ(τ)(r(τ)−b))2]−(E[∇θlogpθ(τ)(r(τ)−b)])2=E[(∇θlogpθ(τ)(r(τ)−b))2]−(E[∇θlogpθ(τ)r(τ)])2
如果要使其最小,可以通过对其求导数并令其导数为0,从而求得最优的baseline的表达式,这里为了简化推导,令
g
(
τ
)
=
∇
θ
log
p
θ
g(\tau)= \nabla_{\theta}\log p_{\theta}
g(τ)=∇θlogpθ:
d
d
b
Var
[
g
(
τ
)
(
r
(
τ
)
−
b
)
]
=
d
d
b
E
[
(
g
(
τ
)
(
r
(
τ
)
−
b
)
)
2
]
−
d
d
b
(
E
[
g
(
τ
)
r
(
τ
)
]
)
2
=
d
d
b
(
E
[
(
g
(
τ
)
2
r
(
τ
)
2
]
−
2
E
[
g
(
τ
)
2
r
(
τ
)
b
]
+
E
[
b
2
g
(
τ
)
2
]
)
=
−
2
E
[
g
(
τ
)
2
r
(
τ
)
]
+
2
b
E
[
g
(
τ
)
2
]
=
0
\frac{d}{db}\text{Var}[g(\tau)(r(\tau)-b)]=\frac{d}{db}E[ (g(\tau)(r(\tau)-b))^2]-\frac{d}{db}(E[ g(\tau)r(\tau)])^2\\\\ =\frac{d}{db}(E[ (g(\tau)^2r(\tau)^2]-2E[g(\tau)^2r(\tau)b]+E[b^2g(\tau)^2])=-2E[g(\tau)^2r(\tau)]+2bE[g(\tau)^2]=0
dbdVar[g(τ)(r(τ)−b)]=dbdE[(g(τ)(r(τ)−b))2]−dbd(E[g(τ)r(τ)])2=dbd(E[(g(τ)2r(τ)2]−2E[g(τ)2r(τ)b]+E[b2g(τ)2])=−2E[g(τ)2r(τ)]+2bE[g(τ)2]=0
从而可以得到:
b
=
E
[
g
(
τ
)
2
r
(
τ
)
]
E
[
g
(
τ
)
2
]
b=\frac{E[g(\tau)^2r(\tau)]}{E[g(\tau)^2]}
b=E[g(τ)2]E[g(τ)2r(τ)]
1.6 Policy Gradient方法的实现技巧介绍
在实现PG算法的时候,并不需要实际code出策略梯度,只需要表示出损失函数,把求导过程交给Pytorch或tensorflow等其他自动求导包即可。
代码片段:
实现过程中的其他要点:
- 使用较大的batch size对参数进行更新
- 手动调整learning_rates很困难,可以使用ADAM优化器
1.7 Off-policy Policy Gradient
其实policy gradient的方法的高方差问题起源于该算法是on-policy的算法,由于每次采样必须使用新的策略,所以每次采样的数据在一次梯度上升之后就被扔掉了。其on-policy的本质也可以通过其公式
∇
θ
J
(
θ
)
=
E
τ
∼
p
θ
(
τ
)
[
∇
θ
log
p
θ
(
τ
)
(
r
(
τ
)
−
b
)
]
\nabla_{\theta} J(\theta)=E_{\tau\sim p_{\theta}(\tau)}[ \nabla_{\theta}\log p_{\theta}(\tau)(r(\tau)-b)]
∇θJ(θ)=Eτ∼pθ(τ)[∇θlogpθ(τ)(r(τ)−b)]中期望的下标看出。on-policy的一个问题就是采样效率非常差,尤其是用于机器人领域的时候。解决这个问题的一个方法就是使用importance sampling:
importance sampling让我们能够使用智能体的旧策略以更新策略梯度的值,假设旧策略下的数据分布为
p
ˉ
(
τ
)
\bar{p}(\tau)
pˉ(τ),则之前的objective和其梯度就都多了一项Important sampling ratio(这里做了以下写法上的改动,让
p
θ
(
τ
)
p_{\theta}(\tau)
pθ(τ)表示旧策略,
p
θ
′
(
τ
)
p_{\theta'}(\tau)
pθ′(τ)表示新策略),目标函数就变成了:
J
(
θ
′
)
=
E
τ
∼
p
θ
(
τ
)
[
p
θ
′
(
τ
)
p
θ
(
τ
)
r
(
τ
)
]
J(\theta')=E_{\tau\sim p_{\theta}(\tau)}\bigg[\frac{p_{\theta'}(\tau)}{p_{\theta}(\tau)}r(\tau)\bigg]
J(θ′)=Eτ∼pθ(τ)[pθ(τ)pθ′(τ)r(τ)]
其梯度为:
∇
θ
′
J
(
θ
′
)
=
E
τ
∼
p
θ
(
τ
)
[
∇
θ
′
p
θ
′
(
τ
)
p
θ
(
τ
)
r
(
τ
)
]
=
E
τ
∼
p
θ
(
τ
)
[
p
θ
′
(
τ
)
p
θ
(
τ
)
∇
θ
′
log
p
θ
′
(
τ
)
r
(
τ
)
]
\nabla_{\theta'} J(\theta')=E_{\tau\sim p_{\theta}(\tau)}\bigg[\frac{\nabla_{\theta'}p_{\theta'}(\tau)}{p_{\theta}(\tau)}r(\tau)\bigg]=E_{\tau\sim p_{\theta}(\tau)}\bigg[\frac{p_{\theta'}(\tau)}{p_{\theta}(\tau)}\nabla_{\theta'} \log p_{\theta'}(\tau)r(\tau)\bigg]
∇θ′J(θ′)=Eτ∼pθ(τ)[pθ(τ)∇θ′pθ′(τ)r(τ)]=Eτ∼pθ(τ)[pθ(τ)pθ′(τ)∇θ′logpθ′(τ)r(τ)]
由于这里的
p
θ
(
τ
)
=
p
(
s
1
)
∏
t
=
1
T
π
θ
(
a
t
∣
s
t
)
p
(
s
t
+
1
∣
s
t
,
a
t
)
p_{\theta}(\tau)=p(\bold s_1)\prod_{t=1}^T\pi_{\theta}(\bold a_t|\bold s_t)p(\bold s_{t+1}|\bold s_t, \bold a_t)
pθ(τ)=p(s1)∏t=1Tπθ(at∣st)p(st+1∣st,at),
p
θ
′
(
τ
)
=
p
(
s
1
)
∏
t
=
1
T
π
θ
′
(
a
t
∣
s
t
)
p
(
s
t
+
1
∣
s
t
,
a
t
)
p_{\theta'}(\tau)=p(\bold s_1)\prod_{t=1}^T\pi_{\theta'}(\bold a_t|\bold s_t)p(\bold s_{t+1}|\bold s_t, \bold a_t)
pθ′(τ)=p(s1)∏t=1Tπθ′(at∣st)p(st+1∣st,at),那么将上式进一步展开,就可以得到importance sampling ratio的表达式:
p
θ
(
τ
)
p
θ
′
(
τ
)
=
∏
t
=
1
T
π
θ
(
a
t
∣
s
t
)
∏
t
=
1
T
π
θ
′
(
a
t
∣
s
t
)
\frac{p_{\theta}(\tau)}{p_{\theta'}(\tau)}=\frac{\prod_{t=1}^T\pi_{\theta}(\bold a_t|\bold s_t)}{\prod_{t=1}^T\pi_{\theta'}(\bold a_t|\bold s_t)}
pθ′(τ)pθ(τ)=∏t=1Tπθ′(at∣st)∏t=1Tπθ(at∣st)
第一种情况是
θ
=
θ
′
\theta = \theta'
θ=θ′,则加入importance sampling之后依然可以用原先的策略梯度公式
∇
θ
J
(
θ
)
=
E
τ
∼
p
θ
(
τ
)
[
∇
θ
log
p
θ
(
τ
)
r
(
τ
)
]
\nabla_{\theta}J(\theta)=E_{\tau\sim p_{\theta}(\tau)}\bigg[\nabla_{\theta}\log p_{\theta}(\tau)r(\tau)\bigg]
∇θJ(θ)=Eτ∼pθ(τ)[∇θlogpθ(τ)r(τ)]进行近似。第二种情况是
θ
≠
θ
′
\theta \neq \theta'
θ=θ′的情况,这时将以上的ratio表达式再进一步带入策略梯度公式中,用Lecture 4(上一篇博客)中的结论把对数项和奖赏值项完全展开,可以得到:
∇
θ
′
J
(
θ
′
)
=
E
τ
∼
p
θ
(
τ
)
[
(
∏
t
=
1
T
π
θ
(
a
t
∣
s
t
)
∏
t
=
1
T
π
θ
′
(
a
t
∣
s
t
)
)
(
∑
t
=
1
T
∇
θ
′
log
π
θ
′
(
s
t
,
a
t
)
)
(
∑
t
=
1
T
r
(
s
t
,
a
t
)
)
]
\nabla_{\theta'} J(\theta')=E_{\tau\sim p_{\theta}(\tau)}\bigg[\bigg(\frac{\prod_{t=1}^T\pi_{\theta}(\bold a_t|\bold s_t)}{\prod_{t=1}^T\pi_{\theta'}(\bold a_t|\bold s_t)}\bigg) \bigg(\sum_{t=1}^T\nabla_{\theta'}\log\pi_{\theta'}(\bold s_t, \bold a_t)\bigg) \bigg(\sum_{t=1}^Tr(\bold s_t, \bold a_t) \bigg)\bigg]
∇θ′J(θ′)=Eτ∼pθ(τ)[(∏t=1Tπθ′(at∣st)∏t=1Tπθ(at∣st))(t=1∑T∇θ′logπθ′(st,at))(t=1∑Tr(st,at))]
如果再考虑causality的假设(原理同上文表格)的话,上面的公式又可以改写成如下:
∇
θ
′
J
(
θ
′
)
=
E
τ
∼
p
θ
(
τ
)
[
∑
t
=
1
T
∇
θ
′
log
π
θ
′
(
s
t
,
a
t
)
(
∏
t
′
=
1
t
π
θ
(
a
t
′
∣
s
t
′
)
π
θ
′
(
a
t
′
∣
s
t
′
)
)
(
∑
t
=
t
′
T
r
(
s
t
′
,
a
t
′
)
(
∏
t
′
′
=
1
t
′
π
θ
(
a
t
′
′
∣
s
t
′
′
)
π
θ
′
(
a
t
′
′
∣
s
t
′
′
)
)
)
]
\nabla_{\theta'} J(\theta')=E_{\tau\sim p_{\theta}(\tau)}\bigg[\sum_{t=1}^T\nabla_{\theta'}\log\pi_{\theta'}(\bold s_t, \bold a_t)\bigg(\prod_{t'=1}^t\frac{\pi_{\theta}(\bold a_{t'}|\bold s_{t'})}{\pi_{\theta'}(\bold a_{t'}|\bold s_{t'})}\bigg) \bigg(\sum_{t=t'}^Tr(\bold s_{t'}, \bold a_{t'}) \bigg(\prod_{t''=1}^{t'}\frac{\pi_{\theta}(\bold a_{t''}|\bold s_{t''})}{\pi_{\theta'}(\bold a_{t''}|\bold s_{t''})}\bigg)\bigg)\bigg]
∇θ′J(θ′)=Eτ∼pθ(τ)[t=1∑T∇θ′logπθ′(st,at)(t′=1∏tπθ′(at′∣st′)πθ(at′∣st′))(t=t′∑Tr(st′,at′)(t′′=1∏t′πθ′(at′′∣st′′)πθ(at′′∣st′′)))]
这里log后的连乘项代表未来的策略(或动作)并不能影响现在策略的参数,如果省略r之后的连乘项,我们就得到了Policy iteration的算法。
这里先简述一下off-policy policy gradient存在的问题。从上文的公式(不考虑causality)可以看出,这里存在策略函数的连乘项,由于策略函数的取值范围是 [ 0 , 1 ] [0,1] [0,1],那么多个策略值连乘之后,该项必定会指数级增长或减小,从而导致策略梯度的爆炸或消失(突然增加或减小),这也是为什么importance sampling的方法并不稳定的原因。
2. Advanced Policy Gradient
本文的第一部分对策略梯度的一般方法进行了介绍,第二部分则先系统地描述Policy gradient方法存在的缺陷,并根据这些缺陷进一步改进策略梯度的方法,这些方法的核心就是不断地近似求解。课程中只讲到了natural gradient的方法,至于之后基于其改进的TRPO和PPO并没有细讲。先在这里列出我在学习过程和写这篇文章中遇到的很有用的两篇博文:lecture 9的课程笔记,TRPO的讲解
2.1 一般Policy Gradient算法存在的问题
上文已经描述了一些PG算法的缺陷,这里总结一下:
- 由于PG算法是On-policy的,所以它的sample efficiency不好,而旨在解决该问题的importance sampling方法也不稳定。
- 第二个问题是PG中梯度上升所带来的问题,即PG算法在参数空间(parameter space)上的优化并不等同于在策略空间(policy space)的优化。换句话说,任何参数空间的微小变化都有可能导致策略函数取值的巨大差异,而且这个问题不仅仅是通过选择合适的step size就能解决的。(可以对照着
θ
←
θ
+
α
∇
θ
J
(
θ
)
\theta\leftarrow \theta+\alpha \nabla_{\theta}J(\theta)
θ←θ+α∇θJ(θ)来直观理解)
(这里参考了2017年CS285课程的课件)
那么这两个PG的局限性也就对后续算法的改进提出了进一步的要求:
- 如何在使用importance sampling的同时让其尽可能稳定?
- 参数空间上的更新与Policy space上的更新的差异一定存在,这种差异是否有上界或下界?
2.2 Policy Gradient与Policy Iteration的关系
这一部分的主要目的是通过公式推导探究如何使用policy gradient的方法最大化目标函数 J ( θ ) J( \theta) J(θ)的值,以下是推导过程:
这里的关键两步有:
- 将 J ( θ ) J(\theta) J(θ)表示为 E s ∼ s 0 [ V π θ ( s 0 ) ] = E τ ∼ p θ ′ ( τ ) [ V π θ ( s 0 ) ] E_{\bold s\sim \bold s_{0}}[V^{\pi_{\theta}}(\bold s_0)]=E_{\tau\sim p_{\theta'}(\tau)}[V^{\pi_{\theta}}(\bold s_0)] Es∼s0[Vπθ(s0)]=Eτ∼pθ′(τ)[Vπθ(s0)],这是因为目标值只与第一个状态有关,无论使用什么样的策略,初始状态的分布总是相同的,所以可以将期望的下标进行任意策略的替换。
- 将 V π θ ( s 0 ) V^{\pi_{\theta}}(\bold s_0) Vπθ(s0)写成 ∑ t = 0 T γ t V π θ ( s t ) − ∑ t = 1 T γ t V π θ ( s t ) = ∑ t = 0 T γ t V π θ ( s t ) − ∑ t = 0 T γ t V π θ ( s t + 1 ) \sum_{t=0}^T\gamma^t V^{\pi_{\theta}}(\bold s_t)-\sum_{t=1}^T\gamma^t V^{\pi_{\theta}}(\bold s_t)=\sum_{t=0}^T\gamma^t V^{\pi_{\theta}}(\bold s_t)-\sum_{t=0}^T\gamma^t V^{\pi_{\theta}}(\bold s_{t+1}) ∑t=0TγtVπθ(st)−∑t=1TγtVπθ(st)=∑t=0TγtVπθ(st)−∑t=0TγtVπθ(st+1)
以上的结论是为了便于之后确定优化目标。但是在此之前,需要先进一步分析一下该结论,把该结论中的轨迹项展开成基于状态和动作分别的概率分布:
可以看出,这里的动作分布可以利用Importance sampling的方法使用原来旧的策略,但是通过策略
π
θ
′
\pi_{\theta'}
πθ′得到的状态分布不能直接替换,那么接下来应该通过什么样的方法能够让这两个概率分布能够相互替换掉呢?
(这里的核心思路还是使用旧的策略
π
θ
\pi_{\theta}
πθ表示新旧策略下目标函数的差异
J
(
θ
′
)
−
J
(
θ
)
J(\theta')-J(\theta)
J(θ′)−J(θ))。
2.3 将Policy Gradient转化为带约束的优化问题
Monotonic Improvement Theory
本节继续承接上文提到的问题,也就是如何解决distribution mismatch of
p
θ
(
s
t
)
p_{\theta}(\bold s_t)
pθ(st) and
p
θ
′
(
s
t
)
p_{\theta'}(\bold s_t)
pθ′(st),即如何让这两个概率分布相互替换,并且探究这两个分布在什么假设下有一定的关系,如果推得这两个分布的关系,那么对应的目标函数之间的差值的下界又是什么。首先,结论如下:
从以上结论可以看出,当两个策略的概率分布接近的时候,由他们产生的状态的概率分布也就接近了。(这里用的衡量概率分布之间的距离是total variation divergence)
case 1: deterministic
先证明deterministic的情况,即
a
t
=
π
θ
(
s
t
)
\bold a_t =\pi_{\theta}(\bold s_t)
at=πθ(st),该情况下两策略接近的假设是:
π
θ
′
(
a
t
≠
π
θ
(
s
t
)
∣
s
t
)
≤
ϵ
\pi_{\theta'}(\bold a_t \neq \pi_{\theta}(\bold s_t)|\bold s_t)\le \epsilon
πθ′(at=πθ(st)∣st)≤ϵ
根据该假设,可以得到在
π
θ
′
\pi_{\theta'}
πθ′策略下的概率分布:第一项是两策略分布完全一样的时候得到的概率分布,后一项是两策略分布不一样的时候,并乘上某一个其他的状态概率分布
p
mistake
(
s
t
)
p_{\text{mistake}}(\bold s_t)
pmistake(st)。
有了以上结论就可以计算在两个不同策略下的状态概率分布,即
∣
p
θ
′
(
s
t
)
−
p
θ
(
s
t
)
∣
|p_{\theta'}(\bold s_t)-p_{\theta}(\bold s_t)|
∣pθ′(st)−pθ(st)∣,利用上式可以得到:
∣
p
θ
′
(
s
t
)
−
p
θ
(
s
t
)
∣
=
∣
(
1
−
ϵ
)
t
p
θ
(
s
t
)
+
(
1
−
(
1
−
ϵ
)
t
)
p
mistake
(
s
t
)
−
p
θ
(
s
t
)
∣
=
(
1
−
(
1
−
ϵ
)
t
)
∣
p
mistake
(
s
t
)
−
p
θ
(
s
t
)
∣
≤
2
(
1
−
(
1
−
ϵ
)
t
)
≤
2
ϵ
t
|p_{\theta'}(\bold s_t)-p_{\theta}(\bold s_t)|=|(1-\epsilon)^tp_{\theta}(\bold s_t)+(1-(1-\epsilon)^t)p_{\text{mistake}}(\bold s_t)-p_{\theta}(\bold s_t)| \\=(1-(1-\epsilon)^t)|p_{\text{mistake}}(\bold s_t)-p_{\theta}(\bold s_t)|\\ \leq2(1-(1-\epsilon)^t)\leq 2\epsilon t
∣pθ′(st)−pθ(st)∣=∣(1−ϵ)tpθ(st)+(1−(1−ϵ)t)pmistake(st)−pθ(st)∣=(1−(1−ϵ)t)∣pmistake(st)−pθ(st)∣≤2(1−(1−ϵ)t)≤2ϵt
这里用到的等式是:
(
1
−
ϵ
)
t
≥
1
−
ϵ
t
for
ϵ
∈
[
0
,
1
]
(1-\epsilon)^t\ge1-\epsilon t \quad\text{for}\ \epsilon\in[0,1]
(1−ϵ)t≥1−ϵtfor ϵ∈[0,1],第二点,这里的
∣
p
mistake
(
s
t
)
−
p
θ
(
s
t
)
∣
≤
2
|p_{\text{mistake}}(\bold s_t)-p_{\theta}(\bold s_t)|\le2
∣pmistake(st)−pθ(st)∣≤2表示的是两个概率分布完全相反的情况,以下为极端情况(假设离散随机变量)举例:
X=1 | X=2 | X=3 |
---|---|---|
p 1 ( X = 1 ) = 1 p_1(X=1)=1 p1(X=1)=1 | p 1 ( X = 2 ) = 0 p_1(X=2)=0 p1(X=2)=0 | p 1 ( X = 3 ) = 0 p_1(X=3)=0 p1(X=3)=0 |
和
X=1 | X=2 | X=3 |
---|---|---|
p 2 ( X = 1 ) = 0 p_2(X=1)=0 p2(X=1)=0 | p 2 ( X = 2 ) = 0 p_2(X=2)=0 p2(X=2)=0 | p 2 ( X = 3 ) = 1 p_2(X=3)=1 p2(X=3)=1 |
则 ∑ i = 1 3 ∣ p 1 ( X i ) − p 2 ( X i ) ∣ = 2 \sum_{i=1}^3|p_1(X_i)-p_2(X_i)|=2 ∑i=13∣p1(Xi)−p2(Xi)∣=2,该数值就是 2 D TV 2D_{\text{TV}} 2DTV,这里Total variation divergence的定义是: D TV = 1 2 ∑ i ∣ p i − q i ∣ D_{\text{TV}}=\frac{1}{2}\sum_{i}|p_i-q_i| DTV=21∑i∣pi−qi∣
case 2: stochastic
下一步将case 1扩展到stochastic情况,这时两个策略分布的假设是:
∣
π
θ
′
(
a
t
∣
s
t
)
−
π
θ
(
a
t
∣
s
t
)
∣
≤
ϵ
|\pi_{\theta'}(\bold a_t|\bold s_t)-\pi_{\theta}(\bold a_t|\bold s_t)|\le \epsilon
∣πθ′(at∣st)−πθ(at∣st)∣≤ϵ
推导过程如下:
这里按照我自己对该引理的理解解释一下,可以令其中的
p
X
(
x
)
=
π
θ
(
a
t
∣
s
t
)
p_X(x)=\pi_{\theta}(\bold a_t|\bold s_t)
pX(x)=πθ(at∣st),
p
Y
(
y
)
=
π
θ
′
(
a
t
′
∣
s
t
)
p_Y(y)=\pi_{\theta'}(\bold a_t'|\bold s_t)
pY(y)=πθ′(at′∣st),那么这里的
x
=
a
t
∣
s
t
x=\bold a_t|\bold s_t
x=at∣st,
y
=
a
t
′
∣
s
t
y=\bold a_t'|\bold s_t
y=at′∣st(这里可能不太严谨),这条引理的结论就能写成:
p
(
x
=
y
)
=
p
(
a
t
=
a
t
′
∣
s
t
)
=
1
−
ϵ
p(x=y)=p(\bold a_t=\bold a_t'|\bold s_t)=1-\epsilon
p(x=y)=p(at=at′∣st)=1−ϵ,这个结论说明两个策略采取同样的动作的概率是
1
−
ϵ
1-\epsilon
1−ϵ,那么后续的推导与之前deterministic中的推导一样,所以结论依然是上界为
2
ϵ
t
2\epsilon t
2ϵt。
得到以上两个分布的上界之后,就可以计算新策略下的目标函数的下界。这里再recap一下上述结论:
∣
p
θ
′
(
s
t
)
−
p
θ
(
s
t
)
∣
≤
2
ϵ
t
|p_{\theta'}(\bold s_t)-p_{\theta}(\bold s_t)|\le 2\epsilon t
∣pθ′(st)−pθ(st)∣≤2ϵt,这里先用简写形式进行推导:
f
(
s
t
)
=
E
a
t
∼
π
θ
(
a
t
∣
s
t
)
[
π
θ
′
(
a
t
∣
s
t
)
π
θ
(
a
t
∣
s
t
)
γ
t
A
π
θ
(
s
t
,
a
t
)
]
f(\bold s_t)=E_{\bold a_t\sim \pi_{\theta}(\bold a_t|\bold s_t)}[\frac{\pi_{\theta'}(\bold a_t|\bold s_t)}{\pi_{\theta}(\bold a_t|\bold s_t)}\gamma^tA^{\pi_{\theta}(\bold s_t,\bold a_t)}]
f(st)=Eat∼πθ(at∣st)[πθ(at∣st)πθ′(at∣st)γtAπθ(st,at)]
E
p
θ
′
(
s
t
)
[
f
(
s
t
)
]
=
∑
s
t
p
θ
′
(
s
t
)
f
(
s
t
)
=
∑
s
t
(
p
θ
(
s
t
)
−
(
p
θ
(
s
t
)
−
p
θ
′
(
s
t
)
)
)
f
(
s
t
)
≥
∑
s
t
p
θ
′
(
s
t
)
f
(
s
t
)
−
∣
p
θ
(
s
t
)
−
p
θ
′
(
s
t
)
∣
max
s
t
f
(
s
t
)
≥
E
p
θ
(
s
t
)
[
f
(
s
t
)
]
−
2
ϵ
t
max
s
t
f
(
s
t
)
E_{p_{\theta'}(\bold s_t)}[f(\bold s_t)]=\sum_{\bold s_t}p_{\theta'}(\bold s_t)f(\bold s_t)=\sum_{\bold s_t}(p_{\theta}(\bold s_t)-(p_{\theta}(\bold s_t)-p_{\theta'}(\bold s_t)))f(\bold s_t)\\ \ge \sum_{\bold s_t}p_{\theta'}(\bold s_t)f(\bold s_t)-|p_{\theta}(\bold s_t)-p_{\theta'}(\bold s_t)|\max_{\bold s_t}f(\bold s_t)\\ \ge E_{p_{\theta}(\bold s_t)}[f(\bold s_t)]-2\epsilon t\max_{\bold s_t}f(\bold s_t)
Epθ′(st)[f(st)]=st∑pθ′(st)f(st)=st∑(pθ(st)−(pθ(st)−pθ′(st)))f(st)≥st∑pθ′(st)f(st)−∣pθ(st)−pθ′(st)∣stmaxf(st)≥Epθ(st)[f(st)]−2ϵtstmaxf(st)
对上式放缩需要如下条件:
p
θ
(
s
t
)
−
p
θ
′
(
s
t
)
≤
∣
p
θ
(
s
t
)
−
p
θ
′
(
s
t
)
∣
p_{\theta}(\bold s_t)-p_{\theta'}(\bold s_t) \le|p_{\theta}(\bold s_t)-p_{\theta'}(\bold s_t)|
pθ(st)−pθ′(st)≤∣pθ(st)−pθ′(st)∣(两边之差小于第三边),则
p
θ
′
(
s
t
)
=
p
θ
(
s
t
)
−
(
p
θ
(
s
t
)
−
p
θ
′
(
s
t
)
)
≥
p
θ
(
s
t
)
−
∣
p
θ
(
s
t
)
−
p
θ
′
(
s
t
)
∣
p_{\theta'}(\bold s_t)=p_{\theta}(\bold s_t)-(p_{\theta}(\bold s_t)-p_{\theta'}(\bold s_t))\ge p_{\theta}(\bold s_t)-|p_{\theta}(\bold s_t)-p_{\theta'}(\bold s_t)|
pθ′(st)=pθ(st)−(pθ(st)−pθ′(st))≥pθ(st)−∣pθ(st)−pθ′(st)∣,即可得到上式。
将简写形式转化成原来的形式,可以得到:
从这里可以看出:
max
s
t
f
(
s
t
)
=
C
o
n
s
t
a
n
t
\max_{\bold s_t}f(\bold s_t)=Constant
maxstf(st)=Constant,那么应该怎么计算这个常数呢,见以下推导(这里假设是离散情况,即使用求和符号):
max
s
t
f
(
s
t
)
=
max
s
t
E
a
t
∼
π
θ
(
a
t
∣
s
t
)
[
π
θ
′
(
a
t
∣
s
t
)
π
θ
(
a
t
∣
s
t
)
γ
t
A
π
θ
(
s
t
,
a
t
)
]
=
max
s
t
∑
π
θ
(
a
t
∣
s
t
)
π
θ
′
(
a
t
∣
s
t
)
π
θ
(
a
t
∣
s
t
)
γ
t
A
π
θ
(
s
t
,
a
t
)
=
max
s
t
∑
π
θ
′
(
a
t
∣
s
t
)
γ
t
A
π
θ
(
s
t
,
a
t
)
=
∑
γ
t
max
s
t
(
π
θ
′
(
a
t
∣
s
t
)
A
π
θ
(
s
t
,
a
t
)
)
\max_{\bold s_t}f(\bold s_t)=\max_{\bold s_t}E_{\bold a_t\sim \pi_{\theta}(\bold a_t|\bold s_t)}\bigg[\frac{\pi_{\theta'}(\bold a_t|\bold s_t)}{\pi_{\theta}(\bold a_t|\bold s_t)}\gamma^tA^{\pi_{\theta}(\bold s_t,\bold a_t)}\bigg]=\max_{\bold s_t}\sum\pi_{\theta}(\bold a_t|\bold s_t)\frac{\pi_{\theta'}(\bold a_t|\bold s_t)}{\pi_{\theta}(\bold a_t|\bold s_t)}\gamma^tA^{\pi_{\theta}(\bold s_t,\bold a_t)}\\=\max_{\bold s_t}\sum\pi_{\theta'}(\bold a_t|\bold s_t)\gamma^tA^{\pi_{\theta}(\bold s_t,\bold a_t)}\\=\sum\gamma^t\max_{\bold s_t}(\pi_{\theta'}(\bold a_t|\bold s_t)A^{\pi_{\theta}(\bold s_t,\bold a_t)})
stmaxf(st)=stmaxEat∼πθ(at∣st)[πθ(at∣st)πθ′(at∣st)γtAπθ(st,at)]=stmax∑πθ(at∣st)πθ(at∣st)πθ′(at∣st)γtAπθ(st,at)=stmax∑πθ′(at∣st)γtAπθ(st,at)=∑γtstmax(πθ′(at∣st)Aπθ(st,at))
接下来需要推导
max
s
t
(
π
θ
′
(
a
t
∣
s
t
)
A
π
θ
(
s
t
,
a
t
)
)
\max_{\bold s_t}(\pi_{\theta'}(\bold a_t|\bold s_t)A^{\pi_{\theta}(\bold s_t,\bold a_t)})
maxst(πθ′(at∣st)Aπθ(st,at))具体是什么,第一项由于是概率分布,其最大值为1,那么下一步就是计算
max
s
t
A
π
θ
(
s
t
,
a
t
)
\max_{\bold s_t}A^{\pi_{\theta}}(\bold s_t,\bold a_t)
maxstAπθ(st,at),推导如下:
max
s
t
A
π
θ
(
s
t
,
a
t
)
=
max
s
t
[
Q
π
θ
(
s
t
,
a
t
)
−
V
π
θ
(
s
t
)
]
=
r
max
\max_{\bold s_t}A^{\pi_{\theta}}(\bold s_t,\bold a_t)=\max_{\bold s_t}[Q^{\pi_{\theta}}(\bold s_t,\bold a_t)-V^{\pi_{\theta}}(\bold s_t)]=r_{\text{max}}
stmaxAπθ(st,at)=stmax[Qπθ(st,at)−Vπθ(st)]=rmax
上式的推导是基于RL中的结论:
Q
π
θ
(
s
t
,
a
t
)
=
r
(
s
t
,
a
t
)
+
E
[
V
π
θ
(
s
t
)
]
Q^{\pi_{\theta}}(\bold s_t,\bold a_t)=r(\bold s_t,\bold a_t)+E[V^{\pi_{\theta}}(\bold s_t)]
Qπθ(st,at)=r(st,at)+E[Vπθ(st)],这里将
r
(
s
t
,
a
t
)
r(\bold s_t,\bold a_t)
r(st,at)记作
r
max
r_{\text{max}}
rmax。接下来重新回到之前的推导:
max
s
t
f
(
s
t
)
=
∑
γ
t
max
s
t
(
π
θ
′
(
a
t
∣
s
t
)
A
π
θ
(
s
t
,
a
t
)
)
=
∑
γ
t
r
max
=
r
max
1
−
γ
=
T
r
max
\max_{\bold s_t}f(\bold s_t)=\sum\gamma^t\max_{\bold s_t}(\pi_{\theta'}(\bold a_t|\bold s_t)A^{\pi_{\theta}(\bold s_t,\bold a_t)})=\sum\gamma^t r_{\text{max}}=\frac{r_{\text{max}}}{1-\gamma} =Tr_{\text{max}}
stmaxf(st)=∑γtstmax(πθ′(at∣st)Aπθ(st,at))=∑γtrmax=1−γrmax=Trmax
这里
T
=
1
/
γ
T=1/\gamma
T=1/γ。
(这里的求和其实应该对
a
t
a_t
at而不是
t
t
t,有些不对劲,先mark一下,也希望大家指点!)
Monotonic Improvement公式推导小结
推导了这么多公式,这里先总结一下现在关注的问题是什么,下图是优化目标:
上文的推导都是在为将之前最原始的公式转化成上述形式而服务。这里可以将目标写成更直观的形式,如下:(从而得到最大的目标函数值)
max
θ
′
J
(
θ
′
)
=
max
θ
′
(
J
(
θ
′
)
−
J
(
θ
)
)
\max_{\theta'}J(\theta')=\max_{\theta'}(J(\theta')-J(\theta))
θ′maxJ(θ′)=θ′max(J(θ′)−J(θ))
但是得到上述形式并不能将其转换为算法,还得做进一步的近似。(对,我个人理解的这节的重点就是近似近似再近似,直到方便我们求解为止)
将Policy Gradient转化成带约束的优化问题以及求解
上文的总结其实已经将PG转化为了带约束的优化问题,但是实际操作中并不能对其直接求解,因为
ϵ
\epsilon
ϵ的确切值并不能直接获取,还需要对该约束进一步化简,更方便的约束是KL散度(其公式是
D
KL
(
p
1
(
x
)
∣
∣
p
2
(
x
)
)
=
E
x
∼
p
1
(
x
)
[
log
p
1
(
x
)
p
2
(
x
)
]
D_{\text{KL}}(p_1(x)||p_2(x))=E_{x\sim p_1(x)}[\log\frac{p_1(x)}{p_2(x)}]
DKL(p1(x)∣∣p2(x))=Ex∼p1(x)[logp2(x)p1(x)]),而且KL散度与TV散度存在以下关系:
∣
π
θ
′
(
a
t
∣
s
t
)
−
π
θ
(
a
t
∣
s
t
)
∣
≤
1
2
D
KL
(
π
θ
′
(
a
t
∣
s
t
)
∣
∣
π
θ
(
a
t
∣
s
t
)
)
|\pi_{\theta'}(\bold a_t|\bold s_t)-\pi_{\theta}(\bold a_t|\bold s_t)|\le\frac{1}{2}\sqrt{D_{\text{KL}}(\pi_{\theta'}(\bold a_t|\bold s_t)||\pi_{\theta}(\bold a_t|\bold s_t))}
∣πθ′(at∣st)−πθ(at∣st)∣≤21DKL(πθ′(at∣st)∣∣πθ(at∣st)),所以以上的优化目标就转化为了:
有了优化目标,就可以对其求解,第一种最直观的解法就是Lagrangian multiplier方法(又称为dual gradient descent),如下:
这里目标函数依然十分复杂,一层层的期望运算符。所以接下来的方法Natural Gradient对其进行了进一步的近似计算,说明方法之前这里先简化表达出目标函数:
A
ˉ
(
θ
′
)
=
∑
t
E
s
t
∼
p
θ
(
s
t
)
[
E
a
t
∼
π
θ
(
a
t
∣
s
t
)
[
π
θ
′
(
a
t
∣
s
t
)
π
θ
(
a
t
∣
s
t
)
γ
t
A
π
θ
(
s
t
,
a
t
)
]
]
\bar{A}(\theta')=\sum_t E_{\bold s_t \sim p_{\theta}(\bold s_t)}\bigg[E_{\bold a_t\sim \pi_{\theta}(\bold a_t|\bold s_t)}\bigg[\frac{\pi_{\theta'}(\bold a_t|\bold s_t)}{\pi_{\theta}(\bold a_t|\bold s_t)}\gamma^tA^{\pi_{\theta}}(\bold s_t, \bold a_t)\bigg]\bigg]
Aˉ(θ′)=t∑Est∼pθ(st)[Eat∼πθ(at∣st)[πθ(at∣st)πθ′(at∣st)γtAπθ(st,at)]]
2.4 Natural Gradient算法及存在的问题
Natural Gradient算法
Natural Gradient算法的核心思想就是对上文的目标函数进行一阶Taylor展开近似,并对KL散度约束条件进行二阶近似。这也是为什么上文中要对目标函数进行一步简写。这里先一步步来,先考虑对目标函数在
θ
\theta
θ处进行一阶泰勒展开,可以得到:
A
ˉ
(
θ
′
)
≈
∇
θ
A
ˉ
(
θ
)
T
(
θ
′
−
θ
)
\bar{A}(\theta')\approx\nabla_{\theta}\bar{A}(\theta)^T(\theta'-\theta)
Aˉ(θ′)≈∇θAˉ(θ)T(θ′−θ),以上的优化目标就变成了:
这里的优化目标还是不够显而易见,所以展开一阶梯度项。这里要利用前文的公式:
A
ˉ
(
θ
′
)
=
∑
t
E
s
t
∼
p
θ
(
s
t
)
[
E
a
t
∼
π
θ
(
a
t
∣
s
t
)
[
π
θ
′
(
a
t
∣
s
t
)
π
θ
(
a
t
∣
s
t
)
γ
t
A
π
θ
(
s
t
,
a
t
)
]
]
\bar{A}(\theta')=\sum_t E_{\bold s_t \sim p_{\theta}(\bold s_t)}\bigg[E_{\bold a_t\sim \pi_{\theta}(\bold a_t|\bold s_t)}\bigg[\frac{\pi_{\theta'}(\bold a_t|\bold s_t)}{\pi_{\theta}(\bold a_t|\bold s_t)}\gamma^tA^{\pi_{\theta}}(\bold s_t, \bold a_t)\bigg]\bigg]
Aˉ(θ′)=t∑Est∼pθ(st)[Eat∼πθ(at∣st)[πθ(at∣st)πθ′(at∣st)γtAπθ(st,at)]]
这样可以计算出其梯度:
∇
θ
′
A
ˉ
(
θ
′
)
=
∑
t
E
s
t
∼
p
θ
(
s
t
)
[
E
a
t
∼
π
θ
(
a
t
∣
s
t
)
[
π
θ
′
(
a
t
∣
s
t
)
π
θ
(
a
t
∣
s
t
)
γ
t
∇
θ
′
log
π
θ
′
(
a
t
∣
s
t
)
A
π
θ
(
s
t
,
a
t
)
]
]
\nabla_{\theta'}\bar{A}(\theta')=\sum_t E_{\bold s_t \sim p_{\theta}(\bold s_t)}\bigg[E_{\bold a_t\sim \pi_{\theta}(\bold a_t|\bold s_t)}\bigg[\frac{\pi_{\theta'}(\bold a_t|\bold s_t)}{\pi_{\theta}(\bold a_t|\bold s_t)}\gamma^t\nabla_{\theta'}\log\pi_{\theta'}(\bold a_t|\bold s_t)A^{\pi_{\theta}}(\bold s_t, \bold a_t)\bigg]\bigg]
∇θ′Aˉ(θ′)=t∑Est∼pθ(st)[Eat∼πθ(at∣st)[πθ(at∣st)πθ′(at∣st)γt∇θ′logπθ′(at∣st)Aπθ(st,at)]]
注意上式用的都是
θ
′
\theta'
θ′,那么将
θ
′
\theta'
θ′都换成
θ
\theta
θ可以得到:
∇
θ
A
ˉ
(
θ
)
=
∑
t
E
s
t
∼
p
θ
(
s
t
)
[
E
a
t
∼
π
θ
(
a
t
∣
s
t
)
[
γ
t
∇
θ
log
π
θ
′
(
a
t
∣
s
t
)
A
π
θ
(
s
t
,
a
t
)
]
]
\nabla_{\theta}\bar{A}(\theta)=\sum_t E_{\bold s_t \sim p_{\theta}(\bold s_t)}\bigg[E_{\bold a_t\sim \pi_{\theta}(\bold a_t|\bold s_t)}\bigg[\gamma^t\nabla_{\theta}\log\pi_{\theta'}(\bold a_t|\bold s_t)A^{\pi_{\theta}}(\bold s_t, \bold a_t)\bigg]\bigg]
∇θAˉ(θ)=t∑Est∼pθ(st)[Eat∼πθ(at∣st)[γt∇θlogπθ′(at∣st)Aπθ(st,at)]]
上式是不是很熟悉,该公式就是最初的策略梯度
∇
θ
J
(
θ
)
\nabla_{\theta}J(\theta)
∇θJ(θ),所以又可以进一步改写优化目标,如下:
以上还是对目标函数做一阶近似,在natural gradient正式对约束条件二阶近似之前,先回到最初的策略梯度存在的参数空间和策略空间不等同的问题上。造成该问题的原因如下:
从中我们可以看出,我们之前在使用gradient ascent更新策略梯度的时候,其约束条件并不是策略空间上的KL散度,而是参数空间上的均方差,这也是该问题的本源所在,参数空间的一点点变化很可能导致策略空间,也就是策略
π
θ
\pi_{\theta}
πθ这一概率分布的巨大变化。
(之前听课的时候并不懂这里引入均方差的目的,多亏那两篇文章我才弄明白了。除此之外,这里的学习率我用拉格朗日乘子求出来与之不太一致,之后仔细查询一下 )
回归正题,NG算法对KL散度进行了二阶近似,具体使用了Fisher Information matrix, 公式如下:
D
KL
(
π
θ
′
∣
∣
π
θ
)
≈
1
2
(
θ
′
−
θ
)
T
F
(
θ
′
=
θ
)
,
F
=
E
π
θ
[
∇
θ
log
π
θ
(
a
∣
s
)
∇
θ
log
π
θ
(
a
∣
s
)
T
]
D_{\text{KL}}(\pi_{\theta'}||\pi_{\theta})\approx\frac{1}{2}(\theta'-\theta)^T\bold F(\theta'=\theta), \quad\quad \bold F=E_{\pi_{\theta}}[\nabla_{\theta}\log \pi_{\theta}(\bold a|\bold s)\nabla_{\theta}\log \pi_{\theta}(\bold a|\bold s)^T]
DKL(πθ′∣∣πθ)≈21(θ′−θ)TF(θ′=θ),F=Eπθ[∇θlogπθ(a∣s)∇θlogπθ(a∣s)T]
幸运的是,上述Fisher information matrix的近似计算可以通过采样的方式计算,这也是之后TRPO的内容之一,但这里的NG算法采用直接求解该矩阵的逆的方法,这也很显然导致了一些潜在的问题。
整个的优化目标及参数更新方式总结如下(来自课件):
Natural Gradient算法存在的问题
- 求解Hessian矩阵的逆计算复杂度太高。
- NPG采用的对约束进行二次近似(quadratic approximation),可能违反了KL散度的约束条件(?),这也就引出了经典方法TRPO。
2.5 TRPO (Trust Region Policy Optimization)
lecture 9并没有仔细讲TRPO,我自己现在也还没有完全搞明白TRPO的细节原理,只通过这篇博文——TRPO的讲解,了解了其论文的基本框架和方法思路,之后再来填坑吧 。