让AI真正玩学会游戏-我的强化学习之旅

记录一下,我从百度飞桨深度学习学院 《强化学习7日打卡营-世界冠军带你从零实践》,了解到的东西吧。。。

 

这不是按键精灵,靠颜色判断来打怪

这不是游戏辅助,用内存读写来刷图

而是真正的让AI学会玩游戏。。。

这就叫做-强化学习

什么是强化学习

  • 强化学习(英语:Reinforcement learning,简称RL)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。
  • 核心思想:智能体agent在环境environment中学习,根据环境的状态state(或观测到的observation),执行动作action,并根据环境的反馈 reward(奖励)来指导更好的动作。

课程中用到的是如下利器:

 

 

  • GYM是强化学习中经典的环境库,用到里面的CliffWalkingWapperFrozenLake环境,为了使得环境可视化更有趣一些,可以在PARL代码库中的examples/tutorials/lesson1中下载gridworld.py使用。

  • PARL开源库地址:https://github.com/PaddlePaddle/PARL

 

课程的内容如下:

链接在这里:https://aistudio.baidu.com/aistudio/education/group/info/1335

想学就自己去看吧。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一个开源的Python机器学习库,它提供了强大的工具来进行深度学习和强化学习。在这篇文章中,我们将使用PyTorch来构建一个深度强化学习模型,让AIAtari游戏。 Atari游戏是一系列经典的电子游戏,如Pong、Space Invaders和Breakout。这些游戏简单易懂,但是对于人类家来说仍然有挑战性。我们将使用Atari游戏作为我们的强化学习环境,以训练我们的AI代理。 我们将使用Deep Q-Networks(DQN)算法来训练我们的AI代理。DQN是一种基于深度学习的强化学习算法,它将神经网络与Q学习相结合,使得AI代理可以学习如何最大化其预期回报。 首先,我们需要安装PyTorch和OpenAI Gym。OpenAI Gym是一个用于开发和比较强化学习算法的工具包。您可以在这里找到有关安装方法的说明:https://pytorch.org/get-started/locally/ 和 https://gym.openai.com/docs/#installation。 在安装完成后,我们可以开始编我们的代码。 首先,我们需要导入必要的库: ```python import random import math import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F import numpy as np import gym ``` 接下来,我们定义我们的Agent类。Agent类负责与环境交互并学习如何游戏。 ```python class Agent: def __init__(self, env, gamma, epsilon, lr): self.env = env self.gamma = gamma self.epsilon = epsilon self.lr = lr self.memory = [] self.model = Net(env.observation_space.shape[0], env.action_space.n) self.optimizer = optim.Adam(self.model.parameters(), lr=self.lr) def act(self, state): if random.random() < self.epsilon: return self.env.action_space.sample() else: state = torch.FloatTensor(state).unsqueeze(0) q_values = self.model(state) return q_values.max(1)[1].item() def remember(self, state, action, next_state, reward): self.memory.append((state, action, next_state, reward)) def learn(self, batch_size): if len(self.memory) < batch_size: return transitions = random.sample(self.memory, batch_size) batch = Transition(*zip(*transitions)) state_batch = torch.FloatTensor(batch.state) action_batch = torch.LongTensor(batch.action) reward_batch = torch.FloatTensor(batch.reward) next_state_batch = torch.FloatTensor(batch.next_state) q_values = self.model(state_batch).gather(1, action_batch.unsqueeze(1)) next_q_values = self.model(next_state_batch).max(1)[0].detach() expected_q_values = (next_q_values * self.gamma) + reward_batch loss = F.smooth_l1_loss(q_values, expected_q_values.unsqueeze(1)) self.optimizer.zero_grad() loss.backward() self.optimizer.step() ``` 我们的Agent类具有几个方法: 1. `__init__`方法初始化代理。我们传递的参数包括环境,折扣因子(gamma),ε贪心策略中的ε值和学习率(lr)。我们还创建了一个神经网络模型和Adam优化器。 2. `act`方法根据当前状态选择一个动作。我们使用ε贪心策略,在一定概率下随机选择动作,否则选择当前状态下具有最高Q值的动作。 3. `remember`方法将经验元组(state,action,next_state,reward)添加到内存中。 4. `learn`方法从内存中随机选择一批经验元组,然后使用这些经验元组进行训练。我们计算当前状态下的Q值和下一个状态下的最大Q值,然后使用这些值计算预期Q值。我们使用平滑L1损失函数计算损失,并使用Adam优化器更新我们的模型。 接下来,我们定义我们的神经网络模型。 ```python class Net(nn.Module): def __init__(self, input_size, output_size): super(Net, self).__init__() self.fc1 = nn.Linear(input_size, 128) self.fc2 = nn.Linear(128, 128) self.fc3 = nn.Linear(128, output_size) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x ``` 我们的模型是一个简单的前馈神经网络,具有三个全连接层。我们使用ReLU激活函数,并且输出层的大小等于动作空间的大小。 最后,我们定义我们的主函数,用于实际运行我们的代理。 ```python if __name__ == '__main__': env = gym.make('Breakout-v0') agent = Agent(env, gamma=0.99, epsilon=1.0, lr=1e-4) batch_size = 32 num_episodes = 1000 for i_episode in range(num_episodes): state = env.reset() total_reward = 0 done = False while not done: action = agent.act(state) next_state, reward, done, _ = env.step(action) agent.remember(state, action, next_state, reward) agent.learn(batch_size) total_reward += reward state = next_state agent.epsilon = max(0.01, agent.epsilon * 0.995) print("Episode: {}, total reward: {}, epsilon: {}".format(i_episode, total_reward, agent.epsilon)) ``` 我们使用OpenAI Gym中的Breakout游戏来测试我们的代理。在每个训练周期中,我们重置环境并运行一个周期,直到游戏结束。我们将每个状态、动作、下一个状态和奖励作为经验元组传递给我们的Agent,并使用这些经验元组进行训练。我们使用逐步减小的ε值来平衡探索和利用。我们打印出每个训练周期的总奖励以及当前的ε值。 现在我们已经编了我们的代码,我们可以开始训练我们的代理。运行主函数,我们将看到我们的代理在游戏中逐渐变得更加熟练。我们可以尝试调整参数来进一步优化我们的代理的性能。 总结: 在本文中,我们使用PyTorch和OpenAI Gym构建了一个深度强化学习代理,让它Atari游戏。我们使用Deep Q-Networks算法和ε贪心策略来训练我们的代理,并逐步减小ε值来平衡探索和利用。我们的代理在游戏中逐渐变得更加熟练,展示了PyTorch在深度强化学习中的强大功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值