深度学习20-探索ε-greedy方法的效力

# 2022.6.14 rl-21

### 高级探索

▪  讨论为什么探索是RL中如此重要的主题。
▪  探索ε-greedy方法的效力。
▪  了解替代方案,并在不同的环境中进行尝试。

在理论RL中,对此存在严格的定义,但是宏观思想很简单直观。当我们不在以下状态浪费时间时,探索是有效的:智能体已经看过并熟悉的环境。智能体不应一遍又一遍地执行相同动作,而需要寻找全新的经验。正如我们已经讨论过的,探索必须和利用相平衡,它们是相反的,利用意味着使用我们的知识以最有效的方式获得最佳奖励。现在让我们快速讨论为什么我们会对有效探索感兴趣。

高层面来看,两种方法做的事一样:探索环境,将随机性引入动作。但是,最近的研究表明,这种方法远非理想做法:
▪  对于价值迭代方法,在我们的某些轨迹中执行的随机动作会将偏差引入Q值估计中。Bellman方程假设下一个状态的Q值是从Q值最大的动作中获得的。换句话说,轨迹的剩余部分应该来自最优行为。但是,使用ε-greedy时,我们可能不会执行最优动作,而只是执行随机动作,并且这条轨迹将在回放缓冲区中存储很长一段时间,直到ε被衰减并且旧样本从缓冲区中被剔除为止。在此之前,我们将学习错误的Q值。
▪  随着随机动作注入轨迹,我们的策略在每一步都会变化。根据ε值或熵损失系数定义的频率,我们的轨迹会不断在随机策略和当前策略之间连续切换。在需要执行多个步骤才能到达环境状态空间中某些孤立区域的情况下,这可能会导致状态空间覆盖不足。

 三种不同的探索方法:
▪  策略中的随机性,我们将随机性添加到用于获取样本的策略中。这个系列中的方法是噪声网络,我们已经讨论过了。
▪  基于计数的方法,该方法可跟踪智能体看过特定状态的次数。我们将研究两种方法:状态的直接计数方法和状态的伪计数方法。
▪  基于预测的方法,该方法尝试根据状态和预测质量来预测某些内容。我们可以判断智能体对这种状态的熟悉程度。为了说明这种方法,我们将看一下策略蒸馏方法,该方法显示了在探索困难的Atari游戏(如蒙特祖玛的复仇)中的最先进的结果。
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个使用ε-greedy策略实现深度强化学习的示例代码: ```python import random import numpy as np import tensorflow as tf # 定义ε-greedy策略参数 epsilon = 0.2 # 创建深度强化学习模型 model = create_model() # 定义损失函数和优化器 loss_function = tf.keras.losses.MeanSquaredError() optimizer = tf.keras.optimizers.Adam() # 定义动作空间数量 num_actions = 4 # ε-greedy策略的选择动作函数 def choose_action(state): rand = random.random() if rand < epsilon: # 随机选择一个动作进行探索 return random.randint(0, num_actions-1) else: # 利用深度强化学习模型选择最优动作 q_values = model.predict(np.array([state])) return np.argmax(q_values[0]) # 深度强化学习训练循环 for episode in range(num_episodes): state = env.reset() # 重置环境的初始状态 while True: action = choose_action(state) # 根据ε-greedy策略选择动作 next_state, reward, done, _ = env.step(action) # 执行动作并观察奖励和下一个状态 # 计算目标Q值 target_q_values = model.predict(np.array([next_state])) max_q_value = np.max(target_q_values[0]) target = reward + discount_factor * max_q_value with tf.GradientTape() as tape: # 计算当前状态的Q值 q_values = model(np.array([state])) q_value = q_values[0][action] # 计算损失函数 loss = loss_function(target, q_value) # 计算梯度并更新模型 gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) state = next_state if done: break ``` 请注意,上述代码是一个简化的示例,展示了如何使用ε-greedy策略来实现深度强化学习。实际的代码需要根据具体问题和深度强化学习模型进行调整和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值