深度强化学习实践 Maxim Lapan 章节13:A3C方法

news/2025/2/22 5:40:47

写在前面

上一章节我们就提到了,A2C有几个问题,第一必须在线,第二数据有太大的相关性,所以会导致我们的学习可能向不是我们想要的地方去发展了

A3C

为了解决数据的相关性的问题,我们主要通过了如下的办法,第一种办法,每个进程都独立的和环境进行交互,但是只在一个环境上进行权重更新,接下来将学习到的网络同步更新到所有的环境上。

第二种:我们个都独立的和环境进行交互收集片段,并且计算梯度,但是并不直接进行更新,而是传递我们的梯度到我们的计算进程,SGD更新后,将更新后的网络传递分布式的神经网络上。

为了大家能方便了解,我搞到了这本书的原图

一些想法

这里主要是两个点,一个是采样分布式,一个是计算分布式,如果你有很多的GPU,你可以使用第二种方法,如果你有很多的CPU,你可以使用第一种方法,如果你有很多的分布式的环境,则完全可以基于你自己的实际的情况来进行更新

data分布式

数据平行,注意传递的参数是samples,我们前面就已经学习了多进程使用的方法,直接使用我们的queue,作为我们的sample的生产者就可以了,如果你还记得之前的情况,我们也已经做过类似的事情

在这里插入图片描述

效果

兄弟们,十倍效率,真的杠杠的块,A3C绝对是比A2C好太多的东西

代码

这里创建了很多去收集数据的子进程

    train_queue = mp.Queue(maxsize=PROCESSES_COUNT)
    data_proc_list = []
    for _ in range(PROCESSES_COUNT):
        data_proc = mp.Process(target=data_func,
                               args=(net, device, train_queue))
        data_proc.start()
        data_proc_list.append(data_proc)

具体干的活,创建环境,收集经验(或者reward结果)

def data_func(net, device, train_queue):
    envs = [make_env() for _ in range(NUM_ENVS)]
    agent = ptan.agent.PolicyAgent(
        lambda x: net(x)[0], device=device, apply_softmax=True)
    exp_source = ptan.experience.ExperienceSourceFirstLast(
        envs, agent, gamma=GAMMA, steps_count=REWARD_STEPS)
    micro_batch = []

    for exp in exp_source:
        new_rewards = exp_source.pop_total_rewards()
        if new_rewards:
            data = TotalReward(reward=np.mean(new_rewards))
            train_queue.put(data)

        micro_batch.append(exp)
        if len(micro_batch) < MICRO_BATCH_SIZE:
            continue

        data = common.unpack_batch(
            micro_batch, net, device=device,
            last_val_gamma=GAMMA ** REWARD_STEPS)
        train_queue.put(data)
        micro_batch.clear()

结果

学习效率直接提升了十倍,GPU终于不用再等待CPU给数据了,嗯,嘎嘎好使
,但是我的跑了300多w的frame以后,还是丁点也不学习,我的环境肯定有问题
但是我用自己的电脑跑了一下还是这个问题,300多w依然不收敛,我怀疑是我的环境的问题,替换了gym可能是这个问题,我需要再探究一下

3071296: done 3322 games, mean reward -20.430, speed 3808.68 f/s
3071552: done 3323 games, mean reward -20.430, speed 3760.81 f/s
3072096: done 3324 games, mean reward -20.440, speed 3628.43 f/s
3073824: done 3325 games, mean reward -20.440, speed 3756.18 f/s
3074016: done 3326 games, mean reward -20.450, speed 3188.30 f/s
3074240: done 3327 games, mean reward -20.430, speed 3806.10 f/s
3075680: done 3328 games, mean reward -20.410, speed 3682.12 f/s
3077728: done 3329 games, mean reward -20.410, speed 2024.45 f/s

梯度平行

显然,如果你有很多计算单元,你完全可以使用分布式计算,梯度累加的形式进行学习,
在这里插入图片描述

三个问题

1: 问题一:梯度如何

内存共享

本地的net直接使用了net.share_memory()的形式,进行了梯度的共享


http://www.niftyadmin.cn/n/5861658.html

相关文章

XML XML约束 二、DTD

1 什么是DTD DTD&#xff08;Document Type Definition&#xff09;&#xff0c;文档类型定义&#xff0c;用来约束XML文档。例如要求xml文档的根元素必须是<students>&#xff0c;在<students>元素下可以包含0~n个<student>元素&#xff0c;每个<studen…

Redis存在线程安全吗?为什么?

Redis 在设计和使用层面具备较高的线程安全性&#xff0c;下面从多个方面详细阐述其线程安全特性及原因。 Redis 单线程模型下的线程安全 Redis 在处理网络请求时采用单线程模型&#xff08;Redis 6.0 之前核心网络 I/O 和命令执行都是单线程&#xff0c;Redis 6.0 引入了多线…

分布式 IO 模块:造纸设备的降本增效利器

在造纸行业竞争日益激烈的今天&#xff0c;如何实现高效生产、降低成本成为企业关注的焦点。分布式 IO 模块作为一种先进的自动化控制技术&#xff0c;正逐渐在造纸设备中发挥着关键作用&#xff0c;为造纸企业带来了前所未有的发展机遇。 传统的造纸设备控制系统存在诸多弊端&…

美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台

作者&#xff1a;美的楼宇科技事业部 先行研究中心智能技术部 美的楼宇科技 IoT 数据平台建设背景 美的楼宇科技事业部&#xff08;以下简称楼宇科技&#xff09;是美的集团旗下五大板块之一&#xff0c;产品覆盖多联机组、大型冷水机组、单元机、机房空调、扶梯、直梯、货梯…

nigix面试常见问题(2025)

一、Nginx基础概念 1. 什么是Nginx? Nginx是一款高性能的HTTP/反向代理服务器及IMAP/POP3/SMTP代理服务器,由俄罗斯工程师Igor Sysoev开发。其核心优势在于事件驱动架构与异步非阻塞处理模型,能够高效处理高并发请求(如C10K问题),广泛应用于负载均衡、静态资源服务、AP…

云夹平台:一站式学习与生活效率工具

在数字化时代&#xff0c;高效管理知识、资源和日常事务成为现代人的核心需求。云夹平台正是这样一款集多功能于一体的智能工具&#xff0c;致力于为用户提供便捷、个性化的服务体验。无论你是学生、职场人士还是终身学习者&#xff0c;云夹都能成为你的得力助手。 1. 书签管理…

TiDB 是一个分布式 NewSQL 数据库

TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议&#xff0c;具有数据强一致的高可用特性&#xff0c;是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。 TiDB是 PingCAP公司自主设计、研发的开源分布式关系型数据…

Mac下Python版本管理,适用于pyenv不起作用的情况

前言 声明&#xff1a;之前也在网上看到过可以使用pyenv来管理python版本&#xff0c;但由于作者的python安装路径实在是繁杂不堪&#xff0c;因此安装完成pyenv体验下来没有任何用处&#xff0c;但偶然发现vscode似乎可以看到各个python版本&#xff0c;因此写下这篇博客记录…