这是一篇1997年由Pendrith发表在AAAI上的一篇比较久远的文章,让我去看这篇论文的原因是在TD3
论文中出现了这篇论文的reference,因此我就找了这篇文章。主要为了探究在RL中,值函数估计对bias、varience的影响。这篇文章主要是针对Varience而言的。
文章总体思路不难,观点也很明确,主要得出了3个结论:
- 在RL中,过量的估计误差会导致学习不稳定。
- 指出了通过调节超参数的方式来处理方差问题是有问题的,特别是在noisy环境和非马尔可夫环境中。
- 为了解决RL中方差较大的问题,作者提出并验证了一种叫
ccBeta
的算法,用于设计合适的学习率。
Estimator Varience in RL:Theoretical Problems and Preatical Solutions
Abstract
- 在强化学习中,很多算法都需要进行估计,比如Q-learning算法中需要估计Q(s,a)。估计必然会引入
bias
和varience
。较高的方差会导致学习过程不稳定
,甚至导致无效的学习。 - 为了控制估计的方差,之前广为流传的是用一种调节超参数的方式,比如TD(
λ
\lambda
λ)中的超参数
λ
\lambda
λ,通过调节
λ
\lambda
λ来trade-off
方差
(the level of estimator perturbation)和bias
或者对环境改变的适应速度
(the rate of adaptation)问题。 - 接下来作者会用实验证明这种说法的不正确。然后是这篇文章最有价值的地方:提出了
ccBeta
算法来处理估计高方差问题。并且ccBeta在实验中的表现也是不错的。
Introduction
RL as On-line Dynamic Programming
这部分主要交代了RL基于MDP的相关背景:即<S,A,R,P,E>,以及RL的目的是为了最大化累计奖赏。这部分略。
Q-learning as on-line value iteration
这部分主要介绍Q-learning算法:一种基于DP中值迭代的model-free算法。主要有one-step和n-step两种形式。
Q-learning算法的更新基于"delta rule
":
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
β
Δ
t
Δ
t
=
r
t
(
1
)
−
Q
(
s
t
,
a
t
)
r
t
(
1
)
=
r
t
+
γ
max
a
Q
(
s
t
+
1
,
a
)
Q(s_t,a_t) \gets Q(s_t,a_t) + \beta \Delta_t \\\Delta_t = r_t^{(1)} - Q(s_t,a_t) \\r_t^{(1)} = r_t + \gamma \mathop{\max_a}Q(s_{t+1},a)
Q(st,at)←Q(st,at)+βΔtΔt=rt(1)−Q(st,at)rt(1)=rt+γamaxQ(st+1,a)
(其实这就是一种软更新的形式,
β
\beta
β就是我们所说的学习率,一般用
α
\alpha
α表示,但文章是用
β
\beta
β表示的)
其中,
r
t
(
1
)
r_t^{(1)}
rt(1)被称为1-step corrected truncated return,简称1-stepCTR
,也就是我们的TD目标值。
单步CTR转变成n步CTR:
r
t
(
n
)
=
r
t
[
n
]
+
γ
n
max
a
Q
(
s
t
+
n
,
a
)
r
t
[
n
]
=
∑
i
=
0
n
−
1
γ
i
r
t
+
i
r_t^{(n)} = r_t^{[n]} + \gamma ^n \mathop{\max_a}Q(s_{t+n},a) \\r_t^{[n]} = \mathop{\sum_{i=0}^{n-1}}\gamma^ir_{t+i}
rt(n)=rt[n]+γnamaxQ(st+n,a)rt[n]=i=0∑n−1γirt+i
其中
r
t
[
n
]
r_t^{[n]}
rt[n]被称为uncorrected n_step truncated return,简称UTR
。
此外,后文出现的CTR的长度n代表着n-step的TD算法,比如TD(
λ
\lambda
λ)。
CTR Bias and Varience
这一节就是摘要的第二部分
在这篇文章发表之前呢,广为流传的平衡bias和varience问题是通过调节CTR的长度来实现的:CTR越短,比如最短的是1-step算法,其方差越小,偏差越大;CTR越长,比如最长的是MC算法,其方差越大,因为实时奖励的方差是很大的,偏差越小,因为MC是Q真值的无偏估计。
但是作者指出,这个idea是错误的。接下来作者通过2个实验去证明了其错误性。
2个思路
:
- CTR较短的时候,且在任务初始时期,可能会存在高方差+高偏差的情况。CTR较长的时候,可能会存在低方差+低偏差的情况。
- 在非马尔科夫决策环境下,即NMDPs,可能会存在较短的CTR的方差比较长的CTR的方差更大。
实验如下:
①:对于思路1:
如上图所示,这是一个4状态1动作,奖励为0的MDP环境。
我们可以借用RL算法中的TD算法来理解:
对于较短的CTR,选择单步的TD算法,给出更新公式:
Q
(
s
t
,
a
t
)
=
Q
(
s
t
,
a
t
)
+
β
(
r
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
−
Q
(
s
t
,
a
t
)
)
Q(s_t,a_t) = Q(s_t,a_t) + \beta(r+ \gamma Q(s_{t+1},a_{t+1})-Q(s_t,a_t))
Q(st,at)=Q(st,at)+β(r+γQ(st+1,at+1)−Q(st,at))
我们考察Q(s1,a0),刚初始化的时候,状态s1的动作值函数取决于状态s2或s3的动作值函数,由于这两个值本身自己也是估计值,因此是不准确,故高偏差问题是显然的。至于方差问题,如果S2、S3的Q值相差不小,那么就会直接导致Q(s1,a0)的不稳定,即较大的方差问题。
因此,在初始时期,较短的CTR会出现高方差+高偏差的情况。
同理,对于较长的CTR,作者直接选用2-step,这里我们同样用TD算法来理解,其实2-step在上图中就相当于MC算法了。
给出更新公式:
Q
(
s
t
,
a
t
)
=
Q
(
s
t
,
a
t
)
+
β
(
r
1
+
γ
r
2
+
0
−
Q
(
s
t
,
a
t
)
)
Q(s_t,a_t) = Q(s_t,a_t) + \beta (r1+\gamma r2+0-Q(s_t,a_t))
Q(st,at)=Q(st,at)+β(r1+γr2+0−Q(st,at))
首先,TD目标值本身就是
G
t
G_t
Gt的形式,自然是无偏的,本来奖励r是高方差的,但是由于实时奖励为0,因此直接0方差。
因此,较长的CTR也会出现低方差+低偏差的情况。
最后作者指出:
当值函数估计值全局收敛的时候,n-step CTR估计的方差取决于UTR的长度
。
即:
i < j ⇒ r t [ i ] ≤ r t [ j ] ⇒ v a r [ r t ( i ) ] ≤ v a r [ r t ( j ) ] i<j \Rightarrow r_t^{[i]}\leq r_t^{[j]} \Rightarrow var[r_t^{(i)}] \leq var[r_t^{(j)}] i<j⇒rt[i]≤rt[j]⇒var[rt(i)]≤var[rt(j)]
2.对于bias/varience的trade-off是没有具体设计方式的,也就是说对于n-step算法,n的取值是没有标准的策略。
②:对于思路2:
CTR Bias and Varience in NMDPs
作者设计了一个非NMDPs的环境,原理也很简单,就是不符合马尔科夫性质就行(指当前状态只取决于上个状态,而与过去无关)。
NMDPs如上图所示:
R(
A
∣
0
A|0
A∣0)=0
R(
A
∣
1
A|1
A∣1)=0
R(
B
∣
0
B|0
B∣0)=0(当状态A执行动作0)
R(
B
∣
0
B|0
B∣0)=1(当状态A执行动作1)
因为主要研究MDP环境,中间的具体分析见原文,直接给出结论:
在NMDPs中,作者发现1-step CTR的方差比n-step CTR的方差还要大。
总结:综上2个实验所述,CTR的长度(或者说超参数 λ \lambda λ的选择)不能作为平衡bias和varience的方式,因此不能根据CTR的长度来解决高方差问题,也就是这个说法是错误的。
那么如何解决高方差问题呢?
就是接下去作者引出的ccBeta算法,也是我认为这篇文章最有价值的地方。
β \beta β:Varience versus Adaptability
在RL学习中,学习率是一个很重要的超参数,现在普遍的做法是穷举比如10个值,通过不断试错来找到使Agent性能最佳的值,但是这种做法是很耗时的。
通常的选择方案是:在环境适应力
(fast adaptation)和低方差
的平衡中选择。一般而言,环境适应力越强,意味着学习率
β
\beta
β越大,更新快,学习速率高;低方差,意味着
β
\beta
β越小,比如Q-learning中,本来刚开始大家的Q值都是不准确的,这时候你学习率太大,反而会造成值更新的不稳定,方差就会很大。
(适应力就是比如某个稳定的环境下,Agent的值函数收敛至稳定的值,当环境突然变化,Agent的值函数收敛至另一个稳定值的速度有多快。其就是学习速率)
作者给出了当下2种常见的学习率处理方案以及本文提出的ccBeta算法:
衰减
的学习率设置:
β i = 1 i ∑ i = 1 ∞ β i = ∞ , a n d ∑ i = 1 ∞ β i 2 < ∞ \beta_i=\frac{1}{i} \\\mathop{\sum_{i=1}^\infty}\beta_i=\infty,and \mathop{\sum_{i=1}^\infty}\beta^2_i<\infty βi=i1i=1∑∞βi=∞,andi=1∑∞βi2<∞
(这就是随机收敛定理)固定
学习率设置:如 β = 0.1 \beta=0.1 β=0.1。ccBeta
算法。
作者记下来分别对三种设置进行分析与实验对比。
对于衰减
的
β
\beta
β:
根据收敛定理,这个
β
\beta
β可以使得RL算法最终收敛,也就是能较不错的减少方差。但是其不适用于不稳定的环境,比如从环境中获取的return经常会发生变动,环境中会有噪声等。对于稳定的环境,这是一种最佳的算法,甚至表现的比ccBeta更好,但是对于变化不稳定的环境,会导致算法的适应力变弱,值函数的更新会很慢。至于变慢的原因,在后面实验2中会有解释。
对于固定
的
β
\beta
β:
与衰减的
β
\beta
β不同,它可以适应变化的环境,对环境变化敏感,即环境发生改变,他可以立即反应过来,较快的更新值函数。但是收敛性比稳定环境中差一些,特别是在随机策略下的环境中或有噪声的环境
下收敛效果更差。在这种环境下,固定
β
\beta
β较差的收敛性会导致学习不稳定。其在学习速率和降低方差之间的trade-off较难实现
,因为学习率高的话,其方差都会较大。
Note:
①:不要将随机环境下的探索率
ϵ
\epsilon
ϵ和学习率搞混了。
②:在随机环境或者噪声环境中收敛效果差主要是因为,比如说在暂时稳定的环境中,算法已经收敛了,TSE很小。这时候,环境突然地变化使得残差中的真值需要重新分布,故算法需要重新进行收敛,这样的话又会产生新的error,使得总体的error增大。在下面的实验二中也会论证这一点。
那么有没有一种方法可以trade-off上述两种方法呢,既不固定也不逐渐衰减呢?
那就是ccBeta
!
The ccBeta Algorithm
ccBeta算法是针对“delta-rule
”而言的:
Δ
i
←
z
i
−
Q
i
−
1
Q
i
←
Q
i
−
1
+
β
i
Δ
i
\Delta_i \gets z_i-Q_{i-1} \\Q_i \gets Q_{i-1} +\beta_i\Delta_i
Δi←zi−Qi−1Qi←Qi−1+βiΔi
其中,
z
i
z_i
zi是第i个step
Q
i
Q_i
Qi更新的目标值,
Δ
i
\Delta_i
Δi是第i个step的error值。
ccBeta的原理就是根据是否序列相关(自相关
)来调整
β
\beta
β。具体如下:
假设
z
i
z_i
zi与
Q
i
−
1
Q_{i-1}
Qi−1可以由一条曲线来拟合。另
Δ
i
\Delta_i
Δi为第i个step的残差项。
- 当一系列残差项自相关时,说明每一个
Q
i
Q_i
Qi
过估计
或者欠估计
。说明此时已经到了训练的中后期或者说每一个值函数都已经找到了正确的目标值,只是数值上还没接近,即值函数的估计值和目标值在同一方向上,只是数值间相差一些,这时候只要增大 β \beta β,加快更新幅度即可。 - 当一系列残差项不相关时,无序性说明这时候还是训练初期,
β
\beta
β
不能过大,否则会造成值函数的更新不稳定,即方差会很大,因此需要减小 β \beta β来使得方差尽可能的小。
接下来作者给出ccBeta算法的按指数方式加权的自适应系数
c
c
i
cc_i
cci以及
β
\beta
β的设置
s u m _ s q u a r e _ e r r i ← K ∗ s u m _ s q u a r e _ e r r i − 1 + Δ i 2 s u m _ p r o d u c t i ← K ∗ s u m _ p r o d u c t i − 1 + Δ i Δ i − 1 c c i ← s u m _ p r o d u c t i s u m _ s q u a r e _ e r r i ∗ s u m _ s q u a r e _ e r r i − 1 sum\_square\_err_i\gets K*sum\_square\_err_{i-1}+\Delta_i^2 \\sum\_product_i \gets K*sum\_product_{i-1}+\Delta_i\Delta_{i-1} \\cc_i\gets \frac{sum\_product_i}{\sqrt{sum\_square\_err_i*sum\_square\_err_{i-1}}} sum_square_erri←K∗sum_square_erri−1+Δi2sum_producti←K∗sum_producti−1+ΔiΔi−1cci←sum_square_erri∗sum_square_erri−1sum_producti
Note:
-
sum_square_err和sum_product的初始值都是0,为了避免 c c i cc_i cci出现inf,令这种情况下 c c i = 1 cc_i=1 cci=1。
-
K
是一个0-1之间的数,这样设置的好处在于:首先
2个sum值都有上限,这是防止训练到后面sum值越来越大导致系数溢出
。其次
自相关系数会更加关注偏袒于离当前时间点近
的error值,越是时间上较早的 Δ \Delta Δ值,其 Δ \Delta Δ值一般越不准确,通过K的衰减早期的 Δ \Delta Δ就变得越来越没影响力(这有点像被 γ \gamma γ衰减的累计奖励,但它衰减的是未来的)。关注当前遗忘过去的好处在于对于不稳定的环境(或者说noisy环境)Agent的适应力更强。也就是说,当新环境出现时,旧环境中的 Δ i \Delta_i Δi相对新环境而言也是不准确,应该给予衰减,减小其参考权重。 -
对于 Δ i \Delta_i Δi项,作者提出了一种更为鲁棒的变体: s g n ( Δ i ) sgn(\Delta_i) sgn(Δi)。这么做的好处在于经过阶跃函数处理的 Δ \Delta Δ在noisy环境中的表现更加好。作者给出的理由如下:
-
作者给出
K=0.9
是最佳实践参数。
下面是
c
c
i
cc_i
cci导出
β
i
\beta_i
βi的伪代码以及折线图:
i
f
(
c
c
i
>
0
)
:
β
i
←
c
c
i
∗
M
A
X
_
B
E
T
A
e
l
s
e
:
β
i
←
0
i
f
(
β
i
<
M
I
N
_
B
E
T
A
)
:
β
i
←
M
I
N
_
B
E
T
A
\\if(cc_i>0):\beta_i\gets cc_i*MAX\_BETA \\else:\beta_i\gets 0 \\if( \beta_i<MIN\_BETA):\beta_i\gets MIN\_BETA
if(cci>0):βi←cci∗MAX_BETAelse:βi←0if(βi<MIN_BETA):βi←MIN_BETA
从上述关系可知:
- 当
Δ
i
\Delta_i
Δi呈现负的自相关或者无自相关的时候,此时error的值是正负交替,表示学习初期,从上述条件语句可以看出
β
i
\beta_i
βi会很小,甚至为0,这样就可以有
效降低方差
。 - 当
Δ
i
\Delta_i
Δi呈现正的自相关,此时error是同符号的过估计或者欠估计,表示学习后期,从上述条件语句可以看出,
β
i
\beta_i
βi会很大,这样就可以
加快学习,提升适应力
。 - 设置MAX_BETA=1.0以及MIN_BETA=0.01是最佳实践。
- 作者还指出使用
c
c
i
2
cc_i^2
cci2来代替
c
c
i
cc_i
cci去权衡
β
i
\beta_i
βi值能产生更好地结果:更低的total square error(
TSE
)以及更低的varience。作者给出的理由如下:
接下来作者会进行2个实验来证明三种 β \beta β设置的对比
Experimental Result
相关设置:
K=0.9
error选择
s
g
n
(
Δ
i
)
sgn(\Delta_i)
sgn(Δi)
自相关系数选择
c
c
i
cc_i
cci
MAX_BETA=1.0
MIN_BETA=0.01
Simulation experiment 1
这次仿真,作者安排了6组实验,每一组实验都是跟踪一个在以[-0.25,+0.25]为波动上限,在0值附近上下波动(即信号均值为0)的一个信号10000个steps,并重复进行n次,检测指标是TSE(可用来衡量收敛特性)以及std标准差。实验的目的是为了得出学习率的设置对估计error和估计方差的影响。实验结果如下:
从实验结果我们可以得出:
- 在稳定环境中,衰减的 β \beta β能取得最好的效果,最低的TSE以及较低的方差(标准差的平方)。
- 从固定的 β \beta β可以看出,随着数值增大,TSE和Std逐渐增加。
- ccBeta虽然不如衰减的 β \beta β来得好,但是比绝大多固定 β \beta β表现得好,其能较好的减小方差。
Simulation experiment 2
这个仿真实验的信号和实验1相同,但是在400步之后加入了noisy,将输入信号的均值从0提升到了1.0。实验的目的是为了评估学习率对Agent适应力的影响。
实验结果曲线图如下(图中只画了50步,噪声在400步加入):
从曲线图可知:
- 从第一张曲线图中,固定值的 β \beta β对噪声环境的适应力较强;相反衰减 β \beta β的适应力很弱,更新十分缓慢,从 0 → 0.95 0\to0.95 0→0.95甚至用了9950步。这是因为我们知道学习率越低,其更新速度越慢,当执行到400步的时候,此时学习率为0.0025,此时让他开始重新学习的话,其更新自然非常慢,这就解释了为啥衰减 β \beta β适应力弱了。
- 从第二张曲线图中,ccBeta对噪声环境的适应力也不错,能较快的根据环境变化,将估计值达到1附近。
实验结果统计如下:
其中,Steps to Crossing意思是,环境发生改变之后,Agent做出回应,更新估计值第一次到新的一个估计值所用的步数,用来衡量适应力。
- 从表中看出衰减 β \beta β的适应力很差,而且由于更新太慢,所以TSE会非常大,综合表现力较差。
- 对于固定的 β \beta β值,正如前面所说,其适应力较强,对环境改变敏感。随着 β \beta β的提升,其适应力增强,i.e.适应速度加快,或者说学习速率提升。但是我们都知道 β \beta β越高,其方差越大。因此固定的 β \beta β难以在学习速率和降低方差上有效trade-off。
- 两张表对比:
正如之前所说,固定的学习率,在噪声环境中,其收敛效果较差,这点从TSE中可以看出,噪声环境中的TSE显然增加了。
4. 从表中看出ccBeta算法在噪声环境中以不俗的适应力超过大多学习率设置。
- ccBeta算法,无论环境是否有噪声,都能表现不俗。当无噪声的时候,其TSE和Std仅次于最优的衰减
β
\beta
β设置。在有噪声的时候,其TSE仅次于固定
β
=
0.1
\beta=0.1
β=0.1,其适应力也几乎仅次于
β
=
0.3
\beta=0.3
β=0.3。
换句话说,在学习速度上,其能力不凡。在降低方差上,其效果也不错,因此ccBeta是一种可以在学习速率和降低方差上trade-off的学习率选择方案
。
Experiment 3:Learning to Walk
略
The RL algorithms
略
Conclusions
总结:
- 在RL中,过量的估计
方差会导致不稳定
的学习。 - 之前流传的 关于CTR长度和方差、偏差的关系是不准确的,因此
通过调节超参数来trade-off,来降低估计方差是有待验证
的。 - ccBeta算法是一个
有效控制varience
的好办法,在仿真和实际环境中都表现不错。其可以在保证最小化方差的同时防止在不稳定环境(噪声环境)中因为适应力较弱而使得TSE太大。这是一个可以有效trade-off学习速率和降低方差的好办法。
- ccBeta算法
适用性很强
,就像model-free算法一样,和设计本身关系不大,可适用于很多算法中。 - 任何符合“
delta rule
”的算法都能在ccBeta上取得很好的表现。
学习中的不足之处:
- 对于 s g n ( Δ i ) sgn(\Delta_i) sgn(Δi)代替 Δ i \Delta_i Δi的理由不是很明白。
- 对于 c c i 2 cc_i^2 cci2代替 c c i cc_i cci的理由不是很明白。
- 有明白的同学麻烦告知下,谢谢。