MATLAB - 强化学习(Reinforcement Learning)

系列文章目录


前言


一、什么是强化学习?

强化学习是一种以目标为导向的计算方法,计算机通过与未知的动态环境交互来学习执行任务。这种学习方法能让计算机在没有人工干预和明确编程的情况下,做出一系列决策,使任务的累积奖励最大化。下图显示了强化学习场景的一般表示方法。

强化学习的目标是训练智能体 agent 在未知环境中完成任务。agent 接收来自环境的观察结果 observations 和奖励 reward ,并向环境发送行动 actions。奖励是衡量一个行动在完成任务目标方面成功与否的标准。

agent 包含两个部分:策略 policy 和学习算法 learning algorithm

  • 策略是根据环境观测结果选择行动的映射。通常情况下,策略是一个参数可调的函数近似器,如深度神经网络。
  • 学习算法根据行动、观察结果和奖励不断更新策略参数。学习算法的目标是找到最优策略,使任务期间获得的累积奖励最大化。

换句话说,强化学习是指 agent 在没有人类参与的情况下,通过与环境的反复试错互动来学习最优行为。

举个例子,考虑使用自动驾驶系统停车的任务。这项任务的目标是让车辆计算机(agent )将车辆停放在正确的位置和方向上。为此,控制器会使用摄像头、加速度计、陀螺仪、GPS 接收器和激光雷达的读数(观测数据 observations )来生成转向、制动和加速指令(操作 actions )。操作命令被发送到控制车辆的执行器。由此产生的观测结果取决于执行器、传感器、车辆动态、路面、风力和许多其他不太重要的因素。所有这些因素,即不是 agent 的一切因素,构成了强化学习中的环境 environment

为了学习如何从观察结果中生成正确的操作,计算机会反复尝试使用试错过程来停放车辆。为了引导学习过程,你需要提供一个信号,当汽车成功到达所需的位置和方向时,信号为 1,否则为 0(奖励 reward )。在每次试验过程中,计算机都会使用初始化了一些默认值的映射(策略 policy )来选择操作。每次试验后,计算机都会更新映射,使奖励最大化(学习算法 learning algorithm)。这个过程一直持续到计算机学习到能成功泊车的最佳映射为止。

1.1 强化学习工作流程

使用强化学习训练 agent 的一般工作流程包括以下步骤。

  1. 提出问题 - 确定 agent 需要学习的任务,包括 agent 与环境的交互方式以及 agent 必须实现的主要和次要目标。
  2. 创建环境 - 定义 agent 运行的环境,包括 agent 与环境之间的接口以及环境动态模型。更多信息,请参阅强化学习环境。
  3. 定义奖励 - 指定 agent 用来衡量其任务目标执行情况的奖励信号,以及如何从环境中计算该信号。更多信息,请参阅自定义环境中定义奖励和观察信号。
  4. 创建 agent - 创建 agent,其中包括定义策略逼近器(actor)和值函数逼近器(critic)以及配置 agent 学习算法。更多信息,请参阅创建策略和价值函数以及强化学习代理。
  5. 训练 agent - 使用定义的环境、奖励和代理学习算法训练代理近似器。更多信息,请参阅训练强化学习代理。
  6. 模拟 agent - 通过模拟 agent 和环境来评估训练好的 agent 的性能。更多信息,请参阅训练强化学习代理。
  7. 部署策略 - 使用生成的 GPU 代码等方式部署训练好的策略近似器。更多信息,请参阅部署训练好的强化学习策略。

使用强化学习训练 agent 是一个迭代过程。后期阶段的决策和结果可能要求你返回学习工作流程的早期阶段。例如,如果训练过程没有在合理的时间内收敛到最优策略,在重新训练 agent 之前,您可能需要更新以下一些内容:

  • 训练设置
  • 学习算法配置
  • 策略和价值函数(行动者和批评者)近似值
  • 奖励信号定义
  • 行动和观察信号
  • 环境动态

二、强化学习在控制系统中的应用

强化学习策略的行为,即该策略如何观察环境并生成行动,从而以最佳方式完成任务,与控制系统中控制器的操作类似。强化学习可以通过以下映射转换为控制系统的表示形式。

