强化学习

什么是强化学习?

不可不知的三大要点

强化学习是一种机器学习方法,其中计算机智能体通过与环境的反复试错交互来学习执行任务。这种学习方法使智能体能够作出一系列决策,以最大化任务的奖励度量,既无需人工干预,也无需为实现任务而进行显式编程。

强化学习的工作原理

强化学习背后的典型训练机制反映了许多真实场景。例如,通过正向强化对宠物进行训练。

一只狗与训练师交互的图示。用强化学习的术语来说,狗是智能体,训练师是环境的一部分。

训狗中的强化学习。

一辆车学习如何自主停车的图示,车载计算机是强化学习智能体。

自主泊车中的强化学习。

用强化学习的术语来说,在这种情况下学习的目标是训练狗(智能体)在环境中完成任务,该环境包括狗的周围环境以及训练师。首先,训练师发出命令或提示,狗进行观察(观测值)。然后狗通过采取动作来响应。如果该动作接近期望的行为,训练师可能会提供奖励,例如食物或玩具;否则,将不提供奖励。在训练初期,狗可能会采取更多随机动作,例如当给出的命令是“坐下”时却打滚,因为它正在尝试将特定的观测值与动作和奖励建立关联。我们将观测值与动作之间的这种关联或映射称为策略。从狗的角度来看,理想情况是它能正确响应每个提示,从而获得尽可能多的奖励。因此,强化学习训练的全部意义在于“调节”狗的策略,使其学会能最大化某项奖励的预期行为。训练完成后,狗应能观察主人的指令并通过自身形成的内部策略作出对应的动作 - 例如听到“坐下”的指令就坐下。至此,奖励依然受欢迎,但理论上已非必需。

结合训练狗的示例,我们来看看使用自动驾驶系统停放车辆的任务。其目标是通过强化学习教导车载计算机(智能体)准确停入泊车位。与训练狗的场景一样,环境指智能体之外的所有事物,可能包括车辆的动态特性、周边可能存在其他车辆、天气状况等。在训练期间,智能体使用来自摄像头、GPS 和激光雷达等传感器的读数(观测值)来生成转向、制动和加速命令(动作)。为了了解如何根据观测值生成正确的动作(策略调整),智能体会进行试错过程,反复尝试泊车。系统会提供奖励信号,用于评估试错的效果并指导学习过程。

在训练狗的示例中,训练发生在狗的大脑内部。在自主泊车的示例中,训练由训练算法处理。训练算法负责根据收集的传感器读数、动作和奖励来调整智能体的策略。在训练完成后,车载计算机应该可以仅凭调整后的策略和传感器读数就进行泊车。请注意,这两者都是无模型强化学习的示例,因为它们都涉及与环境的试错交互以生成数据。

强化学习的主要组成部分(策略、环境、智能体、动作、奖励和观测值)在被称为马尔可夫决策过程的框架内形式化,该框架为不确定性环境中的决策提供数学模型。

探索与利用

探索与利用之间的权衡是强化学习的关键方面,对学习质量有重大影响。其主旨是:智能体应通过选择已知能获取最多奖励的动作来利用环境,还是应选择探索环境中仍未知的区域的动作?智能体做出的选择确定它接收到的信息,因此也确定它可以从中学习的信息。过度探索会导致智能体无法收敛于良好的策略。而过度利用可能导致智能体陷入局部、次优解。一般而言,在学习初期,由于可供利用的信息不足,智能体应进行更多探索,而到学习后期,则应逐步过渡到更多利用。

深度强化学习

深度强化学习是强化学习和深度学习的结合。对于较简单的问题,采用查找表形式的策略可能就足够了,但对于大型问题和本质上是连续的问题,这种方法的扩展性较差。深度神经网络通过深度强化学习训练可以对复杂行为进行编码,为那些用更传统方法难以处理或更具挑战性的应用提供了一种替代解决方案。例如,在自动驾驶中,神经网络可以取代驾驶员,通过同时查看多个传感器(例如相机帧和激光雷达测量值)来决定如何转动方向盘。如果没有神经网络,这类问题通常需要拆解为多个子问题,例如从摄像头帧中提取特征、对激光雷达测量数据进行滤波、融合传感器输出,以及基于传感器输入作出“驾驶”决策,这些子问题用查找表或多项式函数等更传统的策略表示方法更容易求解。

