在线学习(MAB)与强化学习(RL)[2]:IID Bandit的一些算法

在线学习(MAB)与强化学习(RL)[2]:IID Bandit的一些算法

本篇文章是MAB & RL系列文章的第二篇,给大家介绍一些IID bandit适用的算法。主要参考的是Slivkins教科书的第一章。

系列的第一篇文章:


1. Bandit问题简介

我们先简单回顾一下最基本的bandit问题的setting。非常简单,我们用 \mathcal{A} 这个集合表示action space,也就是arm的集合。注意,我们现在只考虑最基本的情形,因此我们让 \mathcal{A} 只包含有限个元素(记元素个数为 K ,即一共有 K 个arm)。同样,我们只考虑离散时间的决策问题,我们认为我们一共有 T 个阶段进行决策, 且 T 事先已知。

那么在 t=1,\ldots,T 的每个阶段中,一个bandit算法应该做如下两件事:

  1. 算法从 \mathcal{A} 中选择一个arm: a_t.
  2. 算法观察到 a_t 这个arm返回的奖励(reward) r_t.

这也是最基本的RL setting,我们的算法每次选择一个动作,所得到的反馈也就只有一个数,即我们的reward。IID的setting即是说每个arm返回的reward都是独立于彼此,且分布在整个时间轴上不变。

我们考虑一个概率空间,其中每个arm都有一个相应的随机变量 D_a 。算法每次选择一个arm a ,就会观察到 D_a 的一个样本。我们记每个arm期望的回报是 \mu(a):=\mathbb{E}[D_a]. 那么“最好”的arm即是拥有最高期望回报的arm:记 \mu^*:=\max_{a\in \mathcal{A}}\mu(a)=\mu(a^*).

我们评价任何一个bandit算法的好坏用的是regret。因为如果你事先知道哪个arm是最好的,你必然 T 时间全部都会去选择这个最好的arm,这也是理论上最佳的算法。当然,我们的算法并不提前知道每个arm对应的 D_a 的分布(需要learn),因此t时间的regret便定义为

R(t):=\mu^* t-\sum_{s=1}^t\mu(a_s).

我们算法的目标便是让 R(T) 尽可能地小。这个小一般指两个含义:(1)以很大的概率(with high probability)小。(2) \mathbb{E}[R(T)] 小。当然(1)一般也是蕴含(2)的,我们一般也叫期望的regret, \mathbb{E}[R(T)] ,为pseudo regret。


2. Uniform Exploration算法

研究bandit问题的好处就在于其中涉及的analysis都比较elementary,很容易把细节问题讨论的比较清楚。我们这边先考虑一个最简单的算法。即我们把所有的arm都先试个 N 次,然后选择这 N 次中得到reward feedback最好的那个arm,在余下的时间里就一直选择这个我们判断最好的arm。

这个uniform exploration的名字,是因为我们在开头对所有arm不加区分,都要试 N 次而得名。这个算法其实也是一种贪心算法,我觉得第一次了解bandit问题的人,其实都很容易第一反应会想出这样一个算法去应对。这个算法的思路着实是直接的不能再直接了:嗯,反正一开始我们对 D_a 一无所知,那肯定是要试他们个好几次,然后就拿试的最好的那个作为我们的解就好了!

本节我们就看下如何分析这个算法的表现,包括它的局限性。注意,这个算法本质上是将explore和exploit这两个行为完全的分开了:它是先纯粹地explore,再纯粹地exploit

我们会看到这个算法的分析也是非常的简单。实际上主体部分都是确定性(deterministic)的。为什么呢?因为我们算法的第一阶段对每个 D_a 都采集了 N 个样本,又由于我们已经假设 D_a 的样本都是IID的,因此,令每个arm的样本平均reward为 \bar \mu_a ,根据集中不等式(concentration inequality),Hoeffding's inequality,我们直接就有

\mathbb{P}\left[|\bar \mu(a)-\mu(a)|\leq \sqrt{\frac{2\log T}{N}}\right]\geq 1-\frac{2}{T^4}.

