主要内容

训练强化学习策略使用自定义训练循环

这个例子显示了如何定义一个自定义训练循环强化学习政策。您可以使用此工作流训练强化学习策略与您自己的自定义训练算法,而不是使用一个内置代理的强化学习工具箱™软件。

使用此工作流,您可以训练策略,使用下列策略和价值函数近似者。

在这个例子中,一个离散的演员政策与离散行动空间使用强化训练算法(没有基线)。关于加强算法的更多信息,请参阅政策梯度代理

解决随机发生器再现性的种子。

rng (0)

有关函数的更多信息你可以使用自定义训练,明白了功能定制培训

环境

对于这个示例,强化学习策略训练在一个离散cart-pole环境。在这种环境下目标是平衡极运用部队(操作)在购物车。创建环境使用rlPredefinedEnv函数。

env = rlPredefinedEnv (“CartPole-Discrete”);

从环境中提取观测和操作规范。

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

获得观测的数量(numObs)和行为(numAct)。

numObs = obsInfo.Dimension (1);numAct = actInfo.Dimension (1);

这个环境的更多信息,请参阅负载预定义的控制系统环境

政策

强化学习策略在本例中是一个相关联行为随机政策。它是由一个深层神经网络,其中包含表示fullyConnectedLayer,reluLayer,softmaxLayer层。这个网络输出为每个离散行动在当前观测概率。的softmaxLayer确保演员输出概率值在[0,1],所有概率之和为1。

为演员创造深层神经网络。

actorNetwork = [featureInputLayer (numObs) fullyConnectedLayer (24) reluLayer fullyConnectedLayer (24) reluLayer fullyConnectedLayer (2) softmaxLayer);

转换为dlnetwork

actorNetwork = dlnetwork (actorNetwork)
actorNetwork = dlnetwork属性:层:x1 nnet.cnn.layer.Layer[7]连接:[6 x2表]可学的:[6 x3表)状态:[0 x3表]InputNames:{“输入”}OutputNames: {“softmax”}初始化:1观点总结总结。

创建一个使用一个演员rlDiscreteCategoricalActor对象。

演员= rlDiscreteCategoricalActor (actorNetwork obsInfo actInfo);

加速梯度计算的演员。

演员=加速(演员,真的);

创建优化器使用rlOptimizerrlOptimizerOptions函数。

actorOpts = rlOptimizerOptions (LearnRate = 1依照);actorOptimizer = rlOptimizer (actorOpts);

培训的设置

配置培训使用以下选项:

  • 设置培训持续最多5000集,每集持续最多250步。

  • 计算折扣奖励,选择折现系数为0.995。

  • 终止培训达到的最大数量集后或当奖励在100集平均达到220的价值。

numEpisodes = 5000;maxStepsPerEpisode = 250;discountFactor = 0.995;aveWindowSize = 100;trainingTerminationValue = 220;

创建一个向量来存储每个训练集的累积奖励。

episodeCumulativeRewardVector = [];

创建一个图来可视化使用培训hBuildFigurehelper函数。

[trainingPlot, lineReward lineAveReward] = hBuildFigure;

自定义训练循环

自定义训练循环的算法如下。每集:

  1. 重置环境。

  2. 创建缓冲区来存储信息:经验观察,行动,和奖励。

  3. 生成的经验,直到终端条件发生。,评估政策的行为,这些行为适用于环境,并获得结果的观察和回报。存储操作、观察和奖励在缓冲区。

  4. 收集数据作为训练一批经验。

  5. 计算集蒙特卡罗返回,这是折现未来的回报。

  6. 计算损失函数的梯度对政策参数。

  7. 使用计算梯度更新政策。

  8. 更新培训可视化。

  9. 如果政策充分训练终止培训。

