概述
算法来源文章《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和蒙特卡洛的改进版本的搜索算法。
蒙特卡洛搜索选择下一个臂,存在的问题。
- 选择下一个臂,只基于当前臂的评估表现,而不考虑之前此臂的表现,和这个臂被拉的次数
- 蒙特卡洛搜索,面对臂数特别多的情况下,搜索具有很强的随机性
- 蒙特卡洛搜索不使用超参,这意味着我们不能给模型一个先验条件。
此外还有一点,蒙特卡洛算法在选择candidate actions,是随机挑选的
挑选的节点服从均匀分布,所以说蒙特卡洛在选择candidate actions集合的时候,具有很强的随机性。而当action非常多的时候,少量的actions中很难找到更优的解。
UCT的改进之处:
- 选择下一个臂:
I t = arg max i ∈ { 1 , . . . , k } { X ˉ i , T i ( t − 1 ) + c t − 1 , T i ( t − 1 ) } I_t = mathop{argmax_{iin{1,...,k}}}{{bar{X}_{i,T_i(t-1)} + c_{t-1,T_i(t-1)}}} It=argi∈{1,...,k}max{Xˉi,Ti(t−1)+ct−1,Ti(t−1)}
这里 X ˉ i , T i ( t − 1 ) bar{X}_{i,T_i(t-1)} Xˉi,Ti(t−1)是过去i这个臂带来的平均红利,如此我们可以参考此臂之前的表现,而不是当前此臂的带来红利。除此之外,我们只需要选一个臂,而不是以前的candidate actions集合。这在应对大规模搜索的时候,非常有效。 -
c
t
,
s
=
2
C
p
ln
t
s
c_{t,s}=2C_psqrt{frac{ln t}{s}}
ct,s=2Cpslnt
这里 C p C_p Cp是一个超参,可以是我们在exploit和explore之间进行调整,如果设为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}}gemu_i+c_{t,s})le t^{-4} P(Xisˉ≥μi+ct,s)≤t−4
P ( X i s ˉ ≤ μ i + c t , s ) ≥ t − 4 mathbb{Rho}(bar{X_{is}}lemu_i+c_{t,s})ge t^{-4} P(Xisˉ≤μi+ct,s)≥t−4
至此我们可以看到 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(t−1)+ct−1,Ti(t−1)计算的就是一个 X ˉ bar{X} Xˉ的最大上限区间。如若臂i在过去被选中的次数多,则我们对 X ˉ bar{X} Xˉ比较确信,所以置信区间窄,所以最大置信度区间上限相对小。如若臂i在过去被选中的次数少,则我们对 X ˉ bar{X} Xˉ不确信,所以置信区间宽,所以最大置信度区间上限相对大,更容易选中。所以UCT算法给予过去表现不好的臂,一定几率翻身的机会。 - UCT 改进之后的特点:
- 综合考虑了过去的拉臂带来的影响。比如,过去拉臂次数多且收益多的臂,置信度上限区间会很大,很容易被再次选中。
- 通过Cp超参数,可以调整模型在“探索”和“采用”之间的平衡,避免模型早熟。
- 比起蒙特卡洛搜索算法,只用搜一个节点的子空间,不用再搜索其它节点的子空间,搜索效率上获得了很大的提高。
UCT 实验结果:
UCT可以在更快的迭代次数内收敛到目标错误率,而MMMC,和MC不能收敛。
最后
以上就是洁净小懒虫为你收集整理的上限置信度区间算法(UCT)1.多臂老虎机的全部内容,希望文章能够帮你解决上限置信度区间算法(UCT)1.多臂老虎机所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复