上下文老虎机(Contextual Bandit)是一种在线决策方法:每次做选择之前,先看当前场景的特征,再决定是尝试新选项,还是继续用已知效果最好的那个。
先打个比方。赌场里有一排老虎机,每台中奖率不同。经典的多臂老虎机(Multi-armed Bandit)问题是:你不知道哪台好,只能反复拉,边试边记录,最终把大部分次数押在最好的那台上。但现实往往更复杂——每局开始前,还会亮出一张"场景卡":来的是新客还是老客、是工作日还是周末、用的是手机还是电脑。你要根据这张卡来决定拉哪台。这就是上下文老虎机:那个"场景卡"叫上下文(context),拉哪台叫动作(action),掉出来的钱叫奖励(reward)。
它的循环很朴素:观察上下文 → 选一个动作 → 拿到奖励 → 更新模型。重复下去,目标不是单次赢最多,而是一段时间内累计奖励最大。这里天然有个矛盾:利用(Exploitation)已知最优动作,短期稳赚;探索(Exploration)没试过的动作,可能发现更好的选择。常见做法有 ε-贪心、汤普森采样(Thompson Sampling)、LinUCB 等,核心都是在两者之间找平衡。具体实现细节各家不同,以官方文档为准。
它和相邻概念的区别,可以这样看:
| 维度 | 多臂老虎机 | 上下文老虎机 | 强化学习 |
|---|---|---|---|
| 是否看场景 | 不看 | 看当前特征 | 看当前状态 |
| 动作是否影响未来 | 不影响 | 通常不影响 | 会影响下一状态 |
| 反馈 | 即时奖励 | 即时奖励 | 可能延迟、稀疏 |
| 典型目标 | 找全局最优臂 | 学"什么场景选什么" | 学长期最优策略 |
和 A/B 测试相比,A/B 测试是把流量固定分给几组,跑完再判断;上下文老虎机则边跑边调,还会根据不同用户给不同选择。和强化学习相比,它通常假设这次动作不会改变下一次的处境,只关心眼前的奖励,所以更简单、更容易落地。
对从业者来说,它常见于推荐系统、广告投放、营销触达、内容排序和定价试验。难点往往不在算法,而在三件事:上下文特征选得准不准、奖励定义得对不对、反馈来得快不快。奖励稀疏或延迟时,模型学得会很慢。对普通人来说,你刷到的内容、看到的按钮、收到的优惠,很可能就是系统在"试探"你——它一边利用你过去的偏好,一边悄悄探索你是不是变了口味。
