主要内容

强化学习培训代理进行简单的上下文土匪问题

这个例子展示了如何解决上下文土匪问题[1]用强化学习培训DQN和问代理。这些代理的更多信息,请参阅深Q-Network (DQN)代理q学习的代理

在上下文土匪问题,代理人选择一个动作给最初的观察(上下文),它接收一个奖励,这一事件终止。因此,代理行为不影响下一个观察。

上下文土匪hyperparameter等可用于各种应用程序调优,推荐系统,医疗,5 g通信。

下图展示了multi-armed强盗土匪和上下文是强化学习的特殊情况。

土匪问题,环境没有动力,所以奖励只是影响动作电流和(上下文强盗)当前观测(这些问题观察也称为上下文)。

奖励和观察都不受任何环境状态(或以前的行动或观察),所以环境不演变在时间维度,没有顺序的决策。发现的问题成为一个行动最大化当前奖励(给定一个上下文,如果存在)。单臂土匪问题只是multi-armed强盗的特殊情况问题的行动是一个标量,而不是一个向量。

环境

上下文强盗环境在这个例子中定义如下:

  • 观察(离散):{1,2}

上下文(初始观察)是随机采样。

公关 ( 年代 = 1 ) = 0 5 公关 ( 年代 = 2 ) = 0 5

  • 行动(离散):{1,2,3}

  • 奖励:

在这种环境下奖励是随机的。每一对观察和行动的概率定义如下。

1 年代 = 1 , 一个 = 1 公关 ( r = 5 | 年代 = 1 , 一个 = 1 ) = 0 3 公关 ( r = 2 | 年代 = 1 , 一个 = 1 ) = 0 7 2 年代 = 1 , 一个 = 2 公关 ( r = 10 | 年代 = 1 , 一个 = 2 ) = 0 1 公关 ( r = 1 | 年代 = 1 , 一个 = 2 ) = 0 9 3 年代 = 1 , 一个 = 3 公关 ( r = 3 5 | 年代 = 1 , 一个 = 3 ) = 1

4 年代 = 2 , 一个 = 1 公关 ( r = 10 | 年代 = 2 , 一个 = 1 ) = 0 2 公关 ( r = 2 | 年代 = 2 , 一个 = 1 ) = 0 8 5 年代 = 2 , 一个 = 2 公关 ( r = 3 | 年代 = 2 , 一个 = 2 ) = 1 6 年代 = 2 , 一个 = 3 公关 ( r = 5 | 年代 = 2 , 一个 = 3 ) = 0 5 公关 ( r = 0 5 | 年代 = 2 , 一个 = 3 ) = 0 5

请注意,代理不知道这些分布。

  • 完成信号:由于这是一个上下文土匪问题,每集只有一个步骤。因此,完成信号总是1。

创建环境接口

创建上下文强盗环境使用ToyContextualBanditEnvironment位于这个示例文件夹。

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

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

rng (1)

创建DQN代理

创建一个DQN代理使用一个默认的网络结构rlAgentInitializationOptions

agentOpts = rlDQNAgentOptions (UseDoubleDQN = false,TargetSmoothFactor = 1,TargetUpdateFrequency = 4,MiniBatchSize = 64);agentOpts.EpsilonGreedyExploration。EpsilonDecay = 0.0005;initOpts = rlAgentInitializationOptions (NumHiddenUnit = 16);DQNagent = rlDQNAgent (obsInfo actInfo、initOpts agentOpts);

火车代理

培训代理商,首先指定培训选项。对于这个示例,使用以下选项:

  • 火车3000集。

  • 由于这是一个上下文土匪问题,每集只有一个步骤,设置MaxStepsPerEpisode1

有关更多信息,请参见rlTrainingOptions

火车代理使用火车函数。节省时间在运行这个例子中,加载一个pre-trained代理设置doTraining。训练自己代理,集doTraining真正的

MaxEpisodes = 3000;trainOpts = rlTrainingOptions (MaxEpisodes = MaxEpisodes,MaxStepsPerEpisode = 1,Verbose = false,情节=“训练进步”,StopTrainingCriteria =“EpisodeCount”,StopTrainingValue = MaxEpisodes);doTraining = false;如果doTraining%火车代理env, trainingStats =火车(DQNagent trainOpts);其他的%加载pre-trained代理的例子负载(“ToyContextualBanditDQNAgent.mat”,“DQNagent”)结束

验证DQN代理

假设你知道奖励的分配,你可以计算出最优的行动。验证代理的性能通过比较这些最优行动选择的操作代理。首先,计算真正的预期回报与真正的分布。

1。每个行动的预期回报s = 1如下。

如果 一个 = 1 E ( R ] = 0 3 * 5 + 0 7 * 2 = 2 9 如果 一个 = 2 E ( R ] = 0 1 * 10 + 0 9 * 1 = 1 9 如果 一个 = 3 E ( R ] = 3 5

因此,最优行动是3 s = 1时。

2。每个行动的预期回报s = 2如下。

