首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是“经验回放”,它的好处是什么?

什么是“经验回放”,它的好处是什么?
EN

Data Science用户
提问于 2017-07-19 04:15:22
回答 2查看 71.9K关注 0票数 49

我一直在阅读谷歌的DeepMind Atari ,我试图理解“体验重放”的概念。经验重播出现在许多其他强化学习论文(特别是AlphaGo论文)中,所以我想了解它是如何工作的。以下是一些摘录。

首先,我们使用了一种被称为经验回放的生物激励机制,它将数据随机化,从而消除了观测序列中的相关性,并平滑了数据分布的变化。

然后,本文详细阐述了以下内容:

而在强化学习设置中训练神经网络的其他稳定方法,如神经拟合Q-迭代法,则需要对网络进行重复训练,以达到数百次迭代。因此,与我们的算法不同,这些方法效率太低,无法成功地应用于大型神经网络。我们使用图1所示的深卷积神经网络参数化了一个近似值函数Q(s, a; \theta_i),其中\theta_i是迭代i中Q-网络的参数(即权值)。为了执行经验回放,我们将代理的经验e_t = (s_t, a_t, r_t, s_{t+1})存储在数据集t中的每个时间步骤D_t = \{e_1, \dots, e_t \}中。在学习过程中,我们将Q学习更新应用于经验(s, a, r, s') \sim U(D)的样本(或小型批次),从存储的样本池中以随机的方式均匀绘制。迭代i中的Q学习更新使用以下丢失函数:L_i(\theta_i) = \mathbb{E}_{(s, a, r, s') \sim U(D)} \left[ \left(r + \gamma \max_{a'} Q(s', a'; \theta_i^-) - Q(s, a; \theta_i)\right)^2 \right]

什么是经验回放,它的好处是什么,在外行的术语?

EN

回答 2

Data Science用户

发布于 2020-01-02 11:19:54

该算法(或至少在古瑟尔项目中实现的该算法的一个版本)如下:

  1. 创建一个回放“缓冲区”,存储最后一次#buffer_size S.A.R.S. (状态、动作、奖励、新状态)体验。
  2. 运行您的代理,让它在回放缓冲区中积累经验,直到它(缓冲区)至少有了#batch_size经验为止。
    • 您可以根据特定的策略选择操作(例如,对于离散的动作空间来说,软-最大值,对于连续的,等等)。在您的\hat{Q}(s,a ; \theta)函数估计器上。

  3. 一旦到达#batch_size或更多:
    • 在当前时间创建函数估计器(\hat{Q}(s,a; \theta))的副本,即权重\theta的副本--“冻结”而不更新,并使用它来计算“真”状态\hat{Q}(s', a'; \theta)。运行num_replay更新:
      1. 从重放缓冲区中获得的示例#batch_size体验。
      2. 使用抽样的经验预先形成一批更新到您的函数估计器(例如,在Q-学习中,\hat{Q}(s,a) =神经网络-更新网络的权重)。使用冻结权值作为“真”动作值函数,但继续改进非冻结函数。

代码语言:javascript
运行
复制
- do this until you reach a terminal state. 
- don't forget to constantly append the new experiences to the Replay Buffer
  1. 你需要多少集就跑多少集。

我所说的“真”是什么意思:每一次体验都可以被看作是一个“监督”的学习二重奏,其中你有一个真值函数Q(s,a)和一个函数估计器\hat{Q}(s,a)。您的目标是减少值错误,例如\sum(Q(s,a) - \hat{Q}(s,a))^2。由于您可能无法访问真正的操作值,因此您可以使用引导的改进版本的最后一个评估器,同时考虑到新的体验和所给予的奖励。在Q-学习中,“真”动作值是Q(s,a) = R_{t+1} + \gamma \max_{a'}\hat{Q}(s', a'; \theta),其中R是奖励,\gamma是折扣因子。

下面是代码的摘录:

代码语言:javascript
运行
复制
def agent_step(self, reward, state):
    action = self.policy(state)
    terminal = 0
    self.replay_buffer.append(self.last_state, self.last_action, reward, terminal, state)
    if self.replay_buffer.size() > self.replay_buffer.minibatch_size:
        current_q = deepcopy(self.network)
        for _ in range(self.num_replay):
            experiences = self.replay_buffer.sample()
            optimize_network(experiences, self.discount, self.optimizer, self.network, current_q, self.tau)
    self.last_state = state
    self.last_action = action        
    return action
票数 8
EN

Data Science用户

发布于 2023-02-03 21:05:11

由于两个原因,我们需要一个重放缓冲区。

  1. Q-学习更新是增量和缓慢的收敛。为了收敛,需要多次通过q-函数。
  2. 当输入在神经网络中高度相关时,梯度在一个方向上是高的,导致网络过度校正。
票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/20535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档