作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学习的基础知识,后面也会更新强化学习的论文阅读专栏。本来是想每一篇多更新一点内容的,后面发现大家上CSDN主要是来提问的,就把很多拆分开来了(而且这样每天任务量也小一点哈哈哈哈偷懒大法)。但是我还是希望知识点能成系统,所以我在目录里面都好按章节系统地写的,而且在github上写成了书籍的形式,如果大家觉得有帮助,希望从头看的话欢迎关注我的github啊,谢谢大家!另外我还会分享深度学习-基础知识专栏以及深度学习-论文阅读专栏,很早以前就和小伙伴们花了很多精力写的,如果有对深度学习感兴趣的小伙伴也欢迎大家关注啊。大家一起互相学习啊!可能会有很多错漏,希望大家批评指正!不要高估一年的努力,也不要低估十年的积累,与君共勉!
Drawback of REINFORCE and solutions
No causality
首先,我们再回顾一下求解策略价值梯度的公式:
∇
θ
J
(
θ
)
=
1
N
∑
i
=
1
N
∑
t
=
0
T
∇
θ
log
π
θ
(
a
i
,
t
∣
s
i
,
t
)
(
∑
t
=
0
T
r
(
s
i
,
t
,
a
i
,
t
)
)
\nabla_{\theta} J(\theta)=\frac{1}{N} \sum_{i=1}^{N} \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\boldsymbol{a}_{i, t} \mid \boldsymbol{s}_{i, t}\right)\left(\sum_{t=0}^{T} r\left(s_{i, t}, \boldsymbol{a}_{i, t}\right)\right)
∇θJ(θ)=N1i=1∑Nt=0∑T∇θlogπθ(ai,t∣si,t)(t=0∑Tr(si,t,ai,t))
从这个公式中我们看出了一个问题,不论是哪个时间段,我们都要用策略的梯度除以所有时刻的回报值总和,这样的设计显然是不合理的。因为理论上,在
t
t
t 时刻我们完成了决策后,它最多只能影响
t
t
t 时刻之后的所有回报(这也被称之为causality,表示在t时刻做出的策略只会影响t时刻之后获得的reward),并不会影响
t
t
t 时刻之前的回报,因为我们无法通过现在的决策影响已经发生过的事情,所以这一部分的回报值不应该计算在梯度中。我们的公式应该改写成:
∇ θ J ( θ ) = 1 N ∑ i = 1 N ∑ t = 0 T [ ∇ θ log π θ ( a i , t ∣ s i , t ) ( ∑ t ′ = t T r ( s i , t ′ , a i , t ′ ) ) ] \nabla_{\theta} J(\theta)=\frac{1}{N} \sum_{i=1}^{N} \sum_{t=0}^{T}\left[\nabla_{\theta} \log \pi_{\theta}\left(\boldsymbol{a}_{i, t} \mid \boldsymbol{s}_{i, t}\right)\left(\sum_{t^{\prime}=t}^{T} r\left(s_{i, t^{\prime}}, a_{i, t^{\prime}}\right)\right)\right] ∇θJ(θ)=N1i=1∑Nt=0∑T[∇θlogπθ(ai,t∣si,t)(t′=t∑Tr(si,t′,ai,t′))]
High Variance
因为在REINFORCE中, ∇ θ J ( θ ) ≈ 1 N ∑ i = 1 N ∇ θ log π θ ( τ ) r ( τ ) \nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \nabla_{\theta} \log \pi_{\theta}(\tau) r(\tau) ∇θJ(θ)≈N1i=1∑N∇θlogπθ(τ)r(τ),也就是后面有一个对轨迹奖励的一个加权,看下面这个例子:
我们先看黄色的bar作为第一种情况,如果我们有三条轨迹,他们的奖励值分别长成黄色的bar这种情况,那么我们最终得到的策略应该是图中的第二条线。
然后我们再来看第二种情况,我们把第一种情况下轨迹的奖励的值减去一个常数,得到的奖励分布变成了绿色的bar,那我们最终得到的策略应该是图中的第三条线。
这就很有问题了,我们只是让奖励函数减去一个常量,得到的策略变化就差这么大,说明policy gradient方法的方差很大,当然如果你有无限个样本的时候,这个问题就不是问题,但是如果你像上面一样只有有限个样本,那就会影响很大了,而现实中我们的样本数量肯定是有限的。
李宏毅老师课上也举过一个很好理解的例子,就是如果我们的奖励函数都是正数,那么对于我们所有采集的轨迹,它的概率都会上升,对于未采样到的trajectory,即使它是非常好的trajectory,它的概率是下降的,这显然很不合理。
那么针对这个问题我们能有什么方法去缓解呢?
我们知道,上面的问题在于“当reward为正时,我们会增强所有的策略,只是对实际效果不好的策略,我们为其提升的幅度会有所下降”,但我们希望的是:让能够最大化长期回报策略的“权重”为正且尽可能大,让不能最大化长期回报策略的“权重" 为负且尽可能小。于是公式就变成:
∇ θ J ( θ ) = 1 N ∑ i = 1 N ∑ t = 0 T [ ∇ θ log π θ ( a i , t ∣ s i , t ) ( ∑ t ′ = t T r ( s i , t ′ , a i , t ′ ) − b i , t ′ ) ] \nabla_{\theta} J(\theta)=\frac{1}{N} \sum_{i=1}^{N} \sum_{t=0}^{T}\left[\nabla_{\theta} \log \pi_{\theta}\left(\boldsymbol{a}_{i, t} \mid \boldsymbol{s}_{i, t}\right)\left(\sum_{t^{\prime}=t}^{T} r\left(\boldsymbol{s}_{i, t^{\prime}}, \boldsymbol{a}_{i, t^{\prime}}\right)-\boldsymbol{b}_{i, t^{\prime}}\right)\right] ∇θJ(θ)=N1i=1∑Nt=0∑T[∇θlogπθ(ai,t∣si,t)(t′=t∑Tr(si,t′,ai,t′)−bi,t′)]
这个变量可以设计为同一起始点的不同序列在同一时刻的长期回报均值,它的公式形式如下所示::
b
i
,
t
′
=
1
N
∑
i
=
1
N
∑
t
′
=
t
T
r
(
s
i
,
t
′
,
a
i
,
t
′
)
\boldsymbol{b}_{i, t^{\prime}}=\frac{1}{N} \sum_{i=1}^{N} \sum_{t^{\prime}=t}^{T} r\left(\boldsymbol{s}_{i, t^{\prime}}, \boldsymbol{a}_{i, t^{\prime}}\right)
bi,t′=N1i=1∑Nt′=t∑Tr(si,t′,ai,t′)
这个时候
E
[
∇
θ
log
p
θ
(
τ
)
b
]
=
∫
p
θ
(
τ
)
∇
θ
log
p
θ
(
τ
)
b
d
τ
=
∫
∇
θ
p
θ
(
τ
)
b
d
τ
=
b
∇
θ
∫
p
θ
(
τ
)
d
τ
=
b
∇
θ
1
=
0
E\left[\nabla_{\theta} \log p_{\theta}(\tau) b\right]=\int p_{\theta}(\tau) \nabla_{\theta} \log p_{\theta}(\tau) b d \tau=\int \nabla_{\theta} p_{\theta}(\tau) b d \tau=b \nabla_{\theta} \int p_{\theta}(\tau) d \tau=b \nabla_{\theta} 1=0
E[∇θlogpθ(τ)b]=∫pθ(τ)∇θlogpθ(τ)bdτ=∫∇θpθ(τ)bdτ=b∇θ∫pθ(τ)dτ=b∇θ1=0,也就是说增加这一项不会使得原有的计算值变得有偏。
当然,我们可以有更好的做法让方差更小:可以对方差进行求导判断导数为0的点:
∇ θ J ( θ ) = E τ ∼ p θ ( τ ) [ ∇ θ log p θ ( τ ) ( r ( τ ) − b ) ] \nabla_{\theta} J(\theta)=E_{\tau \sim p_{\theta}(\tau)}\left[\nabla_{\theta} \log p_{\theta}(\tau)(r(\tau)-b)\right] ∇θJ(θ)=Eτ∼pθ(τ)[∇θlogpθ(τ)(r(τ)−b)]
Var = E τ ∼ p θ ( τ ) [ ( ∇ θ log p θ ( τ ) ( r ( τ ) − b ) ) 2 ] − E τ ∼ p θ ( τ ) [ ∇ θ log p θ ( τ ) ( r ( τ ) − b ) ] 2 \operatorname{Var}=E_{\tau \sim p_{\theta}(\tau)}\left[\left(\nabla_{\theta} \log p_{\theta}(\tau)(r(\tau)-b)\right)^{2}\right]-E_{\tau \sim p_{\theta}(\tau)}\left[\nabla_{\theta} \log p_{\theta}(\tau)(r(\tau)-b)\right]^{2} Var=Eτ∼pθ(τ)[(∇θlogpθ(τ)(r(τ)−b))2]−Eτ∼pθ(τ)[∇θlogpθ(τ)(r(τ)−b)]2
有因为b是无偏的,所有第二项可以省略,所以
d V a r d b = d d b E [ g ( τ ) 2 ( r ( τ ) − b ) 2 ] = d d b ( E [ q ( τ ) 2 r ( τ ) ) 2 ] − 2 E [ g ( τ ) 2 r ( τ ) b ] + b 2 E [ g ( τ ) 2 ] ) \left.\frac{d \mathrm{Var}}{d b}=\frac{d}{d b} E\left[g(\tau)^{2}(r(\tau)-b)^{2}\right]=\frac{d}{d b}\left(E\left[q(\tau)^{2} r(\tau)\right)^{2}\right]-2 E\left[g(\tau)^{2} r(\tau) b\right]+b^{2} E\left[g(\tau)^{2}\right]\right) dbdVar=dbdE[g(τ)2(r(τ)−b)2]=dbd(E[q(τ)2r(τ))2]−2E[g(τ)2r(τ)b]+b2E[g(τ)2])
= − 2 E [ g ( τ ) 2 r ( τ ) ] + 2 b E [ g ( τ ) 2 ] = 0 =-2 E\left[g(\tau)^{2} r(\tau)\right]+2 b E\left[g(\tau)^{2}\right]=0 =−2E[g(τ)2r(τ)]+2bE[g(τ)2]=0
所以: b = E [ g ( τ ) 2 r ( τ ) ] E [ g ( τ ) 2 ] b=\frac{E\left[g(\tau)^{2} r(\tau)\right]}{E\left[g(\tau)^{2}\right]} b=E[g(τ)2]E[g(τ)2r(τ)] = E [ ∇ θ log π ( τ ) 2 r ( τ ) ] E [ ∇ θ log π ( τ ) 2 ] \frac{E\left[\nabla_{\theta} \log \pi(\tau)^{2} r(\tau)\right]}{E\left[\nabla_{\theta} \log \pi(\tau)^{2}\right]} E[∇θlogπ(τ)2]E[∇θlogπ(τ)2r(τ)]
这一项可以理解成: expected reward weighted by gradient magnitudes,不知道该怎么翻译成中文。在实践中,我们一般都直接使用前面的相对简单的算术平均的形式作为baseline。
上一篇:强化学习的学习之路(三十二)_2021-02-01:Differences between RL and Imitation learning(强化学习和模仿学习的差别)
下一篇:强化学习的学习之路(三十四)_2021-02-03:Off-Policy policy gradient