rlValueRepresentation

增强学习代理的价值函数批评表示

描述

该对象实现了一个值函数逼近器,该逼近器将在增强学习代理中用作批评家。值函数是将观测值映射到标量值的函数。输出表示当代理从给定的观察开始并采取可能的最佳行动时,期望的总长期回报。因此,价值功能批评家只需要观察(而不是行动)作为输入。创建一个rlValueRepresentation评论家,用它来创建代理依托值函数评论家,如rlACAgentrlPGAgent。对于这个工作流程的一个例子,见创建演员和评论家的表示。有关创建表示的更多信息,请参见创建策略和值函数表示

创建

描述

评论家= rlValueRepresentation(observationInfo“观察”,obsName创建基于值函数的评论家来自深度神经网络。这句法设置ObservationInfo财产评论家输入observationInfoobsName必须包含的输入层的名称

评论家= rlValueRepresentation(选项卡observationInfo创建基于值函数的评论家与一个离散观测空间,来自值表选项卡,这是一个rlTable对象包含柱阵列一样多的元素的可能观测。这句法设置ObservationInfo财产评论家输入observationInfo

评论家= rlValueRepresentation ({basisFcnW0},observationInfo创建基于值函数的评论家使用自定义的基函数作为底层逼近。的第一个输入参数是一个两元件单元,其中所述第一元件包含所述手柄basisFcn到自定义的基函数,并且所述第二元件包含初始权重向量W0。这句法设置ObservationInfo财产评论家输入observationInfo

评论家= rlValueRepresentation(___选项创建基于值函数的评论家使用附加选项设置选项,这是一个rlRepresentationOptions对象。这句法设置选项财产评论家选项输入参数。您可以将此语法用于前面的任何输入-参数组合。

输入参数

全部展开

使用深度神经网络作为批评家的基础逼近器,具体如下:

网络输入层必须与定义的信号具有相同的顺序和相同的数据类型和维度ObservationInfo。此外,这些输入图层的名称必须在列出的观测名称相匹配obsName

rlValueRepsentation对象支持递归深度万博1manbetx神经网络。

有关深度神经网络层的列表,请参见深度学习层次列表(深学习工具箱)。有关为强化学习建立深层神经网络的详细信息,请参阅创建策略和值函数表示

观察名称,指定为字符串或字符向量的单元数组。观察名称必须是其中的输入层的名称。这些网络层必须以相同的顺序,并用相同的数据类型和尺寸的信号中所定义ObservationInfo

例子:{ 'my_obs'}

值表,指定为rlTable含有长度的列矢量对象等于观测值的数目。元素一世当代理从给定的观察开始时,期望的累积长期回报是什么小号并采取最好的行动。这个向量的元素是表示的可学习参数。

自定义基函数,指定为用户定义函数的函数句柄。用户定义的函数可以是匿名函数,也可以是MATLAB路径上的函数。批评家的产出是c = W ' * B,在那里w ^是一个权向量是由自定义基础函数返回的列向量。C是预期累积的长期回报,当代理从给定的观察开始,采取最好的可能的行动。这种表示的可学习的参数的元素w ^

在创建值函数评论家表示时,您的基函数必须具有以下签名。

B = myBasisFunction (obsN obs1, obs2,…)

这里obs1obsN观察的顺序是否与定义的信号相同,数据类型和维度是否相同ObservationInfo

例子:@ (obs1 obs2 obs3) [obs3 (1) * obs1 (1) ^ 2;abs (obs2 (5) + obs1 (2)))

基函数权值的初值,w ^,指定为与基函数返回的向量长度相同的列向量。

属性

全部展开

代表选项,指定为rlRepresentationOptions对象。可用的选项包括用于培训的优化器和学习率。

观察规范、增强学习规范对象或一组规范对象,这些规范对象定义了诸如维度、数据类型和观察信号的名称等属性。您可以提取ObservationInfo从使用现有的环境或试剂getObservationInfo。您还可以使用以下命令手动构造specrlFiniteSetSpecrlNumericSpec

对象函数

rlACAgent 演员,评论家强化学习代理
rlPGAgent 策略梯度强化学习代理
rlPPOAgent 近端政策优化强化学习代理
getValue 得到估计值函数表示

例子

全部收缩

创建一个观察规范对象(或者使用getObservationInfo从环境中提取规范对象)。对于本例,将观察空间定义为连续的四维空间,因此单个观察是包含4个双精度的列向量。

obsInfo = rlNumericSpec([4 1]);

创建一个深度神经网络来近似批评家的价值函数。网络的输入(这里叫myobs必须接受一个四维向量(观测向量的定义obsInfo),输出必须是标量(值,表示代理从给定的观察开始时的预期累积长期回报)。

net = [imageInputLayer([4 1 1]),“归一化”'没有''名称'“myobs”)fullyConnectedLayer (1,'名称'“价值”));

使用网络、观察规范对象和网络输入层的名称创建批评家。

评论家= rlValueRepresentation (obsInfo净,“观察”,{“myobs”})
评论= rlValueRepresentation with properties: ObservationInfo: [1x1 rl.util.]选项:[1x1 rl.option.rlRepresentationOptions]

要检查您的评论家,使用getValue函数返回的随机观测的值,使用当前的网络的权重。

V =的getValue(评论家,{兰特(4,1)})
v =0.7904

您现在可以使用批评家(以及一个参与者)来创建一个依赖于价值功能批评家(例如rlACAgentrlPGAgent)。

创建一个actor表示和一个批评家表示,您可以使用它们来定义一个强化学习代理,例如一个actor批评家(AC)代理。

对于本例,为一个可以针对文中描述的cart-pole环境进行训练的代理创建actor和批评家表示训练交流代理商平衡吊柱系统。首先,创造环境。然后,从环境中提取观察和操作规范。您需要这些规范来定义代理和评论表示。

ENV = rlPredefinedEnv(“CartPole-Discrete”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

对于一个状态值函数评论家如那些用于AC或PG剂,所述输入是观测和输出应该是一个标量值,状态值。对于此示例,使用深神经网络与一个输出端,并与对应于观测信号创建评论家表示XxdotTHETA,thetadot中描述的训练交流代理商平衡吊柱系统。您可以从观测的数量obsInfo规范。命名网络层输入“观察”

numObservation = obsInfo.Dimension(1);criticNetwork = [imageInputLayer([numObservation 1 1],“归一化”'没有''名称'“观察”)fullyConnectedLayer (1,'名称''CriticFC'));

指定使用评论家表示选项rlRepresentationOptions。这些选项控制批评家网络参数的学习。对于本例,将学习率设置为0.05,梯度阈值设置为1。

repOpts = rlRepresentationOptions('LearnRate'5飞行,'GradientThreshold'1);

创建使用指定的神经网络和选项的评论家表示。此外,指定评论家的动作和观察信息。设置观测名“观察”,这是的criticNetwork输入层。

评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”,{“观察”},repOpts)
评论= rlValueRepresentation with properties: ObservationInfo: [1x1 rl.util.]选项:[1x1 rl.option.rlRepresentationOptions]

类似地,为参与者创建一个网络。AC代理使用actor表示来决定执行哪个动作。对于一个参与者,输入是观察值,输出取决于动作空间是离散的还是连续的。对于本例的参与者,有两个可能的离散操作,-10或10。要创建actor,使用与批评家相同的观察输入的深度神经网络,可以输出这两个值。可以从。获取操作的数目actInfo规范。名字的输出'行动'

numAction =元素个数(actInfo.Elements);actorNetwork = [imageInputLayer([4 1 1]),“归一化”'没有''名称'“观察”)fullyConnectedLayer(numAction,'名称''行动'));

使用观察名称和规范以及相同的表示选项创建参与者表示。

演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,...“观察”,{“观察”},repOpts)
actor = rlStochasticActorRepresentation with properties: ActionInfo: [1x1 rl.util.]观测信息:[1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

使用actor和批评家表示创建一个AC代理。

agentOpts = rlACAgentOptions(...“NumStepsToLookAhead”32岁的...“DiscountFactor”,0.99);剂= rlACAgent(演员,评论家,agentOpts)
agent = rlACAgent with properties: AgentOptions: [1x1 rl.option.rlACAgentOptions]

有关如何为不同的代理类型创建actor和批评家表示的更多示例,请参见:

创建一组有限的观测规范对象(或可替代地使用getObservationInfo从具有离散观测空间的环境中提取规范对象)。对于本例,将观察空间定义为由4个可能值组成的有限集。

obsInfo = rlFiniteSetSpec([1 3 5 7]);

创建一个表来近似批评家中的值函数。

vTable = rlTable (obsInfo);

该表是其中每个条目存储用于每个可能观察预期的长期累积奖励由定义的列矢量obsInfo。您可以使用访问表表格财产的虚表对象。每个元素的初始值为0。

vTable.Table
ANS =4×10 0 0 0

也可初始化该表为任意值,在这种情况下,从含整数的数组所有14

vTable.Table= reshape(1:4,4,1)
V表= rlTable与特性:表:[4X1双]

使用表和观察规范对象创建评论。

评论家= rlValueRepresentation (vTable obsInfo)
评论= rlValueRepresentation with properties: ObservationInfo: [1x1 rl.util.]rlFiniteSetSpec]选项:[1x1 rl.option.rlRepresentationOptions]

要检查您的评论家,使用getValue函数的作用是:使用当前表项返回给定观测值。

{7}v = getValue(批评)
V = 4

您现在可以使用批评家(以及一个参与者)来创建一个依赖于价值功能批评家(例如rlACAgentrlPGAgent代理)。

创建一个观察规范对象(或者使用getObservationInfo从环境中提取规范对象)。对于本例,将观察空间定义为连续的四维空间,因此单个观察是包含4个双精度的列向量。

obsInfo = rlNumericSpec([4 1]);

创建一个自定义基函数来近似批评家中的值函数。自定义基函数必须返回列向量。每个向量元素必须是观测值的函数obsInfo

myBasisFcn = @(myobs)[myobs(2)^ 2;myobs(3)+ EXP(myobs(1));ABS(myobs(4))]
myBasisFcn =function_handle与价值:@(myobs)[myobs(2)^ 2; myobs(3)+ EXP(myobs(1)); ABS(myobs(4))]

评论家的输出是标量W ' * myBasisFcn (myobs),在那里w ^是一个权重列向量,它必须具有与自定义基函数输出相同的大小。这个输出是当代理从给定的观察开始并采取可能的最佳行动时,所期望的累积长期回报。W的元素是可学习的参数。

定义初始参数向量。

W0 = (3。5; 2);

创建一个评论家。第一个参数是一个包含自定义函数句柄和初始权向量的两元素单元格。第二个参数是观察规范对象。

评论家= rlValueRepresentation ({myBasisFcn, W0}, obsInfo)
评论家= rlValueRepresentation与属性:ObservationInfo:[1×1 rl.util.rlNumericSpec]选项:[1×1 rl.option.rlRepresentationOptions]

要检查您的评论家,使用getValue函数的作用是:使用当前参数向量返回给定观测值。

v = getValue(批评家,{[2 4 6 8]]})
v = 1×1 dlarray 130.9453

您现在可以使用批评家(以及一个参与者)来创建一个依赖于价值功能批评家的代理(例如rlACAgentrlPGAgent)。

创造一个环境,获取观察和行动信息。

ENV = rlPredefinedEnv(“CartPole离散”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);numObs = obsInfo.Dimension (1);numDiscreteAct =元素个数(actInfo.Elements);

为评论者创建一个循环的深度神经网络。若要创建递归神经网络,请使用asequenceInputLayer作为输入层,并包含至少一个lstmLayer

关键网络= [sequenceInputLayer(numObs,“归一化”'没有''名称'“状态”)fullyConnectedLayer (8,'名称'“俱乐部”)reluLayer('名称'“relu”)lstmLayer(8,“OutputMode”'序列''名称'“lstm”)fullyConnectedLayer (1,'名称'“输出”));

为批评家创建一个值函数表示对象。

criticOptions = rlRepresentationOptions ('LearnRate'1飞行,'GradientThreshold'1);评论家= rlValueRepresentation (criticNetwork obsInfo,...“观察”“状态”,criticOptions);

介绍了在R2020a