主要内容

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

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

使用此工作流,您可以训练策略,使用下列政策和价值函数表示。

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

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

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日“名字”,“fc1”)reluLayer (“名字”,“relu1”)fullyConnectedLayer(24日“名字”,“取得”)reluLayer (“名字”,“relu2”)fullyConnectedLayer (2“名字”,“输出”)softmaxLayer (“名字”,“actionProb”));

创建一个使用一个演员表示rlStochasticActorRepresentation对象。

actorOpts = rlRepresentationOptions (“LearnRate”1 e - 3,“GradientThreshold”1);演员= rlStochasticActorRepresentation (actorNetwork,obsInfo actInfo,“观察”,“状态”,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。使用计算梯度更新演员网络。演员=优化(演员,actorGradient);% 8。更新培训可视化。episodeCumulativeReward =总和(episodeReward);episodeCumulativeRewardVector =猫(2episodeCumulativeRewardVector episodeCumulativeReward);movingAveReward = movmean (episodeCumulativeRewardVector,aveWindowSize, 2);addpoints (lineReward episodeCt episodeCumulativeReward);addpoints (lineAveReward、episodeCt movingAveReward(结束));drawnow;% 9。终止培训是否足够训练网络。如果马克斯(movingAveReward) trainingTerminationValue打破结束结束

模拟

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

在仿真之前,重置环境。

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

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

情节(env)

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

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

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

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

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

功能定制培训

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

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

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

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

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

  • 国家= getState(代表)——获得的状态表示代表

  • newRep =设置状态(oldRep状态)——设置的状态表示oldRep,并返回结果oldRep

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

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

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

梯度

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

研究生=梯度(代表,“出力”inputData)

在这里:

  • 代表对象是一个政策或价值函数表示。

  • inputData包含输入通道的值表示。

  • 研究生包含计算梯度。

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

优化

优化功能更新的可学的参数表示基于梯度计算。更新参数渐变,使用以下语法。

newRep =优化(oldRep,研究生)

在这里,oldRep是一个函数表示对象和政策或价值研究生包含梯度计算使用梯度函数。newRep有相同的结构oldRep,但其参数更新。

syncParameters

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

newTargetRep = syncParameters (oldTargetRep sourceRep smoothFactor)

在这里:

  • oldTargetRep是一种政策或参数值函数表示对象 θ

  • 代表是一个政策或价值函数表示对象与相同的结构oldTargetRep,但与参数 θ

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

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

损失函数

加强算法的损失函数的产品折扣奖励和政策的日志,总结所有的时间步骤。定制培训的折扣奖励计算循环必须调整大小以使其兼容乘法的政策。

函数损失= 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”,“关闭”,“名字”,“车杆定制培训”);trainingPlot.Position (3) = plotRatio * trainingPlot.Position (4);甘氨胆酸ax = (trainingPlot);lineReward = animatedline (ax);lineAveReward = animatedline (ax,“颜色”,“r”,“线宽”3);包含(ax,“集”);ylabel (ax,“奖励”);传奇(ax,“累积奖励”,的平均回报的,“位置”,“西北”)标题(ax,“训练发展”);结束

另请参阅

相关的话题