Reinforcement Learning 强化学习 Control Systems 控制系统
Policy 策略 Controller 控制器
Environment 环境 Everything that is not the controller --- In the preceding diagram, the environment includes the plant, the reference signal, and the calculation of the error. In general, the environment can also include additional elements, such as: * Measurement noise * Disturbance signals * Filters * Analog-to-digital and digital-to-analog converters 控制器之外的一切 - 在上图中,环境包括工厂、参考信号和误差计算。一般来说,环境还包括其他元素,例如: * 测量噪声 * 干扰信号 * 滤波器 * 模数转换器和数模转换器
Observation 观察 Any measurable value from the environment that is visible to the agent --- In the preceding diagram, the controller can see the error signal from the environment. You can also create agents that observe, for example, the reference signal, measurement signal, and measurement signal rate of change. agent 可以从环境中看到的任何可测量值 - 在上图中,控制器可以从环境中看到误差信号。您还可以创建可观察参考信号、测量信号和测量信号变化率等的 agent。
Action 操作 Manipulated variables or control actions 操纵变量或控制操作
Reward 奖励 Function of the measurement, error signal, or some other performance metric --- For example, you can implement reward functions that minimize the steady-state error while minimizing control effort. When control specifications such as cost and constraint functions are available, you can use generateRewardFunction to generate a reward function from an MPC object or model verification blocks. You can then use the generated reward function as a starting point for reward design, for example by changing the weights or penalty functions. 测量、误差信号或其他性能指标的奖励函数 - 例如,您可以执行奖励函数,在最小化控制努力的同时使稳态误差最小化。当成本和约束函数等控制规范可用时,可使用 generateRewardFunction 从 MPC 对象或模型验证模块生成奖励函数。然后,您可以使用生成的奖励函数作为奖励设计的起点,例如通过更改权重或惩罚函数。
Learning Algorithm 学习算法 Adaptation mechanism of an adaptive controller 自适应控制器的适应机制

机器人和自动驾驶等领域遇到的许多控制问题都需要复杂的非线性控制架构。增益调度、鲁棒控制和非线性模型预测控制 (MPC) 等技术可用于解决这些问题,但通常需要控制工程师具备大量的领域专业知识。例如,增益和参数很难调整。由此产生的控制器会给实施带来挑战,例如非线性 MPC 的计算强度。

您可以使用强化学习训练的深度神经网络来实现这种复杂的控制器。这些系统可以自学,无需专家控制工程师的干预。此外,一旦系统经过训练,您就能以计算效率高的方式部署强化学习策略。

您还可以使用强化学习创建端到端控制器,直接从原始数据(如图像)生成动作。这种方法对视频密集型应用(如自动驾驶)很有吸引力,因为您无需手动定义和选择图像特征。

三、强化学习环境

在强化学习场景中,你要训练 agent 完成一项任务,环境就是 agent 与之交互的外部系统(即世界)的模型。多 agent 环境可同时与多个 agent 进行交互。

在控制系统应用中,这个外部系统通常被称为被控系统。环境中还包括可能需要由某些环境变量跟踪的任何参考信号。

agent 和环境在一连串离散时间步中的每一步都会相互作用:

  1. 在给定的时间步长 t,环境处于一种状态 S(t),从而产生观测值 O(t)。根据 O(t)和内部策略函数,agent 计算出一个行动 A(t)。
  2. 基于状态 S(t) 和行动 A(t),并根据其内部动态,环境将其状态更新为 S(t+1),从而产生下一个观测值 O(t+1)。
  3. 根据 S(t)、A(t) 和 S(t+1),环境还会计算出一个标量奖励 R(t+1)。奖励是衡量行动 A(t) 好坏的直接标准。请注意,下一个观测值 O(t+1) 和奖励 R(t+1) 都不取决于下一个行动 A(t+1)。
  4. 在下一个时间步骤 t+1 中,agent 会收到观察结果 O(t+1) 和奖励 R(t+1)。
  5. 根据观察结果和收到的奖励的历史记录,学习算法会更新 agent 的策略参数,试图改进策略函数。参数更新可能发生在每一步,也可能发生在一系列步骤之后。
  6. 根据 O(t+1) 和它的策略函数,agent 计算出下一个行动 A(t+1),并重复这一过程。

从时间 t=1 开始,用下标表示时间,事件的因果序列(通常也称为轨迹)可概括为 O1、A1、R2、O2、A2。下图也说明了环境与 agent 之间的相互作用,其中虚线表示延迟一步。

