1. 算法的演进(PG to PPO)
2. PG
不同于参数化动作价值函数,PG选择参数化策略
π
(
a
∣
s
,
θ
)
\pi(a|s, \theta)
π(a∣s,θ)。
策略参数的学习方法都基于某种性能度量
J
(
θ
)
J(\theta)
J(θ)的梯度,这些梯度是标量
J
(
θ
)
J(\theta)
J(θ)对策略参数的梯度。这些方法的目标是最大化性能指标,所以他们的更新近似于
J
J
J的梯度上升
θ
t
+
1
=
θ
t
+
∇
J
(
θ
)
\theta_{t+1} = \theta_{t} + \nabla J(\boldsymbol{\theta})
θt+1=θt+∇J(θ)
在分幕式任务中,性能指标
J
(
θ
)
J(\theta)
J(θ)被定义为:在当前参数化策略下初始状态的价值函数;在持续性任务中,性能指标被定义为:平均收益。[我们的性能度量必须要符合这两个定义吗?像PPO的
J
(
θ
)
J(\theta)
J(θ)已经变得面目全非了,那它本质上是不是还归类为上面两类?那在实际问题中的性能指标呢?]
2.1 蒙特卡洛策略梯度
sutton书上的推导比较难懂,但更加严谨,李宏毅公开课上的推导容易理解。
主要思想:
采用蒙特卡洛法进行采样,用样本的均值来近似期望。
推导过程:
∇
J
(
θ
)
∝
∑
s
μ
(
s
)
∑
a
q
π
(
s
,
a
)
∇
π
(
a
∣
s
,
θ
)
(
策
略
梯
度
定
理
)
=
E
π
[
∑
a
q
π
(
S
t
,
a
)
∇
π
(
a
∣
S
t
,
θ
)
]
把
对
随
机
变
量
所
有
可
能
的
求
和
运
算
都
化
为
对
π
的
期
望
,
再
对
期
望
采
样
=
E
π
[
∑
a
π
(
a
∣
S
t
,
θ
)
q
π
(
S
t
,
a
)
∇
π
(
a
∣
S
t
,
θ
)
π
(
a
∣
S
t
,
θ
)
]
=
E
π
[
q
π
(
S
t
,
A
t
)
∇
π
(
A
t
∣
S
t
,
θ
)
π
(
A
t
∣
S
t
,
θ
)
]
(
用
采
样
A
t
∽
π
替
换
a
)
=
E
π
[
G
t
∇
π
(
A
t
∣
S
t
,
θ
)
π
(
A
t
∣
S
t
,
θ
)
]
≈
1
N
∑
n
=
1
N
⋅
∑
t
=
1
T
n
G
t
n
⋅
∇
⋅
log
π
(
A
t
n
∣
S
t
n
,
θ
)
(
?
?
?
)
\begin{aligned} \nabla J(\boldsymbol{\theta}) & \propto \sum_{s} \mu(s) \sum_{a} q_{\pi}(s, a) \nabla \pi(a \mid s, \boldsymbol{\theta}) (策略梯度定理)\\ &=\mathbb{E}_{\pi}\left[\sum_{a} q_{\pi}\left(S_{t}, a\right) \nabla \pi\left(a \mid S_{t}, \boldsymbol{\theta}\right)\right] \\ &把对随机变量 所有可能的求和运算都化为对\pi的期望,再对期望采样\\ &=\mathbb{E}_{\pi}\left[\sum_{a} \pi\left(a \mid S_{t}, \boldsymbol{\theta}\right) q_{\pi}\left(S_{t}, a\right) \frac{\nabla \pi\left(a \mid S_{t}, \boldsymbol{\theta}\right)}{\pi\left(a \mid S_{t}, \boldsymbol{\theta}\right)}\right] \\ &=\mathbb{E}_{\pi}\left[q_{\pi}\left(S_{t}, A_{t}\right) \frac{\nabla \pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)}{\pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)}\right] (用采样A_t \backsim \pi替换a)\\ &=\mathbb{E}_{\pi}\left[G_{t} \frac{\nabla \pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)}{\pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)}\right] \\ &\approx \frac{1}{N} \sum_{n=1}^{N} \cdot \sum_{t=1}^{T_{n}} G_{t}^{n} \cdot \nabla \cdot \log \pi\left(A_{t}^{n} \mid S_{t}^{n}, \boldsymbol{\theta}\right)(??? ) \end{aligned}
∇J(θ)∝s∑μ(s)a∑qπ(s,a)∇π(a∣s,θ)(策略梯度定理)=Eπ[a∑qπ(St,a)∇π(a∣St,θ)]把对随机变量所有可能的求和运算都化为对π的期望,再对期望采样=Eπ[a∑π(a∣St,θ)qπ(St,a)π(a∣St,θ)∇π(a∣St,θ)]=Eπ[qπ(St,At)π(At∣St,θ)∇π(At∣St,θ)](用采样At∽π替换a)=Eπ[Gtπ(At∣St,θ)∇π(At∣St,θ)]≈N1n=1∑N⋅t=1∑TnGtn⋅∇⋅logπ(Atn∣Stn,θ)(???)
G
t
G_t
Gt是通常的回报。括号中的量可以通过每步的采样计算得到,它的期望等于真实的梯度。使用这个梯度实现的随机梯度上升算法,就可以得到下式
θ
t
+
1
=
θ
t
+
α
G
t
∇
π
(
A
t
∣
S
t
,
θ
)
π
(
A
t
∣
S
t
,
θ
)
\begin{aligned} \theta_{t+1} = \theta_{t} +\alpha G_{t} \frac{\nabla \pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)}{\pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)} \end{aligned}
θt+1=θt+αGtπ(At∣St,θ)∇π(At∣St,θ)
2.2 带基线的蒙特卡洛策略梯度
引入基线
b
(
S
t
)
b(S_t)
b(St)
∇
J
(
θ
)
=
E
π
[
(
G
t
−
b
(
S
t
)
)
∇
π
(
A
t
∣
S
t
,
θ
)
π
(
A
t
∣
S
t
,
θ
)
]
=
E
π
θ
[
A
^
t
⋅
∇
log
π
(
A
t
∣
S
t
,
θ
)
]
\begin{aligned} \nabla J(\boldsymbol{\theta}) &=\mathbb{E}_{\pi}\left[(G_{t}-b(S_t)) \frac{\nabla \pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)}{\pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)}\right] \\ &= \mathbb{E}_{\pi_{\theta}}\left[\hat{A}_{t} \cdot \nabla \log \pi\left(A_{t} \mid S_{t}, \boldsymbol{\theta}\right)\right] \end{aligned}
∇J(θ)=Eπ[(Gt−b(St))π(At∣St,θ)∇π(At∣St,θ)]=Eπθ[A^t⋅∇logπ(At∣St,θ)]
其中,
A
^
t
\hat{A}_{t}
A^t叫做优势函数,反映了在状态
S
t
S_t
St下采取动作
A
t
A_t
At相比于其他动作有多好。
加入这个基线不会使更新值的期望发生变化,但会对方差会有很大的影响,对马尔科夫决策过程,这个基线应该根据状态的变化而变化,状态价值函数
v
^
(
S
t
,
w
)
\hat{v}(S_t, \boldsymbol{w})
v^(St,w)就是一个比较自然能想到的基线。[如何理解这里的方差?跟off-policy版本的中的方差有何异同?]
直观理解:
对于不带基线版本的REINFORCE,如果采样均匀那没啥问题,但是一旦采样不均匀(如上图的下半部分所示)就会导致没有被采样到的动作被选择的概率下降,尽管这个动作是好的。通过引入基线,那变化大的就是正值,变化小的就是负值,这样一综合没有被采样的动作基本保持不变。
3. off-policy PG
概念: on-policy and off-policy
on-policy: 用于生成采样数据序列的策略和用于实际决策的待评估和改进的策略是相同的
off-policy: 用于评估或者改进的策略与生成采样数据的策略是不同的,即生成的数据“离开”了待优化的策略所决定的决策序列轨迹。
问题引入:
之前的on-policy PG,每一次更新
θ
\theta
θ后,都必须从新的
π
θ
\pi_{\theta}
πθ重新采样,这就导致大部分时间花在数据采样上,学习效率低下。
解决办法:
通过重要度采样(important sampling)来将on-policy PG转变为 off-policy PG,使之前采样的数据能够被重复使用。
方法过程:
重要度采样原理
重要度采样是一种在给定来自其他分布的样本的条件下,估计某种分布的期望值的通用方法。
根据采样定理我们有 E x ∼ p [ f ( x ) ] ≈ 1 N ∑ i = 1 N f ( x i ) E_{x \sim p}[f(x)] \approx \frac{1}{N} \sum_{i=1}^{N} f\left(x^{i}\right) Ex∼p[f(x)]≈N1∑i=1Nf(xi) ,假如原函数 f ( x ) f(x) f(x)也许本身就是定义在一个分布之上的,我们定义这个分布为 p ( x ) p(x) p(x),我们无法直接从 p ( x ) p(x) p(x)上进行采样,所以另辟蹊径重新找到一个更加简明的分布 q ( x ) q(x) q(x),从它进行取样,希望间接地求出 f ( x ) f(x) f(x)在分布 p ( x ) p(x) p(x)下的期望。
推导如下 E x ∼ p [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x \sim p}[f(x)]=\int f(x) p(x) d x=\int f(x) \frac{p(x)}{q(x)} q(x) d x=E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] Ex∼p[f(x)]=∫f(x)p(x)dx=∫f(x)q(x)p(x)q(x)dx=Ex∼q[f(x)q(x)p(x)]这样我们就能从分布q中采样,然后用 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)来修正,间接求出 f ( x ) f(x) f(x)在分布 p ( x ) p(x) p(x)下的期望。
重要性采样有一些问题,我们将在PPO那部分进行介绍。
借助重要度采样将PG转变为off-policy PG,过程如下:
∇
J
(
θ
)
=
E
π
θ
[
A
^
t
θ
⋅
∇
log
π
(
A
t
∣
S
t
,
θ
)
]
=
E
π
θ
′
[
π
(
A
t
∣
S
t
,
θ
)
π
(
A
t
∣
S
t
,
θ
′
)
⋅
A
^
t
θ
′
⋅
∇
log
π
(
A
t
∣
S
t
,
θ
)
]
\begin{aligned} \nabla J(\theta) &=E_{\pi_{\theta}}\left[\hat{A}_{t}^{\theta} \cdot \nabla \log \pi\left(A_{t} \mid S_{t}, \theta\right)\right] \\ &=E_{\pi_{\theta^{\prime}}}\left[\frac{\pi\left(A_{t} \mid S_{t}, \theta\right)}{\pi\left(A_{t} \mid S_{t}, \theta^{\prime}\right)} \cdot \hat{A}_{t}^{\theta^{\prime}} \cdot \nabla \log \pi\left(A_{t} \mid S_{t}, \theta\right)\right] \end{aligned}
∇J(θ)=Eπθ[A^tθ⋅∇logπ(At∣St,θ)]=Eπθ′[π(At∣St,θ′)π(At∣St,θ)⋅A^tθ′⋅∇logπ(At∣St,θ)]
借助变换
∇
f
(
x
)
=
f
(
x
)
⋅
∇
log
f
(
x
)
\nabla f(x) =f(x) \cdot \nabla \log f(x)
∇f(x)=f(x)⋅∇logf(x),可得目标函数:
J
θ
′
(
θ
)
=
E
π
θ
′
[
π
[
A
t
∣
S
t
,
θ
]
π
[
A
t
∣
S
t
,
θ
′
]
⋅
A
^
t
θ
′
]
\begin{aligned} J^{\theta^{\prime}}(\theta) &=E_{\pi_{\theta^{\prime}}}\left[\frac{\pi\left[A_{t} \mid S_t, \theta\right]}{\pi\left[A_{t} \mid S_t, \theta^{\prime}\right]} \cdot \hat{A}_{t}^{\theta^{\prime}}\right] \end{aligned}
Jθ′(θ)=Eπθ′[π[At∣St,θ′]π[At∣St,θ]⋅A^tθ′]
4. PPO
分类:
Model-free、Off-policy、Continuous State Space、Continuous Action Space、Support High-dim Input
问题引入:
前面介绍important sampling 时,off-policy PG引入important sampling会带来一些问题,如果
p
(
x
)
p(x)
p(x)与
q
(
x
)
q(x)
q(x)相差太大会导致方差过大。
从前面的推导我们有: E x ∼ p [ f ( x ) ] = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x \sim p}[f(x)]=E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] Ex∼p[f(x)]=Ex∼q[f(x)q(x)p(x)],它们的方差 Var x ∼ p [ f ( x ) ] \operatorname{Var}_{x \sim p}[f(x)] Varx∼p[f(x)] 与 Var x ∼ q [ f ( x ) p ( x ) q ( x ) ] \operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] Varx∼q[f(x)q(x)p(x)]关系如何呢?推导如下:
Var x ∼ p [ f ( x ) ] = E x ∼ p [ f ( x ) 2 ] − ( E x ∼ p [ f ( x ) ] ) 2 \operatorname{Var}_{x \sim p}[f(x)]=E_{x \sim p}\left[f(x)^{2}\right]-\left(E_{x \sim p}[f(x)]\right)^{2} Varx∼p[f(x)]=Ex∼p[f(x)2]−(Ex∼p[f(x)])2
Var x ∼ q [ f ( x ) p ( x ) q ( x ) ] = E x ∼ q [ ( f ( x ) p ( x ) q ( x ) ) 2 ] − ( E x ∼ q [ f ( x ) p ( x ) q ( x ) ] ) 2 = E x ∼ p [ f ( x ) 2 p ( x ) q ( x ) ) − ( E x ∼ p [ f ( x ) ] ) 2 \begin{aligned} \operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] &=E_{x \sim q}\left[\left(f(x) \frac{p(x)}{q(x)}\right)^{2}\right]-\left(E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]\right)^{2} \\ &=E_{x \sim p}\left[f(x)^{2} \frac{p(x)}{q(x)}\right)-\left(E_{x \sim p}[f(x)]\right)^{2} \end{aligned} Varx∼q[f(x)q(x)p(x)]=Ex∼q[(f(x)q(x)p(x))2]−(Ex∼q[f(x)q(x)p(x)])2=Ex∼p[f(x)2q(x)p(x))−(Ex∼p[f(x)])2
上面两个方差的差距主要在第二式多了一个 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x),若 p ( x ) p(x) p(x)和 q ( x ) q(x) q(x)的差距过大,会导致两个方差相差太大,训练的结果就会相差很大。
解决思路:
从上面的分析可以看出,要想规避这个问题,不让它们的方差相差太多,即分布
p
(
x
)
p(x)
p(x)和
q
(
x
)
q(x)
q(x)尽可能相近。所以我们引入约束,来实现这一目标。
方法过程:
K-L散度
Kullback-Leibler Divergence,即K-L散度,是一种量化两种概率分布P和Q之间差异的方式,又叫相对熵。在概率学和统计学上,我们经常会使用一种更简单的、近似的分布来替代观察数据或太复杂的分布。K-L散度能帮助我们度量使用一个分布来近似另一个分布时所损失的信息量。
KL 散度介绍
KL散度(英文)
- TRPO
J T R P O θ ′ ( θ ) = E π θ ′ [ π [ A t ∣ S t , θ ] π [ A t ∣ S t , θ ′ ] ⋅ A ^ t θ ′ ] K L ( θ , θ ′ ) < δ \begin{aligned} J_{TRPO}^{\theta^{\prime}}(\theta) &=E_{\pi_{\theta^{\prime}}}\left[\frac{\pi\left[A_{t} \mid S_t, \theta\right]}{\pi\left[A_{t} \mid S_t, \theta^{\prime}\right]} \cdot \hat{A}_{t}^{\theta^{\prime}}\right] K L\left(\theta, \theta^{\prime}\right)<\delta \end{aligned} JTRPOθ′(θ)=Eπθ′[π[At∣St,θ′]π[At∣St,θ]⋅A^tθ′]KL(θ,θ′)<δ
该方法将KL Divergence 作为约束放在更新外面
- PPO(KL penalty)
J
P
P
O
θ
k
(
θ
)
=
J
θ
k
(
θ
)
−
β
K
L
(
θ
,
θ
k
)
J
θ
k
(
θ
)
=
E
π
θ
k
[
π
[
A
t
∣
S
t
,
θ
]
π
[
A
t
∣
S
t
,
θ
k
]
⋅
A
^
t
θ
k
]
\begin{aligned} J_{P P O}^{\theta^{k}}(\theta) &=J^{\theta^{k}}(\theta)-\beta K L\left(\theta, \theta^{k}\right) \\ J^{\theta^{k}}(\theta) &=E_{\pi_{\theta^{k}}}\left[\frac{\pi\left[A_{t} \mid S_t, \theta\right]}{\pi\left[A_{t} \mid S_t, \theta^{k}\right]} \cdot \hat{A}_{t}^{\theta^{k}}\right] \end{aligned}
JPPOθk(θ)Jθk(θ)=Jθk(θ)−βKL(θ,θk)=Eπθk[π[At∣St,θk]π[At∣St,θ]⋅A^tθk]
该方法将KL放入更新公式中,作为惩罚项。超参数
β
\beta
β调整按照下面的方法:
If
K
L
(
θ
,
θ
k
)
>
K
L
max
,
K L\left(\theta, \theta^{k}\right)>K L_{\max },
KL(θ,θk)>KLmax, increase
β
\beta
β
If
K
L
(
θ
,
θ
k
)
<
K
L
min
,
K L\left(\theta, \theta^{k}\right)<K L_{\min },
KL(θ,θk)<KLmin, decrease
β
\beta
β
李宏毅说: K L ( θ , θ k ) K L\left(\theta, \theta^{k}\right) KL(θ,θk)不是参数上的差距,是action上的差距[如何理解这句话?]
- PPO(Clipping)(推荐方法)
J P P O 2 θ k ( θ ) ≈ ∑ ( S t , A t ) min ( π θ ( A t ∣ S t ) π θ k ( A t ∣ S t ) A ^ θ k , clip ( π θ ( A t ∣ S t ) π θ k ( A t ∣ S t ) , 1 − ε , 1 + ε ) A ^ θ k ) \begin{aligned} J_{P P O 2}^{\theta^{k}}(\theta) \approx \sum_{\left(S_{t}, A_{t}\right)} \min (& \frac{\pi_{\theta}\left(A_{t} \mid S_{t}\right)}{\pi_{\theta^{k}}\left(A_{t} \mid S_{t}\right)} \hat{A}^{\theta^{k}}, \\ &\left.\operatorname{clip}\left(\frac{\pi_{\theta}\left(A_{t} \mid S_{t}\right)}{\pi_{\theta^{k}}\left(A_{t} \mid S_{t}\right)}, 1-\varepsilon, 1+\varepsilon\right) \hat{A}^{\theta^{k}}\right) \end{aligned} JPPO2θk(θ)≈(St,At)∑min(πθk(At∣St)πθ(At∣St)A^θk,clip(πθk(At∣St)πθ(At∣St),1−ε,1+ε)A^θk)
通过该方法可以将 π θ ( A t ∣ S t ) π θ k ( A t ∣ S t ) \frac{\pi_{\theta}\left(A_{t} \mid S_{t}\right)}{\pi_{\theta^{k}}\left(A_{t} \mid S_{t}\right)} πθk(At∣St)πθ(At∣St)的变化限制在 [ 1 − ε , 1 + ε ] [1-\varepsilon, 1+\varepsilon] [1−ε,1+ε]之间,不让它们之间相差太大,并且可以自动调整。见下图
PPO的问题或改进点:
???
5. 算法实现
PG:
PPO:
我的github
调参技巧:
强化学习的调参技巧与编程技巧
深度强化学习落地方法论(7)—— 训练篇***
深度强化学习落地方法论(6)—— 回报函数篇
深度强化学习调参技巧:以D3QN、TD3、PPO、SAC算法为例
算法选择:
如何选择深度强化学习算法?MuZero/SAC/PPO/TD3/DDPG/DQN/等
6.参考
原创博文,未经许可严禁转载!