标签: reinforcement-learning

为什么我的 Deep Q Net 和 Double Deep Q Net 不稳定?

我正在尝试实施 DQN 和 DDQN(都有经验回复)来解决 OpenAI AI-Gym Cartpole Environment。这两种方法有时都能学习和解决这个问题,但并非总是如此。

我的网络只是一个前馈网络(我尝试使用 1 和 2 个隐藏层)。在 DDQN 中,我在 DQN 中创建了一个网络,在 DDQN 中创建了两个网络,一个评估 Q 值的目标网络和一个选择最佳动作的主网络,训练主网络,并在一些情节后将其复制到目标网络。

DQN 中的问题是:

  • 有时它在100集内可以达到完美的200分,但有时它会卡住,无论训练多久都只能达到10分。
  • 此外,在成功学习的情况下,学习速度不同。

DDQN 中的问题是:

  • 它可以学习达到 200 分,但随后它似乎忘记了所学,分数急剧下降。

我试过调整批量大小、学习率、隐藏层中的神经元数量、隐藏层数量、探索率,但不稳定性仍然存在。

关于网络大小和批量大小是否有任何经验法则?我认为合理更大的网络和更大的批量会增加稳定性。

是否有可能使学习稳定?任何意见或参考表示赞赏!

python reinforcement-learning q-learning tensorflow

2
推荐指数
1
解决办法
3095
查看次数

Q、V(价值函数)和强化学习中的奖励之间究竟有什么区别?

在 Double Q 或 Deuling Q Networks 的上下文中,我不确定我是否完全理解其中的区别。尤其是 V。V(s) 到底是什么?一个国家如何拥有固有的价值?

如果我们在股票交易的背景下考虑这一点,那么我们将如何定义这三个变量?

machine-learning reinforcement-learning q-learning deep-learning

2
推荐指数
1
解决办法
1841
查看次数

折扣因子的完整含义是什么?强化学习中的(gamma)?

我对机器学习概念相对较新,并且我一直在关注一些涉及 Q-Learning 的讲座/教程,例如:斯坦福大学关于强化学习的讲座

他们都对伽玛在政策函数中的效用到底是什么给出了简短或模糊的答案。迄今为止我发现的最容易理解的解释是“我们多么重视未来的回报”。

真的有那么简单吗?伽玛是否定义了我们如何延迟奖励/展望未来?比如下例中知道采取B选项:

如果有两个选项 A 和 B,A 将立即支付 10,然后再支付 10,而 B 将立即支付 0,然后再支付 30。

所以,我的问题是:

  1. 伽玛的深层解释是什么?
  2. 我们如何设置呢?
  3. 如果不是为了向前看,我们如何向前看?

machine-learning reinforcement-learning q-learning

2
推荐指数
1
解决办法
5773
查看次数

为什么 DDPG/TD3 可以从旧数据中受益而 PPO 不能

我有一个关于深度强化学习的更普遍的问题。我总是有点纠结,保单内和保单外到底有什么区别。当然,可以说,离策略是在轨迹采样期间从不同的动作分布中进行采样,而在策略是使用实际策略来生成轨迹。或者说,on-policy 无法从旧数据中受益,而 off-policy 可以。两者都没有真正回答确切的区别是什么,而是告诉我输出。

根据我的理解,DDPG 和 PPO 都是建立在 A2C 之上,并行训练演员和评论家。而批评者通常是基于 MSE 进行训练的,使用下一个时间步的观察到的奖励(可能使用一些注册多个步骤,但现在忽略注册)和下一个时间步的网络本身。我在这里没有看到离策略 DDPG 和在策略 PPO 之间的区别(TD3 的做法略有不同,但现在被忽略,因为想法是相同的)。

在这两种情况下,演员本身都有一个基于评论家产生的价值的损失函数。PPO 使用策略的比率来限​​制步长,而 DDPG 使用策略来预测批评者计算的值的操作。因此,在两种方法(PPO 和 DDPG)中,两种 CURRENT 策略都用于批评者和参与者的损失函数。

