主要内容

创建策略和价值功能表示

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

强化学习代理分别使用称为行动者表示和批评表示的函数近似器来估计策略和值函数。参与者代表基于当前观察选择最佳行动的策略。评论家代表了评估当前政策的预期累积长期回报的价值函数。

在创建代理之前,必须使用深度神经网络、线性基函数或查找表创建所需的参与者和批评者表示。您使用的函数近似器类型取决于您的应用程序。

有关代理商的更多信息,请参阅强化学习代理

演员和评论家代表

Reinforcement Learning Toolbox™软件支持以下类型的表示:金宝app

  • V.S.|θV.)——根据观察结果估计预期的长期累积回报的批评者S..您可以使用rlValueRepresentation

  • 问:S.一种|θ问:)——评估给定离散行动的预期累积长期回报的批评者一种给定的观察结果S..您可以使用rlQValueRepresentation

  • 问:一世S.一种一世|θ问:) -多输出批评者,估计所有可能的离散行动的预期累积长期回报一种一世鉴于观察S..您可以使用rlQValueRepresentation

  • μS.|θμ) -根据给定的观察选择动作的演员S..您可以使用其中之一创建这些角色rlDeterministicActorRepresentationrlStochasticActorRepresentation

每个表示使用函数近似器具有相应的一组参数(θV.θ问:θμ),在学习过程中计算。

对于离散观察和离散操作数量有限的系统,可以在查找表中存储值函数。对于有许多离散的观测和动作的系统,以及连续的观测和动作空间,存储观测和动作是不切实际的。对于这样的系统,您可以使用深度神经网络或自定义(参数中的线性)基函数来表示您的参与者和批评者。

下表总结了使用Reinforcement Learning Toolbox软件提供的四种表示对象的方法,具体取决于环境的动作和观察空间,以及您想使用的近似器和代理。

表示vs.近似者和代理者

表示 金宝app支持接近者 观察空间 行动空间 金宝app支持代理

价值函数的评论家v(s),您可以使用

rlValueRepresentation

表格 离散 不适用 PG, AC, PPO
深度神经网络或自定义基础功能 离散或连续 不适用 PG, AC, PPO

Q值功能评论家,问(,)你可以使用

rlQValueRepresentation

表格 离散 离散 Q, DQN,撒尔沙
深度神经网络或自定义基础功能 离散或连续 离散 Q, DQN,撒尔沙
深度神经网络或自定义基础功能 离散或连续 连续 DDPG,TD3

多输出q值函数批评家问(,),您可以使用

rlQValueRepresentation

深度神经网络或自定义基础功能 离散或连续 离散 Q, DQN,撒尔沙

确定的政策的演员π(S),您可以使用

rlDeterministicActorRepresentation

深度神经网络或自定义基础功能 离散或连续 连续 DDPG,TD3

随机政策演员π(S),您可以使用

rlStochasticActorRepresentation

深度神经网络或自定义基础功能 离散或连续 离散 PG, AC, PPO
深层神经网络 离散或连续 连续 Pg ac ppo sac

有关代理商的更多信息,请参阅强化学习代理

表近似者

基于查找表的表示适用于具有有限数量的环境离散观察和操作。您可以创建两种类型的查找表表示:

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

  • q-tables,哪些存储相应观察措施对的奖励

要创建表表示,首先使用rlTable函数。然后,使用。创建表的表示形式rlValueRepresentationrlQValueRepresentation对象。要配置表示所使用的学习速率和优化,请使用rlrepresentationOptions.对象。

深神经网络近似器

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

网络输入和输出尺寸

你的演员和评论家网络的维度必须匹配来自培训环境对象的相应行动和观察规范。获得环境的行动和观察维度env, 使用getActionInfogetObservationInfo函数,分别。然后访问方面属性。

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

价值函数评论网络(如AC、PG或PPO代理中使用的网络)必须只将观察结果作为输入,并且必须有单个标量输出。对于这些网络,输入层的维数必须与环境观测规范的维数相匹配。有关更多信息,请参见rlValueRepresentation

用于单输出Q值函数评论的网络(例如在Q、DQN、SARSA、DDPG、TD3和SAC代理中使用的网络)必须将观察和操作都作为输入,并且必须有单个标量输出。对于这些网络,输入层的维度必须与观察和操作的环境规范的维度相匹配。有关更多信息,请参见rlQValueRepresentation

多输出Q值函数评论网络(例如在Q、DQN和SARSA代理中使用的网络)只将观测值作为输入,并且必须有一个输出层,其输出大小等于离散动作的数量。对于这些网络,输入层的维度必须与环境观测的维度相匹配。规范。有关更多信息,请参见rlQValueRepresentation

