news 2026/4/27 7:10:48

多臂老虎机算法(Multi-Armed Bandit, MAB)详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多臂老虎机算法(Multi-Armed Bandit, MAB)详解

多臂老虎机算法(Multi-Armed Bandit, MAB)详解

多臂老虎机算法是一类在线学习算法,核心解决 “探索 - 利用权衡”(Exploration-Exploitation Tradeoff)问题 —— 在不确定每个选项(“臂”)收益分布的情况下,通过动态选择策略最大化长期累积收益。它广泛应用于推荐系统、A/B 测试、路径优化、资源分配等场景,尤其适合数据稀疏、需要实时决策的场景(如你的运输路线规划中,动态选择最优路线 / 货运方式)。

本文将从 “基础概念→核心问题→经典算法→变种扩展→项目应用→代码实现” 逐步讲解,兼顾理论深度和工程实用性。

一、基础概念:什么是 “多臂老虎机”?

1.1 场景类比

想象你面前有 N 台老虎机(“多臂”),每台机器的中奖概率(或收益)不同,且你不知道具体分布。你的目标是通过多次拉杆(“决策”),最大化总收益 —— 这就是多臂老虎机的核心场景:

  • 臂(Arm):可选的决策选项(如运输路线规划中的 “路线 A”“路线 B”“路线 C”,货运方式中的 “公路”“铁路”“海运”)。
  • 收益(Reward):选择某臂后获得的反馈(如路线的 “运输时间”“成本”“准时率”,可转化为量化收益,例如:准时率 90% 对应收益 0.9,延迟对应负收益)。
  • 探索(Exploration):尝试未选过或选择次数少的臂,获取更多收益分布信息(如尝试一条新的运输路线,了解其实际耗时)。
  • 利用(Exploitation):选择当前已知收益最高的臂,最大化即时收益(如一直走已知最快的路线)。

1.2 数学建模

  • 设共有 K 个臂,第 i 个臂的收益服从分布\(R_i \sim P_i(r)\)(如伯努利分布:中奖 / 未中奖;高斯分布:运输时间的波动)。
  • 每个臂的 “真实价值” 为期望收益:\(\mu_i = E[R_i]\)。
  • 算法目标:通过 T 次决策(T 轮拉杆),选择序列\(a_1, a_2, ..., a_T\)(\(a_t \in \{1,2,...,K\}\)),最大化累积收益:\(\sum_{t=1}^T R(a_t)\),或最小化 “累积遗憾”(Regret):\(Regret(T) = T \cdot \mu^* - \sum_{t=1}^T \mu_{a_t}\)(\(\mu^*\)是所有臂的最大真实价值)。

二、核心问题:探索与利用的权衡

这是多臂老虎机的本质矛盾:

  • 只 “利用”:一直选当前最优臂,可能错过更优的未知臂(如一直走老路,却不知道新路线更快),长期收益受限。
  • 只 “探索”:频繁尝试新臂,牺牲即时收益,导致短期损失过大(如每次都试新路线,多次遇到拥堵)。

所有多臂老虎机算法的差异,本质是探索策略的设计—— 如何在 “获取信息” 和 “获取收益” 之间找到最优平衡。

三、经典多臂老虎机算法

3.1 贪心算法(Greedy):纯 “利用”,无探索

原理
  • 初始化:对每个臂尝试 m 次(m≥1),计算各臂的平均收益\(\hat{\mu}_i = \frac{1}{m} \sum_{k=1}^m R_i^k\)。
  • 决策:之后每一轮都选择当前平均收益最高的臂(若有多个,随机选一个)。
  • 变种:“纯贪心”(m=1,仅尝试一次就固定选择)。
公式

\(a_t = \arg\max_{i \in \{1,..,K\}} \hat{\mu}_i(t-1)\)(\(\hat{\mu}_i(t-1)\)是前 t-1 轮中臂 i 的平均收益)

