前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >超级玛丽:强化学习

超级玛丽:强化学习

作者头像
三更两点
发布2021-02-25 17:16:50
8260
发布2021-02-25 17:16:50
举报

视频地址

  • 测试通关视频: https://live.csdn.net/v/121855

深度强化学习

  • 深度神经网络提供了丰富的表示形式,可以使强化学习(RL)算法有效执行。

Actor Critic简述

  • 强化学习的分类可以分为以值函数为中心的和以策略为中心的算法
  • Actor Critic (演员评判家)是一种值函数为中心和以策略为中心算法的结合体,它合并了以值函数为基础 (比如 Q learning) 和 以动作概率为基础 (比如 Policy Gradients) 的两类强化学习算法。
  • 评估实现方式有很多种
  • A3C算法为了提升训练速度采用异步训练的思想,利用多个线程。每个线程相当于一个智能体在随机探索,多个智能体共同探索,并行计算策略梯度,对参数进行更新。或者说同时启动多个训练环境,同时进行采样,并直接使用采集的样本进行训练,这里的异步得到数据,相比DQN算法,A3C算法不需要使用经验池来存储历史样本并随机抽取训练来打乱数据相关性,节约了存储空间,并且采用异步训练,大大加倍了数据的采样速度,也因此提升了训练速度。与此同时,采用多个不同训练环境采集样本,样本的分布更加均匀,更有利于神经网络的训练。

超级玛丽

  • 本文是依据论文《Asynchronous Advantage Actor-Critic (A3C) for playing Super Mario Bros》复现。运用gym来搭建游戏环境,用pytorch 深度学习框架来实现。
  • 代理分为两个部分:演员和评论家。假设有一个顽皮的小孩子(演员)正在发现他周围的神奇世界,而他的父亲(评论家)则在监督他,以确保他不会做任何危险的事情。每当孩子做任何一件好事时,他的父亲都会称赞并鼓励他将来再做一次。当然,当孩子做任何有害的事情时,他会得到父亲的警告。孩子与世界互动越多,采取不同的行动,他从父亲那里得到的积极和消极反馈就越多。孩子的目标是,从父亲那里收集尽可能多的积极反馈,而父亲的目标是更好地评估儿子的行为。换句话说,我们的孩子和他的父亲之间,或者在演员和评论家之间,有着双赢的关系。

依赖环境

  • python 3.6
  • gym
  • cv2
  • pytorch
  • numpy

训练好的模型地址

运行代码

    • 训练模型python train.py
    • 验证模型python test.py

核心模型

代码语言:javascript
复制
import torch.nn as nn
import torch.nn.functional as F


class ActorCritic(nn.Module):
    def __init__(self, num_inputs, num_actions):
        super(ActorCritic, self).__init__()
        self.conv1 = nn.Conv2d(num_inputs, 32, 3, stride=2, padding=1)
        self.conv2 = nn.Conv2d(32, 32, 3, stride=2, padding=1)
        self.conv3 = nn.Conv2d(32, 32, 3, stride=2, padding=1)
        self.conv4 = nn.Conv2d(32, 32, 3, stride=2, padding=1)
        self.lstm = nn.LSTMCell(32 * 6 * 6, 512)
        self.critic_linear = nn.Linear(512, 1)
        self.actor_linear = nn.Linear(512, num_actions)
        self._initialize_weights()

    def _initialize_weights(self):
        for module in self.modules():
            if isinstance(module, nn.Conv2d) or isinstance(module, nn.Linear):
                nn.init.xavier_uniform_(module.weight)
                # nn.init.kaiming_uniform_(module.weight)
                nn.init.constant_(module.bias, 0)
            elif isinstance(module, nn.LSTMCell):
                nn.init.constant_(module.bias_ih, 0)
                nn.init.constant_(module.bias_hh, 0)

    def forward(self, x, hx, cx):
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = F.relu(self.conv3(x))
        x = F.relu(self.conv4(x))
        hx, cx = self.lstm(x.view(x.size(0), -1), (hx, cx))
        return self.actor_linear(hx), self.critic_linear(hx), hx, cx
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 视频地址
  • 深度强化学习
  • Actor Critic简述
  • 超级玛丽
    • 依赖环境
    • 训练好的模型地址
    • 运行代码
      • 核心模型
      相关产品与服务
      GPU 云服务器
      GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档