17种深度强化学习算法用Pytorch实现

640?wx_fmt=1

640?wx_fmt=jpeg

来源:github

编辑:肖琴

本文经授权转自公众号    新智元

【新智元导读】深度强化学习已经在许多领域取得了瞩目的成就,并且仍是各大领域受热捧的方向之一。本文推荐一个用PyTorch实现了17种深度强化学习算法的教程和代码库,帮助大家在实践中理解深度RL算法。

深度强化学习已经在许多领域取得了瞩目的成就,并且仍是各大领域受热捧的方向之一。本文推荐一个包含了 17 种深度强化学习算法实现的 PyTorch 代码库。
640?wx_fmt=png

已实现的算法包括:

  1. Deep Q Learning (DQN) (Mnih et al. 2013)

  2. DQN with Fixed Q Targets (Mnih et al. 2013)

  3. Double DQN (DDQN) (Hado van Hasselt et al. 2015)

  4. DDQN with Prioritised Experience Replay (Schaul et al. 2016)

  5. Dueling DDQN (Wang et al. 2016)

  6. REINFORCE (Williams et al. 1992)

  7. Deep Deterministic Policy Gradients (DDPG) (Lillicrap et al. 2016 )

  8. Twin Delayed Deep Deterministic Policy Gradients (TD3) (Fujimoto et al. 2018)

  9. Soft Actor-Critic (SAC & SAC-Discrete) (Haarnoja et al. 2018)

  10. Asynchronous Advantage Actor Critic (A3C) (Mnih et al. 2016)

  11. Syncrhonous Advantage Actor Critic (A2C)

  12. Proximal Policy Optimisation (PPO) (Schulman et al. 2017)

  13. DQN with Hindsight Experience Replay (DQN-HER) (Andrychowicz et al. 2018)

  14. DDPG with Hindsight Experience Replay (DDPG-HER) (Andrychowicz et al. 2018 )

  15. Hierarchical-DQN (h-DQN) (Kulkarni et al. 2016)

  16. Stochastic NNs for Hierarchical Reinforcement Learning (SNN-HRL) (Florensa et al. 2017)

  17. Diversity Is All You Need (DIAYN) (Eyensbach et al. 2018)

所有的实现都能够快速解决 Cart Pole (离散动作)、 Mountain Car (连续动作)、Bit Flipping (动态目标的离散动作) 或 Fetch Reach (动态目标的连续动作) 等任务。本 repo 还会添加更多的分层 RL 算法。

已实现的环境:
  1. Bit Flipping 游戏 (Andrychowicz et al. 2018)

  2. Four Rooms 游戏 (Sutton et al. 1998)

  3. Long Corridor 游戏 (Kulkarni et al. 2016)

  4. Ant-{Maze, Push, Fall} (Nachum et al. 2018)

结果

1. Cart Pole 和 Mountain Car

下面展示了各种 RL 算法成功学习离散动作游戏 Cart Pole 或连续动作游戏 Mountain Car 的结果。使用 3 个随机种子运行算法的平均结果如下图所示,阴影区域表示正负 1 标准差。使用的超参数可以在  results/cart_pol .py  和 results/Mountain_Car.py  文件中找到。

640?wx_fmt=png

2. 事后经验重演 (HER) 实验

下面展示了 DQN 和 DDPG 在 Bit Flipping (14 bits) 和 Fetch Reach 环境中的表现,这些环境在论文 Hindsight Experience Replay 和 Multi-Goal Reinforcement Learning 中有详细描述。这些结果复现了论文中发现的结果,并展示了添加 HER 可以如何让一个 agent 解决它原本无法解决的问题。请注意,在每对 agents 中都使用了相同的超参数,因此它们之间的唯一区别是是否使用了 hindsight。

640?wx_fmt=png

3. 分层强化学习实验

下图左边的结果显示了在 Long Corridor 环境中 DQN 和 Kulkarni 等人在 2016 年提出的 hierarchy -DQN 算法的性能。该环境要求 agent 在返回之前走到走廊的尽头,以便获得更大的奖励。这种延迟满足和状态的混叠使得它在某种程度上是 DQN 不可能学习的游戏,但是如果我们引入一个元控制器 (如 h-DQN) 来指导低层控制器如何行动,就能够取得更大的进展。这与论文中发现的结果一致。

下图右边的结果显示了 Florensa 等人 2017 年提出的 DDQN 算法和用于分层强化学习的随机神经网络 (SNN-HRL) 的性能。使用 DDQN 作为比较,因为 SSN-HRL 的实现使用了其中的 2 种 DDQN 算法。

640?wx_fmt=png

用法

