创建策略和价值函数表示

           行动者和评论者表示

             表近似器

                 深度神经网络近似器

                 网络的输入和输出维度

                构建深度神经网络

                创建和配置表示

                递归神经网络

          自定义基础函数逼近器

          创建智能体或指定智能体表示


强化学习策略是一种映射,用于根据对环境的观察来选择智能体采取的行动。 在训练期间,智能体会调整其策略表示的参数以最大化预期的累积长期奖励。

强化学习智能体使用分别称为行动者和批评者表示的函数近似器来估计策略和价值函数。 行动者代表根据当前观察选择最佳行动的策略。 评论者代表价值函数,该函数估计当前保单的预期长期累积奖励。

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

有关代理的更多信息,请参见强化学习智能体

行动者和评论者表示

强化学习工具箱™软件支持以下几种表示形式:

     1. V ( S ∣ θ V ) -根据给定观察值S估计预期累积长期奖励的评论者。您可以使用rlValueRepresentation创建这些评论者。

     2. Q ( S , A ∣ θ Q ) -根据给定的观察值S评估所有可能的离散动作的预期累积长期奖励的评论者。您可以使用                   rlQValueRepresentation创建这些评论者。

     3. Q ( S ∣ θ Q ) -为给定观察值S估计所有可能的离散动作Ai的预期累积长期奖励的多输出评论者,您可以使用       rlQValueRepresentation创建这些评论者。

    4. μ ( S ∣ θ μ ) -基于给定观察值S选择动作的行动者。您可以使用rlDeterministicActorRepresentation或         rlStochasticActorRepresentation创建这些行动者。


每个表示形式都使用函数逼近器,该函数逼近器具有一组相应的参数 ( θ V , θ Q , θ μ ) ,这些参数在学习过程中进行计算。
在这里插入图片描述

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

下表总结了可以使用Reinforcement Learning Toolbox软件提供的四个表示对象的方式,具体取决于您环境中的动作和观察空间以及要使用的逼近器和智能体。
在这里插入图片描述

表近似器

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

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

      Q表,用于存储对应的观察动作对的奖励

要创建表表示形式,请首先使用rlTable函数创建一个值表或Q表。 然后,使用rlValueRepresentationrlQValueRepresentation对象为表创建一个表示。 要配置表示形式使用的学习率和优化,请使用对象。

深度神经网络近似器

您可以使用深度神经网络创建行动者和评论者函数逼近器。 这样做使用Deep Learning Toolbox™软件功能。

网络的输入和输出维度

行动者和评论者网络的尺寸必须与训练环境对象中的相应动作和观察规范相匹配。 要获取环境env的动作和观察维度,请分别使用getActionInfo和getObservationInfo函数。 然后访问规范对象的Dimensions属性。

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

对于行动者网络,输入层的尺寸必须与环境观察规范的尺寸匹配。

          1. 具有离散动作空间的行动者(例如PG,AC和PPO智能体中的角色)使用的网络必须具有单个输出层,并且输出大小等于可能 的离散动作数量。

          2. 具有连续动作空间的确定性行动者(例如DDPG和TD3智能体中的行动者)中使用的网络必须具有单个输出层,其输出大小必须与环境动作规范中定义的动作空间的尺寸相匹配。

          3. 具有连续动作空间的随机角色(例如PG,AC,PPO和SAC智能体中的角色)中使用的网络必须具有单个输出层,其输出大小 是环境动作规范中定义的动作空间尺寸的两倍。 这些网络必须有两条单独的路径,第一个产生平均值(必须将其缩放至输出范围),第二个产生标准偏差(必须为非负值)。

构建深度神经网络

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

在这里插入图片描述

强化学习不支持bilstmLayerbatchNormalizationLayer层。

强化学习工具箱软件提供了以下几层,其中不包含可调参数(即,在训练过程中会更改的参数)。

在这里插入图片描述

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

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

您还可以使用Deep Network Designer应用程序创建深度神经网络。 有关示例,请参阅使用深度网络设计器创建代理和使用图像观察进行训练。

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

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

        1. 观察输入路径observationPath,其第一层名为“ observation”。

        2. 动作输入路径actionPath,第一层名为“ action”。

        3. 估计值函数的输出路径commonPath,它将observationPath和actionPath的输出作为输入。 该路径的最后一层称为“输出”。

observationPath = [
    imageInputLayer([4 1 1],'Normalization','none','Name','observation')
    fullyConnectedLayer(24,'Name','CriticObsFC1')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(24,'Name','CriticObsFC2')];
actionPath = [
    imageInputLayer([1 1 1],'Normalization','none','Name','action')
    fullyConnectedLayer(24,'Name','CriticActFC1')];
commonPath = [
    additionLayer(2,'Name','add')
    reluLayer('Name','CriticCommonRelu')
    fullyConnectedLayer(1,'Name','output')];
criticNetwork = layerGraph(observationPath);
criticNetwork = addLayers(criticNetwork,actionPath);
criticNetwork = addLayers(criticNetwork,commonPath);    
criticNetwork = connectLayers(criticNetwork,'CriticObsFC2','add/in1');
criticNetwork = connectLayers(criticNetwork,'CriticActFC1','add/in2');

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

您可以使用图函数查看深度神经网络的结构。

