背景
A/B测试长期以来一直是软件和机器学习领域中进行实验的基石。通过比较网页、应用程序、功能或算法的两个版本,企业可以根据预定义的指标确定哪个版本表现更好。然而,随着业务问题或实验复杂性的增加,A/B测试可能在实证评估成功开发方面成为一个限制。多臂老虎机(Multi-Armed Bandits,MAB)是一种强大的替代方法,能够在企业中进行复杂实验时,通过动态平衡探索和利用来扩大实验规模。
A/B测试的局限性
虽然A/B测试在简单实验中非常有效,但它也有一些局限性:
- 静态分配:A/B测试通常会平均分配流量或按照固定比例分配,这可能会将资源浪费在表现不佳的变体上。
- 探索与利用的矛盾:A/B测试过度关注探索新选项的表现,而往往忽略了充分利用已知优良选项的潜在收益。
- 时间效率低:A/B测试可能需要耗费大量时间,因为需要足够的数据收集时间才能得出可靠的结论。
- 可扩展性差:在复杂系统中同时管理多个A/B测试可能会变得繁琐且资源密集。
Multi-Armed Bandits | 多臂老虎机介绍
多臂老虎机问题是强化学习中的经典问题,要求一个代理在多个选项(即“臂”)之间进行选择,以最大化长期的总奖励。
“探索”(Exploration)和“利用”(Exploitation)是指代理在决策过程中必须平衡的基本权衡关系,这一权衡对于多臂老虎机算法中的决策过程至关重要。
-
探索(Exploration)
探索指的是尝试不同的选项(或“臂”),以获取更多关于这些选项可能产生的奖励的信息。探索的目标是减少不确定性,并发现哪些选项能带来最高的奖励。 -
利用(Exploitation)
相反,利用是指基于目前所收集到的信息,选择当前看似能提供最高奖励的选项(或“臂”)。利用的主要目的是通过使用已知信息来最大化即时奖励。
多臂老虎机算法的类型:
- ε-贪婪算法(Epsilon-Greedy):算法以概率 ε 选择一个随机的选项(arm)进行探索,以概率 1-ε 选择当前已知最优的选项进行利用。
- UCB算法(Upper Confidence Bound,上置信界):该算法根据每个选项的平均奖励以及其奖励的不确定性或方差来选择选项,偏向于选择那些测试次数较少的选项,从而在计算的范围内进行探索。
- 汤普森采样(Thompson Sampling):这是一种贝叶斯方法,算法从每个选项奖励的后验分布中抽样,根据每个选项为最优的可能性来平衡探索和利用。
最佳多臂赌博机(Multi-Armed Bandit)Python库
- MABWiser
- 概述: MABWiser 是一个专为多臂赌博机算法设计的用户友好型库。它支持多种MAB策略,如epsilon-greedy、UCB和Thompson Sampling。
- 功能: 简单易用的API,支持无上下文和有上下文的赌博机,支持在线和离线学习。
- Vowpal Wabbit (VW)
- 概述: Vowpal Wabbit 是一个快速高效的机器学习系统,支持上下文赌博机及其他学习任务。
- 功能: 高性能、可扩展,支持具有丰富特征表示的上下文赌博机。
- Contextual
- 概述: Contextual 是一个面向无上下文和有上下文赌博机的全面库,提供灵活的框架以实现各种MAB算法。
- 功能: 详细文档,支持多种赌博机策略,且能与现实数据轻松集成。
- Keras-RL
- 概述: Keras-RL 是一个用于强化学习的库,包含赌博机算法的实现。它基于Keras构建,易于与深度学习模型结合使用。
- 功能: 与神经网络集成,支持复杂环境,提供易于使用的API。
Examples with MABWiser:
# Import MABWiser Library
from mabwiser.mab import MAB, LearningPolicy, NeighborhoodPolicy
# Data
arms = ['Arm1', 'Arm2']
decisions = ['Arm1', 'Arm1', 'Arm2', 'Arm1']
rewards = [20, 17, 25, 9]
# Model
mab = MAB(arms, LearningPolicy.UCB1(alpha=1.25))
# Train
mab.fit(decisions, rewards)
# Test
mab.predict()
Example from MABWiser of Context Free MAB setup
# 1. Problem: A/B Testing for Website Layout Design.
# 2. An e-commerce website experiments with 2 different layouts options
# for their homepage.
# 3. Each layouts decision leads to generating different revenues
# 4. What should the choice of layouts be based on historical data?
from mabwiser.mab import MAB, LearningPolicy
# Arms
options = [1, 2]
# Historical data of layouts decisions and corresponding rewards
layouts = [1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 1]
revenues = [10, 17, 22, 9, 4, 0, 7, 8, 20, 9, 50, 5, 7, 12, 10]
arm_to_features = {1: [0, 0, 1], 2: [1, 1, 0], 3: [1, 1, 0]}
# Epsilon Greedy Learning Policy
# random exploration set to 15%
greedy = MAB(arms=options,
learning_policy=LearningPolicy.EpsilonGreedy(epsilon=0.15),
seed=123456)
# Learn from past and predict the next best layout
greedy.fit(decisions=layouts, rewards=revenues)
prediction = greedy.predict()
# Expected revenues from historical data and results
expectations = greedy.predict_expectations()
print("Epsilon Greedy: ", prediction, " ", expectations)
assert(prediction == 2)
# more data from online learning
additional_layouts = [1, 2, 1, 2]
additional_revenues = [0, 12, 7, 19]
# model update and new layout
greedy.partial_fit(additional_layouts, additional_revenues)
greedy.add_arm(3)
# Warm starting a new arm
greedy.warm_start(arm_to_features, distance_quantile=0.5)
结论:
多臂老虎机算法为传统的 A/B 测试提供了一种复杂且可扩展的替代方案,尤其适合企业环境中的复杂实验。通过动态平衡探索和利用,MABs(多臂老虎机算法)提高了资源效率,提供了更快的洞察,并改善了整体性能。对于希望突破实验边界的软件和机器学习工程师来说,将 MABs 纳入工具包中可以在优化和扩展实验方面取得显著进展。以上我们仅仅触及了强化学习领域中丰富且活跃研究文献的冰山一角,足以帮助您入门。