想象夜市尽头有家“小明奶茶铺”。老板小明面前摆着三台老虎机——不,是三桶新研发的口味:桂花酿、海盐芝士、青提气泡茶。他不知道哪桶会大卖,但每来一位顾客,他都能瞄到些线索:今晚是闷热还是凉爽?来的是放学的中学生还是加班的白领?一个人独行还是结伴说笑?每推荐一杯、观察顾客反应,就像拉了一次老虎机的拉杆:可能命中爆款赚翻,也可能被嫌弃、白白浪费一杯原料。 小明面临永恒的纠结:如果只卖目前最受欢迎的,新口味永远没机会证明自己;如果逢人就乱推新品,老顾客迟早跑光。这个“边赚钱边试探、还要根据现场情报做判断”的难题,学术上叫上下文老虎机(Contextual Bandit)。它是推荐系统冷启动与多样性问题背后的决策引擎:如何在信息不足时,靠聪明策略快速搞清楚“给谁推什么”,同时把收益损失降到最低。读完这篇文章,你会明白小明的经营之道,也掌握这枚算法界“摇钱机器”的完整图纸。

岗位关联

掌握上下文老虎机,等于握住推荐系统冷启动与多样性问题的算法钥匙,是搜索、推荐、广告方向工程师的必修核心竞争力。

目录
  1. 可视化演示
  2. 困境起源:探索与利用的两难
  3. 核心原理:上下文就是情报
  4. 经典算法:LinUCB 聪明打分
  5. 特征构建:情报的原材料
  6. 冷启动应用:新品试卖的科学
  7. 多样性保障:探索即多样
  8. 工程实践:复盘与落地
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

模拟多臂老虎机的探索与利用权衡、LinUCB置信上界选择与三种算法累积奖励对比,展示上下文老虎机决策过程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

模式1:探索与利用权衡 红色臂当前估计最优(利用) 灰色臂不确定待探索 ε概率探索,1-ε概率利用 探索利用权衡影响累积收益。

困境起源:探索与利用的两难

开业前夜,小明手里只有二十杯原料。方案 A:给三种口味相同的备货,挨个试水——这就是“探索”;方案 B:第一晚谁卖得多,第二天就主推谁——这就是“利用”。他选了 B,结果第二天就吃了亏:桂花酿在闷热天爆卖,海盐芝士下雨天才是王者。第一晚的“利用”建立在太少数据上,反而错失了真正的爆款。

这个矛盾在算法里被称为多臂老虎机(Multi-Armed Bandit)问题:你面对 K 个“臂”(候选物品),每轮只能选一个,随后收获一个奖励。选的依据只有过去的观察:选择当前平均收益最高的臂,是贪心利用;随机或刻意选个冷门臂,是探索。两者冲突:过度利用让估计越来越偏,过度探索则白白浪费收益。

为了量化“亏了多少”,算法界定义了遗憾(Regret)——与“上帝视角下每轮都选最优臂”相比,你的策略少赚了多少。它是一个累加指标,好的策略要让遗憾增长得尽可能缓慢。

小明第一晚亏掉的不是某杯奶茶的成本,而是“本该卖桂花酿却推了海盐芝士”的遗憾。冷启动所以难,就是因为数据太少时,任何“利用”都可能是建立在运气上的错觉,这正是遗憾的源头。

RT=∑t=1T(max⁡a∈AE[rt(a)]−E[rt(at)])\displaystyle R_T = \sum_{t=1}^{T} \left( \max_{a \in \mathcal{A}} \mathbb{E}[r_t(a)] - \mathbb{E}[r_t(a_t)] \right)
遗憾不是“某一次选错”的后悔,而是从第 1 轮到第 T 轮,每一轮“错过的收益”的累积总和。
  1. 求和符号把第 1 轮到第 T 轮的单轮遗憾累加起来,T 是总决策轮数,代表经营的总时长。
    ∑t=1T\sum_{t=1}^{T}
  2. 最优期望收益理想情况下每轮都选全局最优臂 \( a \) 的期望奖励,这是“如果能提前知道答案”的收益上限。
    max⁡a∈AE[rt(a)]\max_{a \in \mathcal{A}} \mathbb{E}[r_t(a)]
  3. 实际期望收益我们的策略在第 t 轮真正选出的臂 \( a_t \) 所带来的期望奖励。
    E[rt(at)]\mathbb{E}[r_t(a_t)]
  4. 相减再累加上限减去实际所得,就是这场“夜市经营”每轮的潜在损失,遗憾越小说明策略越接近上帝视角。
    ∑t=1T(max⁡a∈AE[rt(a)]−E[rt(at)])\sum_{t=1}^{T}\left( \max_{a \in \mathcal{A}} \mathbb{E}[r_t(a)] - \mathbb{E}[r_t(a_t)] \right)