存储库的高级结构是:
├── agents                    	
    ├── actor_critic_agents   	
    ├── DQN_agents         	
    ├── policy_gradient_agents	
    └── stochastic_policy_search_agents 	
├── environments   	
├── results             	
    └── data_and_graphs        	
├── tests	
├── utilities             	
    └── data structures

i) 观看智能体学习上述游戏

观看所有不同的智能体学习 Cart Pole,请遵循以下步骤:

git clone https://github.com/p-christ/Deep_RL_Implementations.git	
cd Deep_RL_Implementations	

	
conda create --name myenvname	
y	
conda activate myenvname	

	
pip3 install -r requirements.txt	

	
python Results/Cart_Pole.py
对于其他游戏,将最后一行更改为结果文件夹中的其他文件就行。

ii) 训练智能体实现另一种游戏

Open AI gym 上的环境都是有效的,你所需要做的就是更改  config.environment 字段。

如果你创建了一个继承自 gym.Env 的单独类,那么还可以使用自己的自定义游戏。请参阅  Environments/Four_Rooms_Environment.py  自定义环境的示例,然后查看脚本  Results/Four_Rooms.py  了解如何让 agents 运行环境。
GitHub地址:
https://github.com/p-christ/Deep-Reinforcement-Learning-Algorithms-with-PyTorch

640?wx_fmt=gif

640?wx_fmt=jpeg

CDA 课程咨询丨史老师

联系电话:18080942131
640?wx_fmt=jpeg
扫描二维码

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于策略梯度下降的深度强化学习算法PyTorch实现。 首先我们需要导入相关的包和定义一些超参数: ```python import gym import torch import torch.nn as nn import torch.optim as optim import numpy as np # 超参数 learning_rate = 0.01 gamma = 0.99 hidden_layer = 128 batch_size = 32 episodes = 1000 render = False ``` 接下来,我们需要定义一个神经网络来估计策略。这里我们使用一个简单的全连接神经网络,输入是状态向量,输出是动作的概率分布。 ```python class Policy(nn.Module): def __init__(self, input_dim, output_dim, hidden_layer=128): super(Policy, self).__init__() self.fc1 = nn.Linear(input_dim, hidden_layer) self.fc2 = nn.Linear(hidden_layer, output_dim) def forward(self, x): x = torch.relu(self.fc1(x)) x = torch.softmax(self.fc2(x), dim=1) return x ``` 接下来,我们定义一些函数来计算策略梯度和更新策略。 ```python def compute_policy_gradient(policy, rewards, states, actions): # 计算策略梯度 R = 0 policy_gradient = [] for r in rewards[::-1]: R = r + gamma * R policy_gradient.insert(0, -R) policy_gradient = torch.tensor(policy_gradient) policy_gradient = (policy_gradient - policy_gradient.mean()) / (policy_gradient.std() + 1e-9) # 计算动作概率分布 states = torch.tensor(states, dtype=torch.float32) action_probs = policy(states) dist = torch.distributions.Categorical(action_probs) # 计算策略梯度乘以动作概率 actions = torch.tensor(actions) log_probs = dist.log_prob(actions) policy_gradient *= log_probs.exp() return policy_gradient def update_policy(policy, optimizer, policy_gradient): # 更新策略 optimizer.zero_grad() policy_gradient.mean().backward() optimizer.step() ``` 最后,我们定义主函数来运行整个强化学习算法。在每个回合结束后,我们先计算策略梯度,然后用策略梯度更新策略。 ```python if __name__ == '__main__': # 初始化环境和策略 env = gym.make('CartPole-v0') policy = Policy(env.observation_space.shape[0], env.action_space.n, hidden_layer=hidden_layer) optimizer = optim.Adam(policy.parameters(), lr=learning_rate) # 训练策略 for episode in range(episodes): # 初始化回合 state = env.reset() done = False rewards = [] states = [] actions = [] # 运行回合 while not done: if render: env.render() # 选择动作 state = torch.tensor(state, dtype=torch.float32).unsqueeze(0) action_probs = policy(state) dist = torch.distributions.Categorical(action_probs) action = dist.sample().item() # 执行动作 next_state, reward, done, _ = env.step(action) # 存储数据 states.append(state) actions.append(action) rewards.append(reward) # 更新状态 state = next_state # 计算策略梯度并更新策略 policy_gradient = compute_policy_gradient(policy, rewards, states, actions) update_policy(policy, optimizer, policy_gradient) # 打印训练进度 if episode % 10 == 0: print(f'Episode {episode}/{episodes}') env.close() ``` 这样我们就完成了基于策略梯度下降的深度强化学习算法PyTorch实现。您可以根据实际情况调整超参数和神经网络结构来获得更好的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值