创建策略和价值功能表示

强化学习策略是一种映射,它根据对环境的观察选择要采取的行动。在训练期间,代理调整其策略表示的参数,以最大化长期回报。

根据您使用的强化学习代理的类型,您定义了参与者和批评函数近似器,代理使用它们来表示和训练其策略。行动者代表选择最佳行动的策略。评论家代表了评估当前政策的长期回报的价值函数。根据您的应用程序和选择的代理,您可以使用深度神经网络、线性基函数或查找表定义策略和值函数。

有关代理的更多信息,请参见加固学习代理人

函数近似

根据您使用的代理类型,Reinforcement Learning Toolbox™软件支持以下类型的函数近似器:万博1manbetx

  • V年代|θ.V) - 基于给定观察估计预期的长期奖励的评论家年代

  • 年代一个|θ.) - 基于给定观察估计预期的长期奖励的评论家年代和行动一个

  • 年代一个|θ.) - 批评所有可能的离散行动的预期长期奖励给予观察年代

  • μ.年代|θ.μ.) - 基于给定观察选择一个动作的演员年代

每个功能近似器具有相应的一组参数(θ.Vθ.θ.μ.),在学习过程中计算。

对于具有有限数量的离散观测和离散操作的系统,您可以在查找表中存储值函数。对于具有许多离散观察和行动以及连续的观察和行动空间的系统,存储观察和动作是不切实际的。对于此类系统,您可以使用深度神经网络或线性基本功能代表您的演员和批评者。

表表示

您可以创建两种类型的表表示:

  • 值表,存储相应观察的奖励

  • q表,存储相应的观察-行动对的奖励

要创建表表示形式,首先使用rlTable函数。然后,使用无论是一个表达表的表示rlValueRepresentationrlQValueRepresentation对象。要配置表示所使用的学习速率和优化,请使用rlRepresentationOptions对象。

深度神经网络表征

您可以使用深度神经网络表示创建actor和critic函数近似器。这样做使用了深度学习工具箱™软件功能。

网络输入和输出尺寸

actor和批评网络的尺寸必须与培训环境对象的相应操作和观察规范匹配。获得环境的动作和观察尺寸env,可以使用getActionInfo.getobservationInfo.函数,分别。然后访问规范对象的属性。

actInfo = getActionInfo (env);actDimensions = actInfo.Dimensions;obsInfo = getObservationInfo (env);obsDimensions = obsInfo.Dimensions;

对于只将观察作为输入的批评网络,如AC或PG代理中使用的那些,输入层的尺寸必须与环境观察规范的尺寸相匹配。评论输出层的维数必须是一个标量值函数。

对于同时将观察和行动作为输入的批评网络,例如在DQN或DDPG代理中使用的那些,输入层的维度必须与相应的环境观察和行动规范的维度相匹配。

对于行动者网络,输入层的维数必须与环境观测规范的维数相匹配。如果actor有:

  • 离散动作空间,那么它的输出大小必须等于离散动作的数量。

  • 连续的操作空间,则其输出大小必须为操作规范中定义的标量或向量值。

建立深神经网络

深层神经网络由一系列相互连接的层组成。下表列出了在强化学习应用中常用的一些深度学习层。有关可用层的完整列表,请参见深度学习层列表(深度学习工具箱)。

描述
imageInputLayer 输入矢量和二维图像,并对数据进行归一化。
tanhLayer 将双曲线切线激活层应用于层输入。
reluLayer 将任何小于0的输入值设置为0。
fullyConnectedLayer 将输入矢量乘以权重矩阵,并添加偏置向量。
Convolution2Dlayer. 对输入应用滑动卷积滤波器。
附加学者 将多个图层的输出加在一起。
concationlayer. 沿着指定的维度连接输入。

bilstmLayer, 和batchNormalizationLayer层不支持强化学习。万博1manbetx

您还可以创建自己的自定义层。有关更多信息,请参见定义自定义深度学习层(深度学习工具箱)。强化学习工具箱软件提供以下自定义层。

描述
scalingLayer 线性缩放和偏置输入阵列。该层对于缩放和移位非线性层的输出是有用的,例如tanhLayer和s形。
QuadraticLayer. 创建由输入数组的元素构成的二次单项式向量。当你需要一个输出是其输入的二次函数时,这一层是有用的,例如对于LQR控制器。
softplusLayer 实现softplus激活Y= log(1 + eX,这确保了输出总是积极的

自定义层不包含可调参数;也就是说,它们在训练过程中不会改变。

对于强化学习应用程序,您可以通过连接每个输入路径(观察或动作)和每个输出路径(估计的奖励或动作)的一系列层来构建您的深度神经网络。然后用。连接这些路径connectLayers函数。

你也可以用深网络设计师应用程序。例如,看到使用深度网络设计器创建代理和使用图像观察训练

在创建深度神经网络时,必须为每个输入路径的第一层和输出路径的最后一层指定名称。

下面的代码创建并连接以下输入和输出路径:

  • 一个观测输入路径,observationPath,第一层名为“观察”

  • 动作输入路径,actionPath,第一层名为“行动”

  • 一个估计值函数输出路径,commonPath,它采用了输出observationPathactionPath作为输入。这条路径的最后一层被命名为“输出”

deventationPath = [ImageInputLayer([4 1 1],“归一化”“没有”“名字”“观察”)全康校长(24,“名字”“CriticObsFC1”) reluLayer (“名字”“CriticRelu1”)全康校长(24,“名字”“CriticObsFC2”));actionPath = [imageInputLayer([1 1 1],]),“归一化”“没有”“名字”“行动”)全康校长(24,“名字”“CriticActFC1”));commonPath =[附加路径]“名字”“添加”) reluLayer (“名字”'批判杂志') fullyConnectedLayer (1,“名字”“输出”));批判性=图表图(观察路径);批评网络= addlayers(批判性,ActionPath);批评网络= addlayers(批判性,commonpath);批评网络= ConnectLayers(批评者,“CriticObsFC2”'添加/ in1');批评网络= ConnectLayers(批评者,“CriticActFC1”“添加/ in2”);