强化学习工作流

使用强化学习训练智能体的常见工作流包括以下步骤:

  1. 创建环境。首先,您需要定义强化学习智能体运行的环境。环境可以是仿真模型或真实物理系统,但仿真环境通常是较好的初步选择,因为其更安全并支持试验。
  2. 定义奖励。接下来,指定智能体用于根据任务目标衡量其性能的奖励信号,以及如何根据环境计算该信号。奖励塑造可能很棘手,可能需要多次迭代才能达到理想效果。
  3. 创建智能体。然后,创建智能体,这包括选择策略表示形式(如神经网络或查找表),以及选择并调节强化学习训练算法。
  4. 训练和验证智能体。设置训练选项(如停止条件)并训练智能体以调整策略。训练结束后,务必对训练后的策略进行验证。
  5. 部署策略。使用生成的 C/C++ 或 CUDA 代码等部署经过训练的策略表示。此时,策略是独立的决策系统。
强化学习工作流的步骤:环境、奖励、智能体、智能体训练和部署。

强化学习工作流。

使用强化学习训练智能体是一个迭代过程。后期的决策和结果可能会要求重返学习工作流的前期。如果训练过程未在合理时间内收敛于最优策略,您可能需要回溯并重新审视问题定义(动态特性、观测值、动作)、奖励信号、策略架构和算法超参数,然后再次进行训练。

继续探索此主题

强化学习算法的类型

强化学习、机器学习与深度学习的对比

与无监督和有监督机器学习不同,强化学习不需要依赖静态数据集,而是可以在动态环境中运行并从收集的经验中学习。数据点(或经验)可以在训练期间通过环境和软件智能体之间的试错交互来收集。强化学习的此特性很重要,因为它免除了在训练前进行数据采集、预处理和标记的工作量,而这些工作量在有监督和无监督学习中是必不可少的。

深度学习涵盖所有三种类型的机器学习;强化学习和深度学习并非互斥。复杂的强化学习问题通常依赖深度神经网络和深度强化学习。

无监督学习、有监督学习和强化学习的图示,分别对应聚类、分类和基于奖励的路径系统。

机器学习的三大类别:无监督学习、有监督学习和强化学习。

维恩图说明强化学习算法的三个主类:基于值的算法和基于策略的算法,两者相互融合形成执行器-评价器算法。

强化学习算法的三个主要类别。

强化学习算法

强化学习算法可根据其学习和决策的方法分为多个类别。

基于值、基于策略与执行器-评价器强化学习算法对比

强化学习算法主要分为三大类:

  • 基于值的方法侧重于学习值函数,例如 Q 函数,该函数估计在给定状态下采取特定动作并随后遵循特定策略的预期累积奖励。最著名的示例是 Q 学习。其策略是通过在每个状态中选择具有最高值的动作,从值函数中间接推导出来的(即关于值函数的贪婪策略)。基于值的方法通常实现简单、采样效率高,但仅适用于规模合理的离散动作集(试想对于高维动作空间,从值函数中提取策略将多么耗时)。
  • 基于策略的方法直接学习将状态映射到动作的参数化策略,优化策略参数以最大化预期奖励,其运行方式与传统的梯度下降法十分相似。示例包括 REINFORCE 和其他策略梯度法。这些方法天然适用于连续或大规模的动作空间,还能学习随机策略,这对于探索和域随机化具有重要意义。基于策略的方法的缺点包括学习率慢、训练不稳定、采样效率低,以及对局部最小值敏感。
  • 执行器-评价器方法兼具基于值和基于策略的方法的优点。执行器直接更新策略,而评价器通过估计值函数来评估动作。评价器的反馈通过降低策略梯度估计的方差,使策略更新更稳定、更高效。此外,策略的直接表示形式(执行器)有助于解决高维和连续动作空间问题。这些方法的主要缺点是现在有更多的活动部件(执行器和评价器)需要实现和调节。执行器-评价器算法的示例包括深度确定性策略梯度 (DDPG)、近端策略优化 (PPO) 和软执行器-评价器 (SAC)。
