A3C强化学习算法的探索和学习

A3C(Asynchronous Advantage Actor-Critic),异步优势演员-评论家,DeepMind在2016提出。

A3C是经典强化学习算法,旨在解决传统Actor-Critic方法训练不稳定、收敛慢的问题。

这里通过参考网络资料,深入探索和分析A3C算法。

1 A3C原理

A3C出现之前,DQN类似算法效果不错,但非常依赖经验回放(Experience Replay)打破数据间的相关性,不仅消耗内存,还只能进行 off-policy 学习。

A3C采用异步的方式,解决数据相关性问题,同时实现更快、更稳的 on-policy 学习。

1.1 A-Asynchronous

A3C算法不再使用单个智能体与环境交互,而是创建多个并行的线程,每个线程中都有一个独立的智能体在环境副本中探索。这些智能体被称为worker彼此独立、互不干扰地收集经验,并异步地更新一个共享的全局神经网络。

想象一下,一个学生做数学题,如果只做同一本习题册,思维容易固化。但如果是一个学习小组,每个人做不同的习题集,然后定期分享错题和心得,大家就能学到更全面的解题技巧,进步更快。A3C的多个worker就起到了这个学习小组的作用,各自探索不同的经验,从根源上降低了训练数据之间的相关性。

1.2 A-Advantage

指使用优势函数(Advantage Function)来评估动作的好坏。

简单来说优势函数 A(s, a)回答:在状态 s 下,选择动作 a 比随机选择一个动作平均能好多少?

A(s, a) = Q(s, a) - V(s)

其中 Q(s, a) 是动作价值,V(s) 是状态价值。

使用优势函数可以显著降低策略梯度估计的方差,让训练更加稳定。

在A3C中,为了加速收敛,通常使用 N步采样 来估算优势函数,而不是仅仅依赖单步奖励。

1.3 Actor-Critic

A3C采用的是 Actor-Critic (演员-评论家) 架构。

Actor (演员)指策略网络,它负责根据当前状态 s 输出要采取的动作 a,即学习 π(a|s)

Critic (评论家)指价值网络,它负责评估当前状态 s 的好坏,即学习 V(s),并对Actor的表现做出评价,指导其改进。

在A3C中,Actor和Critic通常共享一部分神经网络的层,然后分叉成两个输出:一个输出策略的概率(Softmax层),一个输出状态价值(线性层)

2 算法流程

A3C的算法流程可以清晰地表示如下,这是单个worker(线程)的工作循环。

**步骤1 - 同步(Pull),**worker开始工作前,先从共享全局网络复制最新参数,来初始化本地网络。

步骤2 - 探索(Explore), worker使用本地网络,在独立环境中运行固定步数(如 t_max=5),收集一批经验数据 (s, a, r)

**步骤3 - 计算(Compute),**当收集够一批数据或到达终止状态时,worker利用这些经验计算出本地网络的梯度,并结合优势函数和熵奖励(鼓励探索,避免陷入局部最优)来构建损失函数。

**步骤4 - 更新(Push),**worker将计算好的梯度异步地推送到全局网络,全局网络收到梯度后立即更新自己的参数。

worker更新完全局网络后,再次进入步骤1,获取最新的全局参数,开始新一轮的数据收集。如此周而复始,直到模型收敛。

3 主要优势

1)训练效率高

通过多线程并行,大大加快了对CPU等计算资源的利用,缩短了训练时间。

2)收敛更稳定

异步训练有效打破了数据相关性,降低了传统on-policy算法更新方差,使得学习过程更平滑

3)探索更多样

不同worker由于环境初始化和探索策略不同,会体验到多样化的状态空间,有助于找到更优解。

4)无需经验回放

巧妙地用异步并行替代了经验回放池,实现了轻量级的on-policy学习。

reference


Reinforcement Learning through Asynchronous Advantage Actor-Critic on a GPU

https://ar5iv.labs.arxiv.org/html/1611.06256

强化学习(十五) A3C

https://cloud.tencent.cn/developer/inventory/10029/article/1398764

相关推荐
Figo_Cheung2 小时前
Figo《量子几何学:从希尔伯特空间到全息时空的统一理论体系》(二)
算法·机器学习·几何学·量子计算
额,不知道写啥。2 小时前
HAO的线段树(中(上))
数据结构·c++·算法
LYS_06182 小时前
C++学习(5)(函数 指针 引用)
java·c++·算法
紫陌涵光2 小时前
669. 修剪二叉搜索树
算法·leetcode
NGC_66113 小时前
二分查找算法
java·javascript·算法
ADDDDDD_Trouvaille3 小时前
2026.2.21——OJ95-97题
c++·算法
blackicexs3 小时前
第五周第七天
数据结构·算法
近津薪荼4 小时前
dfs专题10——全排列 II
算法·深度优先