美文网首页
深度强化学习(11)DQN - Deep Q Learning

深度强化学习(11)DQN - Deep Q Learning

作者: 数科每日 | 来源:发表于2022-02-17 02:25 被阅读0次

本文主要内容来源于 Berkeley CS285 Deep Reinforcement Learning


前情回顾:

深度强化学习(9)Fitted Q-iteration
深度强化学习(10)Q-Learning

前两章, 介绍了Iteration Q-Learning, 本章更近一步, 讨论 DQN, 这是经常会使用到的一种 Deep RL 算法。

Fitted Q Iteration & Q-Learning

Iteration Q-Learning 的问题

之前我们介绍的 Iteration Q-Learning 其实存在2个问题:

  1. 不是真正的 Gradient Descent
  2. 样本非独立
Gradient Descent 问题

我们把Iteration Q-Learning 第2个步骤带入第3步以后, 会得到下面的方程:

Iteration Q-Learning

问题出在红圈画出来的部分:训练神经网络的 Lable 中,不应该包含网络自身。

样本非独立性问题

在第1步, 我们进行采样的时候,我们是利用 env 进行连续采样。

transations = []

# 重置环境,获得初始state
state_t0 = env.reset()

# Sample
for i in range(sample_size):

    # 根据一些policy,获得 action
    action = some_policy(state_t0)
    
    # 利用环境,获得state 和 reward
    state_t1, reward = env.step(state, action)
    
    # 保存获取到的样本
    transations.append((state_t0, action, state_t1, reward))
    
    # 更新state 
    state_t0 = state_t1

这样就造成一个问题: 得到的样本并不独立,如下图所示。 原因是获取样本在时间上是连续的序列。 而训练神经网络的时候,我们对样本的假设是,他们必须独立同分布(i.i.d 假设) 。

样本非独立
样本独立性的一个解决办法

我们可以借助多个worker 的方法,在一定程度上解决样本独立性的问题。办法就是把相关的样本分散到多个worker 上去。 这样每个worker 拿到的数据就不是连续的了。

image.png

Replay Buffer

Replay Buffer 也是用于解决样本独立性的办法, 因为它的用法非常广泛, 所以我们单独拿出来介绍这个方法。

Replay Buffer 的想法借鉴了 Supervise Learning, 希望事先准备一堆数据, 而这些数据最好是 i.i.d. (独立同分布)的, 这样, 就可以解决问题了:

Q-Learning with Replay Buffer

在第1步,直接从 Replay Buffer 获取训练数据。

# Sample replay buffer
replay_data = self.replay_buffer.sample(batch_size, env=self._vec_normalize_env) 。 
Replay Buffer
构建Replay Buffer 中的样本

构建 Replay Buffer 的过程,和本文开头的代码类似, 也是连续的从 env 中获取 transition。这些transition被散放在 Replay Buffer , 等待抽样。


Build Replay Buffer

上文代码中有一段:

# 根据一些policy,获得 action
action = some_policy(state_t0)

在 Q Learning 中, 一般使用 \epsilon-greedy 方法。

Put It Together

把 Replay Buffer 和 Q-Learning 结合在一起以后,得到新的 Q Learning 算法:

image.png

相关文章

网友评论

      本文标题:深度强化学习(11)DQN - Deep Q Learning

      本文链接:https://www.haomeiwen.com/subject/zqoklrtx.html