创建环境和强化学习智能体后,您可以使用训练功能在环境中训练智能体。 要配置您的训练,请使用rlTrainingOptions函数。 例如,创建训练选项集opt,并在环境env中训练智能体。
opt = rlTrainingOptions(...
'MaxEpisodes',1000,...
'MaxStepsPerEpisode',1000,...
'StopTrainingCriteria',"AverageReward",...
'StopTrainingValue',480);
trainStats = train(agent,env,opt);
有关创建智能体的更多信息,请参见强化学习智能体。 有关创建环境的更多信息,请参见创建用于强化学习的MATLAB环境和创建用于强化学习的Simulink环境。
训练随着训练的进行而更新智能体。 要保留原始智能体参数以供以后使用,请将智能体保存到MAT文件中。
save("initialAgent.mat","agent")
当您在rlTrainingOptions对象的StopTrainingCriteria和StopTrainingValue选项中指定的条件得到满足时,训练将自动终止。 要手动终止进行中的训练,请键入Ctrl + C,或者在“强化学习情节管理器”中单击“停止训练”。 由于Train在每个情节上都会更新智能体,因此您可以通过再次调用train(agent,env,trainOpts)来恢复训练,而不会丢失在第一次训练中学习到的训练参数。
通常,训练执行以下步骤。
初始化智能体。
对于每个episode:
a.重置环境。
b.从环境中获取初始观测值 s 0 s_0 s0。
c.计算初始操作 a 0 = μ ( s 0 ) a_0 =μ(s_0) a0=μ(s0),其中 μ ( s ) μ(s) μ(s)是当前策略。
d.将当前操作设置为初始操作 ( a ← a 0 ) (a←a_0) (a←a0),并将当前观察值设置为初始观察值 ( s ← s 0 ) (s←s_0) (s←s0)。
e.在episode还没有结束或终止时,请执行以下步骤。
将动作a应用于环境并获得下一个观察值s’'和奖励r。
从经验集 ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s′)中学习。
计算下一个动作 a ′ = μ ( s ′ ) a'=μ(s') a′=μ(s′)。
用下一个动作 ( a ← a ′ ) (a←a') (a←a′)更新当前动作,并用下一个观测值 ( s ← s ′ ) (s←s') (s←s′)更新当前观察。
如果满足环境中定义的终止条件,则终止情节。
如果满足训练终止条件,请终止训练。 否则,开始下一轮训练。
软件如何执行这些步骤的细节取决于智能体和环境的配置。 例如,如果您配置了环境,则在每个episode开始时重置环境可以包括随机化初始状态值。 有关智能体及其训练算法的更多信息,请参阅强化学习智能体。
默认情况下,调用训练功能会打开“强化学习情节管理器”,您可以通过它直观地看到训练进度。 情节管理器图显示每个情节的奖励(EpisodeReward)和运行平均奖励值(AverageReward)。 此外,对于有评论者的智能体,该图显示了评论者在每个情节开始时对长期奖励折价的估计(EpisodeQ0)。 情节管理器还显示各种情节和训练统计数据。 您还可以使用训练功能返回剧情节和训练信息。
对于有评论家的智能体,根据对环境的初步观察,第 Q 0 Q0 Q0集是每个情节开始时长期折扣奖励的估计。 随着训练的进行,如果评论家的设计很好。 如上图所示,情节 Q 0 Q0 Q0接近真实的长期折扣奖励。
要关闭“强化学习情节管理器”,请将rlTrainingOptions的“绘图”选项设置为“none”。
在训练期间,您可以保存满足在rlTrainingOptions对象的SaveAgentCriteria和SaveAgentValue选项中指定的条件的候选智能体。 例如,即使尚未满足终止训练的总体条件,您也可以保存任何情节奖励超过一定值的智能体。 例如,当情节奖励大于100时,保存智能体。
opt = rlTrainingOptions('SaveAgentCriteria',"EpisodeReward",'SaveAgentValue',100');
训练将保存的智能体存储在使用rlTrainingOptions的SaveAgentDirectory选项指定的文件夹中的MAT文件中。 保存的智能体可能有用,例如,测试在长时间运行的训练过程中生成的候选智能体。 有关保存条件和保存位置的详细信息,请参见rlTrainingOptions。
训练完成后,您可以使用保存功能从MATLAB®工作区中保存最终的训练后的智能体。 例如,将智能体myAgent保存到当前工作目录中的文件finalAgent.mat。
save(opt.SaveAgentDirectory + "/finalAgent.mat",'agent')
默认情况下,保存DDPG和DQN智能体时,不保存体验缓冲区数据。 如果您打算进一步训练您保存的智能体,则可以以以前的经验缓冲区为起点开始训练。 在这种情况下,请将SaveExperienceBufferWithAgent选项设置为true。 对于某些智能体,例如具有较大经验缓冲区和基于图像的观察结果的智能体,保存经验缓冲区所需的内存很大。 在这些情况下,必须确保有足够的内存可用于已保存的智能体。
您可以通过运行并行训练模拟来加速训练智能体。 如果您具有Parallel Computing Toolbox™软件,则可以在多核计算机上运行并行仿真。 如果您具有MATLAB Parallel Server™软件,则可以在计算机群集或云资源上运行并行仿真。
使用并行计算训练智能体时,主机客户端会将智能体和环境的副本发送给每个并行工作器。 每个工作人员都会在环境中模拟智能体,然后将其模拟数据发送回主机。 主机智能体从工作人员发送的数据中学习,并将更新的策略参数发送回工作人员。
要创建由N个工作程序组成的并行池,请使用以下语法。
pool = parpool(N);
如果未使用parpool(并行计算工具箱)创建并行池,则训练功能将使用默认的并行池首选项自动创建一个并行池。 有关指定这些首选项的更多信息,请参见指定并行首选项(并行计算工具箱)。
对于off-policy智能体(例如DDPG和DQN代理),请勿使用所有核心进行并行训练。 例如,如果您的CPU有六个核心,请使用四个。 这样做为主机客户端提供了更多资源,以根据工作者发回的经验来计算梯度。 当对工作者计算梯度时,对于诸如PG和AC智能体这样的on-policy智能体,没有必要限制工作者的数量。
有关将您的训练配置为使用并行计算的更多信息,请参见rlTrainingOptions中的UseParallel和ParallelizationOptions选项。
为了从并行计算中受益,与将体验发送回主机时的参数优化相比,用于模拟环境的计算成本必须相对较高。 如果环境模拟的成本还不够高,则工作人员会在等待主机学习并发送回更新的参数的同时闲置。
当从工作者那里发回经验时,如果环境步复杂度与学习复杂度之比(R)大,则可以提高样本效率。 如果环境可以快速模拟(R很小),则您不太可能从基于经验的并行化中获得任何好处。 如果环境的模拟成本很高,但学习的成本也很高(例如,如果小批量生产的尺寸很大),那么您也不太可能提高样品效率。 但是,在这种情况下,对于off-policy 智能体,您可以减小最小批处理大小以使R更大,从而提高采样效率。
有关在MATLAB中使用并行计算训练代理的示例,请参见训练AC代理使用并行计算来平衡料车系统。 有关在Simulink®中使用并行计算训练智能体的示例,请参阅使用并行计算训练DQN智能体以保持车道。
将深层神经网络函数逼近器用于行动者或评论者表示时,您可以通过在GPU而非CPU上执行表示操作来加快训练速度。 为此,请将UseDevice选项设置为“ gpu”。
opt = rlRepresentationOptions('UseDevice',"gpu");
性能提高的程度取决于您的特定应用程序和网络配置。
要验证您训练后的智能体,您可以使用sim函数在训练环境中模拟智能体。 要配置模拟,请使用rlSimulationOptions。
验证智能体时,请考虑检查智能体如何处理以下内容:
更改模拟初始条件—要更改模型初始条件,请修改环境的重置功能。 有关重置函数的示例,请参见使用自定义函数创建MATLAB环境和从模板创建自定义MATLAB环境和创建用于强化学习的Simulink环境。
训练和模拟环境动力学之间的不匹配—要检查此类不匹配,请以与创建训练环境相同的方式创建测试环境,并修改环境行为。
与并行训练一样,如果您具有Parallel Computing Toolbox软件,则可以在多核计算机上运行多个并行模拟。 如果您具有MATLAB Parallel Server软件,则可以在计算机群集或云资源上运行多个并行模拟。 有关配置模拟以使用并行计算的更多信息,请参见rlSimulationOptions中的UseParallel和ParallelizationOptions。
如果您的训练环境实现了plot方法,则可以在训练和模拟过程中可视化环境行为。 如果在训练或模拟之前调用plot(env),其中env是您的环境对象,则可视化会在训练过程中进行更新,以使您可以直观地观察每个情节或模拟的进度。
使用并行计算训练或模拟智能体时,不支持环境可视化。
对于自定义环境,必须实现自己的绘图方法。 有关使用绘图功能创建自定义环境的更多信息,请参见从模板创建自定义MATLAB环境。