先解释一下什么叫异步、什么叫并发:
**异步:**和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个事件的过程中继续做自己的事,不要等待这一事件完成后再工作。线程是实现异步的一个方式,异步是让调用方法的主线程不需要同步等待另一个线程的完成,从而让主线程干其他事情。
**并发:**同一时间段有几个程序都处于已经启动到运行完毕之间,并且这几个程序都在同一个处理机上运行,并发的两种关系是同步和互斥。
**多线程:**多线程是进程中并发运行的一段代码,能够实现线程之间的切换执行;
**异步和多线程:**不是同等关系,异步是目的,多线程只是实现异步的一个手段,实现异步可以采用多线程技术或者交给其他进程来处理。
A3C( Asynchronous Advantage Actor-critic,简称A3C)主要是通过相比Actor-Critic,A3C的优化主要有3点,分别是异步训练框架,网络结构优化,Critic评估点的优化。其中异步训练框架是最大的优化。
A3C的执行结果:
可以看出他的优缺点:
优点:
- 相比AC有了明显的收敛性能
- 在高维度和连续动作空间更加有效
缺点:
1… 收敛性能比起DQN并不是很好,得到的通常是局部最优解
2. 评价策略通常不是非常高效,并且有很高的偏差
算法流程,来自网页
参考链接:https://www.cnblogs.com/pinard/p/10334127.htmlhttps://www.cnblogs.com/wangxiaocvpr/p/8110120.html
下面这个网页的注释很好用:https://zhuanlan.zhihu.com/p/111336330
莫烦教程中学到的一些知识(我可能是个无情的搬运工,也是一个有心的整理者,嘻嘻)
平行宇宙:
它采用的是我们之前提到的 Actor-Critic 的形式. 为了训练一对 Actor 和 Critic, 我们将它复制多份红色的, 然后同时放在不同的平行宇宙当中, 让他们各自玩各的. 然后每个红色副本都悄悄告诉黑色的 Actor-Critic 自己在那边的世界玩得怎么样, 有哪些经验值得分享. 然后还能从黑色的 Actor-Critic 这边再次获取综合考量所有副本经验后的通关秘籍. 这样一来一回, 形成了一种有效率的强化学习方式.
我们知道目前的计算机多半是有双核, 4核, 甚至 6核, 8核. 一般的学习方法, 我们只能让机器人在一个核上面玩耍. 但是如果使用 A3C 的方法, 我们可以给他们安排去不同的核, 并行运算. 实验结果就是, 这样的计算方式往往比传统的方式快上好多倍. 那我们也多用用这样的红利吧.
下一篇是A3C的注释版本