plot(criticNetwork)

在这里插入图片描述

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

确定用于深度神经网络表示的层的数量,类型和大小可能很困难,并且取决于应用程序。 但是,决定函数逼近器特性的最关键因素是它是否能够为您的应用程序逼近最佳策略或折现值函数,也就是说,它是否具有可以正确学习观察,动作 ,和奖励信号。

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

      1. 对于连续动作空间,如有必要,请先使用tanhLayer和ScalingLayer绑定动作。

      2. 具有reluLayer层的深层密集网络可以很好地近似许多不同的功能。 因此,它们通常是不错的首选。

      3. 从您认为可以近似最佳策略或价值功能的最小网络开始。

      4. 当您近似强非线性或具有代数约束的系统时,添加更多层通常比增加每层输出数量更好。 通常,逼近器表示更复杂函数的能力仅 在层大小上呈多项式增长,但随层数呈指数增长。 换句话说,虽然通常需要更多的数据和更长的训练时间,但是更多的层可以近似于更复杂和非线性的合成函数。 具有较少层的网络可能需要成倍地增加单位才能成功近似相同的功能类别,并且可能无法正确学习和概括。

      5. 对于基于策略的智能体(仅从遵循当前策略时收集的经验中学习的智能体)(例如AC和PG智能体),如果您的网络较大(例   如,一个具有32个节点的两个隐藏层的网络),则并行训练会更好, 每个都有数百个参数)。 策略并行更新假定每个工作人员都更新了网络的不同部分,例如当他们探索观察空间的不同区域时。 如果网络较小,则工作者更新可能会相互关联并使训练不稳定。

创建和配置表示

要为您的深度神经网络创建评论者表示,请使用rlValueRepresentationrlQValueRepresentation对象。 若要为您的深层神经网络创建角色表示,请使用rlDeterministicActorRepresentationrlStochasticActorRepresentation对象。 要配置表示形式使用的学习率和优化,请使用rlRepresentationOptions对象。

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

opt = rlRepresentationOptions('LearnRate',0.0001);
critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
        'Observation',{'observation'},'Action',{'action'},opt);

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

         1. 从最小的网络和较高的学习率(0.01)开始。 训练此初始网络以查看智能体是否迅速收敛到不良策略或以随机方式采取行动。 如果出现这些问题中的任何一个,请通过在每个层上添加更多层或更多输出来重新调整网络规模。 您的目标是找到一个足够大的网络结构,学习速度不会太快,并且在最初的训练期后会显示学习的迹象(奖励图的轨迹不断改善)。

         2. 一旦您选择了良好的网络体系结构,较低的初始学习率就可以让您查看智能体是否走上了正确的轨道,并帮助您检查网络体系 结构是否满足该问题。 低学习率使调整参数变得容易得多,尤其是对于棘手的问题。

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

         1. 请对DDPG和DQN智能体保持耐心,因为他们可能在早期情节中有一段时间没有学习到任何东西,而且他们通常会在训练过程 的早期显示累积奖励下降。 最终,在前几千集之后,他们可以显示学习的迹象。

         2. 对于DDPG和DQN智能体,促进对智能体的探索至关重要。

         3. 对于既有行动者网络又有评论者网络的智能体,请将两种表示形式的初始学习率设置为相同的值。 对于某些问题,将评论者的学习率设置为高于行动者的学习率可以改善学习效果。

递归神经网络

创建用于PPO或DQN智能体的表示形式时,可以使用递归神经网络。 这些网络是深度神经网络,具有sequenceInputLayer输入层和至少一个具有隐藏状态信息的层,例如lstmLayer。 当环境的状态不能包含在观察向量中时,它们可能特别有用。 有关更多信息和示例,请参见rlValueRepresentationrlQValueRepresentationrlDeterministicActorRepresentationrlStochasticActorRepresentation

自定义基础函数逼近器

自定义(参数中的线性)基本函数逼近器的形式为f = W’B,其中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必须是列向量,其长度等于可能的离散动作的数量。

         1. 对于具有连续动作空间的确定性行动者(例如DDPG和TD3代理中的参与行动者),f的维必须与智能体动作规范的维匹配,规范可以是标量或列向量。

         2. 具有连续动作空间的随机角色不能依赖自定义基础函数(由于只能对标准偏差强制执行正性,因此只能使用神经网络逼近 器)。

         3. 对于任何行动者表示,W的列数必须与f中的元素数一样多,并且行的数量必须与B中的元素数一样多。B必须仅是观察的函数。有关更多信息,请参见rlDeterministicActorRepresentationrlStochasticActorRepresentation

创建智能体或指定智能体表示

创建行动者和评论者表示后,您可以创建使用这些表示的强化学习智能体。 例如,使用给定的行动者和评论者网络创建PG智能体。

agentOpts = rlPGAgentOptions('UseBaseline',true);
agent = rlPGAgent(actor,baseline,agentOpts);

有关不同类型的强化学习智能体的更多信息,请参阅强化学习智能体

您可以分别使用getActorgetCritic从现有智能体获取行动者和评论者表示。

您还可以分别使用setActorsetCritic设置现有智能体的参与者和评论者。 使用这些功能为现有智能体指定表示时,指定表示的输入和输出层必须与原始智能体的观察和操作规范匹配。