%使培训可视化情节。设置(trainingPlot,可见=“上”);%训练集的最大数量的政策或直到平均水平%奖励表明政策充分训练。episodeCt = 1: numEpisodes% 1。重置环境这一事件的开始奥林匹克广播服务公司=重置(env);episodeReward = 0 (maxStepsPerEpisode, 1);% 2。创建缓冲区来存储经验。每个缓冲区的尺寸%必须如下。%为观察缓冲%:% numberOfObservations x numberOfObservationChannels batchSize%%的行动缓冲区:% numberOfActions x numberOfActionChannels batchSize%%奖励缓冲区:% 1 x batchSize%observationBuffer = 0 (numObs 1 maxStepsPerEpisode);actionBuffer = 0 (numAct 1 maxStepsPerEpisode);maxStepsPerEpisode rewardBuffer = 0 (1);% 3。最大的步骤数生成的经验%集或直到到达终端条件。stepCt = 1: maxStepsPerEpisode%计算使用政策基于当前操作%的观察。action = getAction(演员,{奥林匹克广播服务公司});%操作适用于环境和获得结果%的观察和奖励。[nextObs,奖励,结束]=步骤(env,行动{1});%存储操作,观察,并奖励经验缓冲区。observationBuffer (:,:, stepCt) =奥林匹克广播服务公司;actionBuffer (:,:, stepCt) ={1}行动;rewardBuffer (:, stepCt) =奖励;episodeReward (stepCt) =奖励;奥林匹克广播服务公司= nextObs;如果终端条件达到%停止。如果结束打破;结束结束% 4。创造训练数据。培训执行使用批处理数据。的%批大小等于集的长度。batchSize = min (stepCt maxStepsPerEpisode);observationBatch = observationBuffer (:: 1: batchSize);actionBatch = actionBuffer (:: 1: batchSize);rewardBatch = rewardBuffer (:, 1: batchSize);%计算贴现未来的回报。batchSize discountedReturn = 0 (1);t = 1: batchSize G = 0;k = t: batchSize G = G + discountFactor ^(前提)* rewardBatch (k);结束discountedReturn (t) = G;结束% 5。组织数据传递损失函数。lossData。batchSize = batchSize;lossData。actInfo = actInfo;lossData。actionBatch = actionBatch;lossData。discountedReturn = discountedReturn;% 6。的梯度计算损失的政策%的参数。@actorLossFunction actorGradient =梯度(演员,{observationBatch}, lossData);% 7。使用计算梯度更新演员网络。(演员,actorOptimizer) =更新(actorOptimizer、演员、actorGradient);% 8。更新培训可视化。episodeCumulativeReward =总和(episodeReward);episodeCumulativeRewardVector =猫(2episodeCumulativeRewardVector episodeCumulativeReward);movingAveReward = movmean (episodeCumulativeRewardVector,aveWindowSize, 2);addpoints (lineReward episodeCt episodeCumulativeReward);addpoints (lineAveReward、episodeCt movingAveReward(结束));drawnow;% 9。终止培训是否足够训练网络。如果马克斯(movingAveReward) trainingTerminationValue打破结束结束

{“字符串”:“图车杆定制培训包含一个坐标轴对象。坐标轴对象标题训练进展包含2 animatedline类型的对象。这些对象代表累积奖励,平均回报。”、“特克斯”:“培训进展”,“乳胶”:[]}

模拟

训练后,模拟训练的政策。

在仿真之前,重置环境。

奥林匹克广播服务公司=重置(env);

支持环境的可视化,这是每次更新环境阶跃函数。

情节(env)

为每个模拟步骤,执行以下操作。

  1. 被抽样的操作策略使用getAction函数。

  2. 步骤使用获得的环境行动的价值。

  3. 如果一个终端条件达到终止。

stepCt = 1: maxStepsPerEpisode%根据培训政策选择行动action = getAction(演员,{奥林匹克广播服务公司});%一步环境[nextObs,奖励,结束]=步骤(env,行动{1});%检查边界条件如果结束打破结束奥林匹克广播服务公司= nextObs;结束

{“字符串”:“图车杆可视化工具包含一个坐标轴对象。坐标轴对象包含6行类型的对象,多边形。“,”泰克斯”:[],“乳胶”:[]}

功能定制培训