执行器-评价器强化学习算法的四个高级步骤:1) 执行器选择动作 2) 评价器预测该动作的值 3) 评价器使用应用该动作收集的奖励更新自身 4) 执行器根据评价器的响应更新自身。

实际应用中的执行器-评价器强化学习。

基于模型的与无模型的强化学习算法对比

基于模型的强化学习构建或使用环境动力学模型(转移概率和奖励函数)进行规划和决策。“规划”一词是关键;这些算法通常只需少量甚至无需与环境交互,因为它们依赖其内部模型对将来的状态进行仿真。内部模型可以是预先给定的(在这种情况下,智能体完全无需与环境交互),也可以通过从与真实环境的交互中收集的数据进行学习。基于模型的强化学习通常比无模型强化学习的采样效率更高,因为模型可快速生成大量的训练数据。然而,根据内部模型是预先给定还是通过学习获得,基于模型的方法可能比无模型的方法需要更多计算资源,因为前者除了训练基础智能体外,还必须训练环境模型并生成训练数据。

与基于模型的算法不同,无模型方法不会构造环境的显式模型。相反,它们通过与环境的直接交互,依靠试错学习最优动作(回想上一节中的训练狗和自动泊车示例)。这种方法更简单,更适合高维或非结构化环境,但在数据使用方面通常效率较低。大多数最先进的强化学习算法为无模型算法。

在线与离线的强化学习算法对比

在线强化学习中,智能体在学习过程中主动与环境交互 - 收集经验、更新策略,并随着新数据的产生而持续调整。上述训练狗和自动泊车场景是在线强化学习的示例。

与之相反,离线(或批量)强化学习仅从记录经验的静态数据集(例如来自人类演示或过往策略的数据集)中学习,无需与环境进行进一步交互。离线方法在真实交互成本高或存在安全风险的场景中表现出色,即使从随机或非专家数据中也能提取有用信息(尽管学习效果不如从专家数据或结构化程度更高的数据中学习)。在实际应用中,离线强化学习通常是在转向在线强化学习之前预训练策略的理想选择,在线强化学习虽然采样效率低,但由于能使用新数据持续调整,通常能实现更优的性能。

同策略与异策略的强化学习算法对比

同策略的强化学习算法对生成训练数据所使用的策略进行更新和评估,即智能体根据自身的实际动作学习当前策略的值(例如 SARSA 算法、PPO 算法、TRPO 算法)。这种方法通常能实现更稳定、更可靠的策略更新,因为无需像异策略方法那样调和行为策略与目标策略之间的差异。由于只需维护和更新一个策略,其计算复杂度也相对较低。

另一方面,异策略方法(例如 Q 学习算法、DQN)利用策略(行为策略)收集的数据,学习或改进一个不同目标策略(如贪心策略或最优策略)。因此,这类方法可将过往的经验(数据)存储在回放缓冲区中并多次重用。与每次策略更新后都会丢弃数据的同策略方法相比,这会大幅提升采样效率。异策略方法的另一项优势是它们能从任意策略中学习,包括随机数据、过时数据,甚至是人工生成的数据。这种灵活性使其能够基于离线数据集或演示进行训练。

基于梯度与进化的强化学习算法对比

基于梯度的算法是许多当代深度强化学习算法的主力,因为它们利用策略梯度的含噪估计(通过反向传播),实现快速、采样高效的学习。但与此同时,这类算法对超参数敏感,容易陷入局部最优解,且要求数据具有可微分性。

与之相反,进化强化学习将策略视为黑盒,在梯度不可得或不可靠、具备大规模并行计算能力,或需要在复杂的搜索空间中进行广泛探索的场景中,它是一种强大的工具。进化策略通过基于种群的变异和选择进行全局搜索 - 对稀疏或不可微分的奖励信号具有稳健性,但其采样效率低得多,收敛速度也更慢。

