多臂老虎机问题可以被看作简化版的强化学习问题. 与强化学习不同, 多臂老虎机不存在状态信息, 只有动作和奖励, 算是最简单的“和环境交互中的学习”的一种形式.
问题介绍
问题定义
在多臂老虎机(MAB)问题, 有一个拥有根拉杆的老虎机, 拉动每一根拉杆都对应一个关于奖励的概率分布. 我们每次拉动其中一根拉杆, 就可以从该拉杆对应的奖励概率分布中获得一个奖励. 们在各根拉杆的奖励概率分布未知的情况下, 从头开始尝试, 目标是在操作 次拉杆后获得尽可能高的累积奖励.
形式化描述
表示为一个元组, 其中:
- 为动作集合, 其中一个动作表示拉动一个拉杆. 若多臂老虎机一共有根拉杆, 那动作空间就是集合, 其中表示一个动作
- 为奖励概率分布, 拉动每一根拉杆的动作都对应一个奖励概率分布, 不同拉杆的奖励分布通常是不同的. 假设每个时间步只能拉动一个拉杆, 多臂老虎机的目标为最大化一段时间步内累积的奖励:
这里是占位符, 表示任何和任意
累计懊悔
对于每一个动作, 我们定义其期望奖励为
且至少存在一根拉杆, 它的期望奖励不小于拉动其他任意一根拉杆, 我们将该最优期望奖励表示为
为了更加直观、方便地观察拉动一根拉杆的期望奖励离最优拉杆期望奖励的差距, 引入懊悔(regret), 定义为拉动当前拉杆的动作与最优拉杆的期望奖励差:
累计懊悔(cumulative regret) 即操作次拉杆后累积的懊悔总量, 对于一次完整的步决策, 累计懊悔为
MAB 问题的目标为最大化累积奖励, 等价于最小化累积懊悔
估计期望奖励
为了知道拉动哪一根拉杆能获得更高的奖励, 我们需要估计拉动这根拉杆的期望奖励. 由于只拉动一次拉杆获得的奖励存在随机性, 所以需要多次拉动一根拉杆, 然后计算得到的多次奖励的期望, 其算法流程如下所示.
其中对于循环的第四行
采用这种增量式更新可以把时间复杂度和空间复杂度均优化到
下实现一个拉杆数为的多臂老虎机. 其中拉动每根拉杆的奖励服从伯努利分布(Bernoulli distribution), 即每次拉下拉杆有的概率获得的奖励为, 有的概率获得的奖励为 . 奖励为代表获奖, 奖励为代表没有获奖.
探索和利用的平衡
在多臂老虎机问题中, 一个经典的问题就是探索与利用的平衡问题. 探索(exploration) 是指尝试拉动更多可能的拉杆, 这根拉杆不一定会获得最大的奖励, 但这种方案能够摸清楚所有拉杆的获奖情况. 例如, 对于一个 臂老虎机, 我们要把所有的拉杆都拉动一下才知道哪根拉杆可能获得最大的奖励. 利用(exploitation) 是指拉动已知期望奖励最大的那根拉杆, 由于已知的信息仅仅来自有限次的交互观测, 所以当前的最优拉杆不一定是全局最优的
于是在多臂老虎机问题中, 设计策略时就需要平衡探索和利用的次数, 使得累积奖励最大化 一个比较常用的思路是在开始时做比较多的探索, 在对每根拉杆都有比较准确的估计后, 再进行利用. 目前已有一些比较经典的算法来解决这个问题, 例如 -贪婪算法、上置信界算法和汤普森采样算法等
-贪心算法
完全贪婪算法即在每一时刻采取期望奖励估值最大的动作(拉动拉杆), 这就是纯粹的利用, 而没有探索, 所以我们通常需要对完全贪婪算法进行一些修改, 其中比较经典的一种方法为 Epsilon-Greedy Algorithm, 它完全贪婪算法的基础上添加了噪声, 每次以 的概率选择以往经验中期望奖励估值最大的那根拉杆(利用), 以概率随机选择一根拉杆(探索)
随着探索次数的不断增加, 我们对各个动作的奖励估计得越来越准, 此时我们就没必要继续花大力气进行探索. 所以在-贪婪算法的具体实现中, 我们可以令随时间衰减, 即探索的概率将会不断降低
上置信界算法
设想这样一种情况: 对于一台双臂老虎机, 其中第一根拉杆只被拉动过一次, 得到的奖励为;第二根拉杆被拉动过很多次, 我们对它的奖励分布已经有了大致的把握. 这时你会怎么做? 或许你会进一步尝试拉动第一根拉杆, 从而更加确定其奖励分布. 这种思路主要是基于不确定性, 因为此时第一根拉杆只被拉动过一次, 它的不确定性很高. 一根拉杆的不确定性越大, 它就越具有探索的价值, 因为探索之后我们可能发现它的期望奖励很大. 我们在此引入不确定性度量 , 它会随着一个动作被尝试次数的增加而减小. 我们可以使用一种基于不确定性的策略来综合考虑现有的期望奖励估值和不确定性, 其核心问题是如何估计不确定性.
对于一个臂老虎机, 设表示在第步拉杆被拉下所获得的奖励, 并设表示第步选择的老虎机编号, 这里的和之前选择的拉杆编号和其相应的奖励有关, 同时也包含一定随机性(玩家可能会在其选择策略中加入随机因子)
现在定义表示拉杆在前轮被拉下的次数
和为在前轮从拉杆上获得的奖励总和
这里的表示指示函数 再定义为在拉杆被拉动次后得到的平均奖励
假设经过轮拉动拉杆后, 每一个拉杆都被拉过了, 最平凡的策略就是假设我们估计的就是该拉杆实际的奖励期望, 然后选择估计值最高的拉杆拉动, 但是这显然不是最优解.
因此我们要通过某种方式来知道我们当前估计的置信程度. 也即是说, 对于一个小量, 利用Hoeffding's Inequality 我们有
于是
于是对的估计便有置信上界
由此给出UCB算法
- 在前轮按顺序把每个拉杆都拉一遍
- 对, 选择
也可以一开始先不把所有拉杆都拉一遍, 而选用
其中的是我们可以调整的系数
Thompson 采样
先假设拉动每根拉杆的奖励服从一个特定的概率分布, 然后根据拉动每根拉杆的期望奖励来进行选择. 但是由于计算所有拉杆的期望奖励的代价比较高, 汤普森采样算法使用采样的方式, 即根据当前每个动作的奖励概率分布进行一轮采样, 得到一组各根拉杆的奖励样本, 再选择样本中奖励最大的动作. 可以看出, 汤普森采样是一种计算所有拉杆的最高奖励概率的蒙特卡洛采样方法.
在实际情况中, 我们通常用 Beta分布对当前每个动作的奖励概率分布进行建模. 具体来说, 若某拉杆被选择了次, 其中次奖励为 , 次奖励为 , 则该拉杆的奖励服从Beta 分布
每次对每个拉杆进行一次采样, 对其采样的值进行排序, 然后贪心第选择值最大的作为下一次的动作