关于Vowpal Wabbit上下文老虎机ε-贪心探索机制的技术问询
上下文老虎机ε-贪心机制实现疑问解答
问题描述
我正在为网站用户构建上下文老虎机来推荐动作,动作会随用户上下文动态调整(比如不会给已注册用户推荐注册),因此使用了Vowpal Wabbit的--cb_explore_adf模型,代码如下:
vw = Workspace(f"--cb_explore_adf --cb_type mtr -q PA --quiet --epsilon 0.3")
预测数据点示例:
shared |Page pageViewCount:1 videoViewCount:5 language=en user_nation=US page_section=sports time_on_site:3.467392051674073 |Action a=create_oid |Action a=recommend_content |Action a=favorites |Action a=download_app |Action a=do_nothing |Action a=survey
模型预测输出为:
[0.03333333507180214, 0.03333333507180214, 0.8333333730697632, 0.03333333507180214, 0.03333333507180214, 0.03333333507180214]
我疑惑ε-贪心的探索部分如何实现:如果选择利用(exploitation)会选第3个动作,但不清楚怎么基于输出应用该机制,也就是70%选最优动作、30%进行探索。
解答
ε-贪心在Vowpal Wabbit中的核心逻辑
当你设置--epsilon 0.3时,模型已经将ε-贪心规则融合到输出的概率分布中,不需要手动拆分70%和30%的概率:
- 70%概率(1-ε):直接选中模型判定的最优动作(即输出概率最高的第3个
favorites动作),这是利用阶段,目的是最大化当前推荐的收益。 - 30%概率(ε):从所有6个动作中均匀随机选择一个(也可能选中最优动作),这是探索阶段,目的是发现潜在更优的动作。
基于输出概率的动作选择方法
你看到的输出数组是每个动作的被选中概率,直接基于这个概率分布做随机抽样就能实现ε-贪心策略:
- 先计算概率的累积分布:
- 第1个动作:0~0.0333
- 第2个动作:0.0333~0.0666
- 第3个动作:0.0666~0.9(0.0666+0.8333≈0.9)
- 第4个动作:0.9~0.9333
- 第5个动作:0.9333~0.9666
- 第6个动作:0.9666~1.0
- 生成一个0到1之间的随机数
- 找到随机数落在的区间,对应的动作就是最终要推荐的动作
这样抽样的结果完全符合ε-贪心的规则:70%的概率选中最优动作,30%的概率探索其他动作(包括小概率重复选中最优动作)。
关于输出概率数值的说明
你的例子中最优动作概率约为0.8333,其他动作约为0.0333,这是模型本身判定第3个动作是绝对最优(基础得分权重为1),再叠加ε-贪心规则后的结果。即使概率数值看起来和理论计算有差异,核心逻辑不变——基于该分布抽样即可实现设定的ε-贪心策略。
内容的提问来源于stack exchange,提问作者Cris Pineda
相关产品推荐
相关产品推荐

