强化学习导论 | 第二章 多臂赌博机

这本书第一部分的内容是表格解决方法(即用表格来存储价值函数,从而选择最优动作)。但这类方法仅适用于状态空间和动作空间不大的情况下。本章要讲的赌博机问题只存在一个状态。

文章目录

  • 多臂赌博机问题简介
  • 动作价值 Q t ( a ) Q_t(a) Qt(a)的计算方法
        • 1. 以往动作奖励取平均
        • 2. 增量方法计算Q值
  • 探索(exploration)和利用(exploitation)的权衡
        • 1. ϵ \epsilon ϵ-greedy方法
        • 2. UCB上限置信区间方法
        • 3. Gradient bandit算法
        • 4. 设置乐观的初始Q值
  • 总结

多臂赌博机问题简介

假设在我们面前有 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[RtAt=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=1t11Ai=ai=1t1Ri1Ai=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值时,需要存储每一次做的动作和获得的奖励。
但是我们将计算公式做一些改变之后,对于计算来说就会方便很多。如下:
强化学习导论 | 第二章 多臂赌博机_第1张图片
)
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] NewEstimateOldEstimate+StepSize[TargetOldEstimate]
StepSize表示更新的步长,平均方法的步长为1/n。我们可以将这个参数表示为 α t ( α ) \alpha_t(\alpha) αt(α)

一个简单的多臂赌博机的伪代码就可以写出来啦:
强化学习导论 | 第二章 多臂赌博机_第2张图片

探索(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好。
强化学习导论 | 第二章 多臂赌博机_第3张图片
补充:
关于第二章中讨论的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)+α(RtRtˉ)(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)α(RtRtˉ)π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值

这几种方法到底哪一种更好呢?书中给了一个对比图,但其实也依赖于具体的任务和参数的调节。
强化学习导论 | 第二章 多臂赌博机_第4张图片

你可能感兴趣的:(学习总结,强化学习)