这本书第一部分的内容是表格解决方法(即用表格来存储价值函数,从而选择最优动作)。但这类方法仅适用于状态空间和动作空间不大的情况下。本章要讲的赌博机问题只存在一个状态。
文章目录
多臂赌博机问题简介
假设在我们面前有 k k k个赌博机(即 k k k个动作),每当我们选择一个赌博机,并且摇动它的摇杆时,就会得到一个数值奖励。我们的目标是最大化一定时间内总的奖励。
由于摇动一个赌博机的摇杆得到的奖励是不确定的,所以某个动作的价值是等于做该动作得到奖励的期望。即:
q
∗
(
a
)
=
E
[
R
t
∣
A
t
=
a
]
q_*(a) = \mathbb{E}[R_t | A_t = a]
q∗(a)=E[Rt∣At=a]
如果我们知道做每个动作(选择每个赌博机)的价值,那么我们就可以每次选择价值最大的动作。但是我们并不知道
q
∗
(
a
)
q_*(a)
q∗(a)的值,所以通常会对每个动作的价值做出一个估计,在
t
t
t时刻动作
a
a
a的价值表示为
Q
t
(
a
)
Q_t(a)
Qt(a)。我们希望
Q
t
(
a
)
Q_t(a)
Qt(a)接近于
q
∗
(
a
)
q_*(a)
q∗(a)。
如果将 Q ( a ) Q(a) Q(a)的值保存下来,那么每次选择价值最大的动作的方法叫做greedy方法,也称为exploiting。这种方法就是利用以往的经验知识,选择一个当前状态认为最好的动作。
如果随机选择一个当前最优动作以外的动作,这就叫做exploring,这时候就需要更新动作的价值了。
动作价值 Q t ( a ) Q_t(a) Qt(a)的计算方法
这里给出了两种计算的思路:
- 一种是将 t t t时刻之前执行动作 a a a得到的奖励取平均,作为 t t t时刻动作 a a a的价值。
- 为了提高计算效率, Q Q Q值可以采取增量的方式来计算。
1. 以往动作奖励取平均
Q
t
(
a
)
=
∑
i
=
1
t
−
1
R
i
⋅
1
A
i
=
a
∑
i
=
1
t
−
1
1
A
i
=
a
Q_t(a) = \frac{\sum_{i=1}^{t-1}R_i \cdot 1_{A_i = a}}{\sum_{i=1}^{t-1} 1_{A_i = a}}
Qt(a)=∑i=1t−11Ai=a∑i=1t−1Ri⋅1Ai=a
其中
1
A
i
=
a
1_{A_i = a}
1Ai=a表示的是一个指示函数,当
A
i
=
a
A_i = a
Ai=a时为1,否则为0。
根据大数定律,不断执行动作, Q t ( a ) Q_t(a) Qt(a)会收敛到 q ∗ ( a ) q_*(a) q∗(a)。
greedy method选择动作的方式为:
A
t
=
arg max
a
Q
t
(
a
)
A_t = \argmax_{a} Q_t(a)
At=aargmaxQt(a)
即选择当前动作价值最大的动作。
2. 增量方法计算Q值
用第一种方法计算Q值时,需要存储每一次做的动作和获得的奖励。
但是我们将计算公式做一些改变之后,对于计算来说就会方便很多。如下:
)
Q
Q
Q值更新的标准形式为:
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 \leftarrow OldEstimate + StepSize[Target - OldEstimate]
NewEstimate←OldEstimate+StepSize[Target−OldEstimate]
StepSize表示更新的步长,平均方法的步长为1/n。我们可以将这个参数表示为
α
t
(
α
)
\alpha_t(\alpha)
αt(α)。
一个简单的多臂赌博机的伪代码就可以写出来啦:
探索(exploration)和利用(exploitation)的权衡
本章主要讲了四种方法来权衡探索和利用(也是选择动作的依据):
- ϵ \epsilon ϵ-greedy方法
- Upper Confidence Bound(UCB)上限置信区间方法
- Gradient bandit算法
- 设置乐观的初始Q值
1. ϵ \epsilon ϵ-greedy方法
前面介绍了greedy method,就是选择当前动作价值最大的动作。但这样做可能会忽略那些动作价值可能更大,但没有执行过的动作。
所以,为了进行一定的探索,尽可能找到全局最优的动作。 ϵ \epsilon ϵ-greedy方法被提出。该方法是对greedy方法的改进。在每次选择动作的时候,以 1 − ϵ 1-\epsilon 1−ϵ的概率选择当前 Q Q Q值最大的动作,以 ϵ \epsilon ϵ的概率从所有动作中随机选择一个。
这样做的好处是,随着采样次数的增加,在极限条件下,每个动作都会被采样无限次,从而确保 Q t ( a ) Q_t(a) Qt(a)收敛到 q ∗ ( a ) q_*(a) q∗(a)。
2. UCB上限置信区间方法
ϵ \epsilon ϵ-greedy方法虽然给了当前 Q Q Q不是最大的动作(以下叫做non-greedy action)一些机会。但其实每一个non-greedy action也是有区别的,对于那些接近于最优 Q Q Q值的动作,或者不确定性特别大的动作,应该优先考虑。因为执行这样的动作能带来更大奖励。
所以,在选择动作时,可以基于这两方面考虑,找到一个价值最大的动作。
A
t
=
arg max
a
[
Q
t
(
a
)
+
c
ln
t
N
t
(
a
)
]
A_t = \argmax_{a}[Q_t(a) + c \sqrt{\frac{\ln t}{N_t(a)}}]
At=aargmax[Qt(a)+cNt(a)lnt]
式中的 c > 0 c>0 c>0表示探索的程度。 N t ( a ) N_t(a) Nt(a)表示时刻 t t t之前,动作 a a a被采样到的次数。
所以可以看出,如果某个动作的价值大,那么有两种情况:
- 动作 a a a的本身 Q Q Q值比较大
- 动作 a a a长时间没有被采样到
如果 N t ( a ) = 0 N_t(a) = 0 Nt(a)=0,动作 a a a就在本次被选择。根式中的分子之所以采用自然对数的形式,是因为随着时间的增加, ln t \ln t lnt增加越来越慢,即逐渐减小探索的程度。
下图是UCB方法和
ϵ
\epsilon
ϵ-greedy方法在10臂赌博机上的测试结果。可以看出UCB总体表现要比
ϵ
\epsilon
ϵ-greedy好。
补充:
关于第二章中讨论的stationary problems和nonstationary problems:
- stationary problems: 对于多臂赌博机问题来说,就是选择一个动作获得的奖励概率是固定的。(即:每个赌博机能给出的奖励值的概率是满足一个平稳的分布的,比如:一个赌博机给出各种奖励值的概率满足正态分布,均值为0,方差为1)
- nonstationary problems: 赌博机给出各种奖励值的概率是随时间改变的,没有固定的概率分布。
3. Gradient bandit算法
Gradient bandit算法中定义了一个对动作的“偏好”函数
H
t
(
a
)
H_t(a)
Ht(a),这个值越大,选择该动作的概率就越大。我们用
π
t
(
a
)
\pi_t(a)
πt(a)表示
t
t
t时刻选择动作
a
a
a的概率。使用softmax来计算即为:
π
t
(
a
)
=
e
H
t
(
a
)
∑
b
=
1
k
e
H
t
(
b
)
\pi_t(a) = \frac{e^{H_t(a)}}{\sum_{b=1}^{k}e^{H_t(b)}}
πt(a)=∑b=1keHt(b)eHt(a)
因为动作的偏好程度 H t ( a ) H_t(a) Ht(a)并非固定的,在执行动作之后,会对其进行更新,更新公式如下:
- 对于
t
t
t时刻选择执行的动作
A
t
A_t
At:
H t + 1 ( A t ) = H t ( A t ) + α ( R t − R t ˉ ) ( 1 − π t ( A t ) ) H_{t+1}(A_t) = H_t(A_t) + \alpha(R_t - \bar{R_t})(1-\pi_t(A_t)) Ht+1(At)=Ht(At)+α(Rt−Rtˉ)(1−πt(At)) - 对于其他动作:
H t + 1 ( a ) = H t ( a ) − α ( R t − R t ˉ ) π t ( a ) H_{t+1}(a) = H_t(a) - \alpha(R_t - \bar{R_t})\pi_t(a) Ht+1(a)=Ht(a)−α(Rt−Rtˉ)πt(a)
其中的 R t ˉ \bar{R_t} Rtˉ表示t时刻之前得到的平均奖励。上面的式子直观理解就是:如果执行动作 A t A_t At得到的奖励 R t R_t Rt大于平均奖励,那就增大动作 A t A_t At的偏好值,并且减小其他动作的偏好值。
直观理解比较简单,但是这其实是基于梯度上升的思想实现的。这里的梯度是指期望奖励对偏好函数的梯度。具体的推导公式可参考书上或者这篇博客:Gradient Bandit及实现。
4. 设置乐观的初始Q值
这个是适用于stationary问题的一个小trick,其实不太算是一种正式的促进探索的算法。
在多臂赌博机问题中,假设动作价值 q ∗ ( a ) q_*(a) q∗(a)是服从一个正态分布,均值为0,方差为1。在很多方法中,对于所有动作,初始值 Q 1 ( a ) Q_1(a) Q1(a)设置为0。
但如果我们把初始值设置为+5,这叫做乐观估计。但是这样有利于agent进行探索。比如在10-armed bandit问题中,第一次选择动作时,所有动作的 Q Q Q值都为5,这时随机选择一个动作 a a a,执行之后得到的Q_2(a) < 5。下一次选择动作时,还是利用greedy方法,在剩下的9个动作中选择一个,执行后得到的 Q Q Q值也是小于5。这样继续下去,每一个动作都有机会执行到。所以达到了充分探索的目的。
总结
本章最重要的内容就是几种权衡探索和利用的方法:
- ϵ \epsilon ϵ-greedy方法
- Upper Confidence Bound(UCB)上限置信区间方法
- Gradient bandit算法
- 设置乐观的初始Q值
这几种方法到底哪一种更好呢?书中给了一个对比图,但其实也依赖于具体的任务和参数的调节。