上限置信度区间算法(UCT)

算法来源文章《Bandit based Monte-Carlo Planning》,06年的ECML。建议想做游戏人机玩家的同学看看。相关的算法还有最大最小算法,alpha-beta算法等,而这些算法普遍存在不收敛,和应对超大搜索空间不足的问题。

1.多臂老虎机

多臂老虎机问题,简单来说,我有很多个老虎机,虽然都是老虎机但它们的中奖率采取的是不同的概率分布,现在我希望在有限次的摇臂过程中,获得最大的收益,我该怎么做呢?
最简单的想法肯定是,我对每一个老虎机都摇N次,根据大数定律,频率最终会等于概率。然后我就一个劲的去摇那个中奖概率最高的老虎机不就行了吗?
想法很好,但是实际上不可能给你那么多机会。那么多臂老虎机,本质上就是,在一个解空间中搜索最优解的过程,我们要找到一组选择序列,这个序列可以让我们收益最大化。

Monte-Carlo Planning

蒙特卡洛的算法有很多,最熟悉的恐怕就是通过正方形内切圆,根据采样去计算π。蒙特卡洛算法有一个特点,就是抽样(或者说搜索)越多,那么我们获得最优解的可能性就越高。
以下就是蒙特卡洛搜索算法的伪代码。
在这里插入图片描述
我们可以看到,这种搜索算法本质上就是启发式搜索,一种沿着子节点递归的一个过程。
1.在实际运行中,若子节点非常多的时候,它会采取一种选择策略(均匀采样)从所有可能的actions(因为action非常多,所以不能一一遍历,只能选择部分)中,选出部分candidate actions。
2.在candidate actions中,为了选出能带来最大收益的action,它必须对action进行一个一一评估的过程,即求 R e w a r d ( v i ) Reward(v_i) Reward(vi)
3.但是求 R e w a r d ( v i ) Reward(v_i) Reward(vi),不是仅仅只考虑当前所选择的action,还要考虑选择了这个action之后,当前的state会到一个什么样的新状态,这个新状态又会带给我们多大的未来收益呢?
4.选择一个能够给我们带来未来最大收益即红利(ps:不是当前最大收益)的action,作为我们的最终选择。然后递归1~4的步骤。

首先,如果这里我们选择了当前最大收益的action作为我们下一步的话。这个搜索算法就退化为了贪心的算法,首先贪心的算法很容易早熟,而且不容易求的最优解。而蒙特卡洛法呢,通俗来说,就是我们下棋过程中的一步看三招,启发因子是action未来可以带给我们的最大收益。而伪代码中的depth就可以理解为,这个未来是有多远,depth越深看的越远,但是算法复杂度也指数上升。
这个搜索算法因此完全符合蒙特卡洛性质,通过随机地,递归地选择candidate action,来找到最大红利,来获取近似的最优解

UCT

UCT是一个基于UCB和蒙特卡洛的改进版本的搜索算法。
蒙特卡洛搜索选择下一个臂,存在的问题

  1. 选择下一个臂,只基于当前臂的评估表现,而不考虑之前此臂的表现,和这个臂被拉的次数
  2. 蒙特卡洛搜索,面对臂数特别多的情况下,搜索具有很强的随机性
  3. 蒙特卡洛搜索不使用超参,这意味着我们不能给模型一个先验条件。
    此外还有一点,蒙特卡洛算法在选择candidate actions,是随机挑选的在这里插入图片描述
    挑选的节点服从均匀分布,所以说蒙特卡洛在选择candidate actions集合的时候,具有很强的随机性。而当action非常多的时候,少量的actions中很难找到更优的解。

UCT的改进之处:

  1. 选择下一个臂:
    I t = arg ⁡ max ⁡ i ∈ { 1 , . . . , k } { X ˉ i , T i ( t − 1 ) + c t − 1 , T i ( t − 1 ) } I_t = \mathop{\arg\max_{i\in\{1,...,k\}}}\{{\bar{X}_{i,T_i(t-1)} + c_{t-1,T_i(t-1)}}\} It=argi{1,...,k}max{Xˉi,Ti(t1)+ct1,Ti(t1)}
    这里 X ˉ i , T i ( t − 1 ) \bar{X}_{i,T_i(t-1)} Xˉi,Ti(t1)是过去i这个臂带来的平均红利,如此我们可以参考此臂之前的表现,而不是当前此臂的带来红利。除此之外,我们只需要选一个臂,而不是以前的candidate actions集合。这在应对大规模搜索的时候,非常有效。
  2. c t , s = 2 C p ln ⁡ t s c_{t,s}=2C_p\sqrt{\frac{\ln t}{s}} ct,s=2Cpslnt
    这里 C p C_p Cp是一个超参,可以是我们在exploitexplore之间进行调整,如果设为0,此算法直接退化为一个贪心算法,贪心度量为过去平均表现最好的臂,如此会很快收敛,而且也找不到更优解。其次 t t t s s s分别代表,臂i被选中的次数,和一共选臂的总数。即臂i在过去被选中的次数越多 c t , s c_{t,s} ct,s越小。
    P ( X i s ˉ ≥ μ i + c t , s ) ≤ t − 4 \mathbb{\Rho}(\bar{X_{is}}\ge\mu_i+c_{t,s})\le t^{-4} P(Xisˉμi+ct,s)t4
    P ( X i s ˉ ≤ μ i + c t , s ) ≥ t − 4 \mathbb{\Rho}(\bar{X_{is}}\le\mu_i+c_{t,s})\ge t^{-4} P(Xisˉμi+ct,s)t4
    至此我们可以看到 X ˉ i , T i ( t − 1 ) + c t − 1 , T i ( t − 1 ) \bar{X}_{i,T_i(t-1)} + c_{t-1,T_i(t-1)} Xˉi,Ti(t1)+ct1,Ti(t1)计算的就是一个 X ˉ \bar{X} Xˉ的最大上限区间。如若臂i在过去被选中的次数多,则我们对 X ˉ \bar{X} Xˉ比较确信,所以置信区间窄,所以最大置信度区间上限相对小。如若臂i在过去被选中的次数少,则我们对 X ˉ \bar{X} Xˉ不确信,所以置信区间宽,所以最大置信度区间上限相对大,更容易选中。所以UCT算法给予过去表现不好的臂,一定几率翻身的机会。
  3. UCT 改进之后的特点:
    1. 综合考虑了过去的拉臂带来的影响。比如,过去拉臂次数多且收益多的臂,置信度上限区间会很大,很容易被再次选中。
    2. 通过Cp超参数,可以调整模型在“探索”和“采用”之间的平衡,避免模型早熟。
    3. 比起蒙特卡洛搜索算法,只用搜一个节点的子空间,不用再搜索其它节点的子空间,搜索效率上获得了很大的提高。
      UCT 实验结果:
      在这里插入图片描述UCT可以在更快的迭代次数内收敛到目标错误率,而MMMC,和MC不能收敛。
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值