想象一个周六傍晚,你站在商场的美食广场中央——眼前有六家餐厅。左边是常去的饺子馆,你知道味道稳定;右边是新开的泰式餐厅,招牌海鲜明亮诱人,但你没试过。每次聚餐都是一次抉择:保守地去熟悉的店,还是冒险试试新店?去熟悉的店吃着稳妥,但永远不会有惊喜;试新店可能踩雷,也可能发现宝藏。这个“进退两难”的困境,你手机里的推荐系统每天都在面对——只不过它面前的“餐厅”,是几百万条资讯、商品和短视频。它要决定:给你推你一定会点开的老话题,还是冒点险,推一个你从没看过、却可能让你惊喜的新内容?这个选择困境,在学术界有个响亮的名字:多臂老虎机(Multi-Armed Bandit,简称 MAB)问题。这篇文章,我们就从美食广场的抉择说起,看看推荐系统如何用老虎机的智慧,在熟悉的舒适区和未知的新世界之间聪明地游走,既解决冷启动的盲目,也照顾到多样性的惊喜。
掌握多臂老虎机,你就掌握了推荐系统“何时求稳、何时冒险”的决策智慧——这是从算法工程师到推荐架构师都绕不开的核心能力,也是面试中高频考察的进阶知识点。
可视化演示
展示多臂老虎机在推荐中的探索-利用权衡,对比各臂的奖励分布与UCB置信区间,以及LinUCB上下文老虎机结合用户特征进行个性化臂选择的决策过程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
多臂老虎机探索利用权衡 各臂真实期望奖励分布 UCB上置信界引导探索 a=argmax(Q(a)+c*sqrt(ln(t)/N(a))) 探索率随轮次递减
探索与利用的博弈
想象你每周都去美食广场。如果每次都直奔饺子馆,你永远不知道隔壁开了家惊艳的日料;如果每次都冒险换新店,你可能连着三周吃到难以下咽的黑暗料理。生活如此,推荐系统也是如此——它必须在“推荐用户已知喜欢的内容”(利用)和“推荐用户可能喜欢的未知内容”(探索)之间做出权衡。这就是多臂老虎机要解决的核心矛盾。
在数学家的眼里,这个纠结被翻译得很清晰:系统一共有 K 家“餐厅”(候选物品),每次推荐选择一个,然后观察用户的反馈。如果提前知道哪家餐厅最好,每次都选它,就能获得最大的累计满意度。但问题是,餐厅的真实口碑我们并不知道,只能通过一次次尝试去估计。这个“早知道就好了”的落差,数学家给它起了个名字——后悔值。
后悔值的定义非常直观。假设最优餐厅每次能给 1 分满意度,而你第 t 次选中的餐厅平均只给 0.6 分,那么这一次就“亏了”0.4 分。把 T 次选择的亏欠全部加起来,就是总后悔值:
有趣的是,一个优秀的推荐策略不是要让后悔值永远为 0,而是让它可以接受。就像聪明的食客不会苛求每一顿都完美,而是愿意接受偶尔踩雷,来换取长期味蕾的丰富。探索与利用的平衡,正是多臂老虎机算法家族最迷人的地方。
- 理论最优收益$T \times \mu^*$ 表示如果每次都能选中最好的餐厅,T 次选择能积累的最大满意度。$T$ 是总推荐次数,$\mu^*$ 是最好餐厅的真实好评率。
- 实际累计收益$\sum_{t=1}^{T} \mu_{a_t}$ 表示 T 次选择的实际满意度总和。$a_t$ 是第 t 次选中的餐厅,$\mu_{a_t}$ 是它的真实好评率。
- 遗憾的量化$R_T$ 是两者的差。好的老虎机算法会让后悔值增长缓慢——用少量前期试错,换来后期精准的推荐。
经典老虎机算法
美食广场有两类典型食客。第一类“保守派”:永远去最熟悉的那家,除非某天排长队,才勉为其难随机换一家;第二类“冒险家”:总是去自己没去过、或者去得最少的店。前者容易错过惊喜,后者容易踩雷。而聪明的算法,则试图在两者间找到折中点。这就是经典 MAB 算法的思路。
最朴素的策略叫 ε-贪心(epsilon-greedy):每次以 ε 的概率随机探索一家餐厅(不管它好不好),以 1−ε 的概率选择当前已知好评率最高的餐厅。它简单有效,但有个小毛病——一旦发现饺子馆不错,后面 95% 的时间都会去饺子馆,而对那些“可能更好”的店缺乏耐心。
于是,UCB(置信上界)算法站了出来。它的想法非常聪明:给每家餐厅算一个“潜力分”。这个潜力分由两部分组成——已知的好评率,加上一个“探索红利”。被选得越少的餐厅,探索红利越大;被观察的次数越多,红利越少,分数越接近真实水平。每次选择潜力分最高的餐厅:
在经典 UCB 的视角下,每件推荐物品头顶都顶着一个“置信区间”——真实好评率大概落在这个区间里。UCB 取的是区间的上界,也就是“乐观估计”。它假设每家名不见经传的小店都有成为宝藏的可能,并用数学的方式决定:谁被低估得最厉害,就优先给谁机会。
- 历史好评率$\hat{Q}(a)$ 是餐厅 a 到目前为止的平均好评率,等于累计满意数除以被选次数。它回答“这家店已知有多好”。
- 探索红利$c\sqrt{\ln t / N_t(a)}$ 是被选次数 $N_t(a)$ 的减函数——被选越少,这个值越大。$c$ 控制探索的强度,$\ln t$ 让探索随总时间增长而逐渐收敛。
- 潜力分最大化$\arg\max_a$ 表示选出“已知好评 + 探索红利”总分最高的餐厅。它同时照顾了利用(历史分高)和探索(被选得少)。
上下文感知 LinUCB
上节的故事里,UCB 忽略了一个重要信息:食客是分口味的。一个爱吃辣的湖南人和一个嗜甜的上海人,走进同一家川菜馆,评价可能天差地别。如果推荐系统对所有用户都用同一套“餐厅评分”,等于无视每个人的偏好差异。这正是上下文老虎机(Contextual Bandit)要解决的问题。
LinUCB 是其中最具代表性的算法。它的思路是:给每家餐厅(物品)学习一个“口味权重向量”,然后把用户特征(比如口味偏好、所在城市、活跃时段)和这个向量做点积,得到该用户对这家餐厅的个性化评分。这里的关键是“像懂行的服务员”——老服务员看到熟客进门,不用问就知道该推荐辣的还是清淡的,因为他对这位客人的“特征”心中有数。
LinUCB 用岭回归来在线更新每个物品的权重向量。当一条用户反馈到达时,它会将这个用户的特征和反馈添加到该物品的历史数据中:
有了权重向量,轮到给当前用户做推荐时,LinUCB 对每家餐厅算一个“个性化偏好分数”,再加上一个跟用户特征相关的探索项:
其中第一项是“根据你过往口味,预估你有多喜欢这家店”,第二项是“我对这个判断有多不确定”。如果用户特征和餐厅历史数据匹配度高,不确定度就小;反之就大。于是,LinUCB 不仅做到了“千人千面”的利用,还做到了“千人千面”的探索——它会对某个用户探索他可能喜欢的店,而不会对所有用户都推同一家新店。
- 特征矩阵$X_a$ 是所有选择过餐厅 a 的用户特征堆成的矩阵,每一行是一个用户的偏好画像(如口味、时段、位置)。
- 岭回归求解$(X_a^\top X_a + I_d)^{-1}$ 是带正则的协方差矩阵求逆,$I_d$ 保证矩阵可逆、数值稳定。
- 反馈标签$b_a$ 是这些用户在餐厅 a 上的反馈向量(满意为 1,不满意为 0),是回归的目标值。
- 口味权重$\hat{\theta}_a$ 是学到的“餐厅 a 的口味权重向量”,表示哪些特征的用户更可能喜欢这家店。
应用实践场景
把镜头从美食广场拉回真实的互联网。多臂老虎机的应用场景,几乎遍布所有需要“边探索边赚钱”的推荐系统。
新闻推荐是最典型的战场。新闻是短生命周期的物品,一篇新文章刚发布时没有任何点击数据,推荐系统不知道它会不会受欢迎。如果直接推给所有用户,可能造成大量负反馈;如果完全不推,好内容就石沉大海。用 MAB 的思路,系统可以给新文章一个“探索预算”:先推给一小部分有代表性的用户,根据反馈快速估计它的潜力。表现好的文章获得更多流量,表现差的分母则逐渐归零。UCB 的探索红利在这里变成了“新文章的入场券”。
广告投放则是 MAB 在商业化上最直接的应用。一个广告位面临多个候选广告,平台要根据用户的点击反馈动态分配展示机会。MAB 算法在这里做的事情,类似于“如何在多张广告卡片中动态调流量”——既不能一直展示 CTR 最高的老广告(用户会视疲劳),也不能给没验证过的新广告太多流量(浪费预算)。LinUCB 结合用户画像后,还能做到“给年轻人看新潮广告、给商务人士看办公软件”的精细化探索。
冷启动是 MAB 大放异彩的第三个场景。无论是新用户还是新物品,系统都缺少数据。过去,新物品只能靠人工策略硬塞进推荐流;现在,系统用 MAB 对每个新物品计算探索价值,自动决定它在各个人群中的曝光配额。这就像新餐厅开业,老板不会盲目地到处发传单,而是精准地把优惠券发给最有潜力的几类顾客,用最小的成本快速建立口碑基线。
工程实现要点
理论说得再漂亮,落地到工程里却有一堆“后厨细节”。就像米其林餐厅的后厨,不光有主厨的创意,还有洗碗、备菜、传菜的流水线。推荐系统里的 MAB,也需要一套完整的工程配套才能运转。
第一件事是在线学习。MAB 是典型的在线算法:推荐后立刻收集反馈,即时更新统计信息。工程上需要一个高频更新的内存存储(比如 Redis),记录每个物品的 被选次数 和 累计奖励。不能等到凌晨跑批,否则冷启动的“探索窗口”就错过了。点击和曝光的反馈,要尽量在秒级内回流到算法。
第二件事是特征工程。对 LinUCB 来说,特征决定了个性化的上限。常见特征包括:用户侧(历史 CTR、活跃时段、兴趣标签)、物品侧(品类、标题关键词、内容质量分)、上下文侧(当前时间、设备、位置)。特征要先做归一化,维度不宜过高(几十维即可),否则岭回归的矩阵求逆会变得昂贵。
第三件事是日志反馈。反馈链路最易出坑:用户点了广告但没购买,算不算奖励?推荐了但用户压根没看到,算不算负样本?业界通常把“曝光但未点击”记为 0 分、“曝光且点击”记为 1 分。还要处理反馈延迟——用户可能在推荐 10 分钟后才点击,这需要设定一个“等待窗口”,窗口内未点击才记为 0。工程上要给每次推荐生成唯一 ID,保证反馈能准确对账。
实现时还要注意多臂的“臂”怎么定义。有的场景臂是单个物品(如新闻),有的场景臂是策略(如不同排序模型),有的场景臂是物品的品类(如美食、数码、美妆)。臂的粒度越细,探索越灵活,但统计信息越稀疏;臂的粒度越粗,越稳定,但个性化受限。这个权衡没有标准答案,需要根据业务场景反复实验。
探索系数调优
如果你用过 UCB 或 LinUCB,一定纠结过那个神秘的探索系数:UCB 里的 c 和 LinUCB 里的 α。它们就像炒菜时的火候——太大了菜会糊(探索过度,CTR 下降),太小了菜不熟(探索不足,错过潜在爆款)。
先看探索系数的影响。以 UCB 的 c 为例:c 等于 0 时,算法退化为纯粹的贪心——永远选当前最好的店,不做任何探索;c 很大时,算法几乎只看被选次数,变成“谁选得少就选谁”,相当于随机探索。合适的 c 应让算法在前期大胆探索、后期专注利用。实践中 c 通常取 0.5 到 2 之间,具体值需要在小流量实验上验证。
再看时间窗口。UCB 公式里的 $\ln t$ 从全局时间起点算起,这带来一个问题:物品热度会随时间变化。半年前很火的餐厅,现在可能已倒闭。工程上常用“滑动窗口”代替全局计数——只统计最近 N 天的点击数据,或用指数衰减的方式给旧数据打折。这样算法能快速响应兴趣迁移,但窗口太小会导致数据稀疏,需要谨慎设置。
调参策略上,最忌讳的是“拍脑袋”。业界常见的做法是分层实验:先用离线数据对多个候选参数进行回放模拟(replay simulation),选出表现最好的几组,再上线做小流量 A/B 测试。调参时要同时关注线上 CTR 和多样性指标——有时 c 调大 CTR 略降,但多样性明显上升,这未必是坏事,因为多样性会带动长期留存。
效果评估方法
最后,怎么知道 MAB 策略到底好不好?就像餐厅经营者要定期复盘:回头客多不多?菜品是否太单一?客人有没有流失?推荐系统也需要一套科学的评估指标。
最基础的指标是点击率(CTR)。MAB 的目标是最大化累计收益,CTR 就是最直接的收益度量。需要注意的是,不能只看探索期的 CTR——探索本身就带着“试错成本”,所以评估时要看长期曲线,观察 CTR 是否随数据积累而上升。如果一条策略跑了一个月 CTR 还没有收敛迹象,说明探索系数可能过大了。
多样性指标同样重要。常用指标包括:推荐列表中不同类目的覆盖数(如美食、电影、体育各占多少)、推荐结果的熵、以及 ILAD(列表内平均距离)。一个极端的贪心策略可能把 CTR 做得很高,但用户看到的全是同一类内容,很快审美疲劳。我们需要在 CTR 和多样性之间找到一个合理的甜点区——这正是 MAB 探索价值在业务层面的体现。
离线评估在工程上常用回放法(replay)或汤普森采样模拟。做法是:拿到过去某段时间的真实曝光和点击日志,模拟“如果当时用的是新策略,会推荐什么、收获多少点击”。这样做的好处是零风险,坏处是策略改变会导致日志分布偏移,结果只能作为参考。更稳妥的做法是小流量线上对比,用“分桶 + 显著性检验”来判断新策略是否值得全量上线。
AI 应用场景
场景一:新闻客户端的“新文章冷启动”
阶段:召回与排序之间的流量分配
解决的问题:每天有数万篇新文章的生产,冷启动期没有任何用户反馈,传统做法是编辑人工挑选或按固定规则分配流量,成本高且浪费潜力稿件。MAB 用探索红利自动判断每篇新文章值得分配的曝光配额,将优质内容快速推给可能感兴趣的用户,数据不良的内容自动降权。
具体案例:某新闻 App 使用 UCB 策略为新文章分配 5% 的探索流量,其余流量按 CTR 预估的成熟模型分配。系统上线两周后,新文章的 24 小时留存率提升 8%,同时 TOP 文章的平均点击率提升 3 个百分点。
场景二:广告平台的多广告位动态分配
阶段:广告排序与流量智能分配
解决的问题:一个广告位下有多个候选广告,固定比例投放会浪费高潜力的新广告;纯 CTR 排序又会让部分用户过度疲劳。LinUCB 结合用户画像,对不同人群分配不同的广告探索策略,在总点击预算不变的前提下提升整体转化率。
具体案例:某电商广告平台对 20 万新增广告创意采用 Tomspon Sampling 策略定价,对比传统规则分配,广告 ROI 提升 12%,且新创意跑出的速度提升近一倍。
场景三:电商平台的“新用户探索”
阶段:新用户冷启动策略
解决的问题:新注册用户没有行为历史,传统推荐只能推热门商品,导致新用户感觉“不够懂我”。MAB 将新用户对品类、价格带、风格的反馈视为探索信号,动态调整推荐策略,快速建立新用户画像。
具体案例:某跨境电商在注册后首次会话中,使用 Contextual Bandit 对 8 个一级品类做探索分配,首单转化率提升 15%,且探索成本(首屏点击率下降)控制在 1% 以内。
Python 演示
# -*- coding: utf-8 -*-"""多臂老虎机 UCB 策略模拟: 像选择餐厅一样做推荐"""import mathimport random class Restaurant: """模拟一个餐厅(推荐系统中的一个候选物品)""" def __init__(self, name, true_quality): self.name = name # 餐厅名称 self.true_quality = true_quality # 真实好评率(未知) self.pulled_count = 0 # 被推荐的次数 self.total_reward = 0 # 累计满意数 def sample_feedback(self): """模拟一次用户反馈, 满意得1分, 否则0分""" return 1 if random.random() < self.true_quality else 0 def ucb_select(restaurants, total_trials): """根据 UCB 公式选择当前最值得推荐的餐厅""" best = None best_score = -float("inf") for r in restaurants: if r.pulled_count == 0: return r average = r.total_reward / r.pulled_count bonus = math.sqrt(2 * math.log(total_trials) / r.pulled_count) score = average + bonus if score > best_score: best_score = score best = r return best def run_bandit(restaurants, rounds=3000): """模拟多次推荐, 观察 UCB 策略的表现""" for t in range(1, rounds + 1): chosen = ucb_select(restaurants, t) feedback = chosen.sample_feedback() chosen.pulled_count += 1 chosen.total_reward += feedback if __name__ == "__main__": candidates = [ Restaurant("新开奶茶店", 0.20), Restaurant("社区饺子馆", 0.55), Restaurant("老牌火锅店", 0.85), Restaurant("网红烧烤摊", 0.40), ] run_bandit(candidates) print("=== UCB 策略下的餐厅选择结果 ===") for r in candidates: rate = r.total_reward / r.pulled_count if r.pulled_count else 0.0 print(f"{r.name}: 被选 {r.pulled_count} 次, 好评率 {rate:.2f}") print("\n=== 对比: 如果每次只选当前最优(纯贪心) ===") greedy = [ Restaurant("新开奶茶店", 0.20), Restaurant("社区饺子馆", 0.55), Restaurant("老牌火锅店", 0.85), Restaurant("网红烧烤摊", 0.40), ] for t in range(1, 3001): best = max(greedy, key=lambda r: r.total_reward / r.pulled_count if r.pulled_count else 0) fb = best.sample_feedback() best.pulled_count += 1 best.total_reward += fb for r in greedy: rate = r.total_reward / r.pulled_count if r.pulled_count else 0.0 print(f"{r.name}: 被选 {r.pulled_count} 次, 好评率 {rate:.2f}")
if r.pulled_count == 0: return r未尝试过的餐厅优先给机会,这是 UCB 解决冷启动的关键average = r.total_reward / r.pulled_count计算该臂当前的“已知好评率”,即利用部分bonus = math.sqrt(2 * math.log(total_trials) / r.pulled_count)计算探索红利,被选次数少则红利大score = average + bonus潜力分 = 已知表现 + 不确定性红利chosen.sample_feedback()模拟真实反馈,反馈回流后立即更新统计量,体现在线学习max(greedy, key=lambda r: ...)纯贪心策略永远选当前最优,不做探索,最终错过真正的爆款
常见误区
误区“多臂老虎机里的探索,不就是随机给用户推一些没看过的东西吗?无非是把平时 1% 的随机流量加大到 10%。”
正解随机推荐是“无差别地乱试”,而 MAB 的探索是“有目标地试”。UCB 的探索红利只给那些被选次数少、不确定性高的物品,被验证过表现差的物品不会得到额外机会;LinUCB 甚至会把探索定向到“和已喜欢的物品特征相似”的新物品上。就像聪明的食客试新店前会先看菜单和口碑,而不是闭着眼睛推门进去。
为何常见:因为教科书常把“探索”形容为“尝试未知”,初学者容易把“未知”理解成“任意”,忽略了 UCB 公式中对不确定性的定量计算。
误区“UCB 是数学推导出来的算法,系数直接按论文设就行,工程上不需要调参。”
正解UCB 的探索系数 c 和 LinUCB 的 α 对效果影响极大。c 太小时算法退化为贪心,c 太大时探索成本失控。更重要的是,UCB 假设奖励分布是静止的,而真实推荐场景中物品热度时刻变化,必须配合滑动窗口或衰减机制使用。参数并非算法的装饰,而是决定探索与利用平衡点的核心旋钮。
为何常见:很多教材以“UCB1 在简化场景下 regret 有理论保证”为由简化讲解,导致学习者误以为公式中的常数是普适最优解。
误区“多臂老虎机就是解决冷启动问题的,等用户数据积累够了,就该换成深度模型,MAB 就没用了。”
正解MAB 的价值贯穿推荐系统的整个生命周期。冷启动之外,它广泛应用于广告创意探索、热点突发应对、兴趣漂移追踪等场景。即便是深度推荐模型,也常在召回层预留一路“探索通道”,用 MAB 决定当前用户是否进入探索通道。成熟的推荐系统不是“冷启动用 MAB,日常用模型”,而是把 MAB 作为在线决策的常设组件。
为何常见:因为冷启动是 MAB 最容易理解的应用场景,教程反复强调后,读者容易把特例当全部。
误区“A/B 测试把用户分成两组对比策略,MAB 也是分流量做实验,两者本质差不多。”
正解最大区别在于流量利用效率。A/B 测试的流量配比是固定的(如 50/50),实验结束时才揭晓胜负;而 MAB 会动态调整流量——发现 B 策略明显更好时,会逐步把大部分流量倾斜给 B,边学边赚。MAB 可以看作“自适应版本的 A/B 测试”,牺牲一点统计严谨性,换来更快的决策和更少的机会成本。
为何常见:两者都涉及“分组对比”和“数据反馈”,表面形式相似,但 MAB 的动态分配机制隐藏在公式里,初学者不易看到本质差异。
面试题
Q1. 多臂老虎机问题中“臂”通常指代什么?
- A.用户在推荐系统中的行为路径
- B.可供选择的物品或动作餐厅← 正确答案
- C.推荐算法的神经网络层数
- D.用户画像数据的聚类中心
答案:B。“臂”在多臂老虎机中对应每次可选择的动作。在推荐场景中,臂就是候选物品或策略(如某篇文章、某个广告创意),选臂即做一次推荐。想象老虎机的“臂”是你要拉的那根杆,每根杆对应一个可能的奖励分布。
Q2. UCB 算法中“探索项”的主要作用是?
- A.让算法随机推荐任意物品
- B.提高推荐系统的运行速度
- C.给被选次数少的物品额外加分← 正确答案
- D.降低物品特征工程的复杂度
答案:C。UCB 的探索项 $c\sqrt{\ln t / N_t(a)}$ 随被选次数 $N_t(a)$ 增大而减小,给“试得少”的物品额外加分,让它们有机会被再次尝试。它并非随机推荐,而是基于不确定性给出的定量补偿,类似给一家新店“机会分”。
Q3. epsilon-greedy 策略中 epsilon 的作用是?
- A.控制探索比例,小概率随机探索← 正确答案
- B.控制特征向量的维度大小
- C.固定每次推荐的物品数量
- D.调节模型训练的迭代轮数
答案:A。epsilon 表示每次以 epsilon 的概率完全随机地选择一个物品,其余 1−epsilon 的概率选当前最优。例如 epsilon=0.1 表示 10% 的流量用于探索。它简单但不够精细,因为对“表现差”和“尚未尝试”的物品一视同仁。
Q4. 关于后悔值 Regret 的正确理解是?
- A.用户点击后后悔卸载应用的次数
- B.推荐物品被用户差评的概率值
- C.模型在验证集上的损失函数值
- D.最优策略收益与实际策略收益之差← 正确答案
答案:D。后悔值量化“因为信息不足而错失的收益”。如果每次都知道最优臂并选择它,能获得最大累计奖励;实际策略由于探索和学习,收益会有差距,差距即后悔值。优质 MAB 算法的目标就是让后悔值增长得缓慢。
Q5. LinUCB 相比经典 UCB 的最大优势是?
- A.不需要记录任何用户行为日志
- B.完全消除了探索带来的点击损失
- C.利用上下文特征实现个性化探索← 正确答案
- D.可以将所有物品编码成同一向量
答案:C。经典 UCB 对所有用户一视同仁,而 LinUCB 使用用户特征(上下文)和物品权重做点积,得到每个用户对每个物品的个性化评分,探索也因此因人而异。相当于服务员对不同口味的客人推荐不同的“新店”。
Q6. 在新用户冷启动场景中 MAB 优于纯 A/B 测试的原因是?
- A.MAB 能动态分配流量,减少试错代价← 正确答案
- B.A/B 测试无法比较两个策略的效果
- C.MAB 不需要任何用户特征参与决策
- D.A/B 测试只适用于广告投放场景
答案:A。A/B 测试流量配比固定,实验期间无法调整;MAB 根据反馈实时倾斜流量,表现好的策略迅速获得更多流量,从而降低试错成本。它兼顾了“实验”与“收益”,特别适合在线推荐这类反馈即时的场景。
Q7. 推荐多样性指标主要衡量的是?
- A.推荐列表中的物品类别丰富程度← 正确答案
- B.推荐系统的服务器吞吐量
- C.用户点击物品的响应速度
- D.模型参数量的大小规模
答案:A。多样性关注推荐列表中不同品类、不同主题的覆盖程度,避免给用户推一堆同质化内容。常用指标包括类目覆盖数、信息熵、列表内平均距离(ILAD)。多样性虽不直接提升 CTR,但对长期留存至关重要。
Q8. UCB 公式中 ln t 的含义是?
- A.时间步对数,保证探索逐步收敛← 正确答案
- B.用户历史点击次数的指数衰减
- C.物品流行度的对数正态分布
- D.模型学习率按时间线性递减
答案:A。$\ln t$ 表示全局时间步 t 的自然对数,它让探索红利随时间缓慢增长,但增长速度远低于被选次数 $N_t(a)$ 的线性增长,从而保证算法前期大胆探索、后期专注利用,实现探索行为的自动收敛。
Q9. MAB 在新闻推荐中的主要应用体现在哪些方面?
- A.探索新话题,判断用户潜在兴趣← 正确答案
- B.均衡热门新闻与个性化长尾内容← 正确答案
- C.替代所有深度学习排序模型
- D.在冷启动期为新文章分配流量← 正确答案
答案:ABD。MAB 常用于给新文章分配探索流量(D)、发掘用户对新话题的兴趣(A)、在热门与长尾之间动态平衡(B)。它并不替代深度排序模型,而是作为“探索通道”与主模型并行,负责处理不确定性高的冷门内容。
Q10. 工程实现中处理探索反馈延迟的常用手段是?
- A.采用带延迟的用户反馈窗口← 正确答案
- B.使用幂等性保证重复上报安全← 正确答案
- C.忽略所有超过一天的反馈数据
- D.将曝光和点击分开记录统计← 正确答案
答案:ABD。用户可能在曝光后较晚才点击,工程上要用等待窗口(A)决定何时记为负样本;防止同一曝光重复计数需要幂等机制(B);曝光日志和点击日志分开存储、按推荐 ID 关联(D)是常见架构。不能粗暴忽略延迟反馈(C),否则会低估真实收益。