现在我的实际问题是:为什么 DDPG 能够从旧数据中受益,或者更确切地说,为什么 PPO 不能从旧数据中受益。有人可能会说,PPO 中政策的比例限制了政策之间的距离,因此需要新的数据。但与 DDPG 相比,A2C 是如何符合政策且无法从旧数据中受益的呢?

我确实理解 Q 学习与政策学习相比更加脱离政策之间的区别。但我不明白这些 PG 方法之间的区别。它是否仅依赖于 DDPG 是确定性的这一事实。DDPG 是否有任何离策略修正,使其能够从旧数据中获利?

如果有人能让我更了解这些政策,我会非常高兴。

干杯

reinforcement-learning

2
推荐指数
1
解决办法
4023
查看次数

TensorFlow 模型拟合和 train_on_batch 之间的区别

我正在构建一个普通的 DQN 模型来玩 OpenAI 健身房 Cartpole 游戏。

然而,在训练步骤中,我将状态作为输入,目标 Q 值作为标签,如果我使用model.fit(x=states, y=target_q),它工作正常并且代理最终可以很好地玩游戏,但是如果我使用model.train_on_batch(x=states, y=target_q),损失将不会减少并且模型不会比随机策略更好地玩游戏。

我想知道fit和 和 有train_on_batch什么区别?据我了解,在fit后台调用train_on_batch批处理大小为 32 应该没有区别,因为指定批处理大小等于我输入的实际数据大小没有区别。

如果需要更多上下文信息来回答这个问题,完整代码在这里:https : //github.com/ultronify/cartpole-tf

python machine-learning reinforcement-learning deep-learning tensorflow

2
推荐指数
1
解决办法
2791
查看次数

使用带有 DQN 算法的张量板

对于强化学习,我读到张量板并不理想,因为它提供了每集和/或步骤的输入。由于强化学习有数千个步骤,因此它并没有给我们内容的概述。我在这里看到了这个修改后的张量板类:https://pythonprogramming.net/deep-q-learning-dqn-reinforcement-learning-python-tutorial/

班上:

class ModifiedTensorBoard(TensorBoard):
    # Overriding init to set initial step and writer (we want one log file for all .fit() calls)
    def __init__(self, name, **kwargs):
        super().__init__(**kwargs)
        self.step = 1
        self.writer = tf.summary.create_file_writer(self.log_dir)
        self._log_write_dir = os.path.join(self.log_dir, name)

    # Overriding this method to stop creating default log writer
    def set_model(self, model):
        pass

    # Overrided, saves logs with our step number
    # (otherwise every .fit() will start writing from 0th step)
    def on_epoch_end(self, epoch, logs=None):
        self.update_stats(**logs)

    # Overrided
    # We train …
Run Code Online (Sandbox Code Playgroud)

reinforcement-learning tensorflow tensorboard dqn

2
推荐指数
1
解决办法
1592
查看次数

使用 .detach() 的 Pytorch DQN、DDQN 造成了非常大的损失(呈指数级增长)并且根本不学习

这是我对 CartPole-v0 的 DQN 和 DDQN 的实现,我认为这是正确的。

import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import gym
import torch.optim as optim
import random
import os
import time


class NETWORK(torch.nn.Module):
    def __init__(self, input_dim: int, output_dim: int, hidden_dim: int) -> None:

        super(NETWORK, self).__init__()

        self.layer1 = torch.nn.Sequential(
            torch.nn.Linear(input_dim, hidden_dim),
            torch.nn.ReLU()
        )

        self.layer2 = torch.nn.Sequential(
            torch.nn.Linear(hidden_dim, hidden_dim),
            torch.nn.ReLU()
        )

        self.final = torch.nn.Linear(hidden_dim, output_dim)

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.final(x) …
Run Code Online (Sandbox Code Playgroud)

reinforcement-learning q-learning pytorch dqn

2
推荐指数
1
解决办法
1081
查看次数

使用 TFagents 的自定义环境