混合方法正日益成为融合二者优势的选择:通过进化进行探索和全局搜索,再通过基于梯度的更新对有潜力的策略执行细化,通常能实现整体更优的性能。

表格型与基于神经网络的强化学习算法对比

实际问题的性质通常决定适用的算法类型。如果环境的状态空间和动作空间是离散的且规模较小,则可以使用简单的表来表示策略。Q 学习和 SARSA 是常见的表格型算法示例。当状态/动作对的数量变得庞大甚至无限时,用表来表示策略参数就不再可行。这称为维度灾难,而这正是神经网络发挥作用的地方。通常,大多数现代强化学习算法依赖于神经网络,因为后者非常适合处理大型状态/动作空间和复杂问题。

单智能体与多智能体的强化学习算法对比

在单智能体强化学习中,只有一个智能体与环境交互 - 这使得学习更简单、稳定且易于分析。相反,多智能体强化学习 (MARL) 涉及多个智能体在同一环境中交互。由于智能体之间相互影响,环境具有非平稳性,这会违反马尔可夫假设,导致学习过程不稳定。虽然 MARL 能解决更复杂的任务,并产生协作、协商等涌现行为,但也带来诸多挑战,包括收敛性问题、计算要求高,以及如果各智能体独立更新策略会导致训练不稳定性。

强化学习的优势与挑战

强化学习的好处

尽管强化学习绝非新概念,但深度学习和计算能力的近期发展,使其在人工智能领域取得了一系列令人瞩目的成果。

强化学习的优势包括:

  • 能够解决复杂的顺序性任务。强化学习可以学习在多个步骤中优化长期目标,为用传统方法难以解决的问题提供另一种探索思路。深度强化学习还可能使用高级或复杂的传感器生成端到端的解决方案,充分发挥神经网络的表示能力。
  • 对标注数据的依赖程度低。与有监督学习不同,强化学习能通过奖励和惩罚直接从环境反馈中学习,从而减少对高成本的标注数据集的要求。
  • 对现有数据集的要求更少。强化学习通常从实时生成的数据中学习,但这并不意味着它无法使用现有数据集。事实上,与有监督学习不同,离线强化学习即使从非专家数据或未编码待学习的预期行为的数据中,也能提取有用信息。
  • 具备自适应、自校正能力和稳健性。强化学习通过试错持续细化行为,使智能体即使在部署后也能根据性能调整策略。同时,其设计初衷就是应对结果不可预测的非确定性条件,这适合现实的复杂性。

强化学习的挑战

强化学习是一种强大的方法,但也伴随着挑战,包括:

  • 准入门槛高。由于算法和概念的复杂性,强化学习通常具有较高的准入门槛。
  • 数据和计算要求高(采样效率低)。训练通常需要大量数据,这意味着需要进行大量的交互或仿真。因此,复杂问题的训练往往需要数天时间才能收敛,这种情况十分常见。
  • 设计参数数目多。强化学习有大量的超参数需要调节,例如奖励信号、神经网络架构和智能体特定的超参数。这些参数的微小变化都可能对训练性能产生巨大影响,训练出可接受的策略往往需要多次尝试。
  • 泛化和迁移存在挑战。智能体往往难以在训练场景之外表现良好,也无法高效地将从仿真中学习到的知识迁移到现实(即仿真到现实的鸿沟)。
  • 验证、可解释性和调试存在问题。尽管深度强化学习功能强大,但神经网络也存在自身的限制。复杂的神经网络策略难以解释和排查问题,从而降低了透明度。此外,神经网络的形式化验证仍是开放的研究领域,这使得深度强化学习在安全关键型系统中的应用面临挑战。

强化学习在工程系统中的应用