对于演员网络,输入层的尺寸必须与环境观测规范的尺寸匹配。

  • 在具有离散动作空间的行动者(如PG、AC和PPO代理中的网络)中使用的网络必须有一个输出层,其输出大小等于可能的离散动作的数量。

  • 具有连续动作空间的确定性行动者所使用的网络(如DDPG和TD3代理中的网络)必须有一个输出层,其输出大小与环境动作规范中定义的动作空间的维度相匹配。

  • 在具有连续行动空间的随机行动者(如PG、AC、PPO和SAC代理)中使用的网络必须有一个单一的输出层,输出大小是环境行动规范中定义的行动空间维度的两倍。这些网络必须有两条独立的路径,第一条路径产生平均值(必须缩放到输出范围),第二条路径产生标准差(必须是非负的)。

有关更多信息,请参见rlDeterministicActorRepresentationrlStochasticActorRepresentation

构建深度神经网络

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

描述
featureInputLayer 输入特征数据并应用归一化
imageInputLayer 输入矢量和二维图像并应用归一化。
sigmoidLayer 对输入应用一个s型函数,使输出在区间(0,1)内有界。
Tanhlayer. 对输入应用双曲切线激活层。
抵押者 设置小于零至零的任何输入值。
全康统计层 将输入向量乘以一个权值矩阵,并添加一个偏置向量。
convolution2dLayer 将滑动卷积滤波器应用于输入。
additionLayer 将多个图层的输出添加到一起。
concatenationLayer 沿指定维度连接输入。
sequenceInputLayer 为网络提供输入序列数据。
lstmLayer 对输入应用长短期记忆层。金宝app支持DQN和PPO代理。

bilstmLayerbatchNormalizationLayer增强学习不支持层。金宝app

Reinforcement Learning Toolbox软件提供了以下层,其中不包含可调参数(即在训练期间更改的参数)。

描述
scalingLayer 将线性刻度和偏置应用于输入阵列。该层对于缩放和移位非线性层的输出是有用的,例如Tanhlayer.sigmoidLayer
quadraticLayer 创建由输入阵列的元素构成的二次单体的向量。当您需要输入的输出时,该层很有用,这是其输入的一些二次函数,例如LQR控制器。
softpluslayer. 实现softplus激活y= log(1 + eX,这确保了输出始终为正。此功能是整流线性单元(Relu)的平滑版本。

您还可以创建自己的自定义层。有关更多信息,请参见定义自定义深度学习层

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

您还可以使用“深度神经网络”深层网络设计师例如,请参见使用深度网络设计器创建代理和使用图像观察训练

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

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

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

  • 一个动作输入路径,actionPath,第一层命名为'行动'

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

observationPath = [imageInputLayer([4 1 1],]),“归一化”'没有任何''姓名'“观察”) fullyConnectedLayer(24日'姓名'“CriticObsFC1”)剥离('姓名'“CriticRelu1”) fullyConnectedLayer(24日'姓名'“CriticObsFC2”));actionPath = [imageInputLayer([1 1 1],]),“归一化”'没有任何''姓名''行动') fullyConnectedLayer(24日'姓名''批评FC1'));commonPath =[附加路径]'姓名'“添加”)剥离('姓名'“CriticCommonRelu”) fullyConnectedLayer (1,'姓名''输出'));criticNetwork = layerGraph (observationPath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticObsFC2”“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,'批评FC1'“添加/ in2”);

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

你可以使用阴谋函数。

情节(批评性)

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

为您的深度神经网络表示确定层的数量、类型和大小可能是困难的,并且取决于应用程序。然而,最重要的组件在决定函数近似者的特点是它能够近似最优政策或贴现值函数为您的应用程序,也就是说,层,是否能正确地学习你的观察的特点,行动,和奖励的信号。

在构建你的人际网络时,考虑以下建议。

  • 对于连续的动作空间,用a来绑定动作Tanhlayer.其次是A.scalinglayer.,如果必要的。

  • 深密网络抵押者在近似许多不同的功能时,层可以相当擅长。因此,他们往往是一个好的首选。

  • 从你认为可以近似最优策略或值函数的最小网络开始。

  • 当你用代数约束逼近强非线性或系统时,添加更多的层通常比增加每层的输出数量要好。一般来说,近似器表示更复杂函数的能力仅在层的大小上多项式地增长,但随着层的数量呈指数增长。换句话说,更多的层允许逼近更复杂和非线性的合成函数,尽管这通常需要更多的数据和更长的训练时间。具有更少层的网络可能需要指数级的更多单元来成功地近似同一类函数,并且可能无法正确地学习和泛化。

  • 对于政策代理(仅从在当前策略中收集的经验中学习的那些),例如AC和PG代理,如果您的网络很大(例如,具有两个带有32个节点的隐藏层的网络,则并行培训更好地工作每个参数有几百个参数)。on-policy并行更新假设每个工作人员更新网络的不同部分,例如探索观察空间的不同区域。如果网络很小,工作者更新可以相互关联,并使训练不稳定。