如果你事先不了解集中不等式,其实我这边只需要你了解一件事情,那就是在不知道 \mu(a) 的情况下,采集了 N 个样本之后,我们用样本平均值进行估计,这个估计对于 \mu(a) 的误差大概是 \sqrt{\log T/N} 级别的。同时,因为我们一般可以认为我们的分析是渐进(asymptotic)的,我们可以认为 T 非常大,因此这件事情发生的概率非常高( 2/T^4\rightarrow 0 )。

然后bandit算法们的analysis一般也就是建立在这些个高概率事件的基础上的。我们定义,如果对每个arm,上述事件都成立,这个总体的事件叫做clean event。然后呢,我们只要condition在这个clean event上之后,之后的算法分析就都是确定性的了。

简单起见,我们令 K=2, 并且假设clean event成立。那么如果我们的算法选择了arm a 而非arm a^* ,这就意味着 \bar \mu(a)>\bar \mu(a^*) ,又因为clean event成立,

\mu(a)+\sqrt{\frac{2\log T}{N}}\geq \bar \mu(a)> \mu(a^*)-\sqrt{\frac{2\log T}{N}}

于是我们知道 \mu(a^*)-\mu(a)=O\left(\sqrt{\frac{\log T}{N}}\right).

这意味着什么呢?也就是说,第二阶段我们每轮最多累计的regret是 \sqrt{\log T/N} 级别的(如果选择的arm是 a^* 那么累计的regret就是0)。而第一阶段因为我们两个arm都选择了 N 次,那么arm a\neq a^* 的这个arm导致的regret最多是 N (注意我们的reward都是在 [0,1] 之间)。因此,uniform exploration算法所导致的regret便是

R(T)\leq N+O\left( (T-2N) \sqrt{\frac{\log T}{N} } \right)\leq N+O\left( T \sqrt{\frac{\log T}{N} } \right) .

注意我们这里 N 可以任取,容易知道为了让右边项最小,我们可以取 N=T^{2/3}(\log T)^{1/3} ,那么就有 R(T)\leq O(T^{2/3}(\log T)^{1/3}). 于是我们就得到,以至少 1-1/T^4 的概率,我们的regret的阶大概是 T^{2/3} 的(当 T 很大的时候,我们可以忽略对数项)。至于pseudo regret,我们利用total expectation law也很容易得到类似的结果,

E[R(T)]\leq O(T^{2/3}(\log T)^{1/3}) + T\times O(T^{-4})\leq O(T^{2/3}\sqrt{\log T}).

最后,我们指出这里只是为了写起来方便,规定了只有2个arm。如果是 K>2 个arm,其实思路都是一样,只是clean event那里需要做一个K个随机变量的union bound,然后一样有

R(T)\leq NK+O\left( T \sqrt{\frac{\log T}{N} } \right) ,便得到 \mathbb{E}[R(T)]\leq T^{2/3} O((K\log T)^{1/3}).


如果同志们记得上次文章里的,这个问题的lower bound对 TK 的dependence都是 1/2 阶的。很显然,我们的贪心算法在 T 很大的时候效果很差。这个原因就是我们一开头需要不加区分的对每个arm做exploration。而注意我们的 N 大概要取到 T^{2/3} ,这就导致大量的时间被浪费了(比如有一些arm其实很明显比较差,就不需要继续试验下去了)。那么在实际中,有一类epsilon greedy算法,同样是贪心,不过可以让explore更均匀地分布在整个时间轴上。这类算法,在每一轮 t=1,\ldots,T 中,

  1. 掷一个成功率为 \epsilon_t 的骰子。
  2. 如果中了,那么explore:以均匀概率选择每个arm;如果没中,则exploit:选择目前为 \bar \mu(a) 最高的arm(注意这里 \bar \mu(a) 的定义变了,因为是动态变化的,而不像之前都是固定 N 个样本的均值)。

这个epsilon greedy算法实际中效果一般要比前者往往好很多,这里指出 \epsilon_t 一般都是设的比较小的,比如我们可以设 \epsilon_t\sim t^{1/3} ,这样期望的explore时间就跟之前一样是 T^{2/3} 。然后呢,我们会发现这个epsilon greedy理论的regret bound跟前面的算法一模一样。虽然其实证明起来稍微有点区别,不过这里就先不赘述了。