过去几年,强化学习已应用于多个领域,包括 AI 聊天机器人、大语言模型 (LLM)、推荐系统、营销与广告,以及游戏领域。但在很大程度上,其在生产应用中的效果仍处于评估阶段,尤其在工程系统领域。值得庆幸的是,前文所述的各项优势正缓慢而稳步地推动该技术在多个领域的应用。强化学习在工程系统中的实际应用通常集中在以下领域:

  • 高级控制:对非线性或复杂系统或具有更高级传感器反馈的系统进行控制颇具挑战性,往往需要额外的前期工作(例如,在不同工作点对系统进行线性化,或从图像等传感器数据中提取特征)。在这类场景中,可以直接应用强化学习,无需额外的准备工作。应用领域包括自动驾驶(例如基于相机输入作出驾驶决策)和机器人技术(例如训练机械臂操控各类物品完成取放任务,或训练机器人行走)。
  • 调度:调度问题出现在交通信号灯控制、工厂车间资源协调等诸多场景中。对于求解这些(高维)组合优化问题,强化学习是进化方法的很好的替代方案。
  • 标定:需要手动标定参数的应用,如电子控制单元 (ECU) 或发动机的参数标定,或易受人为错误影响的应用,如生产线优化,均是强化学习的适用场景。
  • 对抗问题:在机器学习中,对抗应用涉及有意制作的输入(称为对抗样本),旨在利用其他模型、系统或环境的弱点。对抗强化学习的示例是设计策略验证智能体,尝试“破解”另一个策略(或其他算法),以找出反例并评估系统的漏洞。对抗强化学习在网络安全应用中也特别有用,可用于仿真攻击来测试防御系统,反之亦然。
  • 设计优化:强化学习能极大助力的领域是基于仿真的设计优化,尤其是在仿真成本高昂的情况下。强化学习智能体能够以智能方式探索设计空间,从而减少所需的训练数据和仿真次数。具体的应用示例包括雷达设计和芯片布局优化。

MATLAB®、Simulink®Reinforcement Learning Toolbox™ 可简化强化学习任务。您可以在同一生态系统中,完成强化学习工作流的每个步骤,实现控制器和决策算法的开发。具体来说,您可以:

  1. 在 MATLAB 和 Simulink 中创建训练环境和奖励信号。通过 MATLAB 函数和 Simulink 模块,轻松与创建的环境进行对接。
  2. 以编程方式或以交互方式使用深度网络设计器创建基于神经网络的策略。您也可以使用查找表和多项式。
  3. 只需对代码进行少量更改,即可切换、评估和比较常见的基于值、基于策略和执行器-评价器算法(如 DQN、DDPG、PPO 和 SAC),或创建您自己的自定义算法。试用现成的各种训练方法,例如单智能体/多智能体、基于梯度/进化、在线/离线和基于模型/无模型强化学习。
  4. 使用强化学习设计器以交互方式设计、训练和仿真智能体。
  5. 强化学习策略部署到生产系统和嵌入式设备中(使用自动代码生成工具)。如果需要,可在部署前使用压缩方法以减少神经网络策略的内存占用量。
强化学习设计器的截图:用于设置智能体超参数的交互式对话框。

使用强化学习设计器以交互方式创建强化学习智能体。(请参阅文档。)

使用 MATLAB 和 Simulink 应对常见的强化学习挑战

您可以使用 MATLAB 和 Simulink 来应对通常与强化学习相关联的诸多挑战。

准入门槛高

强化学习快速入门:试用现成的算法(无需自己手动开发),查阅参考示例获取关于如何设立问题的思路,并通过免费的学习资源培训课程快速上手。

数据和计算要求高(采样效率低)

借助 Parallel Computing Toolbox™MATLAB Parallel Server™,您可以通过利用多个 GPU、多个 CPU、计算机集群和云资源来更快地训练强化学习策略。例如,您可以通过并行启动多个仿真来更快地生成训练数据,也可以通过加速梯度计算来加速学习。

Reinforcement Learning Toolbox 还提供基于模型的强化学习功能,这有助于提高采样效率。

基于模型的策略优化 (MBPO) 智能体的采样效率通常高于无模型智能体,因为模型能生成大量多样化的经验。