按照惯例,观测数据可分为一个或多个通道,每个通道都包含一组单一元素,这些元素都属于数值(无限连续)集合或有限(离散)集合。每组元素可以按照任意维数(例如矢量或矩阵)进行组织。操作只允许有一个通道;此外,奖励必须是数字标量。有关动作和观察结果规范对象的更多信息,请参阅 rlFiniteSetSpec 和 rlNumericSpec。

3.1 环境对象

Reinforcement Learning Toolbox™ 使用 MATLAB® 对象表示环境。这些对象使用诸如 step 或 reset 等对象函数(方法)与 agent 进行交互。具体来说,在每次训练或模拟开始时,(训练或模拟函数)都会调用重置函数来设置环境初始条件。然后,在每个训练或模拟时间步长内,调用 step 函数更新环境状态,并返回下一个状态和奖励。

在 MATLAB 工作区中创建环境对象后,可以从变量中提取观察(observation)和操作规范(action specifications)。然后,您可以使用这些规范创建一个在环境中工作的 agent。然后,您可以使用环境变量和 agent 变量作为内置函数 train 和 sim 的参数,分别在环境中训练或模拟 agent。或者,您也可以创建自定义的训练或模拟循环,直接调用环境重置和步进函数。

以下章节总结了软件提供的不同环境类型。

3.2 马尔可夫决策过程(MDP)环境

马尔可夫决策过程环境是指状态和观测都属于有限空间的环境,状态转换一般受随机规则的支配。

网格世界环境是 MDP 环境的一种特例。在这里,状态代表二维网格中的一个位置,而行动则代表 agent 可能尝试的从当前位置到下一个位置的移动。在许多强化学习入门示例中,经常会用到网格世界环境。

你可以使用三种类型的 MDP 环境。

  • 预定义网格世界环境

强化学习工具箱提供了三种预定义的网格世界环境对象类型。对于预定义环境,所有状态、动作和奖励都已定义。您可以使用它们来学习基本的强化学习概念,并熟悉强化学习工具箱的软件功能。有关预定义网格世界环境的介绍,请参阅加载预定义网格世界环境。

  • 自定义网格世界环境

您可以创建任意大小的自定义网格世界,并自定义奖励、状态转换和障碍物配置。创建自定义网格世界环境后,您就可以像使用预定义环境一样使用它来训练和模拟 agent。

有关自定义网格世界的介绍,请参阅创建自定义网格世界环境。

  • 自定义马尔可夫决策过程 (MDP) 环境

您还可以通过提供自己的状态和行动集来创建自定义通用 MDP 环境。要创建通用 MDP 环境,请参阅 createMDP 和 rlMDPEnv。

3.3 预定义控制系统环境

控制系统环境是表示动态系统的环境,其中的状态和观测通常属于无限(不可数)的数值向量空间。在这种环境中,状态转换规律是确定性的,通常是通过对所要建模的底层物理系统的动力学进行离散化推导出来的。请注意,在这些环境中,动作仍然可以属于有限集合。

强化学习工具箱提供了多个预定义的控制系统环境对象,用于模拟双积分器或小车摆杆系统等动态系统。一般来说,每个预定义环境都有两个版本,一个是离散(有限)动作空间,另一个是连续(无限和不可数)动作空间。

依赖底层 Simulink® 模型计算状态转换、奖励和观测的环境称为 Simulink 环境。一些预定义的控制系统环境就属于这一类。

多 agent 环境是指可以一起训练和模拟多个 agent 的环境。一些预定义的控制系统环境就属于多代理环境。

您可以使用预定义的控制系统环境来学习如何将强化学习应用于物理系统的控制,熟悉强化学习工具箱的软件功能,或者测试自己的 agent。有关预定义控制系统环境的介绍,请参阅加载预定义控制系统环境。

3.4 自定义环境

您可以创建不同类型的自定义环境。创建自定义环境后,就可以像使用其他环境一样训练和模拟 agent。

有关在自定义环境中定义奖励和观察信号的关键注意事项,请参阅在自定义环境中定义奖励和观察信号。

您可以创建三种不同类型的自定义环境。

  • 自定义功能环境