我正在尝试使用 TFAgents 包学习自定义环境。我正在关注机器学习手册(colab 中的代码,请参阅单元格 129)。我的目标是在自定义编写的网格世界环境中使用 DQN 代理。

网格世界环境:

class MyEnvironment(tf_agents.environments.py_environment.PyEnvironment):

def __init__(self, discount=1.0):
    super().__init__()
    self.discount = discount

    self._action_spec = tf_agents.specs.BoundedArraySpec(shape=(), dtype=np.int32, name="action", minimum=0, maximum=3)
    self._observation_spec = tf_agents.specs.BoundedArraySpec(shape=(4, 4), dtype=np.int32, name="observation", minimum=0, maximum=1)


def action_spec(self):
    return self._action_spec

def observation_spec(self):
    return self._observation_spec

def _reset(self):
    self._state = np.zeros(2, dtype=np.int32)
    obs = np.zeros((4, 4), dtype=np.int32)
    obs[self._state[0], self._state[1]] = 1
    return tf_agents.trajectories.time_step.restart(obs)

def _step(self, action):
    self._state += [(-1, 0), (+1, 0), (0, -1), (0, +1)][action]
    reward = 0
    obs = np.zeros((4, 4), dtype=np.int32) …
Run Code Online (Sandbox Code Playgroud)

reinforcement-learning keras tensorflow

2
推荐指数
1
解决办法
610
查看次数

OPenAI Gym Retro 错误:“AttributeError:模块‘gym.utils.seeding’没有属性‘hash_seed’”

我正在使用 WSL2 和 Ubuntu 20.4,我使用 (venv) 创建一个新的虚拟环境,并按照 OpenAI 官方页面所述安装gym-retro ( https://retro.readthedocs.io/en/latest/getting_started.html ),使用以下命令:

pip3 install gym-retro

我在安装它时没有收到错误,然后为了测试它,我运行命令(如前面提到的入门页面中所述):

python3 -m retro.examples.interactive --game Airstriker-Genesis

并得到以下错误:

在此输入图像描述

有人能帮帮我吗?

我还使用最简单的实现(调用retro.make("Game-name"))对其进行了测试,并且也遇到了相同的错误。

python reinforcement-learning openai-gym openai-api

2
推荐指数
1
解决办法
3747
查看次数

AssertionError:该算法仅支持 <class 'gym.spaces.box.Box'> 作为操作空间,但提供了 Box(-1.0, 1.0, (3,), float32)

所以基本上我尝试将这个自定义健身房环境从https://github.com/Gor-Ren/gym-jsbsim转换为使用farama基金会的gymnasium api。这是我正在开发的存储库: https: //github.com/sryu1/jsbgym 当我尝试使用gym-jsbsim 训练环境时,它可以工作,但是在gymnasium 环境中,我收到标题中的错误...我觉得tasks.py 中的第234 到242 行是导致问题的地方。所有算法都会出现相同的错误...如果有人能告诉我我做错了什么,我将非常感激!我尝试使用稳定的基线 3 所有支持 Box 的算法来训练自定义环境,但它们都遇到相同的错误。

这是我的原始格式的 ipynb,如果你只是用记事本打开一个新的 ipynb 文件,然后将其粘贴进去,然后再次打开,它应该可以工作。

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7e5a3876",
   "metadata": {},
   "outputs": [],
   "source": [
    "import jsbsim\n",
    "import gymnasium as gym\n",
    "import jsbgym\n",
    "import os\n",
    "from stable_baselines3 import DDPG\n",
    "from stable_baselines3.common.callbacks import BaseCallback\n",
    "from stable_baselines3.common.monitor import Monitor\n",
    "from stable_baselines3.common.vec_env import DummyVecEnv, VecFrameStack"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c78d0a36",
   "metadata": {},
   "outputs": [],
   "source": [
    "env = …
Run Code Online (Sandbox Code Playgroud)

python artificial-intelligence reinforcement-learning openai-gym stable-baselines

2
推荐指数
1
解决办法
5626
查看次数