A3C(Asynchronous Advantage Actor-Critic)是由Google DeepMind团队于2016年提出的一种基于异步梯度的深度强化学习框架(Asynchronous Methods for Deep Reinforcement Learning),利用了多线程同时并行运行的特点,让多个Actor(演员)并行训练而定期与全局参数同步。该方法在Atari游戏和3D迷宫等方面都有不错的效果。
符号
|
含义
|
|
状态。
|
|
动作。
|
|
回报。
|
|
一个轨迹中第个时间步对应的状态、动作以及回报。偶尔使用 代替。
|
|
折扣因子;用于惩罚未来回报中的不确定性。
|
|
累积回报;或者说累积折扣回报。
|
|
在当前状态下采取动作后转移到下一个状态并得到回报的概率。
|
|
随机策略(智能体行为逻辑); 代表由参数化的策略。
|
|
确定性策略;虽然也可以把确定性策略记为 ,但是采用一个不同的字母可以让我们更容易分辨一个策略到底是确定性的还是随机的。 或者 都是强化学习算法要学习的目标。
|
|
状态-值函数衡量状态的期望累积回报; 代表由ω参数化的状态-值函数。
|
|
当智能体遵循策略时状态的期望累积回报;。
|
|
动作-值函数,与状态-值函数类似,但是它衡量在状态下采取动作后的期望累积回报;代表由参数化的动作-值函数。
|
|
与 类似,当智能体遵循策略 时,在状态 下采取动作 后的期望累积回报;
。
|
|
优势函数,; 可以认为优势函数是加强版本的动作-值函数,但是由于它采用状态-值函数作为基准使得它具有更小的方差。
|
[1]
由
。
当选取k步TD后,在A3C中由于有参数
,优势函数可改写为:
[2]
异步优势Actor-Critic - 每个Actor-Learner线程的伪代码如下:
- 定义全局参数向量
和
以及全局计数器![{\displaystyle T=0}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3c6a5b6d0370b358a8d5f3df6d17eeca08d3629b)
- 定义线程自身参数向量
和
,初始化线程步数计数器![{\displaystyle t\leftarrow 1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ef945a61952c72e31b3f5f1178a70d75b477b930)
- 当
:
- 重置梯度:
和![{\displaystyle d\theta '_{v}\leftarrow 0}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3ba4c54f6a3fd1aea9cdb9bcbbc475398f8bc0a5)
- 将线程自身的参数向量与全局参数向量同步:
,![{\displaystyle \theta '_{v}=\theta _{v}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c799e62922cf0caaa7669f03b9fd314707b1da1c)
- 令线程计数器
并随机采样一个初始状态![{\displaystyle s_{t}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/92a402d151a0173378ee252a634c77898ebe4b06)
- 当(
终止状态)且
:
- 根据当前线程的策略选择当前执行的动作
执行动作后接受回报
并转移到下一个状态
。
- 更新t以及
并且![{\displaystyle T=T+1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3009164aabc8424b6bb00ad716b3af1e583a071d)
- 初始化保存累积回报估计值的变量:
![{\displaystyle R={\begin{cases}0,&{\text{if }}s=s_{terminal}\\V(s_{t},\theta '_{v}),&{\text{non-terminal }}s_{t}\end{cases}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e11ea6abc42921e44faef9ded56d42943beffda0)
- 对于
,执行:
![{\displaystyle R\leftarrow r_{i}+\gamma R}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c9bb0518489507da483a8f4ad1a92f3ee18aca9d)
- 累积关于参数
的梯度:![{\displaystyle d\theta \leftarrow d\theta +\nabla _{\theta '}\log \pi (a_{i}|s_{i};\theta ')(R-V(s_{i};\theta _{v}'))}](https://wikimedia.org/api/rest_v1/media/math/render/svg/21ecfe4afdd0bd5354568da986d74d60d1c2a02e)
- 累积关于参数
的梯度:![{\displaystyle d\theta _{v}\leftarrow d\theta _{v}+{\partial (R-V(s_{i};\theta _{v}'))^{2} \over \partial \theta _{v}'}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/40e5d06ce74050ca439b729afd7a0eada6ea3c4f)
- 分别使用
和
异步更新
和![{\displaystyle \theta _{v}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/660bba2634de6a1eb78a6d9e4f5c7acc8c406b91)
[3]
在Asynchronous Methods for Deep Reinforcement Learning (页面存档备份,存于互联网档案馆)中作者还将熵(
)加到目标函数中以避免收敛到次优确定性解,这是由于在最大化熵的过程中会避免分布过于集中,包含熵在内的完整目标函数梯度如下[4]
其中H为熵函数,
是用于控制熵正则化项的超参数。
[1] (页面存档备份,存于互联网档案馆)
[2] (页面存档备份,存于互联网档案馆)