优缺点
  • 优点:实现最简单,计算成本低,短期收益稳定。
  • 缺点:完全没有探索,若初始尝试次数 m 不足,可能锁定次优臂(如初始尝试新路线时刚好遇到拥堵,误判为差路线),长期遗憾会随 T 线性增长(Regret(T) ∝ T)。
适用场景
  • 收益分布稳定、初始数据充足,且不担心错过最优臂的场景(不推荐用于运输路线规划,因路线收益受路况、天气影响,需动态探索)。

3.2 ε- 贪心算法(ε-Greedy):固定概率探索

原理

在贪心算法基础上引入 “探索概率 ε”(0<ε<1),平衡探索与利用:

  • 每一轮决策时,以概率\(1-\varepsilon\)选择当前最优臂(利用);
  • 以概率\(\varepsilon\)随机选择一个臂(探索,不管当前收益高低)。
  • 变种:衰减 ε- 贪心(\(\varepsilon(t) = \frac{1}{\sqrt{t}}\)或\(\varepsilon(t) = \frac{\varepsilon_0}{t}\)),随着轮次 t 增加,探索概率逐渐降低(符合 “初期多探索,后期多利用” 的直觉)。
公式

$

\(a_t = \begin{cases} \arg\max_{i} \hat{\mu}_i(t-1) & \text{with probability } 1-\varepsilon(t) \\ \text{random arm} & \text{with probability } \varepsilon(t) \end{cases}\)

优缺点
  • 优点:实现简单,探索策略可控,长期遗憾优于纯贪心(Regret(T) ∝ √T,亚线
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:38:14

Unpaywall浏览器扩展:学术资源获取的革命性解决方案

Unpaywall浏览器扩展&#xff1a;学术资源获取的革命性解决方案 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-extension …

作者头像 李华
网站建设 2026/4/23 20:20:56

解决lombok的@Data注解无法打印继承的父类信息问题

https://www.jb51.net/program/330116r71.htm 问题场景 子类StudentResp继承父类PersonResp&#xff0c;子类也拥有了父类的属性。 给子类中继承的父类属性的赋值&#xff0c;但是打印了以后只会显示子类信息&#xff0c;父类信息不显示。 子类&#xff1a;学生类继承父类人…

作者头像 李华
网站建设 2026/4/27 2:02:47

简单快速实现工业质检:Ultralytics灰度检测终极方案

简单快速实现工业质检&#xff1a;Ultralytics灰度检测终极方案 【免费下载链接】ultralytics ultralytics - 提供 YOLOv8 模型&#xff0c;用于目标检测、图像分割、姿态估计和图像分类&#xff0c;适合机器学习和计算机视觉领域的开发者。 项目地址: https://gitcode.com/G…

作者头像 李华
网站建设 2026/4/26 3:29:09

智能测试的团队能力评估:迈向高效与自动化的关键

随着人工智能和机器学习技术的快速发展&#xff0c;软件测试领域正经历一场深刻的智能化变革。智能测试不仅提升了测试效率&#xff0c;还通过自动化脚本、预测性分析和自适应学习&#xff0c;改变了传统的测试模式。然而&#xff0c;这种变革对测试团队的能力提出了新的挑战&a…

作者头像 李华
网站建设 2026/4/26 21:32:10

企业微信会话存档终极指南:5步高效实现合规数据管理

企业微信会话存档终极指南&#xff1a;5步高效实现合规数据管理 【免费下载链接】WeWorkFinanceSDK 企业微信会话存档SDK&#xff08;基于企业微信C版官方SDK封装&#xff09; 项目地址: https://gitcode.com/gh_mirrors/we/WeWorkFinanceSDK 企业微信会话存档作为企业合…

作者头像 李华
网站建设 2026/4/18 22:06:16

Day 38

# DAY 38 Dataset 和 Dataloader 类知识点回顾: 1. Dataset 类的__getitem__和__len__方法&#xff08;本质是 python 的特殊方法&#xff09; 2. Dataloader 类 3. minist 手写数据集的了解 作业&#xff1a;了解下 cifar 数据集&#xff0c;尝试获取其中一张图片 # 1. 导…

作者头像 李华