自定义函数环境依赖于自定义步长和重置 MATLAB 函数(用于计算状态转换、奖励、观察和初始状 态)。

对于单 agent 环境,一旦您定义了行动和观察规范并编写了自定义步长和重置函数,您就可以使用 rlFunctionEnv 返回一个环境对象,该对象可以以与其他环境相同的方式与您的 agent 进行交互。

有关自定义函数环境的示例,请参阅使用步进和重置函数创建自定义环境。

您还可以创建两种不同的自定义多代理函数环境:

  • 具有通用采样时间的多代理环境,其中所有 agent 都在同一步骤中执行。
  • 基于回合的函数环境,其中 agent 轮流执行。具体来说,环境每次只分配给一组 agent 执行,轮到该组 agent 执行时,该组 agent 执行。有关示例,请参阅 "训练 agent 玩回合制游戏"。

对于这两种多代理环境,观察和行动规范都是规范对象的单元数组,其中每个元素对应一个代理。

对于具有通用采样时间的自定义多代理功能环境,请使用 rlMultiAgentFunctionEnv 返回环境对象。对于自定义的基于回合的多代理功能环境,请使用 rlTurnBasedFunctionEnv。

要指定在多代理环境中训练 agent 的选项,请创建并配置 rlMultiAgentTrainingOptions 对象。例如,您可以指定是以分散方式还是集中方式训练不同的 agent 组。在一组接受分散培训的 agent 中,每个 agent 都会收集自己的经验集,并从自己的经验集中学习。在接受集中式培训的代理群中,每个代理都会与群中的其他代理分享自己的经验,群中的每个代理都会从集体分享的经验中学习。

您可以在多代理环境中分别使用 train 和 sim 来训练和模拟代理。您可以使用强化学习训练管理器可视化所有 agent 的训练进度。

  • 自定义模板环境

自定义模板环境基于修改过的类模板。

要创建自定义模板环境,需要使用 rlCreateEnvTemplate 打开包含环境模板类的 MATLAB 脚本,然后修改模板,指定环境属性、所需环境函数和可选环境函数。

虽然这一过程比编写自定义步长和重置函数要复杂得多,但它能让您更灵活地添加应用程序可能需要的属性或方法。例如,您可以编写自定义 plot 方法,以绘制给定时间内环境的可视化表示。

有关使用模板创建环境的介绍,请参阅从类模板创建自定义环境。

  • 自定义 Simulink 环境

自定义 Simulink 环境基于您设计的 Simulink 模型。

您还可以使用 Simulink 设计多代理环境。特别是,Simulink 允许您为具有多速率执行的环境建模,其中每个 agent 可能都有自己的执行速率。

有关创建自定义 Simulink 环境的介绍,请参阅创建自定义 Simulink 环境。

3.5 神经网络环境

神经网络环境是依靠神经网络计算状态转换的自定义环境。在这里,状态和观测属于连续空间,状态转换规律可以是确定性的,也可以是随机的。

神经网络环境可以在基于模型的强化学习 agent(如基于模型的策略优化 (MBPO) agent)中使用。

有关如何创建神经网络环境的更多信息,请参阅 rlNeuralNetworkEnvironment。

相关推荐
Simulink_3 分钟前
ROS学习笔记15——Xacro
linux·笔记·学习·机器人·ros
铭瑾熙3 分钟前
深度学习之人脸检测
人工智能·深度学习
雯0609~27 分钟前
c#:winform调用bartender实现打印(学习整理笔记)
开发语言·c#
白光白光34 分钟前
量子卷积神经网络
人工智能·神经网络·cnn
胜天半子_王二_王半仙2 小时前
c++源码阅读__smart_ptr__正文阅读
开发语言·c++·开源
沐泽Mu2 小时前
嵌入式学习-C嘎嘎-Day08
开发语言·c++·算法
Non importa2 小时前
汉诺塔(hanio)--C语言函数递归
c语言·开发语言·算法·学习方法
LinuxST2 小时前
27、基于Firefly-rk3399中断休眠唤醒实验(按键中断)
linux·开发语言·stm32·嵌入式硬件
Tony_long74832 小时前
Python学习——猜拳小游戏
开发语言·python·学习
跳动的梦想家h2 小时前
黑马点评 秒杀下单出现的问题:服务器异常---java.lang.NullPointerException: null(已解决)
java·开发语言·redis