如果 一个 = 1 E ( R ] = 0 2 * 10 + 0 8 * 2 = 3 6 如果 一个 = 2 E ( R ] = 3 0 如果 一个 = 3 E ( R ] = 0 5 * 5 + 0 5 * 0 5 = 2 75年

因此,最优行动是1当s = 2。

有足够的抽样,q值应接近真正期望的奖励。想象真正的预期回报。

ExpectedRewards = 0 (2、3);ExpectedRewards (1,1) = 0.3 * 5 + 0.7 * 2;ExpectedRewards (1、2) = 0.1 * 10 + 0.9 * 1;ExpectedRewards (1、3) = 3.5;ExpectedRewards (2, 1) = 0.2 * 10 + 0.8 * 2;ExpectedRewards (2, 2) = 3.0;ExpectedRewards (2、3) = 0.5 * 5 + 0.5 * 0.5;localPlotQvalues (ExpectedRewards“预期回报”)

图包含一个坐标轴对象。坐标轴对象与标题预期回报包含7对象类型的图像,文本。

现在,验证是否DQN代理学习最优行为。

如果状态是1,最佳的行动是3。

观察= 1;getAction (DQNagent、观察)
ans =1 x1单元阵列{[3]}

代理人选择最优行动。

如果状态是2,最优行动是1。

观察= 2;getAction (DQNagent、观察)
ans =1 x1单元阵列{[1]}

代理人选择最优行动。因此,DQN代理已经学会的最优行为。

接下来,比较核反应能量函数真正期望的奖励在选择最优的行动。

%得到评论家图(1)DQNcritic = getCritic (DQNagent);QValues = 0 (2、3);s = 1:2 QValues(年代:)= getValue (DQNcritic{年代});结束%可视化Q值localPlotQvalues (QValues“问价值观”)

图包含一个坐标轴对象。坐标轴对象标题Q值包含7对象类型的图像,文本。

学会了q值接近真实的预期回报计算。

创建q学习的代理

接下来,火车一个q学习的代理。创建一个q学习代理,首先创建一个表,并使用来自环境的观察和操作规范。

rng (1);%的再现性qTable = rlTable (obsInfo actInfo);评论家= rlQValueFunction (qTable obsInfo actInfo);选择= rlQAgentOptions;opt.EpsilonGreedyExploration。ε= 1;opt.EpsilonGreedyExploration。EpsilonDecay = 0.0005;Qagent = rlQAgent(评论家,选择);

火车q学习的代理

节省时间在运行这个例子中,加载一个pre-trained代理设置doTraining。训练自己代理,集doTraining真正的

doTraining = false;如果doTraining%培训代理。env, trainingStats =火车(Qagent trainOpts);其他的%加载pre-trained代理的例子。负载(“ToyContextualBanditQAgent.mat”,“Qagent”)结束

验证q学习的代理

状态为1时,最优行动是3。

观察= 1;getAction (Qagent、观察)
ans =1 x1单元阵列{[3]}

代理人选择最优行动。

当国家是2,最优行动是1。

观察= 2;getAction (Qagent、观察)
ans =1 x1单元阵列{[1]}

代理人选择最优行动。因此,q学习代理已经学会的最优行为。

接下来,比较核反应能量函数真正期望的奖励在选择最优的行动。

%得到评论家图(2)Qcritic = getCritic (Qagent);QValues = 0 (2、3);s = 1:2a = 1:3 QValues (,) = getValue (Qcritic, {}, {});结束结束%可视化Q值localPlotQvalues (QValues“问价值观”)

图包含一个坐标轴对象。坐标轴对象标题Q值包含7对象类型的图像,文本。

再一次,学会了q值接近真实的预期回报。确定性的Q值奖励,Q (s = 1 = 3)和Q (s = 2, = 2),是一样的真正的预期回报。注意对应的q值DQN网络学习,虽然接近,不一样的真实值。这是因为DQN使用神经网络代替表内部函数的估计值。

本地函数

函数localPlotQvalues (QValues titleText)%可视化Q值图;显示亮度图像(QValues [1,4]) colormap (“秋天”甘氨胆酸)标题(titleText) colorbar集(,“Xtick”1:3,“XTickLabel”,{“一个= 1”,“= 2”,“= 3”})集(gca,“Ytick”1:2,“YTickLabel”,{“s = 1”,“s = 2”})%值图像的阴谋x = repmat(1:大小(QValues, 2),大小(QValues, 1), 1);y = repmat(1:大小(QValues, 1),大小(QValues, 2), 1) ';QValuesStr = num2cell (QValues);QValuesStr = cellfun (@num2str QValuesStr UniformOutput = false);文本(x (:), y (:), QValuesStr, HorizontalAlignment =“中心”)结束

参考

[1]萨顿,理查德·S。,安德鲁·g·Barto。强化学习:介绍。第二版。自适应计算和机器学习。剑桥,麻萨诸塞州:麻省理工学院出版社,2018年。

另请参阅

应用程序

功能

对象

相关的例子

更多关于