深度学习与CV教程(18) | 深度强化学习 (梯度策略,Actor-Critic,DDPG,A3C)

简介: 本文讲解了 Policy Gradient,结合policy-based 和 value-based 的 Actor-Critic 方法,以及在 Actor-Critic 基础上的 DDPG、A3C方法【对应 CS231n Lecture 14】

ShowMeAI研究中心

作者:韩信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/37
本文地址http://www.showmeai.tech/article-detail/277
声明:版权所有,转载请联系平台与作者并注明出处
收藏ShowMeAI查看更多精彩内容


Reinforcement Learning; 深度学习与计算机视觉; Stanford CS231n

本系列为 斯坦福CS231n 《深度学习与计算机视觉(Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频可以在 这里 查看。更多资料获取方式见文末。


引言

前一篇ShowMeAI的文章 深度学习与CV教程(17) | 深度强化学习 (马尔可夫决策过程, Q-Learning, DQN) 中,我们学习了Q-Learning 系列方法,它是基于价值(value-based)的方法, 也就是通过计算每一个状态动作的价值,然后选择价值最大的动作执行。

这是一种间接的强化学习建模做法,另外一类policy-based方法会直接更新策略。本篇我们将顺着这条主线给大家介绍Policy Gradient等方法,当然,强化学习中还有结合policy-based 和 value-based 的 Actor-Critic 方法,以及在 Actor-Critic 基础上的 DDPG、A3C方法。

本篇重点

  • Policy Gradient 算法
  • Actor-Critic 算法
  • DDPG 算法
  • A3C 算法

1.Policy Gradient算法

1.1 算法介绍

Policy Gradient 是最基础的强化学习算法之一,它通过更新 策略网络/Policy Network 来直接更新策略的。Policy Network 是一个神经网络,输入是状态,输出直接就是动作(不是Q值) ,且一般输出有两种方式:

  • ① 概率的方式,即输出某一个动作的概率。
  • ② 确定性的方式,即输出具体的某一个动作。

如果要更新 Policy Network 策略网络,或者说要使用梯度下降的方法来更新网络,需要有一个目标函数,对于所有强化学习的任务来说,最终目标都是使所有累加reward/奖励(带衰减)最大。如下公式所示:

公式


但上述损失函数和 Policy Network 策略网络无法直接关联:reward 是环境给出的,无法基于参数 公式 计算得到。假如我们后续优化还是基于「梯度下降」等算法,那损失函数关于参数的梯度 公式 如何得到呢?

我们换一个思路来考虑:假如我们现在有一个策略网络,输入状态,输出动作的概率。然后执行完动作之后,我们可以得到 reward,或者 result。

我们可以采取1个非常直观简单的做法:增大得到 reward 多的动作的输出概率,减小得到 reward 少的动作的输出概率

但是大家可能会注意到:用 reward 或 result 来评判动作好坏可能是不准确的(因为任何一个 reward,result 都依赖于大量的动作才导致的,不能只将功劳或过错归于当前的动作上)。

我们的处理思路改为:我们构造一个判断动作好坏的「评判指标」,再通过改变动作的出现概率来优化策略!

假设这个评价指标是 公式,我们的策略网络输出的 公式 是概率,那么可以通过极大似然估计的方法来优化这个目标。比如说我们可以构造如下目标函数:

公式


举例来说,对某场游戏来说,假如最终赢了,那么认为这局游戏中每一步都是好的,如果输了,那么认为都是不好的。好的 公式 就是 公式,不好的就是 公式,然后极大化上面的目标函数即可。

实际上,除了极大化上面的目标函数,还可以直接对 公式 进行极大化,如这篇博文 Deep Reinforcement Learning: Pong from Pixels 中直接最大化 公式 也就是 公式 的期望,可以看到,最后的结果跟上面的目标函数是一致的。

公式

1.2 PG评判指标的选择

从上文中可以看出来,Policy Gradient 中评价指标 公式 的定义是关键。 我们前面提到的「根据回合的输赢来判断这个回合中的每1步好坏」的方式比较粗糙简单。但其实我们更希望每走1步就能够获取到这一步的具体评价,因此出现了很多其他的直接给出某个时刻的评估的评价方式。如这篇论文 High-dimensional continuous control using generalized advantage estimation 里就对比了若干种 PG 评价指标。

1.3 梯度策略算法总结

借用 David Silver 老师讲解梯度策略算法时候的一页核心 PPT 内容,翻译作为梯度策略算法的总结。Policy gradient 通过不断重复估测梯度 公式 来最大化期望收益,有几种不同的梯度策略形式,我们可以统一写成:

公式


上面公式中的 公式 就是 公式 时刻的评价指标。它可能是如下的形态:

  • 公式:整个过程总体 reward 收益
  • 公式:动作 公式 之后的收益
  • 公式:前序公式的基线版本
  • 公式:state-action价值函数
  • 公式:advantage function/优势函数
  • 公式 :TD residual/时序差分残差


更具体的一些公式如下:

公式公式公式

在梯度策略里我们可以使用 reward,使用 公式公式 或者 公式 来作为动作的评价指标。这些方法的本质区别在于 variance 和 bias 的问题:

用 reward 来作为动作的评价

  • 这样做 bias 比较低,不过 variance 很大,reward 值太不稳定,训练可能不收敛。


采用 公式 值的方法

  • 因为 公式 值是对 reward 的期望值,使用 公式 值 variance 比较小,bias 比较大。一般我们会选择使用 公式,Advantage。公式,是一个动作相对当前状态的价值。本质上 公式 可以看做是baseline。对于上面 ③ 的公式,也可以直接用 公式 来作为 baseline。
  • 但是还是一样的问题,公式 的 variance 比较大。为了平衡 variance 和 bias 的问题,使用 公式 会是比较好的做法,既兼顾了实际值 reward,又使用了估计值 公式。在 公式 中,公式 平衡不同长度的 公式 值,会是比较好的做法。

在实际使用中,需要根据具体的问题选择不同的方法。有的问题 reward 很容易得到,有的问题 reward 非常稀疏。reward 越稀疏,也就越需要采用估计值。


总结一下 Policy Gradient 的核心思想

通过 policy network 输出的 Softmax 概率 和获取的 reward (通过评估指标获取)构造目标函数,然后对 policy network 进行更新。

梯度策略避免了原来的 reward 和 policy network 之间是不可微的问题。也因为它这个特点,目前的很多传统监督学习的问题因为输出都是 Softmax 的离散形式,都可以改造成 Policy Gradient 的方法来实现,调节得当效果会在监督学习的基础上进一步提升。

2.Actor-Critic算法

在 policy gradient 中讲解到的多种评估指标已经涵盖了下面要介绍的 Actor-Critic 的思想,梯度策略算法往往采用回合更新的模式,即每轮结束后才能进行更新。

如某盘游戏,假如最后的结果是胜利了,那么可以认为其中的每一步都是好的,反之则认为其中的每一步都是不好的。

下图摘自 David Silver老师的强化学习 Policy Gradient 讲解课件 ,这种方法也叫 Monte-Carlo Policy Gradient

Policy Gradient; Actor-Critic


上图中的 公式 是 policy network 输出的概率,公式 是当前这一局的结果。这是 policy gradient 最基本的更新形式。

但我们前面也分析了:最后的结果好久并不能说明其中每一步都好。我们能不能抛弃回合更新的做法,加快到单步更新呢,Actor-Critic 算法就做了这个调整。

但要采用单步更新,我们就需要为每一步都即时做出评估。Actor-Critic 算法中的 Critic 负责的就是评估这部分工作,而 Actor 则是负责选择出要执行的动作。这就是 Actor-Critic 的思想。Critic 的输出有多种形式,可以采用 公式 值、公式 值 或 公式 等。


总结一下Actor-Critic算法核心思想:

在 Actor-Critic 算法中,Critic 是评判模块(多采用深度神经网络方法),它会对动作的好坏评价,然后反馈给 Actor(多采用深度神经网络方法),让 Actor 更新策略。

从具体的训练细节来说,Actor 和 Critic 分别采用不同的目标函数进行更新, 可以参考的代码实现如[这里](https://keras.io/examples/rl/actor_critic_cartpole/)。

3.DDPG算法(Deep Deterministic Policy Gradient)

对于action动作个数是离散和有限的情况,我们前面提到的Policy Gradient梯度策略算法是OK的,但有些情况下输出的值是连续的,比如说「自动驾驶控制的速度」,「机器人控制移动的幅度」,「游戏中调整的角度」等,那梯度策略就不管用了。

Deterministic Policy Gradient Algorithms 这篇论文中提出了输出连续动作值的 DPG(Deterministic Policy Gradient),之后论文 Continuous control with deep reinforcement learning 基于 DPG 做了改进,提出了 DDPG(Deep Deterministic Policy Gradient)算法。

DPG算法主要证明了 deterministic policy gradient不仅存在,而且是model-free形式且是action-value function的梯度。因此 policy 不仅仅可以通过概率分布表示,动作空间可以无限大。

DDPG 相对于 DPG 的核心改进是引入了 Deep Learning,采用深度神经网络作为 DPG 中的Policy策略函数 公式公式 函数的模拟,即 Actor 网络和 Critic 网络;然后使用深度学习的方法来训练上述神经网络。DDPG与DPG的关系类似于 DQN 与 Q-learning 的关系。


DDPG算法中有2个网络:「Actor 网络」与 「Critic 网络」:

  • ① 对于状态 公式,基于Actor网络获取动作action 公式(这里的 公式 是一个向量)
  • ② 将 公式 输入 Critic 网络,得到 公式 值(输出),目标函数就是极大化 公式


具体的「Actor 网络」和 「Critic 网络」更新有一差异,DDPG论文中算法流程如下图所示:

Deep Deterministic Policy Gradient; DDPG


如上图,Actor 网络和 Critic 网络是分开训练的,但两者的输入输出存在联系,Actor 网络输出的 action 是 Critic 网络的输入,同时 Critic 网络的输出会被用到 Actor 网络进行反向传播。

两个网络的参考示意图如下:Critic 跟之前提到的 DQN 有点类似,但是这里的输入是 state + action,输出是一个 公式 值而不是各个动作的 公式 值。

Deep Deterministic Policy Gradient; DDPG


在DDPG算法中,我们不再用单一的概率值表示某个动作,而是用向量表示某个动作,由于向量空间可以被认为是无限的,因此也能够跟无限的动作空间对应起来。DDPG的代码实现可以参考 这里

4.A3C算法(Asynchronous Advantage Actor-Critic)

DDPG算法之后,DeepMind对其改造,提出了效果更好的 Asynchronous Advantage Actor-Critic(A3C)算法(论文是 Asynchronous Methods for Deep Reinforcement Learning )。A3C 算法和DDPG类似,通过深度神经网络拟合 policy function 和 value function的估计。改进点在于:

  • ① A3C 中有多个 agent 对网络进行异步更新,这样的做法使得样本间的相关性较低,A3C中也无需采用Experience Replay的机制,且支持在线的训练模式。
  • ② A3C 有两个输出,其中一个 Softmax output 作为 policy 公式,而另一个linear output为 value function 公式
  • ③ A3C 中的Policy network 的评估指标采用的是上面比较了多种评估指标的论文中提到的 Advantage Function(即A值) 而不是 DDPG 中单纯的 公式 值。


下图(摘自 这篇文章 )展示了其网络结构:

Asynchronous Advantage Actor-Critic; A3C


从上图可以看出输出包含2个部分,value network 的部分可以用来作为连续动作值的输出,而 policy network 可以作为离散动作值的概率输出,因此能够同时解决前面提到的2类问题。

两个网络的更新公式如下:

Estimate state-value function

公式


Q-value estimated by an n -step sample

公式


Actor is updated towards target

公式


Critic is updated to minimise MSE w.r.t. Target

公式

A3C 通过创建多个 agent,在多个环境实例中并行且异步的执行和学习,有个潜在的好处是不那么依赖于 GPU 或大型分布式系统,实际上 A3C 可以跑在一个多核 CPU 上,而工程上的设计和优化也是原始paper的一个重点。

A3C的代码实现可以参考这里

5.算法总结

  • 我们从最基础的Policy Gradient梯度策略方法开始介绍,最基础的版本是「回合更新」的。
  • 引入Critic 后变成了「单步更新」,进而演变为Actor-Critic算法,其中Critic 有多种可选的方法。
  • 输出动作为连续值的情形,无法通过输出动作概率分布方式解决,因此提出了 DPGDDPG算法,DDPG 对 DPG 的改进在于引入深度神经网络去拟合 policy function 和 value function。
  • 在 DDPG 基础上又提出了效果更好的 A3C算法,这个方法在 DDPG 上引入了多个 agent 对网络进行 异步更新,不仅取得了更好的效果,而且降低了训练的代价。

6.拓展学习

可以点击 B站 查看视频的【双语字幕】版本

7.参考资料

斯坦福 CS231n 全套解读

ShowMeAI 系列教程推荐

ShowMeAI用知识加速每一次技术成长

目录
相关文章
|
1月前
|
机器学习/深度学习 边缘计算 人工智能
探讨深度学习在图像识别中的应用及优化策略
【10月更文挑战第5天】探讨深度学习在图像识别中的应用及优化策略
57 1
|
1月前
|
机器学习/深度学习 数据采集 TensorFlow
智能市场营销策略优化:使用Python实现深度学习模型
【10月更文挑战第1天】 智能市场营销策略优化:使用Python实现深度学习模型
164 63
|
27天前
|
机器学习/深度学习 调度 计算机视觉
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
本文探讨了多种学习率调度策略在神经网络训练中的应用,强调了选择合适学习率的重要性。文章介绍了阶梯式衰减、余弦退火、循环学习率等策略,并分析了它们在不同实验设置下的表现。研究表明,循环学习率和SGDR等策略在提高模型性能和加快训练速度方面表现出色,而REX调度则在不同预算条件下表现稳定。这些策略为深度学习实践者提供了实用的指导。
33 2
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
|
10天前
|
机器学习/深度学习 算法
深度学习中的模型优化策略
【10月更文挑战第35天】在深度学习的海洋中,模型优化是那把能够引领我们抵达知识彼岸的桨。本文将从梯度下降法出发,逐步深入到动量、自适应学习率等高级技巧,最后通过一个实际代码案例,展示如何应用这些策略以提升模型性能。
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
从深度学习到强化学习的旅程
【10月更文挑战第23天】从深度学习到强化学习的旅程
|
20天前
|
机器学习/深度学习 人工智能 算法
深度学习和强化学习有什么区别呢
【10月更文挑战第23天】深度学习和强化学习有什么区别呢
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
67 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
64 2
|
1月前
|
机器学习/深度学习 算法
深度学习中的自适应抱团梯度下降法
【10月更文挑战第7天】 本文探讨了深度学习中一种新的优化算法——自适应抱团梯度下降法,它结合了传统的梯度下降法与现代的自适应方法。通过引入动态学习率调整和抱团策略,该方法在处理复杂网络结构时展现了更高的效率和准确性。本文详细介绍了算法的原理、实现步骤以及在实际应用中的表现,旨在为深度学习领域提供一种创新且有效的优化手段。
|
1月前
|
机器学习/深度学习 存储 算法
探讨深度学习在图像识别中的应用及优化策略
【10月更文挑战第5天】探讨深度学习在图像识别中的应用及优化策略
46 1