我一直在阅读谷歌的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]
什么是经验回放,它的好处是什么,在外行的术语?
发布于 2020-01-02 11:19:54
该算法(或至少在古瑟尔项目中实现的该算法的一个版本)如下:
#buffer_size
S.A.R.S. (状态、动作、奖励、新状态)体验。#batch_size
经验为止。#batch_size
或更多:num_replay
更新:#batch_size
体验。- do this until you reach a terminal state.
- don't forget to constantly append the new experiences to the Replay Buffer
我所说的“真”是什么意思:每一次体验都可以被看作是一个“监督”的学习二重奏,其中你有一个真值函数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是折扣因子。
下面是代码的摘录:
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
发布于 2023-02-03 21:05:11
由于两个原因,我们需要一个重放缓冲区。
https://datascience.stackexchange.com/questions/20535
复制相似问题