跳到主要内容

常用的策略

ε-贪婪策略

ε-贪婪策略(epsilon-greedy strategy)是强化学习中一种常用的行动选择策略,用于在探索(exploration)和利用(exploitation)之间取得平衡。这种策略在选择下一步行动时,大部分时间会选择当前已知的最佳行动(利用),但有一个小概率(由参数 ε 表示)随机选择其他行动(探索)。

ε-贪婪策略的工作机制:

  1. 随机数生成: 在每个决策点,生成一个随机数 rr

  2. 选择行动:

    • 如果 r<ϵr < \epsilon,则随机选择一个行动(探索)。
    • 如果 rϵr \geq \epsilon,则选择当前估计最优的行动(利用)。
  3. 调整ε值: ε通常在训练开始时设定为较高值(如 0.1),以便于更多的探索。随着学习的进行,ε可以逐渐减小,减少探索频率,增加利用已知知识的频率。

优点和局限性:

  • 优点: ε-贪婪策略简单且有效,能够平衡探索与利用,帮助学习算法避免陷入局部最优解。
  • 局限性: ε值的选择关键且难以确定。如果ε过高,可能导致过多无效探索;如果ε过低,则可能忽略有价值的探索。

这里使用简单的赌博机(Bandit)问题来说明怎么使用,其中有几个摇臂(arms),每个摇臂都有不同的概率来决定是否给予奖励。我们将使用ε-贪婪策略来决定选择哪个摇臂。

将创建以下几个部分:

  1. Bandit环境: 模拟几个摇臂,每个摇臂有不同的胜率。
  2. ε-贪婪策略函数: 根据ε-贪婪策略来选择摇臂。
  3. 主循环: 进行多次尝试,更新每个摇臂的价值估计,并根据ε-贪婪策略选择摇臂。

以下是代码实现

import numpy as np

class Bandit:
def __init__(self, arms=10):
self.n_arms = arms
self.action_values = np.random.randn(arms) # 每个摇臂的真实价值
self.optimal = np.argmax(self.action_values) # 最优摇臂

def pull(self, arm):
# 拉动摇臂,返回随机奖励
reward = self.action_values[arm] + np.random.randn()
return reward

def epsilon_greedy(Q, epsilon):
if np.random.rand() < epsilon:
return np.random.choice(len(Q)) # 探索
else:
return np.argmax(Q) # 利用

def run_bandit(bandit, episodes=1000, epsilon=0.1):
Q = np.zeros(bandit.n_arms) # 价值估计初始化
N = np.zeros(bandit.n_arms) # 每个摇臂被选择的次数

for _ in range(episodes):
action = epsilon_greedy(Q, epsilon) # 根据ε-贪婪策略选择行动
reward = bandit.pull(action) # 获取奖励
N[action] += 1
Q[action] += (reward - Q[action]) / N[action] # 更新价值估计

return Q, np.argmax(Q), bandit.optimal

# 创建一个有10个摇臂的赌博机
bandit = Bandit(arms=10)

# 运行1000次尝试
Q_estimates, estimated_optimal, true_optimal = run_bandit(bandit, episodes=1000, epsilon=0.1)

Q_estimates, estimated_optimal, true_optimal
(array([-0.83636471, -2.75467475, -1.35275528, -0.66813385, -1.6283336 ,
0.41657942, 1.74486646, 0.344801 , -1.06855416, 0.03062602]),
6,
6)

在这个例子中,我们创建了一个有10个摇臂的赌博机(Bandit),每个摇臂有不同的胜率。我们运行了1000次实验,并使用了ε-贪婪策略(ε设为0.1)来选择摇臂。

输出的结果是三部分:

  1. 每个摇臂的价值估计。
  2. 估计的最优摇臂(根据我们的价值估计)。
  3. 真实的最优摇臂(基于内部胜率)。

在这个特定的运行中,估计的最优摇臂和真实的最优摇臂都是第6个摇臂(从0开始计数)。这意味着我们的ε-贪婪策略有效地学习到了哪个摇臂提供了最高的平均奖励。这个简单的例子展示了如何使用强化学习中的ε-贪婪策略来探索和利用环境,以最大化累积奖励。