在这个例子中,不再有明确的奖励,取而代之的是用目标和测量值的匹配程度作为成功的衡量。在这个无人机配送的例子中,具体的含义就是要最大化送货量,同时保证低电量时给电池充电。 如果我们的agent能够完美地预测未来每一步的测量值,我们就只需采用能使测量值最优化的行动策略。我们的目标允许我们在任意时间下指定在意的测量值。 对更复杂目标的规划 因为我们并不是像Q-learning中那样简单地预测一个标量的估计值,就可以对更复杂的目标进行规划。 假设我们构造一个测量值矢量[电量,配送数],如果我们希望最大化电池电量的同时忽略配送数,那么我们的目标就是[1,0],即意味着希望未来有一个正向的电量测量值同时忽略配送数。如果我们希望最大化包裹的配送数,开奖,那么目标就将是[0,1]。 目标是由我们制定的,而不是由环境或者网络决定的,因此在任何合适的时间步我们都可以改变它。 这样,我们就可以在电量低于一个阈值的时候(在本例中是30%),把目标从“最大化配送数”改为“最大化电量”。通过将目标和测量值以这种方式结合,我们现在可以灵活地调整agent在飞行过程中的行为。 这种做法与Q-learning是相冲突的,在Q-learning中Q值在训练后保持不变,因此只会有一种行为模式。 同时,这个新模式从多个方面改变了我们的神经网络。现在,网络的输入不再是状态s,而是测量值和目标;之前是输出Q值,现在我们网络的输出是一个形式为[测量值×行动×偏移]的预测张量。将总计预测未来改变和目标相乘,可以选择出随着时间变化能更好满足目标的行动: 这里∑p(s,m,g)表示网络随未来时序的总和,gT是目标矢量的转置。 我们可使用简单衰退损失来训练agent预测未来真实测量值的变化: 其中P(s,m,g,a)代表对于选定的行动网络的输出结果。 当把这些结合起来时,我们就得到了一个符合要求的agent。随后我们将会在TensorFlow下使用异步实现进行训练,相关代码地址如下: https://github.com/awjuliani/dfp/blob/master/DFP.ipynb 使用TensorFlow完成异步实现 在4个worker分别经历了10,000个训练episodes之后,我们的训练曲线如下图所示。 △包裹的配送数(左)以及每个episode中无人机移动的步数(右)随着无人机的变化。作者:Arthur Juliani 从每个episode中,无人机移动的步数不断接近100步,可以看出agent已经学会了在按照最优化路径运送货物的同时给自己充电。 需要注意的是,这里用的环境是从现实世界中的场景大幅简化得来的。这种格栏的世界是为了让让网络在较短的时间内完成训练、展示结果。而在真实复杂的场景中,无人机应会采用平滑连续的移动模式。 进一步推动这项技术 如果你可以使用更强大的计算资源,最好在OpenAI universe(https://universe.openai.com)中提供的这些更复杂的环境下尝试这项技术。 一个简单的改进就是把这里的全连接层改为卷积层从而提供一个更好的视频流编码器。而基础的结构应该是可拓展的。 我希望这篇教程为你提供了一些思路,比如说这类复合任务的问题可以通过在不同场景下设置不同目标的方式,从而用强化学习来完成。 这种设置多个目标的方法可能在很多情况下并不是最优解,但它能为实际中复杂任务的解决提供了一种新的思路。 这份教程由O’reilly和TensorFlow合作发表,作者Arthur Juliani在目前是俄勒冈大学博士生,在认知神经科学和深度学习的交叉领域进行研究。 原文地址:https://www.oreilly.com/ideas/reinforcement-learning-for-complex-goals-using-tensorflow (责任编辑:本港台直播) |