文章目录
在强化学习中,epsilon(ε-greedy策略中的探索率)通常会随着训练进程逐渐减小,而非增大。这一设计的核心逻辑在于平衡探索与利用的动态需求:
-
训练初期需要高探索率
- 当智能体刚开始学习时,Q表或价值函数尚未准确,此时较高的epsilon(如0.9)能促使智能体频繁尝试随机动作,收集更多环境反馈数据。例如,在迷宫问题中,初期高探索率能帮助发现隐藏的捷径。
-
训练后期侧重高利用率
- 随着Q值逐渐收敛,智能体已掌握较优策略。此时降低epsilon(如衰减至0.01),可减少无意义的随机探索,专注于执行已知的高收益动作。例如,在AlphaGo训练后期,策略网络会更依赖已学习的最佳棋路而非随机尝试。
-
衰减方式的具体实现
- 指数衰减(如代码示例中的
epsilon = min_ε + (max_ε - min_ε)*exp(-decay*episode)
)能平滑过渡探索与利用阶段,避免突变导致的策略震荡。 - 线性衰减(如每episode固定减少0.001)适用于训练周期明确且需严格控制探索率的场景。
- 指数衰减(如代码示例中的
-
特殊场景的例外情况
- 在非稳态环境(如动态变化的股票市场)中,可能需要周期性重置epsilon以应对环境变化,但这类情况需配合其他机制(如滑动窗口更新Q值)。
衰减的本质是让智能体从「广泛试错」逐步过渡到「精益执行」。若epsilon不衰减或反向增大,会导致模型无法收敛(持续探索)或陷入局部最优(过早停止探索)。实际应用中,衰减速率需根据任务复杂度调整:简单任务可快速衰减(如decay_rate=0.1),复杂任务需缓慢衰减(如decay_rate=0.001)。
ε-greedy策略
ε-greedy策略是强化学习中平衡探索与利用的经典方法,其核心通过参数ε(0到1之间的小数)控制行为选择概率。具体表现为:在ε概率下随机选择未知动作(探索),1-ε概率下选取当前Q值最高的动作(利用)。例如ε=0.1时,90%时间执行最优动作,10%尝试新动作。这种机制既保证了对已知高回报动作的充分利用,又避免因过早停止探索而错过更优解。其缺陷在于固定ε值可能导致后期无效探索,因此衍生出ε随时间衰减的改进版本。该策略因实现简单、效果稳定,被广泛应用于多臂老虎机、推荐系统等场景。
伪代码
import random
def epsilon_greedy(q_values, epsilon):
"""ε-greedy动作选择策略
参数:
q_values (list): 各动作的预估价值列表
epsilon (float): 探索概率参数[0.0,1.0]
返回:
int: 选择的动作索引
"""
if random.random() < epsilon: # 探索阶段
return random.randint(0, len(q_values)-1)
else: # 利用阶段
max_value = max(q_values)
# 处理多个动作具有相同最大价值的情况
return random.choice([i for i, v in enumerate(q_values) if v == max_value])
▎核心实现要点:
扫描二维码关注公众号,回复:
17633627 查看本文章

- 概率判断:通过
random.random()
生成[0,1)随机数,与ε比较决定探索/利用模式 - 探索机制:均匀随机选择所有可能动作,保证环境探索广度
- 利用机制:采用
max()+enumerate
组合定位最优动作,并通过random.choice
避免多个最优值时的选择偏差 - 参数约束:要求epsilon∈[0,1],q_values列表非空(实际工程需添加校验)
典型应用场景示例:
# 初始化各动作价值估计
action_values = [2.1, 1.8, 2.3, 2.0]
# 执行10次选择测试
for _ in range(10):
chosen = epsilon_greedy(action_values, epsilon=0.2)
print(f"Selected action: {
chosen} (Value: {
action_values[chosen]:.1f})")
该实现完整展现了ε-greedy的核心逻辑,实际部署时可结合numpy优化计算效率,或添加衰减因子实现动态ε调整。