核心原理:上下文就是情报

摆摊一周后,小明摸出了门道:不看顾客就推荐,等于蒙眼拉老虎机。但他眼尖——学生放学爱喝果茶,白领加班要咖啡因,下雨天没人碰冰饮。这三条“情报”让推荐成功率直线上升。上下文老虎机(Contextual Bandit)的核心,就是把这种“现场情报”纳入决策。

普通多臂老虎机对所有人都推同一套。而上下文老虎机每轮额外拿到一个上下文特征向量 \( x_t \),决策从“选期望最高的臂”升级为“在给定情报的前提下,选条件期望最高的臂”。数学上定义本轮的最优臂为:

这意味着奖励不是固定的属性,而是“上下文 + 候选品”共同作用的结果。整个学习过程是在线的:每轮先决策、拿奖励、再更新参数,循环往复,永不离线。

情报的价值是决定性的:同样的桂花酿,推给学生是鸡肋,推给下夜班的白领就是救赎。上下文老虎机的全部智慧,就在于把每一轮决策从“蒙眼拉杆”变成“看牌下注”。

at∗=arg⁡max⁡a∈AE[rt∣xt,a]\displaystyle a_t^* = \arg\max_{a \in \mathcal{A}} \mathbb{E}[r_t \mid x_t, a]
  1. 上下文特征第 t 轮观察到的那手“情报”——用户、物品、场景三类信息拼成的向量。
    xtx_t
  2. 条件期望给定上下文 \( x_t \) 和候选臂 \( a \) 时,奖励 \( r_t \) 的期望值,是“情报加持后的预判”。
    E[rt∣xt,a]\mathbb{E}[r_t \mid x_t, a]
  3. 取最大值在所有候选臂中挑出预判收益最高的那个,这就是本轮的最优决策。
    arg⁡max⁡a∈A\arg\max_{a \in \mathcal{A}}
  4. 最优臂记号\( a_t^* \) 只是“理论最优”,现实中无法上帝视角拿到,只能靠算法不断逼近。
    at∗a_t^*

经典算法:LinUCB 聪明打分

小明给每款口味记了两本账:一本是“平均分”(销量不错),一本是“样本数”(只试过三次)。只按平均分排,试过三次却满分的新口味会挤掉试过三百次的稳定款;只看样本数,又永远轮不到黑马。聪明的做法是给“样本少”的口味加一点“潜力分”。

LinUCB(Linear Upper Confidence Bound)假设奖励与特征线性相关:\(\mathbb{E}[r \mid x, a] = x^{\top}\theta_a\)。它把每个臂的观测数据用岭回归(带正则化的最小二乘,防止过拟合)拟合出参数估计 \(\hat{\theta}_a\),同时算出该臂在当前上下文下的置信区间。决策规则是“收益估计 + 不确定性红利”:

其中 \( A_a = X_a^{\top} X_a + \lambda I \) 是该臂历史特征的累积信息矩阵。数据越多,第二项越小,算法就越“自信”;反之,数据稀缺的臂会获得额外加分,从而获得被尝试的机会。

小明终于学会了“有原则的冒险”:雨天样本少,海盐芝士的置信区间宽,算法就主动推它补数据;等样本攒够了,潜力分自然消失,一切回归实力说话。与最简单的 ε-贪心(固定概率乱试)相比,LinUCB 把探索精准投向“最需要信息”的地方,是更高级的经营智慧。