3. Upper confidence bound(UCB)算法

那么前面也提到了,在两个贪心算法里面,我们的explore阶段完全没有随着我们选择那些arm之后得到的reward反馈进行调整。很显然,这很不符合强化学习的精神,我们收集到的反馈应该被用来帮助我们更好的决策!即使bandit问题是比较简单的RL问题,我们还是应该考虑一个随着反馈而自动调整的算法。

事实上,如果我们现在定义 n_t(a) ,这个量表示截止时间 t ,arm a 被选择过的次数。根据前一节定义的clean event,我们可以定义 \mu(a) 的上下界:

\text{UCB}_t(a)=\bar \mu_t(a)+\sqrt{\frac{2\log T}{n_t(a)}}

\text{LCB}_t(a)=\bar \mu_t(a)-\sqrt{\frac{2\log T}{n_t(a)}}

之所以可以这么定义上下界,是因为我们知道在clean event成立的情况下,可以确定性地说UCB和LCB就是这个量的上下界。当然了,这里我们没有规定上来就把每个arm试验个 N 次,但是我们根据集中不等式也能马上发现,只要每个 n_t(a) 至少取1(每个arm至少试了一次),实际上UCB和LCB都能有定义;当然这里有一个问题,即Hoeffding不等式是要对固定数量的样本才能直接用,然而我们这个地方 n_t(a) 其实是个随机变量。

嗯那么这个地方确实有点微妙,简单起见我们的analysis还是只以 K=2 为例。这里的小技巧也很简单,我们只需要给每个arm a 配一条“带子”,这个带子上一共 T 个格子,第 j 个格子储存我们第 j 次选择这个arm所观察到的reward,记为 v_j(a) 。同样,记 \bar v_j(a) 为前j个格子的平均值。我们注意到 \mu(a) 仍然是 \bar v_j(a) 的期望,而 \bar v_j(a) 现在却可以看成固定样本数量的均值了!这样我们就可以直接用Hoeffding不等式得到

\mathbb{P}\left[|\bar v_j(a)-\mu(a)|\leq \sqrt{\frac{2\log T}{n_t(a)}}\right]\geq 1-\frac{2}{T^4}.

这样子,我们就可以叫 [\text{LCB}_t(a),\text{UCB}_t(a)]\mu(a) 的置信区间了。

那么接下来有一个很自然的想法,比如我们只有两个arm,bandit问题其实本质上就是尽快挑出哪个arm是更“好”的那一个。于是,我们是不是可以说当我们的算法运行足够的多的时间之后,一旦有一个arm的UCB比另一个arm的LCB还要低的时候,我们就可以抛弃它了?因为此时我们必然有很高的信心知道另一个arm就是要比它好。

