强化学习策略是一种映射,它根据对环境的观察选择agent采取的行动。在训练期间,代理调整其策略表示的参数,以最大化预期的累积长期回报。
强化学习代理分别使用称为行动者表示和批评表示的函数近似器来估计策略和值函数。参与者代表基于当前观察选择最佳行动的策略。评论家代表了评估当前政策的预期累积长期回报的价值函数。
在创建代理之前,必须使用深度神经网络、线性基函数或查找表创建所需的参与者和批评家表示。使用的函数近似器类型取决于应用程序。
有关代理的更多信息,请参见强化学习代理.
Reinforcement Learning Toolbox™软件支持以下类型的表示:金宝app
V(年代|θV)——根据观察结果估计预期的长期累积回报的批评者年代.你可以使用rlValueRepresentation
.
问(年代,一个|θ问)——评估给定离散行动的预期累积长期回报的批评者一个和一个给定的观察年代.你可以使用rlQValueRepresentation
.
问我(年代,一个我|θ问) -多输出批评者,估计所有可能的离散行动的预期累积长期回报一个我鉴于观察年代.你可以使用rlQValueRepresentation
.
μ(年代|θμ) -根据给定的观察选择动作的演员年代.您可以使用其中之一创建这些角色决定论呈现
或rlStochasticActorRepresentation
.
每种表示都使用带有相应参数集的函数近似器(θV,θ问,θμ),在学习过程中计算。
对于离散观察和离散操作数量有限的系统,可以在查找表中存储值函数。对于有许多离散的观测和动作的系统,以及连续的观测和动作空间,存储观测和动作是不切实际的。对于这样的系统,您可以使用深度神经网络或自定义(参数中的线性)基函数来表示您的参与者和批评者。
下表总结了使用Reinforcement Learning Toolbox软件提供的四种表示对象的方法,具体取决于环境的动作和观察空间,以及您想使用的近似器和代理。
表示vs.近似者和代理者
表示 | 金宝app支持接近者 | 观察太空 | 行动空间 | 金宝app支持代理 |
---|---|---|---|---|
价值函数批评家V(年代),您可以使用 |
表格 | 离散的 | 不适用 | PG, AC, PPO |
深度神经网络或自定义基函数 | 离散或连续 | 不适用 | PG, AC, PPO | |
核反应能量函数评论家,Q(S,A)你可以使用 |
表格 | 离散的 | 离散的 | Q, DQN,撒尔沙 |
深度神经网络或自定义基函数 | 离散或连续 | 离散的 | Q, DQN,撒尔沙 | |
深度神经网络或自定义基函数 | 离散或连续 | 连续 | DDPG, TD3 | |
多输出Q值函数Q(S,A),您可以使用 |
深度神经网络或自定义基函数 | 离散或连续 | 离散的 | Q, DQN,撒尔沙 |
确定的政策的演员π(S),您可以使用 |
深度神经网络或自定义基函数 | 离散或连续 | 连续 | DDPG, TD3 |
随机政策演员π(S),您可以使用 |
深度神经网络或自定义基函数 | 离散或连续 | 离散的 | PG, AC, PPO |
深度神经网络 | 离散或连续 | 连续 | Pg ac ppo sac |
有关代理的更多信息,请参见强化学习代理.
基于查找表的表示适用于数量有限的环境离散的观察和操作。您可以创建两种类型的查找表表示形式:
值表,存储相应观察的奖励
q表,存储相应的观察-行动对的奖励
要创建表表示,首先使用rlTable
函数。然后,使用。创建表的表示形式rlValueRepresentation
或rlQValueRepresentation
要配置表示所使用的学习速率和优化,请使用rlRepresentationOptions
对象。
您可以使用深度神经网络创建actor和critic函数近似器。这样做使用了深度学习工具箱™软件功能。
你的演员和评论家网络的维度必须匹配来自培训环境对象的相应行动和观察规范。获得环境的行动和观察维度env
,可以使用getActionInfo
和getObservationInfo
函数,分别。然后访问维
属性。
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代理)中使用的网络必须有一个单一的输出层,输出大小是环境行动规范中定义的行动空间维度的两倍。这些网络必须有两条独立的路径,第一条路径产生平均值(必须缩放到输出范围),第二条路径产生标准差(必须是非负的)。
有关更多信息,请参见决定论呈现
和rlStochasticActorRepresentation
.
深层神经网络由一系列相互连接的层组成。下表列出了在强化学习应用中常用的一些深度学习层。有关可用层的完整列表,请参见深度学习层列表.
层 | 描述 |
---|---|
特征输入层 |
输入特征数据并应用归一化 |
imageInputLayer |
输入向量和二维图像并应用标准化。 |
sigmoidLayer |
对输入应用sigmoid函数,使输出在区间(0,1)内有界。 |
tanhLayer |
对输入应用双曲切线激活层。 |
reluLayer |
将任何小于零的输入值设置为零。 |
fullyConnectedLayer |
将输入向量乘以一个权值矩阵,并添加一个偏置向量。 |
convolution2dLayer |
将滑动卷积滤波器应用于输入。 |
additionLayer |
将多个图层的输出添加到一起。 |
concatenationLayer |
沿着指定的维度连接输入。 |
sequenceInputLayer |
为网络提供输入序列数据。 |
第一层 |
对输入应用长-短期存储层。支持DQN和PPO代理。金宝app |
的bilstmLayer
和batchNormalizationLayer
层不支持强化学习。金宝app
Reinforcement Learning Toolbox软件提供了以下层,其中不包含可调参数(即在训练期间更改的参数)。
层 | 描述 |
---|---|
scalingLayer |
对输入阵列应用线性比例和偏差。这一层用于缩放和移动非线性层的输出,例如tanhLayer 和sigmoidLayer . |
quadraticLayer |
创建一个由输入数组的元素构成的二次单项式向量。当你需要一个输出是其输入的二次函数时,这一层是有用的,例如对于LQR控制器。 |
softplusLayer |
实现softplus激活Y= log(1 + eX),以确保输出总是正的。这个函数是整流线性单元(ReLU)的平滑版本。 |
您还可以创建自己的自定义层。有关更多信息,请参见定义自定义深度学习层.
对于强化学习应用程序,您可以通过连接每个输入路径(观察或动作)和每个输出路径(估计的奖励或动作)的一系列层来构建您的深度神经网络。然后用。连接这些路径connectLayers
函数。
你也可以用深度网络设计器例如,请参见使用深度网络设计器创建代理和使用图像观察训练.
在创建深度神经网络时,必须为每个输入路径的第一层和输出路径的最后一层指定名称。
下面的代码创建并连接以下输入和输出路径:
一个观测输入路径,观测路径
,第一层命名为“观察”
.
一个动作输入路径,actionPath
,第一层命名为“行动”
.
一个估计值函数输出路径,commonPath
的输出观测路径
和actionPath
作为输入。此路径的最后一层命名为“输出”
.
observationPath = [imageInputLayer([4 1 1],]),“正常化”,“没有”,“名字”,“观察”) fullyConnectedLayer(24日“名字”,“临界值1”) reluLayer (“名字”,“CriticRelu1”) fullyConnectedLayer(24日“名字”,“CriticObsFC2”));actionPath = [imageInputLayer([1 1 1],]),“正常化”,“没有”,“名字”,“行动”) fullyConnectedLayer(24日“名字”,“CriticActFC1”));commonPath =[附加路径]“名字”,“添加”) reluLayer (“名字”,“CriticCommonRelu”)完全连接层(1,“名字”,“输出”));criticNetwork = layerGraph (observationPath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticObsFC2”,“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActFC1”,“添加/ in2”);
对于所有的观察和操作输入路径,您必须指定imageInputLayer
作为路径中的第一层。
您可以使用情节
函数。
情节(criticNetwork)
对于PG和AC代理,深度神经网络角色表示的最终输出层是afullyConnectedLayer
和一个软MaxLayer
.指定网络的层时,必须指定fullyConnectedLayer
你可以选择指定软MaxLayer
.如果省略软MaxLayer
,软件会自动为您添加一个。
确定深层神经网络表示的层数、类型和大小可能很困难,并且取决于应用程序。但是,决定函数逼近器特性的最关键因素是它是否能够逼近应用程序的最佳策略或贴现值函数,即是,它是否具有能够正确了解您的观察、行动和奖励信号特征的层。
在构建你的人际网络时,考虑以下建议。
对于连续的动作空间,用a来绑定动作tanhLayer
紧随其后的是一个ScalingLayer
,如果必要的。
深密网络reluLayer
层可以很好地逼近许多不同的函数。因此,它们通常是很好的首选。
从你认为可以近似最优策略或值函数的最小网络开始。
当近似强非线性或具有代数约束的系统时,添加更多的层通常比增加每层的输出数量要好。通常,近似器表示更复杂函数的能力仅在层的大小上多项式增长,但随着层的数量呈指数增长。I换句话说,更多的层允许逼近更复杂和非线性的组合函数,尽管这通常需要更多的数据和更长的训练时间。层更少的网络可能需要指数级的更多单元才能成功逼近同一类函数,并且可能无法正确地学习和概括。
对于策略上的代理(仅从遵循当前策略收集的经验中学习的代理),如AC和PG代理,如果网络较大(例如,一个网络有两个隐层,每个隐层有32个节点,它有几百个参数),并行训练效果会更好。策略并行更新假设每个工作者更新网络的不同部分,例如当他们探索观察空间的不同区域时。如果网络很小,工人的更新可能相互关联,使训练不稳定。
要为你的深度神经网络创建一个批判表示法,使用rlValueRepresentation
或rlQValueRepresentation
对象。要为你的深度神经网络创建一个参与者表示,使用决定论呈现
或rlStochasticActorRepresentation
要配置表示所使用的学习速率和优化,请使用rlRepresentationOptions
对象。
例如,为批评家网络创建Q值表示对象criticNetwork
,指定学习率为0.0001
.当您创建表示时,将环境动作和观察规范传递给rlQValueRepresentation
对象,并指定观察和操作连接到的网络层的名称(在本例中)“观察”
和“行动”
).
选择= rlRepresentationOptions (“LearnRate”,0.0001); critic=rlQValueRepresentation(关键网络、obsInfo、actInfo、,...“观察”, {“观察”},“行动”, {“行动”},选择);
当您创建您的深度神经网络和配置您的表示对象时,考虑使用以下方法作为起点。
从最小的网络和高学习率开始(0.01
).训练这个初始网络,看看代理是否会迅速收敛到一个糟糕的策略或以随机的方式行动。如果出现上述任何一个问题,可以通过添加更多层或在每层上添加更多输出来重新调整网络。你的目标是找到一个足够大的网络结构,它不会学习太快,并且在初始训练阶段后显示出学习的迹象(奖励图的改进轨迹)。
一旦您确定了一个良好的网络架构,较低的初始学习率可以让您查看代理是否在正确的轨道上,并帮助您检查您的网络架构是否满足问题。较低的学习率使得调整参数变得容易得多,特别是对于困难的问题。
此外,在配置深度神经网络表示时,请考虑以下提示。
对DDPG和DQN药物要有耐心,因为他们可能在早期发作的一段时间内什么也学不到,而且他们通常在训练过程的早期表现出累积回报的下降。最终,他们在最初的几千次发作后会表现出学习的迹象。
对于DDPG和DQN代理,促进代理的探索至关重要。
对于同时拥有演员和评论家网络的代理,将这两种表示的初始学习速率设置为相同的值。对于一些问题,将评论家的学习率设置为高于行为人的学习率可以提高学习效果。
在创建用于除Q和SARSA以外的任何代理的表示时,可以使用递归神经网络(RNN)。这些网络是深度神经网络sequenceInputLayer
输入层和至少一个具有隐藏状态信息的层,例如第一层
.当环境的状态不能包含在观测向量中时,它们会特别有用。
对于同时具有actor和critic的代理,您必须要么对它们两个使用RNN,要么对它们中的任何一个都不使用RNN。你不能只对评论家或演员使用RNN。
当使用PG代理时,RNN的学习轨迹长度就是整个事件。对于AC座席NumStepsToLookAhead
将被选对象的性质作为训练轨迹长度。对于多酚氧化酶,轨迹长度为MiniBatchSize
属性的。
对于DQN、DDPG、SAC和TD3代理,必须将轨迹训练长度指定为大于1的整数SequenceLength
其选项对象的属性。
请注意,对于使用递归神经网络(RNN)的连续动作PG、AC、PPO金宝app和SAC代理,或者对于具有多个输入路径并在任意路径中包含RNN的任何代理,不支持代码生成。
有关政策和价值功能的更多信息和示例,请参见rlValueRepresentation
,rlQValueRepresentation
,决定论呈现
,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
一定只是观察的一个函数。有关更多信息,请参见决定论呈现
,rlStochasticActorRepresentation
.
有关训练使用线性基函数表示的自定义代理的示例,请参见培训定制LQR代理.
创建演员和评论家表示后,可以创建使用这些表示的强化学习代理。例如,使用给定的演员和评论家网络创建PG代理。
agentOpts=rlPGAgentOptions(“UseBaseline”,真正的);代理= rlPGAgent(演员、基线、agentOpts);
有关不同类型的强化学习代理的更多信息,请参见强化学习代理.
您可以使用以下方法从现有代理获取参与者和批评者表示getActor
和Get批评家
,分别。
您还可以使用以下命令设置现有代理的参与者和批评者setActor
和setCritic
,分别。当您使用这些函数为现有代理指定表示时,指定表示的输入和输出层必须与原始代理的观察和操作规范匹配。