创建和配置表示

要为你的深度神经网络创建一个批判表示法,使用rlValueRepresentationrlQValueRepresentation对象。要为您的深神经网络创建演员表示,请使用rlDeterministicActorRepresentationrlStochasticActorRepresentation对象。要配置表示所使用的学习速率和优化,请使用rlrepresentationOptions.对象。

例如,为评论网络创建一个q值表示对象criticNetwork,指定学习率0.0001.当您创建表示时,将环境动作和观察规范传递给rlQValueRepresentation对象,并指定观察和操作所连接到的网络层的名称(在本例中“观察”'行动').

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

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

  1. 从最小的网络和高学习率开始(0.01).训练这个初始网络,看看代理是否会迅速收敛到一个糟糕的策略或以随机的方式行动。如果出现上述任何一个问题,可以通过添加更多层或在每层上添加更多输出来重新调整网络。你的目标是找到一个足够大的网络结构,它不会学习太快,并且在初始训练阶段后显示出学习的迹象(奖励图的改进轨迹)。

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

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

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

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

  • 对于同时拥有演员和评论家网络的代理,将这两种表示的初始学习速率设置为相同的值。对于一些问题,将评论家的学习率设置为高于行为人的学习率可以提高学习效果。

复发性神经网络

在以Q和Sarsa除外的任何代理商使用的表示时,您可以使用经常性神经网络(RNN)。这些网络是深度神经网络sequenceInputLayer输入层和至少一个具有隐藏状态信息的层,例如lstmLayer.当环境的状态不能包含在观测向量中时,它们会特别有用。

对于同时具有actor和critic的代理,您必须要么对它们两个使用RNN,要么对它们中的任何一个都不使用RNN。你不能只对评论家或演员使用RNN。

当使用PG代理时,RNN的学习轨迹长度就是整个事件。对于AC座席NumStepsToLookAhead将被选对象的性质作为训练轨迹长度。对于多酚氧化酶,轨迹长度为MiniBatchSize属性的。

对于DQN、DDPG、SAC和TD3代理,必须将轨迹训练长度指定为大于1的整数SequenceLength属性。

请注意,对于使用递归神经网络(RNN)的连续动作PG、AC、PPO金宝app和SAC代理,或者对于具有多个输入路径并在任意路径中包含RNN的任何代理,不支持代码生成。

有关政策和价值功能的更多信息和示例,请参见rlValueRepresentationrlQValueRepresentationrlDeterministicActorRepresentation,rlStochasticActorRepresentation

自定义基函数近似器

自定义(参数中的线性)基函数近似器有这种形式f = W可能会,在那里W.是权重数组和B.是必须创建的自定义基函数的列向量输出。线性基函数表示的可学习参数是元素W.

对于价值功能评价表示(如AC、PG或PPO代理中使用的),F是标量值,所以呢W.必须是柱向量,其长度与B.,B.一定是观测的结果。有关更多信息,请参见rlValueRepresentation

对于单输出Q值功能批评者表示,(例如Q,DQN,Sarsa,DDPG,TD3和SAC代理中使用的),F是标量值,所以呢W.必须是柱向量,其长度与B.,B.必须是观察和行动的共同作用。有关更多信息,请参见rlQValueRepresentation

对于具有离散动作空间的多输出Q值功能批评者表示,(例如在Q,DQN和Sarsa代理中使用的那些),F是一个与多个元素一样多的矢量作为可能的动作的数量。所以W.必须是一个矩阵,有尽可能多的列作为可能的行动的数量和尽可能多的行作为长度B.B.一定只是观察的一个函数。有关更多信息,请参见rlQValueRepresentation

  • 对于具有离散动作空间的演员(如PG、AC和PPO代理中的演员),F必须是长度等于可能的离散动作数的列向量。

  • 对于具有连续动作空间的确定性参与者(如DDPG和TD3代理中的参与者)F必须与代理操作规范的维数匹配,后者要么是标量,要么是列向量。

  • 具有连续动作空间的随机参与者不能依赖自定义基函数(他们只能使用神经网络近似器,因为需要加强标准偏差的正性)。

对于任何演员代表,W.必须有与元素的数量一样多的列F,以及多行作为元素的数量B.B.一定只是观察的一个函数。有关更多信息,请参见rlDeterministicActorRepresentation,rlStochasticActorRepresentation

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

创建代理或指定代理表示

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

agentOpts = rlPGAgentOptions (“UseBaseline”,真的);代理= rlpgagent(演员,基线,代理);

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

您可以使用现有代理商使用的演员和批评者表示工作者getCritic, 分别。

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

相关的话题