Policy Gradient 策略梯度优化
参考李宏毅老师的课程
强化学习有三个基础的组成部分 (坦克大战为例)
- actor (坦克控制器)
- environments (游戏界面交互)
- reward function (击败敌方坦克获得奖励)
env 和 reward function 是无法控制的
调整actor中的policy,来获得最大的reward (控制坦克达成最大击杀)
policy决定actor的行为, policy部分就是一个network(即下图的Actor就是一个网络,可以通过网络来算出 a i a_i ai )
reward不是标量(scalar)而是随机变量(random variable)
Trajectory τ = { s 1 , a 1 , s 2 , a 2 , … , s T , a T } \text{Trajectory } \tau = \{s_1, a_1, s_2, a_2, \ldots, s_T, a_T\} Trajectory τ={s1,a1,s2,a2,…,sT,aT}
p θ ( τ ) = p ( s 1 ) p θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) p θ ( a 2 ∣ s 2 ) p ( s 3 ∣ s 2 , a 2 ) … = p ( s 1 ) ∏ t = 1 T p θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) p_\theta(\tau) = p(s_1)p_\theta(a_1|s_1)p(s_2|s_1,a_1)p_\theta(a_2|s_2)p(s_3|s_2,a_2)\dots \\ = p(s_1)\prod_{t=1}^T p_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t) pθ(τ)=p(s1)pθ(a1∣s1)p(s2∣s1,a1)pθ(a2∣s2)p(s3∣s2,a2)…=p(s1)t=1∏Tpθ(at∣st)p(st+1∣st,at)
轨迹 τ \tau τ 是走完整个行动的流程;
actor的参数给定为 θ \theta θ ,在参数确定的情况下,走完轨迹 τ \tau τ 的概率是 p θ ( τ ) p_\theta(\tau) pθ(τ)
R
ˉ
θ
=
∑
τ
R
(
τ
)
p
θ
(
τ
)
=
E
τ
∼
p
θ
[
R
(
τ
)
]
\bar{R}_\theta = \sum_{\tau} R(\tau)p_\theta(\tau) = E_{\tau \sim p_\theta} [R(\tau)]
Rˉθ=τ∑R(τ)pθ(τ)=Eτ∼pθ[R(τ)]
我们希望更新actor中的参数
θ
\theta
θ ,来使得获得的奖励函数
R
(
τ
)
R(\tau)
R(τ) 的均值(也就是期望)越大越好
如何求
R
ˉ
θ
\bar{R}_\theta
Rˉθ 的梯度
∇
R
ˉ
θ
\nabla\bar{R}_\theta
∇Rˉθ ,来对actor中的参数
θ
\theta
θ 进行策略梯度更新?
η
\eta
η 为学习率
θ
←
θ
+
η
∇
R
ˉ
θ
\theta \leftarrow \theta + \eta \nabla \bar{R}_\theta
θ←θ+η∇Rˉθ
由
∇
f
(
x
)
=
f
(
x
)
∇
log
f
(
x
)
\nabla f(x) = f(x) \nabla \log f(x)
∇f(x)=f(x)∇logf(x) 可以推出下述公式
∇
R
ˉ
θ
=
∑
τ
R
(
τ
)
∇
p
θ
(
τ
)
=
∑
τ
R
(
τ
)
p
θ
(
τ
)
∇
p
θ
(
τ
)
p
θ
(
τ
)
=
∑
τ
R
(
τ
)
p
θ
(
τ
)
∇
log
p
θ
(
τ
)
=
E
τ
∼
p
θ
(
τ
)
[
R
(
τ
)
∇
log
p
θ
(
τ
)
]
≈
1
N
∑
n
=
1
N
R
(
τ
n
)
∇
log
p
θ
(
τ
n
)
=
1
N
∑
n
=
1
N
∑
t
=
1
T
n
R
(
τ
n
)
∇
log
p
θ
(
a
t
n
∣
s
t
n
)
\nabla \bar{R}_\theta = \sum_{\tau} R(\tau) \nabla p_\theta(\tau) = \sum_{\tau} R(\tau) p_\theta(\tau) \frac{\nabla p_\theta(\tau)}{p_\theta(\tau)}= \sum_{\tau} R(\tau) p_\theta(\tau) \nabla \log p_\theta(\tau)\\= E_{\tau \sim p_\theta(\tau)}[R(\tau) \nabla \log p_\theta(\tau)] \approx \frac{1}{N} \sum_{n=1}^N R(\tau^n) \nabla \log p_\theta(\tau^n) \\ = \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n) \nabla \log p_\theta(a_t^n | s_t^n)
∇Rˉθ=τ∑R(τ)∇pθ(τ)=τ∑R(τ)pθ(τ)pθ(τ)∇pθ(τ)=τ∑R(τ)pθ(τ)∇logpθ(τ)=Eτ∼pθ(τ)[R(τ)∇logpθ(τ)]≈N1n=1∑NR(τn)∇logpθ(τn)=N1n=1∑Nt=1∑TnR(τn)∇logpθ(atn∣stn)
∇ f ( x ) = f ( x ) ∇ log f ( x ) \nabla f(x) = f(x) \nabla \log f(x) ∇f(x)=f(x)∇logf(x) 记住就行,是一个定理公式
R ( τ ) R(\tau) R(τ) 不要求可微,即使是黑盒也可以
表示为:
∇
R
ˉ
θ
=
E
τ
∼
p
θ
(
τ
)
[
R
(
τ
)
∇
log
p
θ
(
τ
)
]
\nabla \bar{R}_\theta =E_{\tau \sim p_\theta(\tau)}[R(\tau) \nabla \log p_\theta(\tau)]
∇Rˉθ=Eτ∼pθ(τ)[R(τ)∇logpθ(τ)]
上图表示我们处理策略梯度时的流程,通过采样一批 τ i \tau^i τi 来作为一个 θ \theta θ 更新的数据集,在更新完参数 θ \theta θ 后,再重新采样一批 τ i \tau^i τi 继续更新;每次采样的 τ \tau τ 只使用一次。因为其一直在与环境交互(即采样的 τ \tau τ 都来自环境),所以也被称为 on-policy gradient
需要注意的是, R ( τ n ) R(\tau^n) R(τn) 在每一步计算梯度时都要作为一个权重被乘上去。
Tip 1
需要注意的是,我们在实际情况下采样并不能将所有情况都囊括其中,以下图为例,我们可能没有采样到 a 的情况,这会导致在梯度更新后,actor 选择 a 的概率降低;但实际上选择 a 也会提高 reward ,只是我们没有采样到…
所以我们会优化策略梯度函数:
∇
R
ˉ
θ
≈
1
N
∑
n
=
1
N
∑
t
=
1
T
n
(
R
(
τ
n
)
−
b
)
∇
log
p
θ
(
a
t
n
∣
s
t
n
)
where
b
≈
E
[
R
(
τ
)
]
\nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} (R(\tau^n) - b) \nabla \log p_\theta(a_t^n | s_t^n) \quad \text{where } b \approx E[R(\tau)]
∇Rˉθ≈N1n=1∑Nt=1∑Tn(R(τn)−b)∇logpθ(atn∣stn)where b≈E[R(τ)]
加入一个bias(b)来平衡这个问题,如果奖励不够,策略梯度就是负数。
Tip 2
根据公式 ∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( R ( τ n ) − b ) ∇ log p θ ( a t n ∣ s t n ) \nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} (R(\tau^n) - b) \nabla \log p_\theta(a_t^n | s_t^n) ∇Rˉθ≈N1∑n=1N∑t=1Tn(R(τn)−b)∇logpθ(atn∣stn) 可以知道, R ( τ n ) − b R(\tau^n) - b R(τn)−b 会作为权重乘在每一次的 log p θ ( a t n ∣ s t n ) \log p_\theta(a_t^n | s_t^n) logpθ(atn∣stn) 中。但以下图的两个例子来说:
- 左边的 R = +3 说明最终的奖励是 +3 ,但是第一次的行动是 +5 ,第二次是 0 、第三次是 -2 ,说明第三次的行动被第二次影响了,如果没有第二次的行动,第三次行动可能就不会扣分。
- 右边的 R = -7 说明最终的奖励是 -7 ,但是如果没有第二次的行动 +0 ,可能第三次的行动就不仅仅会扣两分了,可能会扣的更多
所以我们不能简单的将整体的奖励 R R R 作为权重来进行计算,要结合每一步的奖励进行计算
- 左边第二次、第三次行动的奖励权重为 -2 而不是乘上整体的奖励 3
- 右边的第二次、第三次行动的奖励权重为 -2 而不是乘上 -7
参考下述公式
∇
R
ˉ
θ
≈
1
N
∑
n
=
1
N
∑
t
=
1
T
n
(
∑
t
′
=
t
T
n
r
t
′
n
−
b
)
∇
log
p
θ
(
a
t
n
∣
s
t
n
)
where
b
≈
E
[
R
(
τ
)
]
\nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} (\sum_{t'=t}^{T_n} r_{t'}^n-b) \nabla \log p_\theta(a_t^n | s_t^n) \quad \text{where } b \approx E[R(\tau)]
∇Rˉθ≈N1n=1∑Nt=1∑Tn(t′=t∑Tnrt′n−b)∇logpθ(atn∣stn)where b≈E[R(τ)]
其中
R
(
τ
n
)
→
∑
t
′
=
t
T
n
r
t
′
n
R(\tau^n) \rightarrow \sum_{t'=t}^{T_n} r_{t'}^n
R(τn)→t′=t∑Tnrt′n
但由于随着行动次数越长,最开使的奖励影响越小,所以我们也要加入一个缩放因子来减少远距离时,奖励作为权重带来的影响
∑
t
′
=
t
T
n
r
t
′
n
→
∑
t
′
=
t
T
n
γ
t
′
−
t
r
t
′
n
where
γ
<
1
\sum_{t'=t}^{T_n} r_{t'}^n \rightarrow \sum_{t'=t}^{T_n} \gamma^{t'-t} r_{t'}^n \quad \text{where } \gamma < 1
t′=t∑Tnrt′n→t′=t∑Tnγt′−trt′nwhere γ<1
在上述的推导步骤中,奖励的变化(即
R
(
τ
n
)
−
b
R(\tau^n) - b
R(τn)−b )可以看作是一个函数:
R
(
τ
n
)
−
b
=
A
θ
(
s
t
,
a
t
)
R(\tau^n) - b =A^\theta(s_t, a_t)
R(τn)−b=Aθ(st,at)
其中
A
=
Advantage Function
A = \text{Advantage Function }
A=Advantage Function ,这个函数的意义就是我们在
s
t
s_t
st 的情况下执行
a
t
a_t
at 相较于其他的行动能有多好