at=arg⁡max⁡a∈A(xt⊤θ^a+αxt⊤Aa−1xt)\displaystyle a_t = \arg\max_{a \in \mathcal{A}} \left( x_t^{\top}\hat{\theta}_a + \alpha \sqrt{x_t^{\top} A_a^{-1} x_t} \right)
  1. 线性收益预测用特征点乘该臂的参数,得到“平均分”式的收益估计。
    xt⊤θ^ax_t^{\top}\hat{\theta}_a
  2. 信息矩阵逆由该臂历史特征累积而来,数据越少、\( A_a^{-1} \) 方向上的值越大,代表“心里越没底”。
    Aa−1A_a^{-1}
  3. 置信区间宽度当前决策点在该臂参数空间的不确定度,是“潜力分”的数学化身。
    xt⊤Aa−1xt\sqrt{x_t^{\top} A_a^{-1} x_t}
  4. 探索强度系数\(\alpha\) 控制潜力分的权重,调大更爱冒险,调小更求稳妥。
    α\alpha

特征构建:情报的原材料

小明的情报来自三张嘴:顾客自己说(我在减肥)、隔壁摊主透露(芝士卖爆了)、天气软件(马上有台风)。信息来源越多元,判断越准。上下文老虎机的“情报”,在工程上就是特征工程。

推荐场景里,上下文向量通常由三类特征拼接而成:用户特征 \( u_t \)(年龄、地域、历史兴趣的 embedding)、物品特征 \( v_a \)(类目、价格带、是否新品)、场景特征 \( s_t \)(时段、天气、端型渠道)。三者拼成一个长向量:

实践中要注意:类别特征要做 one-hot 或 embedding 压缩;连续特征要归一化;高维稀疏特征要靠正则项压住方差。特征的质量直接决定上下文老虎机的上限——模型再聪明,喂进去的是噪音,出来的也只能是噪音。

没有情报或情报失真时,上下文老虎机就退化成普通老虎机——蒙着眼睛的老板再会算计也白搭。特征工程的意义,就是确保小明收到的每条情报都指向同一个问题:“这杯该不该推给这个人?”

xt,a=concat(ut,va,st)∈Rd\displaystyle x_{t,a} = \mathrm{concat}(u_t, v_a, s_t) \in \mathbb{R}^{d}
  1. 用户特征向量刻画“谁来买”——年龄、性别、消费层级、历史行为序列。
    utu_t
  2. 物品特征向量刻画“卖什么”——类目、价格、原料标签、上架天数。
    vav_a
  3. 场景特征向量刻画“什么时机”——星期几、小时、天气、推荐位置。
    sts_t
  4. 拼接操作把三类向量首尾相连,得到维度为 \( d \) 的统一上下文,供线性模型直接打分。
    concat(ut,va,st)∈Rd\mathrm{concat}(u_t, v_a, s_t) \in \mathbb{R}^{d}

冷启动应用:新品试卖的科学

青提气泡茶上架了。小明没押上全部原料,也没藏着不卖,而是定下“试卖期”:前三天每天留出三成推荐名额给新品,并记录不同人群的反应。这就是探索预算(exploration budget)的思路。

最朴素的实现是 ε-贪心(epsilon-greedy):每轮以概率 \( \varepsilon_t \) 均匀随机试一个臂,以 \( 1-\varepsilon_t \) 的概率按当前模型推荐最优。冷启动初期 \( \varepsilon_t \) 设大,保证新品有曝光;数据回收后 \( \varepsilon_t \) 随时间衰减,避免长期浪费流量。此外还可以用相似老品的模型参数作为先验,给新品一个“热身起点”,这就是迁移预热的雏形。

一周后数据说话:青提气泡茶在女学生中爆火、在加班白领中翻车。科学的试卖让“押错宝”的代价可控,也让黑马不会被沉默埋没——这就是冷启动从“赌运气”走向“做实验”的关键一步。

