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