情景记忆和深度 Q 网络
情景记忆:
情景记忆是一类长期记忆,涉及最近对特定事件、情况和经历的回忆。例如你在大学的第一天。情景记忆的两个重要方面是模式分离和模式完成。
语义记忆在机器学习中以多种方式使用,例如迁移学习、LSTM 等序列、灾难性遗忘等。但是如果您设计智能代理,我们可以将情景记忆的各个方面用于我们的目的。
机器学习中的情景记忆:
情景记忆在深度强化学习中的价值正在增加,因为许多新的强化学习论文在其代理架构中使用情景记忆。在基于 DRL 的代理中,这通常采用添加外部内存的形式,类似于添加外部内存系统的形式,类似于将差分神经计算机添加到代理的策略网络中,以决定采取或不采取哪些行动。
回答这些问题的一个步骤可能是检查哺乳动物的情节记忆。许多人认为海马体的形成与一般记忆,特别是情节记忆有关。
情节记忆的组织:
我们已经说过情景记忆系统会跟踪代理信念的变化,但我们还没有阐明这种记忆是如何组织的,以及信息是如何存储和检索的。
为了使记忆系统有效,我们必须满足三个属性:
- 从单次暴露于环境中存储准确的记忆。
- 从部分提示中检索记忆。
- 能够存储和回忆大量经验。
建筑学:
有许多架构被提议用于在强化学习中使用情景记忆,我们在这里讨论的是由微软研究院的研究人员提出的“情景记忆深度 Q 网络”论文。
- 深Q-网络(DQN):一个成熟的技术来执行上述任务Q学习,我们决定在一个名为Q-功能函数,它是对算法的成功非常重要。 DQN 使用神经网络作为 Q 函数来逼近动作值 Q(s, a, \theta) 其中网络的参数和(s,a)表示状态-动作对。 DQN 的两个重要组成部分是目标网络和经验中继。使用随机梯度下降优化神经网络的参数以最小化损失函数:
其中 r t表示t 处的奖励,\gamma 是折扣因子,\bar{\theta} 是目标网络的参数。
- 情景记忆深度 Q 网络 (EMDQN):通常情景记忆通过引入接近确定性的环境来直接控制,以提高 RL 中的数据效率。在本文中,作者使用Episodic Control来加速DQN的训练。智能体能够快速锁定高奖励策略,即使它保持对状态泛化执行缓慢优化的 NN 训练。该算法利用了两个系统的优势,一个模拟提供推理目标的纹状体,用 S 表示,另一个模拟提供记忆目标的海马体,由 H 生成。 因此,我们新的损失函数是:
- .
- 其中 Q θ被称为由 θ 参数化的价值函数。
- 记忆目标 H 定义为最佳记忆回报,如下所示:
- 其中,E 表示智能体面临的情节数,R i (s, a) 表示在第i 个情节中在状态s下采取行动a时的未来回报。使用这个模型的好处是:
- 更快的奖励传播: EMDQN利用情景记忆的最大回报来传播奖励,弥补了单步奖励更新导致学习慢的缺点。对于接近确定性的环境,情景记忆中包含的每个奖励都是迄今为止最佳的。因此,使用内存目标H ,最佳轨迹中的奖励可以传播到 Q θ (s, a) 的参数。
- 两种学习模型的结合:通过情景记忆和深度Q网络的结合,网络将更好地模拟人脑, 目标函数是这样的:
其中,D 是小批量剧集。添加参数如提供在情景记忆和深度 Q 网络之间切换的额外灵活性。
- 高采样效率: EMDQN 引入了一种捕获更多样本信息的方法。在训练过程中,它过滤出情景记忆的最佳回报,并将知识整合到神经网络中,从而更有效地利用样本。在之前的 RL 算法中,无论奖励如何,所有样本都是统一采样的,这导致由于零奖励的频繁出现而导致训练性能不佳。
下面是这个 EMDQN 方法的架构:
由 4 个历史帧表示的状态s由卷积神经网络处理,并由两个全连接层前向传播以计算 Q θ (s, a)。状态s乘以从高斯分布中抽取的随机矩阵并投影到向量h 中,传入内存表查找对应值H(s, a) ,然后使用H(s, a)对Q θ进行正则化(s, a)。为了有效地查找表,我们使用 kd-Tree 来构造内存表。所有经验元组以及每个情节跟踪都被缓存。 .与 DQN 中的目标网络类似,它维护一个目标内存表以提供稳定的内存值,该值使用先前缓存的转换进行更新。
执行
- 在这个实现中,我们将在 Pong 游戏上训练 EMDQN。为此,我们将使用 Collaboratory。
Python3
# clone the original EMDQN repository
! git clone https://github.com/LinZichuan/emdqn
# switch to TensorFlow v1.0 to run this.
%tensorflow_version 1.x
# Install required modules
! cd emdqn && pip install -e .
# run train.py file in atari folder
# Due to resource constraint we will take (2 * 10^6) steps.
# The original paper runs on 4e7 epoch.
! cd emdqn/baselines/deepq/experiments/atari && python train.py --emdqn --steps 2e6
# Plot Reward with steps
import matplotlib.pyplot as plt
import pandas as pd
df =pd.read_csv('/content/emdqn/baselines/deepq/experiments/atari/result_Pong_True',
header=None)
plt.plot(df[0],df[1])
qec_mean: -1.5634830438441465
qec_fount: 0.93
------------------------------------
| % completion | 1 |
| steps | 1.97e+06 |
| iters | 4.91e+05 |
| episodes | 470 |
| reward (100 epi mean) | -19.1 |
| exploration | 0.01 |
------------------------------------
ETA: 1 minute
------------------------------------
| % completion | 1 |
| steps | 1.98e+06 |
| iters | 4.93e+05 |
| episodes | 471 |
| reward (100 epi mean) | -19 |
| exploration | 0.01 |
------------------------------------
ETA: less than a minute
------------------------------------
| % completion | 1 |
| steps | 1.99e+06 |
| iters | 4.95e+05 |
| episodes | 472 |
| reward (100 epi mean) | -18.9 |
| exploration | 0.01 |
------------------------------------
ETA: less than a minute
- 从上图可以得出结论,随着步数的增加,模型在 Pong 游戏任务上表现更好,在获得 150 万次奖励后,奖励提升更大。原始模型是在 4700 万个 epoch 上训练的,由于时间和资源限制以及 colab 的内存有限,我们无法训练那么多。
参考:
- 情景记忆和深度 Q 网络