π(a∣xt)={a∼Uniform(A),w.p. εtarg⁡max⁡a r^(xt,a),w.p. 1−εt\displaystyle \pi(a \mid x_t) = \begin{cases} a \sim \mathrm{Uniform}(\mathcal{A}), & \text{w.p. } \varepsilon_t \\ \arg\max_{a} \, \hat{r}(x_t, a), & \text{w.p. } 1 - \varepsilon_t \end{cases}
  1. 探索概率第 t 轮的“乱试”概率,冷启动初期大、稳定期小,可以手动或按公式衰减。
    εt\varepsilon_t
  2. 均匀随机从候选池里平等地抽一个臂,保证每个新口味都有亮相机会。
    Uniform(A)\mathrm{Uniform}(\mathcal{A})
  3. 贪心利用按当前模型的预测选收益最高的臂,保住基本盘。
    arg⁡max⁡ar^(xt,a)\arg\max_{a} \hat{r}(x_t, a)
  4. 按概率分流掷一次骰子决定这轮当“尝鲜者”还是“老司机”,两件事都要做,但比例要动态平衡。
    w.p. εt/1−εt\text{w.p. } \varepsilon_t / 1-\varepsilon_t

多样性保障:探索即多样

老顾客开始抱怨:“每次打开菜单都是桂花酿,再香也腻了。”小明意识到,除了赚钱,还要让顾客经常“眼前一亮”——偶尔推一杯冷门但可能惊艳的款。

推荐系统的多样性诉求与探索天然同源:不确定性越高的臂被越多地尝试,长尾内容就获得曝光机会。汤普森采样(Thompson Sampling)是实现这一点的优雅工具。它不为每个臂选一个固定分数,而是从该臂收益参数的后验分布中“抽一个可能的参数”,再用抽到的参数打分选臂。不确定性大的臂,后验分布更宽,抽中极端高分值的概率更高,因而更容易被选中:

相比 LinUCB 的“确定性加分”,汤普森采样把探索做成了“概率性抽签”,天然带来推荐结果的随机性与惊喜感。工程上还可叠加类别配额:限制同一类目曝光占比,避免探索过度集中,再对长期无曝光的臂做长尾兜底。

小明不再“钦点”每天的推荐,而是按每款口味的“置信分布”抽签:老爆款稳、新口味险,抽签结果偶尔惊艳、经常稳赚。多样性不是牺牲效率,而是探索带来的红利。

θ~a∼N(θ^a,  α2(Xa⊤Xa+λI)−1),at=arg⁡max⁡a  xt⊤θ~a\displaystyle \tilde{\theta}_a \sim \mathcal{N}\left( \hat{\theta}_a, \; \alpha^2 \left( X_a^{\top} X_a + \lambda I \right)^{-1} \right), \qquad a_t = \arg\max_{a} \; x_t^{\top} \tilde{\theta}_a
  1. 后验均值该臂参数当前的最佳估计,相当于“平均实力”。
    θ^a\hat{\theta}_a
  2. 后验协方差由历史数据累积而来,样本越少方差越大,分布越“没谱”。
    α2(Xa⊤Xa+λI)−1\alpha^2 (X_a^{\top} X_a + \lambda I)^{-1}
  3. 采样动作从分布里抽一个可能的参数出来,没谱的臂更容易抽出“惊人高分”。
    θ~a∼N(⋅)\tilde{\theta}_a \sim \mathcal{N}(\cdot)
  4. 用采样打分拿抽到的参数算分并选最大者,既尊重实力、又给不确定性留出舞台。
    at=arg⁡max⁡axt⊤θ~aa_t = \arg\max_{a} x_t^{\top} \tilde{\theta}_a

工程实践:复盘与落地

一个月后,小明翻账本:哪次推广值得、哪场试卖亏了、雨天和晴天的毛利差多少。算法工程也一样,光有策略不够,还得有复盘体系。

线上最常用的指标是累计奖励(总点击/总购买)与点击率;对比试验则以随机策略为基线,计算提升度(Lift),也就是报告里常说的“提升 12%”:

落地时还要注意:离线评估用历史日志做回放(replay)只能近似,因为旧日志由旧策略生成,存在选择偏差;真正的判断要靠线上 A/B 测试与监控。参数调优上,\( \alpha \) 与 \( \varepsilon \) 按业务目标调节:追求快速收敛就调小,内容生态要求多样性就调大。最终把“观察—决策—反馈—复盘”循环固化到系统里,才算真正把上下文老虎机落地。

账本清晰,小明下一次上新就更从容。上下文老虎机不是“放着就灵”的魔法机,而是一套需要反复评估、调参、监控的经营循环——算法再先进,也要靠扎实的工程复盘来喂养。

CumReward(T)=∑t=1Trt,Lift=(CB(T)Random(T)−1)×100%\displaystyle \mathrm{CumReward}(T) = \sum_{t=1}^{T} r_t, \qquad \mathrm{Lift} = \left( \frac{\mathrm{CB}(T)}{\mathrm{Random}(T)} - 1 \right) \times 100\%
  1. 单轮奖励第 t 轮实际观测到的结果,点击或购买记 1,否则记 0。
    rtr_t
  2. 累计奖励从第 1 轮到第 T 轮把奖励加起来,衡量策略的总产出。
    ∑t=1Trt\sum_{t=1}^{T} r_t
  3. 提升度上下文老虎机的累计收益除以随机策略的累计收益再减一,量化“聪明决策”的净增益。
    CB(T)Random(T)−1\frac{\mathrm{CB}(T)}{\mathrm{Random}(T)} - 1
  4. 百分比换算把提升度乘 100,得到汇报场景里朗朗上口的“提升百分比”。
    ×100%\times 100\%

AI 应用场景

新用户冷启动:资讯 App 前 20 次刷新

阶段:推荐系统冷启动阶段

解决的问题:新用户没有历史行为,传统协同过滤“无米下锅”。上下文老虎机用设备型号、注册时段、地理位置等作为上下文,把内容频道当作臂,以点击与停留时长作为奖励,在探索中快速收敛。

具体案例:某新闻资讯 App 对新用户的前 20 次刷新启用上下文老虎机,频道的选择由 LinUCB 在线决策,上线后次日留存提升约 8%,冷启动期的推荐点击率从 3.2% 升至 4.1%。

电商新品测款:7 天测款期动态分流

阶段:商品冷启动与选品

解决的问题:新品零销量,传统排序模型习惯性偏向老品,黑马难出头。上下文老虎机把“测款流量”按照价格带、类目、视觉风格等上下文分配给不同人群,把测款从“全量曝光”变成“精准实验”。

具体案例:某服装电商平台对新款设置 7 天测款期,使用汤普森采样分配曝光,活动结束后爆款命中率提升近 1 倍,测款素材成本下降约 40%。

广告创意优选:素材自动分配流量

阶段:在线广告投放决策

解决的问题:同一广告主有多套素材,人工配置时效差、易疲劳。上下文老虎机以人群定向为上下文、素材为臂、CTR 为奖励,自动决定每个流量该展示哪套创意。

具体案例:某信息流广告平台接入上下文老虎机后,整体 CTR 提升 5.6%,素材淘汰周期从 3 天缩短到 1 天,投放系统从“规则配置”升级为“自主学习”。

Python 演示

python51 行
import numpy as npfrom collections import Counter  class LinUCB:    """上下文老虎机: LinUCB 算法实现"""     def __init__(self, n_arms, dim, alpha=0.3, lam=1.0):        self.n_arms = n_arms        self.dim = dim        self.alpha = alpha        self.lam = lam        self.A_list = [lam * np.eye(dim) for _ in range(n_arms)]        self.b_list = [np.zeros(dim) for _ in range(n_arms)]     def select(self, x):        scores = []        for a in range(self.n_arms):            A_inv = np.linalg.inv(self.A_list[a])            theta = A_inv @ self.b_list[a]            ucb = x @ theta + self.alpha * np.sqrt(x @ A_inv @ x)            scores.append(ucb)        return int(np.argmax(scores))     def update(self, arm, x, reward):        self.A_list[arm] += np.outer(x, x)        self.b_list[arm] += reward * x  def simulate():    np.random.seed(42)    n_arms, dim, n_steps = 5, 4, 3000    true_theta = np.random.randn(n_arms, dim) * 0.5    model = LinUCB(n_arms, dim, alpha=0.3)    rewards = []    picks = []    for _ in range(n_steps):        x = np.random.randn(dim)          # 随机上下文: 用户/场景特征        arm = model.select(x)             # 决策: 选一个候选品        logit = x @ true_theta[arm] + np.random.randn() * 0.1        reward = 1.0 if logit > 0 else 0.0        model.update(arm, x, reward)      # 学习: 用反馈更新参数        rewards.append(reward)        picks.append(arm)    print("累计奖励:", sum(rewards))    print("点击率:", round(sum(rewards) / n_steps, 4))    print("各臂拉动次数:", dict(Counter(picks)))  if __name__ == "__main__":    simulate()
目的:用 LinUCB 模拟一个 5 个候选品的推荐冷启动场景,在 3000 轮“决策-反馈-更新”中观察算法自动探索并收敛到优质臂。
  1. self.A_list = [lam * np.eye(dim) for _ in range(n_arms)]为每个臂准备一个“信息账本”(协方差矩阵),lam 控制正则强度。
  2. theta = A_inv @ self.b_list[a]岭回归闭式解:用当前账本还原该臂的参数估计,相当于“平均分”。
  3. ucb = x @ theta + self.alpha * np.sqrt(x @ A_inv @ x)上置信界 = 预测收益 + 不确定度红利,就是小明心里的“潜力分”。
  4. return int(np.argmax(scores))选 UCB 最高的臂:既看平均分,更看弯道超车的空间。
  5. self.A_list[arm] += np.outer(x, x)决策后更新账本:同一臂见过的上下文越多,它的不确定度越窄。
  6. self.b_list[arm] += reward * x把“这轮赚不赚”写进参数估计,反馈驱动参数迭代。
  7. arm = model.select(x)每轮决策只查账、不学习;学习在拿到奖励之后才发生。
  8. model.update(arm, x, reward)在线学习闭环:决策 → 反馈 → 更新 → 下一轮更聪明。

常见误区

误区不少初学者看到 Bandit 就归入强化学习大类,觉得要懂 MDP、策略梯度、价值函数才能动手,于是望而却步。

正解上下文老虎机是“单步决策”的轻量模型:每轮选完拿奖励就结束,没有跨轮的状态转移,也不需要折扣长期回报。真正的强化学习要规划“未来若干步”,而 CB 只优化“当下这一手”。比喻:强化学习是下一盘围棋,眼观整局;上下文老虎机是夜市里一把一结的买卖,只看这单赚不赚。

为何常见:两者共享“探索与利用”的语言和“奖励反馈”框架,教材又常把 Bandit 放在强化学习章节前作铺垫,边界容易被混淆。

误区ε-greedy 里“随机乱试”最直观,导致有人以为所有探索都是碰运气,UCB 和汤普森采样的“有计划的探索”被当成同一种东西。

正解探索分两种:无方向的均匀随机(ε-greedy)和有方向的不确定性驱动(UCB 专挑“最没底”的臂、汤普森采样按概率抽样)。后者不会把流量浪费在已知很差的臂上,而是系统性地补齐信息缺口。比喻:闭眼抽签是探索,专门去试“心里最拿不准的那桶奶茶”,更是高级探索。

为何常见:教科书常把探索画成“随机乱点”的卡通图,先入为主的印象很难扭转。

误区有人觉得上下文越多越准,于是把几十上百维特征一股脑拼进向量,结果线上效果反而变差。

正解特征质量决定上限。冗余高相关的特征会放大线性模型的方差;稀疏高维特征在样本不足时容易过拟合。需要做归一化、去相关、embedding 压缩,并用正则项控制复杂度。比喻:情报不是越多越好,关键是每条情报都能指向“该推哪杯”——“他穿校服”有用,“他鞋带颜色”没用。

为何常见:深度学习时代“暴力加特征”常常有效,这种惯性思维被延续到了偏线性的上下文老虎机模型上。

误区拿着历史日志 replay 一遍,Lift 显示提升 30%,就以为上线一定有效,结果 A/B 测试翻车。

正解线上上下文老虎机的决策会改变后续日志的分布——旧策略根本没推荐过某些臂,离线评估存在选择偏差(反事实问题),Lift 只是近似参考。上线仍要做 A/B 测试和实时监控。比喻:用上个月的账本推断这个月推新款的效果,难免失真——天气、顾客、对手都在变。

为何常见:离线指标方便快捷,看着“提升 30%”很诱人,容易让人忽略数据生成机制的差异。

面试题

Q1. 上下文老虎机中的“上下文”主要指什么?

单选题 · easy

  • A.老虎机的外观颜色
  • B.决策时可用的环境特征← 正确答案
  • C.全部历史奖励之和
  • D.算法的学习率参数

答案:B。上下文是每轮决策前能观察到的特征,比如用户属性、物品属性、时间场景,它们让“看牌下注”成为可能。外观颜色、奖励之和、学习率都不是决策时可用的环境情报。

Q2. 在探索与利用的权衡中,“利用”是指?

单选题 · easy

  • A.随机尝试新物品
  • B.选择当前收益最高的臂← 正确答案
  • C.暂停推荐并等待反馈
  • D.加大特征向量的维度

答案:B。利用是“押宝当前最优解”,即选择估计收益最高的臂来保证基本收益;随机尝试是探索,暂停推荐和加特征维度都与探索利用无关。

Q3. 普通多臂老虎机与上下文老虎机最大的区别是?

单选题 · easy

  • A.是否有上下文特征参与决策← 正确答案
  • B.是否能在线上持续学习
  • C.是否只能做离线训练
  • D.两者没有本质区别

答案:A。普通多臂老虎机对所有人一视同仁,上下文老虎机则把特征向量纳入决策,实现“千人千面”的个性化推荐。两者都可以在线学习,也都是在线训练。

Q4. LinUCB 公式中的 \(\alpha\sqrt{x^{\top}A^{-1}x}\) 项刻画的是?

单选题 · mid

  • A.对臂收益的估计值
  • B.对臂收益的不确定度← 正确答案
  • C.当前奖励的滑动平均
  • D.候选臂的排序权重

答案:B。这一项是该臂在当前上下文下的置信区间宽度,数据越少、不确定度越大,类似小明心里“没底”的程度。它是探索红利,而不是收益估计本身。

Q5. 下列哪些算法可用于上下文老虎机?

多选题 · mid

  • A.LinUCB 线性上置信界← 正确答案
  • B.汤普森后验采样算法← 正确答案
  • C.K 均值聚类算法
  • D.随机梯度下降分类

答案:AB。LinUCB 用“估计+置信区间”决策,汤普森采样用后验分布抽样决策,都是经典上下文老虎机算法。K 均值和 SGD 分类是其他机器学习工具,不直接构成探索利用决策策略。

Q6. 冷启动阶段给新品分配探索流量,最主要目的是?

单选题 · mid

  • A.快速收集反馈并估计收益← 正确答案
  • B.让用户看到更多广告
  • C.压缩特征稀疏的问题
  • D.降低线上服务延迟

答案:A。探索流量的本质是“花钱买信息”:让新品获得足够曝光,才能估计它的真实收益并决定去留。广告曝光、特征压缩、延迟优化都不是探索的核心目的。

Q7. 可作为上下文特征的信息包括?

多选题 · mid

  • A.用户年龄与所处城市← 正确答案
  • B.物品类目与价格带← 正确答案
  • C.当前时段与天气状况← 正确答案
  • D.服务器内存条序列号

答案:ABC。上下文特征必须与推荐决策相关:用户特征、物品特征、场景特征都是标准选项。服务器内存条序列号与用户偏好无关,属于无效噪音。

Q8. 关于遗憾(Regret)最准确的理解是?

单选题 · hard

  • A.预测概率的交叉熵总和
  • B.最优与所选策略的收益累计差← 正确答案
  • C.系统每日报错的次数
  • D.探索动作所占的时间比例

答案:B。遗憾是“上帝视角最优策略”与“实际执行策略”之间累积收益的差距。交叉熵衡量预测误差,报错数和探索时长都不是遗憾的定义。

Q9. 关于 ε-贪心(epsilon-greedy)说法正确的有?

多选题 · hard

  • A.以 ε 概率随机探索← 正确答案
  • B.以 1-ε 概率选择贪心最优← 正确答案
  • C.ε 必须固定且不能调整
  • D.ε 可随训练轮次衰减← 正确答案

答案:ABD。ε-贪心以 ε 概率随机探索、以 1-ε 概率贪心利用,且 ε 可以随时间衰减,冷启动大、稳定期小。ε 并非必须固定,固定反而无法适应数据增长。

Q10. 用历史日志离线评估上下文老虎机策略,最大困难是?

单选题 · extreme

  • A.日志由旧策略产生存在选择偏差← 正确答案
  • B.无法统计日志的总体数量
  • C.离线环境无法模拟点击
  • D.需要消耗大量 GPU 资源

答案:A。历史日志是旧策略“亲手造成”的,某些臂从未被推荐过,直接用这些数据评估新策略会踩中选择偏差(反事实问题)。日志总量可统计,点击可模拟,GPU 也不是主要瓶颈,真正的坑在于数据生成机制不同。