示意图:如何通过并行计算在多台计算机上运行任务,以加速强化学习并更快收敛至最优策略。

通过并行计算训练样本效率低的学习问题。

设计参数数目多

您可以使用 Reinforcement Learning Toolbox 来减少需要手动调节的超参数数目。例如,无需手动指定神经网络策略的架构即可创建智能体;在强化学习设计器中可通过贝叶斯优化以交互方式调节智能体超参数。此外,如果您已有 Model Predictive Control Toolbox™ 的相关规范,或已通过 Simulink Design Optimization™ 的 Model Verification 模块指定性能约束,则可以自动生成奖励函数。

泛化和迁移存在挑战

仿真在强化学习中至关重要。借助与 Simulink 的紧密集成,很容易通过域随机化来增强策略的泛化能力,即跨各种场景训练智能体,甚至包括那些在现实中难以创建且存在风险的极端或危险条件。

使用 Reinforcement Learning Toolbox,您可以充分利用所有可用数据源以提升泛化能力,弥合仿真到现实的鸿沟。通过离线强化学习,您可以使用现有数据(例如来自目标硬件的数据)预训练策略。然后,您可以通过针对仿真环境进行训练来改进策略,并应用域随机化使其对不确定的因素和场景具有稳健性。为确保仿真模型准确表示真实系统,您可以依赖系统辨识。过程的最后一步(如果需要)是通过直接针对真实硬件进行训练来微调经过训练的策略。虽然将真实硬件纳入训练循环通常存在风险甚至危险,但该工作流的前两个步骤能将策略微调所需的与物理硬件的交互次数降至最低。此功能也可应用于实时场景。

示意图:离线强化学习、系统辨识和直接针对真实硬件系统训练。

使用 Reinforcement Learning Toolbox 实现的仿真到现实迁移工作流:充分利用所有可用数据源,提升泛化能力。

验证、可解释性和调试存在问题

强化学习的一个常见特征是存在“静默错误”- 在训练或执行期间可能出现微妙、难以检测的问题。Reinforcement Learning Toolbox 支持您记录和可视化关键的训练数据,便于进行分析和调试。

可解释性和验证仍是研究界的开放和活跃领域,在神经网络方面尤为如此。Deep Learning Toolbox™ 提供一系列可视化方法 - 这是一种可解释性方法,通过使用网络正在关注的内容的可视化表示来解释网络预测。另一种方法是使用模糊逻辑;训练模糊推理系统 (FIS) 以复现(深度)强化学习策略的行为,可通过模糊推理系统的规则解释策略的行为。

基于仿真的验证是验证强化学习策略最常用的方法,而 Simulink 让此方法的实现变得简单。使用基于模型的设计,可通过传统的验证和确认方法拓展基于仿真的验证的范围;例如,可通过 Requirements Toolbox™ 对策略的需求进行形式化定义,并分析其一致性、完整性和正确性。此外,您也可以使用 Deep Learning Toolbox Verification Library 中提供的形式化方法来评估神经网络策略的某些属性,例如稳健性和网络输出边界。

最后需要考虑的一点是,将一个复杂问题拆解为多个较小的子问题有助于应对本节讨论的所有挑战;调试和可解释性将变得更易实现(较小的问题通常需要更简单的策略架构),验证需求也可能相应减少。在这类场景中,可将强化学习与传统(控制)方法相结合。该架构的核心思想是,使用可验证的方法或传统方法处理问题中安全关键的部分,而将黑盒强化学习策略应用于更高层级、可能非关键的组件。还可以考虑使用其他架构,例如采用混合方法,让传统方法与强化学习并行运行,或让强化学习对传统方法进行补充或校正。MATLAB 让这类架构的实现变得简单;除了强化学习和基于 AI 的方法外,您还可以直接使用各类传统方法,并通过单一仿真平台 Simulink 将其融合在一起。

模块图:强化学习与传统控制器相结合。

将强化学习与传统方法相结合,使其更易应用于安全关键型系统。