K臂老虎机(k-armed Bandit)问题
考虑以下学习问题。你需要在k种不同的选项或动作中重复作出选择。在每次选择之后,你都会得到一个从一个平稳的概率分布中选择的数字奖励,这取决于你所选择的行动。目标是在一段时间内最大化预期的总奖励。
在k臂赌博机问题中,每个动作都有一个预期或平均奖励,称之为动作的价值(Value)。我们用
A
t
A_{t}
At表示在时间步长t上所选择的动作,用
R
t
R_{t}
Rt表示所获得的奖励。任意动作a的价值表示为
q
∗
(
a
)
q_{*}(a)
q∗(a),是采取该动作的预期奖励:
q
∗
(
a
)
≐
E
[
R
t
∣
A
t
=
a
]
q_{*}(a)\doteq E[R_{t}|A_{t}=a]
q∗(a)≐E[Rt∣At=a]。
如果我们知道每个动作的价值,我们每次都会选择价值最大的动作。假设我们不确定每个动作的价值,用 Q t ( a ) Q_{t}(a) Qt(a)表示在时间步长t上采取动作a所获得的奖励的估计。我们希望 Q t ( t ) Q_{t}(t) Qt(t)能够尽量接近 q ∗ ( a ) q_{*}(a) q∗(a)。
如果保存动作价值的估计,那么在任意时间步长上至少有一个动作的价值估计是最大的,我们称之为 贪婪(greedy) 动作。如果选择其中一个贪婪动作,我们称之为开发(exploiting) 当前对动作价值的知识。如果选择了非贪婪动作,我们称之为探索(exploring) ,因为它可能提升你对非贪婪动作价值的估计。开发最大化预期回报的正确方法,但从长远来看,探索可能会产生更大的总回报。在短期内,在探索期间,奖励较低,但在长期内,奖励较高,因为在你发现了更好的行动后,你可以多次利用它们。因为任何单一的行动选择都不可能同时进行探索和开发,这是探索和开发之间的“冲突”。平衡探索和开发是强化学习中出现的一个独特挑战。k臂赌博机问题的简单版本使我们能够以一种特别清晰的形式展示这一点。接下来我们将讨论如何估计动作的价值,以及平衡开发和探索之间的矛盾。
估计动作的价值
一个行动的真正价值是当该行动被选择时的平均奖励。一种自然的估计方法是平均实际获得的奖励:
Q t ( a ) ≐ ∑ i = 1 t − 1 R i ⋅ I A i = a ∑ i = 1 t − 1 I A i = a Q_{t}(a)\doteq \frac{ {\textstyle \sum_{i=1}^{t-1}} R_{i} \cdot \mathbb{I_{A_{i}=a}}}{ {\textstyle \sum_{i=1}^{t-1}\mathbb{I_{A_{i}=a}}} } Qt(a)≐∑i=1t−1IAi=a∑i=1t−1Ri⋅IAi=a
其中 I \mathbb{I} I表示指示函数。当分母趋于无穷时,根据大数定律, Q t ( a ) Q_{t}(a) Qt(a) 收敛于 q ∗ ( a ) q_{*}(a) q∗(a)。我们称之为估计动作价值的样本平均方法,因为每个估计都是相关奖励样本的平均值。
相应地贪婪动作表示为 A t ≐ arg max a Q t ( a ) A_{t}\doteq \mathop{\arg\max}\limits_{a}Q_{t}(a) At≐aargmaxQt(a)。贪婪动作总是选择当前价值评估最大的动作,而不会尝试价值评估小的动作,去看看是否会获得更高的奖励。一种解决办法是大部分时间采取贪婪动作,在小概率 ε \varepsilon ε下随机选择非贪婪动作,这种方法称之为 ε \varepsilon ε-greedy方法。 该方法的优点是,在极限下,随着步数的增加,每个动作将被采样无限次,从而确保所有的 Q t ( a ) Q_{t}(a) Qt(a)收敛到它们各自的 q ∗ ( a ) q_{*}(a) q∗(a)。
十臂老虎机例子测试
为了粗略估计贪婪动作和
ε
\varepsilon
ε-贪婪动作的相对有效性,我们在一组测试问题上对它们进行数值比较。如下图所示的十臂老虎机问题,我们共有十个可选的动作,每个动作的价值为
q
∗
(
a
)
,
a
=
1
,
…
,
10
q_{*}(a), a=1,\dots,10
q∗(a),a=1,…,10。当一种学习方法在时间步
t
t
t时选择动作
A
t
A_{t}
At,就会从均值为
q
∗
(
a
)
q_{*}(a)
q∗(a),方差为1的正态分布中获得一个奖励
R
t
R_{t}
Rt。对于不同的学习方法,我们可以测试1000个时间步来比较它们性能。
将贪婪方法与两种
ε
\varepsilon
ε-贪婪方法(
ε
=
0.01
\varepsilon=0.01
ε=0.01和
ε
=
0.1
\varepsilon=0.1
ε=0.1)进行了比较。所有的方法都使用样本平均技术(初始估计值为0)形成了它们的动作值估计值。下图显示随着经验的增加,预期奖励的增加。贪婪方法在一开始就比其他方法改进得稍快,但随后将稳定在一个较低的水平,它每步的奖励只有1,而在这个测试上最好的可能为1.55。从长远来看,贪婪方法的表现明显更差,因为它经常在执行次优操作时被卡住。
ε
\varepsilon
ε-贪婪方法最终表现得更好,因为它们继续探索和提高了识别最佳行动的机会。
ε
=
0.1
\varepsilon=0.1
ε=0.1方法探索得更多,通常更早找到最优动作。
ε
=
0.01
\varepsilon=0.01
ε=0.01方法改进得更慢,但最终在图中所示的两种性能指标上都优于贪婪方法。
Github代码: ten-armed_testbed.py
动作价值估计的渐增形式
前文所述动作的价值可以用动作的平均回报来估计: Q n ≐ R 1 + R 2 + ⋯ + R n − 1 n − 1 Q_{n}\doteq\frac{R_{1}+R_{2}+\dots+R_{n-1}}{n-1} Qn≐n−1R1+R2+⋯+Rn−1。
现在我们考虑把该式写成增量形式:
上式是在强化学习任务中经常出现的一种形式:
N e w E s t i m a t e ⟵ O l d E s t i m a t e + S t e p S i z e [ T a r g e t − O l d E s t i m a t e ] . NewEstimate \longleftarrow OldEstimate + StepSize [Target - OldEstimate]. NewEstimate⟵OldEstimate+StepSize[Target−OldEstimate].
其中 [ T a r g e t − O l d E s t i m a t e ] [Target - OldEstimate] [Target−OldEstimate]表示估计误差。 S t e p S i z e StepSize StepSize表示步长,在上式中步长为 1 / n 1/n 1/n,它会随着时间步长的变化而变化。
非平稳问题
到目前为止所讨论的平均方法适用于平稳的问题,也就是说,对于奖励概率不随时间变化的问题。我们经常遇到生态非平稳的强化学习问题。在这种情况下,最近的奖励比长期的奖励是有意义的。最流行的方法之一是使用一个恒定的步长参数 α , α ∈ ( 0 , 1 ] \alpha, \alpha\in(0, 1] α,α∈(0,1]:
Q n + 1 = Q n + α [ R n − Q n ] Q_{n+1}=Q_{n}+\alpha[R_{n}-Q_{n}] Qn+1=Qn+α[Rn−Qn]
上式也可以写作动作的历史奖励的权重和:
上式表明,历史奖励的权重呈现指数级衰减,当前动作的奖励评估会更多依据近期的奖励。