具体来说,我们可以有这样一个successive elimination算法,

  1. 轮换选择两个arm。
  2. 如果发现 \text{UCB}_t(a)<\text{LCB}(a') ,那么就抛弃arm a ,之后就永远选择 a' 了。

我们知道因为 \mu(a) 的置信区间的宽度大概是 \sqrt{\log T/n_t(a)} 阶的,因此只要两个arm的平均reward差距超过 \sqrt{\log T/n_t(a)} ,这个算法在运行足够长的时间后一定可以以较高概率排除掉比较差的那个arm。当然,如果两个arm的平均reward不超过 \sqrt{\log T/n_t(a)} 这个量级,那么问题就是trivial的,因为这个时候regret的积累速度每轮最多就是 \sqrt{\log T/n_t(a)}T 轮下来最多也就是 \sqrt{T\log T} .

那么我们已经发现了,关键的量就是两个arm reward的差,我们定义为 \Delta:=|\mu(a)-\mu(a')|.

我们定义 t 为还没有arm被发现是比另一个差的之前的最后一回合。那么,这说明两者的置信区间还是有重合的,即 \Delta\leq 2\sqrt{\frac{\log T}{n_t(a)}}+2\sqrt{\frac{\log T}{n_t(a')}} ,注意我们因为是轮换着两个arm,所以 n_t(a)=n_t(a')=t/2 (假设t是偶数,不然就有个rounding),那么实际上这就告诉我们

\Delta=O\left( \sqrt{\frac{\log T}{t}} \right). 也就有 R(t)\leq \Delta\times t=O(\sqrt{t\log t}). 这样我们就发现这种算法确实在2个arm情况下regret bound要强于之前的贪心算法了。同样我们也有 \mathbb{E}[R(t)]= O(\sqrt{t\log T}).

很容易知道,这个算法可以直接推广到 K>2 的情形:

  1. 轮换选择所有没有被抛弃的
  2. 如果对任意两个arm a,a' ,发现 \text{UCB}_t(a)<\text{LCB}(a') ,那么就抛弃arm a

我们指出,定义 \Delta(a):=\mu(a^*)-\mu(a) ,即arm a 的mean reward和最好的mean reward的差距。关键就是对所有arm都有这个关系式:

\Delta(a)=O\left(\sqrt{\frac{\log T}{n_T(a)}}\right) .

直观来说,这个式子的意思就是一旦某个arm被选择了很多次(没有被抛弃),那么它就不会太差。而这个式子又是很显然的,因为跟前面2个arm的思路一样,只要我们没有抛弃这个arm,就意味着这个arm的置信区间和最好的arm的置信区间是重合的。

之后的analysis全部基于这个式子。记不记得上次的文章(系列文章[1])最后我们有两类lower bound?一个是 \log T 量级的一个是 \sqrt{T} 量级的,我们现在就推导这两个bound。一方面来说,根据式子我们直接就有

R(t)=\sum_{a\in \mathcal{A}}n_t(a)\Delta(a)\leq O(\sqrt{\log T}) \sum_{a\in \mathcal{A}}\sqrt{n_t(a)}.

利用Jensen不等式, \frac{1}{K}\sum_{a\in \mathcal{A}}\sqrt{n_t(a)}\leq \sqrt{\frac{1}{K}\sum_{a\in \mathcal{A} }n_t(a) }=\sqrt{\frac{t}{K}}.

于是我们就得到 R(t)=\sqrt{Kt\log T} .这就是第一类regret bound!

另一方面,注意到 \Delta(a) 的关系式也可以写成 n_T(a)\leq O\left( \frac{\log T}{(\Delta(a))^2 } \right) ,也就是反过来说,一个比较差的arm不会被选择很多次。这样我们得到

R(T)=\sum_{a\in \mathcal{A}}\Delta(a)n_T(a)\leq O(\log T) \sum_{\text{arms $a$ with } \mu(a) <\mu(a^*)} \frac{1}{\mu(a^*)-\mu(a)}.

这便是第二类bound!因此,我们也看到这就跟我们上次说的一样,这两类bound虽然看起来不太像,但实际上是同一种bound,主要是它们都来源于同一个关于 \Delta(a)n_t(a) 的关系式,这才是更本质的东西

我们指出,第二类关于T对数依赖的bound也是UCB类算法和贪心算法相比的另一大特色。UCB类算法相比贪心算法最大的优势,也就是我一开始说的,它的每步都在随着获得的reward反馈动态调整自己的策略,这个特性我们将在之后的RL算法中更加频繁的看到。

本节最后,我们指出市面上最流行的UCB算法应该是如下的。

  1. 先把每个arm选择一次。
  2. 在每轮 t ,选择arm a_t=\argmax\limits_{a\in \mathcal{A}}\text{UCB}_t(a).

简单来说,在每个arm已经试过一次的情况下,我们只需要每轮用最乐观(optimistic)的视角选一个最好的arm就行了。为什么说是乐观的,因为UCB是每个arm mean reward的置信上界。为什么这样就够了?因为很容易验证,在这种情况下我们就能保证 \Delta(a)=O\left(\sqrt{\frac{\log T}{n_T(a)}}\right) .

相信看到这里的你,想明白这个屡屡出现的关系式应该不是什么难事了,所以这里我就不再浪费口舌了~

好了,本篇文章就到这里,下期文章我们会讲贝叶斯设定下的bandit算法,主要就是Thompson sampling了。我将着重谈Thompson sampling和这个非贝叶斯设定下的UCB算法,其实也是有千丝万缕的联系的。敬请期待。

编辑于 2020-05-18 11:40