1. 项目概述:强化学习与多臂老虎机入门
去年在准备一个推荐系统项目时,我遇到了经典探索-利用困境(exploration-exploitation dilemma)。用户对新商品的点击率预估总是存在冷启动问题——过度推荐已知高点击商品会导致新商品永远得不到曝光机会,而盲目测试新商品又会影响短期收益。这时同事建议我研究下多臂老虎机(Multi-Armed Bandit, MAB)算法,这个强化学习的经典问题模型完美对应了我的需求。
多臂老虎机这个名字来源于赌场的老虎机(又称单臂强盗机)。想象你站在一排老虎机前,每台机器的中奖概率不同但未知,你如何在有限次数中获得最大收益?这就是MAB要解决的核心问题。在推荐系统场景中,每个待推荐商品就像一台老虎机,点击率相当于中奖概率,我们需要在探索(尝试新商品)和利用(推荐已知好商品)间找到平衡。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法原理与实现
2.1 ε-greedy:简单有效的基准算法
ε-greedy是最好理解的MAB算法。它会以ε概率随机选择臂(探索),以1-ε概率选择当前收益最高的臂(利用)。我在Python中实现的核心代码如下:
python复制import numpy as np
class EpsilonGreedy:
def __init__(self, epsilon, n_arms):
self.epsilon = epsilon
self.counts = np.zeros(n_arms) # 各臂尝试次数
self.values = np.zeros(n_arms) # 各臂平均收益
def select_arm(self):
if np.random.random() < self.epsilon:
return np.random.randint(len(self.values)) # 随机探索
else:
return np.argmax(self.values) # 选择当前最优
def update(self, chosen_arm, reward):
self.
