机器学习 Deep Q-Networks 怎么实现?

文章导读
Previous Quiz Next 什么是 Deep Q-Networks? Deep Q-Network (DQN) 是强化学习领域的一种算法。它结合了深度神经网络和 Q-learning,使代理能够在复杂环境中学习最优策略。传统的 Q-learning 在状态数
📋 目录
  1. 什么是 Deep Q-Networks?
  2. Deep Q-Networks 的关键组件
  3. Deep Q-Networks 如何工作?
  4. Deep Q-Networks 的局限性
  5. Double Deep Q-Networks
  6. Dueling Deep Q-Networks
A A

Deep Q-Networks (DQN)



Previous
Quiz
Next

什么是 Deep Q-Networks?

Deep Q-Network (DQN) 是强化学习领域的一种算法。它结合了深度神经网络和 Q-learning,使代理能够在复杂环境中学习最优策略。传统的 Q-learning 在状态数量小且有限的环境中效果良好,但由于 Q-table 的大小问题,在大型或连续状态空间中表现不佳。Deep Q-Networks 通过用神经网络替换 Q-table 来克服这一限制,该神经网络可以逼近每个状态-动作对的 Q 值。

Deep Q-Networks 的关键组件

以下是 Deep Q-Networks 架构组成部分的列表 −

  • 输入层 − 该层以数值向量形式接收来自环境的 state 信息。
  • 隐藏层 − DQN 的隐藏层由多个全连接神经元组成,将输入数据转换为更复杂的特征,这些特征更适合用于预测。
  • 输出层 − DQN 的输出层中,每个当前状态下可能的动作由单个神经元表示。这些神经元的输出值表示该状态下每个动作的估计值。
  • 记忆 − DQN 使用 experience replay 来存储代理的训练事件。所有信息包括当前状态、采取的动作、获得的奖励以及下一个状态,都以元组形式存储在记忆中。
  • 损失函数 − DQN 计算 replay memory 中的实际 Q 值与预测 Q 值之间的差异,以确定损失。
  • 优化 − 它涉及调整网络权重以最小化损失函数。通常使用随机梯度下降 (SGD) 来实现此目的。

下图展示了 deep q-network 架构中的组件 -

Deep Q-Network Architechture

Deep Q-Networks 如何工作?

DQN 的工作流程包括以下步骤 −

神经网络架构 −

DQN 使用一系列帧(如游戏图像)作为输入,并为该特定状态下的每个潜在动作生成一组 Q 值。典型的配置包括用于空间关系的卷积层和用于 Q 值输出的全连接层。

Experience Replay

在训练过程中,代理将其交互(state、action、reward、next state)存储在 replay buffer 中。从该 buffer 中随机采样批次来训练网络,从而减少连续经验之间的相关性并提高训练稳定性。

Target Network

为了稳定训练过程,Deep Q-Networks 使用一个独立的 target network 来生成 Q 值目标。target network 定期从主网络更新权重,以最小化训练过程中的发散风险。

Epsilon-Greedy Policy

代理使用 epsilon-greedy 策略,以概率 ${\epsilon}$ 选择随机动作,以概率 ${1- \epsilon}$ 选择 Q 值最高的动作。这种探索与利用之间的平衡有助于代理有效学习。

训练过程

使用梯度下降训练神经网络,以最小化预测 Q 值与目标 Q 值之间的损失。目标 Q 值使用 Bellman equation 计算,该方程结合了获得的奖励和下一个状态的最大 Q 值。

Deep Q-Networks 的局限性

Deep Q-Networks (DQNs) 有几个局限性,会影响其效率和性能 −

  • DQN 由于频繁的神经网络更新导致的非平稳性问题而存在不稳定性。
  • DQN 有时会高估 Q-values,这可能会对学习过程产生负面影响。
  • DQN 需要大量样本才能良好学习,这在计算方面可能昂贵且耗时。
  • DQN 的性能很大程度上受超参数选择的影响,例如 learning rate、discount factor 和 exploration rate。
  • DQNs 主要适用于离散动作空间,在连续动作空间的环境中可能会遇到困难。

Double Deep Q-Networks

Double DQN 是 Deep Q-Network 的扩展版本,旨在解决基本 DQN 方法中的一个问题 − Q-value 更新中的过高估计偏差。 过高估计偏差是由 Q-learning 更新规则使用同一 Q-network 来选择和评估动作所引起的,导致 Q-values 的估计值被夸大。这个问题会导致训练不稳定并阻碍学习过程。Double DQN 使用两个不同的网络来解决这个问题 −

  • Q-Networks,负责选择动作
  • Target Network,评估所选动作的价值。

Double DQN 的主要修改在于目标计算方式。与仅使用 Q-network 来选择和评估下一个动作不同,Double DQN 使用 Q-network 在后续状态中选择动作,并使用 target network 来评估所选动作的 Q-value。这种分离减少了过高估计的倾向,并导致更精确的价值计算。因此,Double DQN 提供了更一致和可靠的训练过程,尤其是在 Atari 游戏等场景中,常规 DQN 方法可能因过高估计而面临挑战。

Dueling Deep Q-Networks

Dueling Deep Q-Networks (Dueling DQN) 通过将状态价值的估计与动作优势分开,来改进传统 Deep Q-Network (DQN) 的学习过程。在传统 DQN 中,为每个状态-动作组合计算一个单独的 Q-value,表示期望的累积奖励。然而,这可能效率低下,特别是当众多动作导致相似后果时。Dueling DQN 通过将 Q-value 分解为两个主要部分来处理这个问题:状态价值 ${V(s)}$ 和优势函数 ${A(s,a)}$。然后 Q-value 由 ${Q(s,a)= V(s) + A(s,a)}$ 给出,其中 V(s) 捕捉处于给定状态的价值,而 ${A(s,a)}$ 衡量在同一状态中一个动作相对于其他动作的好多少。

Dueling DQN 通过分别估计状态价值和动作优势,帮助 agent 更好地理解环境,并避免学习不必要的动作价值估计。这导致性能提升,尤其是在存在延迟奖励的情况下,使 agent 能够更好地理解在选择最优动作时各种状态的重要性。