获得行动和价值函数对于给定的观察从强化学习工具箱政策和价值函数近似者,您可以使用以下功能。

  • getValue——获得估计国家或政府行动价值函数值。

  • getAction——从一个演员获得行动基于当前观察。

  • getMaxQValue——获得估计最大政府行动值函数离散核反应能量估计值。

如果你的政策或价值函数近似者是一个递归神经网络,即神经网络与至少一个层,隐藏的状态信息,前面的函数可以返回当前网络状态。您可以使用以下功能语法获取和设置的状态估计值。

  • 国家= getState(批评)——获得的状态估计值评论家

  • newCritic =设置状态(oldCritic状态)——设置的状态估计值newCritic,并返回结果oldCritic

  • newCritic = resetState (oldCritic)——重置所有状态的值oldCritic为零并返回结果newCritic

你可以获取和设置的可学的参数近似者使用getLearnableParameterssetLearnableParameters函数,分别。

除了这些功能,您可以使用梯度,优化,syncParameters函数来设置参数和计算梯度政策和价值函数近似者。

梯度

梯度函数的梯度计算近似者损失函数。你可以计算不同的梯度。例如,计算梯度的近似者输出的输入,使用以下语法。

研究生=梯度(演员,“出力”inputData)

在这里:

  • 演员是一个政策或价值函数近似者对象。

  • inputData包含输入通道的值的估计值。

  • 研究生包含计算梯度。

更多的信息,在MATLAB命令行中,键入帮助rl.function.AbstractFunction.gradient

syncParameters

syncParameters功能更新可学的一项政策或价值函数的参数的估计值的基础上的另一个接近者。这个函数是用于更新目标演员或评论家接近者,作为DDPG代理完成。两个近似者之间的同步参数值,使用以下语法。

newTargetApproximator = syncParameters (oldTargetApproximator sourceApproximator smoothFactor)

在这里:

  • oldTargetApproximator是一种政策或参数值函数近似者对象 θ

  • sourceApproximator是一种政策或价值函数近似者对象与相同的结构oldTargetRep,但与参数 θ

  • smoothFactor是一个平滑因子( τ )更新。

  • newTargetApproximator有相同的结构oldRep,但它的参数 θ = τ θ + ( 1 - - - - - - τ ) θ

损失函数

加强算法的损失函数的产品折扣奖励和政策的日志,总结所有的时间步骤。定制培训的折扣奖励计算循环必须调整大小以使其兼容乘法的政策。第一个输入参数必须是一个细胞功能返回的数组的评价函数的近似者对象。有关更多信息,请参见的描述outData评估。第二、可选的输入参数包含额外的数据,可能需要的梯度计算。

函数损失= actorLossFunction(政策、lossData)政策={1}政策;%创建行动指示矩阵。batchSize = lossData.batchSize;Z = repmat (lossData.actInfo.Elements ', 1, batchSize);actionIndicationMatrix = lossData.actionBatch (:,) = = Z;%调整折扣返回政策的规模。G = actionIndicationMatrix。* lossData.discountedReturn;G =重塑(G,大小(政策);%轮任何政策价值低于每股收益,每股收益。政策(政策< eps) =每股收益;%计算损失。损失=总和(G。*日志(政策),“所有”);结束

Helper函数

以下培训辅助函数创建一个图可视化。

函数[trainingPlot, lineReward lineAveReward] = hBuildFigure () plotRatio = 16/9;trainingPlot =图(可见=“关闭”,HandleVisibility =“关闭”,NumberTitle =“关闭”,Name =“车杆定制培训”);trainingPlot.Position (3) = plotRatio * trainingPlot.Position (4);甘氨胆酸ax = (trainingPlot);lineReward = animatedline (ax);lineAveReward = animatedline (ax,颜色=“r”、线宽= 3);包含(ax,“集”);ylabel (ax,“奖励”);传奇(ax,“累积奖励”,“平均回报”,位置=“西北”)标题(ax,“训练发展”);结束

另请参阅

相关的话题