对于所有的观察和操作输入路径,您必须指定imageInputLayer作为路径的第一层。

你可以使用情节函数。

情节(criticNetwork)

对于PG和AC代理,深度神经网络角色表示的最终输出层是afullyConnectedLayerA.softmaxLayer层。指定网络的层时,必须指定fullyConnectedLayer你可以选择指定softmaxLayer.如果你省略了softmaxLayer,软件会自动为您添加一个。

确定深度神经网络表示的层数,类型和大小可能是困难的,并且是应用程序的应用。但是,任何函数近似值的最关键的组件是功能是否能够近似应用程序的最佳策略或折扣价值函数;也就是说,它是否具有可以正确学习观察,动作和奖励信号的特征的层。

构建网络时考虑以下提示。

  • 对于连续的动作空间,用a来绑定动作tanhLayer紧随其后的是ScalingLayer,如果必要的。

  • 深密网络reluLayer层可以很好地逼近许多不同的函数。因此,它们通常是很好的首选。

  • 当您近似具有代数约束的强烈非线性或系统时,添加更多层通常比增加每层输出的数量更好。添加更多层促进指数探索,同时添加图层输出促进多项式探索。

  • 对于策略上的代理,如AC和PG代理,如果网络比较大(例如,一个网络有两个隐层,每个隐层有32个节点,它有几百个参数),并行训练效果会更好。策略并行更新假设每个工作者更新网络的不同部分,例如当他们探索观察空间的不同区域时。如果网络很小,工人的更新可能相互关联,使训练不稳定。

创建和配置表示

为您的深度神经网络创建批评者表示,使用rlValueRepresentationrlQValueRepresentation对象。要为你的深度神经网络创建一个参与者表示,使用rlDeterministicActorRepresentationrlstochastorrepresentation对象。要配置表示所使用的学习速率和优化,请使用rlRepresentationOptions对象。

例如,为评论网络创建一个q值表示对象criticNetwork,指定学习率为0.0001.创建表示时,将环境动作和观察规范传递给rlQValueRepresentation对象,并指定动作和观察所连接的网络层的名称。

选择= rlRepresentationOptions (“LearnRate”, 0.0001);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,...“观察”,{“观察”},'行动',{“行动”},选择);

当您创建您的深度神经网络和配置您的表示对象时,考虑使用下列方法之一作为起点。

  1. 从最小的网络和高学习率开始(0.01)。培训此初始网络以查看代理商是否会迅速收敛到较差的政策或以随机方式行事。如果出现这些问题中的任何一个,则通过在每层上添加更多层或更多输出来重新划分网络。您的目标是找到一个足够大的网络结构,并不是太快学习,并且在初始训练期后显示了学习的迹象(提高了奖励图的轨迹)。

  2. 较低的初始学习率可以让您查看代理是否在正确的轨道上,并帮助您检查您的网络架构是否满足问题的要求。对于困难的问题,一旦确定了良好的网络架构,调优参数就容易得多了。

此外,在配置深度神经网络表示时考虑以下提示。

  • 对DDPG和DQN制剂要有耐心,因为它们可能在早期发作期间一段时间内不会学到任何东西,而且在训练过程的早期,它们的累积奖励通常会出现下降。最终,在最初的几千次发作后,它们会显示出学习的迹象。

  • 对于DDPG和DQN代理,促进代理的探索至关重要。

  • 对于演员和批评网络的代理,将两个表示的初始学习率设置为相同的值。对于一些问题,将批评评论率设置为比演员更高的值可以改善学习结果。

经常性神经网络

在创建与PPO或DQN代理一起使用的表示时,可以使用递归神经网络。这些网络是深度神经网络,至少有一层具有隐藏的状态信息,例如lstmlayer..有关更多信息和示例,请参见rlValueRepresentationrlQValueRepresentationrlDeterministicActorRepresentation, 和rlstochastorrepresentation

线性基函数表示

线性基函数表示有这样的形式f = W可能会,在那里W是一个重量阵列和B是自定义基函数的列向量输出。线性基函数表示的可学习参数是元素W

评论家表示,f是标量值和吗W是一个与之相同的列向量B

对于带有a的actor表示:

  • 连续动作空间的维度f匹配代理操作规范的维度,它要么是标量,要么是列向量。

  • 离散的动作空间,f是长度等于离散动作数的列向量。

对于演员表示,列数W等于元素的个数f

要创建线性基函数表示形式,首先创建返回列向量的自定义基函数。基函数的签名取决于所创建的代理的类型。有关更多信息,rlValueRepresentationrlQValueRepresentationrlDeterministicActorRepresentation, 和rlstochastorrepresentation

有关训练使用线性基函数表示的自定义代理的示例,请参见火车定制LQR代理

指定代理交涉

一旦创建了参与者和批评者表示,就可以创建使用这些表示的强化学习代理。例如,使用给定的演员和评论家网络创建一个PG代理。

代理= rlpgagentoptions(“UseBaseline”,真正的);代理= rlPGAgent(演员、基线、agentOpts);

有关不同类型的强化学习代理的更多信息,请参见加固学习代理人

您可以使用以下方法从现有代理获取参与者和批评者表示getActorgetCritic,分别。

您还可以使用以下命令设置现有代理的参与者和批评者setActorsetCritic,分别。当您使用这些函数指定一个表示时,指定表示的输入和输出层必须与原始代理的观察和操作规范匹配。

相关的话题