从系列:强化学习
布莱恩·道格拉斯MathWorks
本视频解决了在生产系统中使用强化学习时遇到的一些挑战,并提供了一些缓解这些挑战的方法。即使没有直接的方法来解决你将面临的一些挑战,至少它会让你思考它们。
本视频将介绍验证学到的解决方案、确定故障位置和手动修复策略的困难。它将展示一些变通措施,使政策更加稳健,使整个系统更加安全。最后,它将展示如何使用强化学习来学习传统控制系统中的参数,以及为什么,目前,这可以是两个世界的最佳。
本系列的前四个视频介绍了强化学习的伟大之处,以及如何使用它来解决一些真正困难的控制问题。所以你可能会有这样的想法,你可以建立一个环境,在其中放置一个RL代理,然后让计算机解决你的问题,而你去喝杯咖啡或其他什么。不幸的是,即使你建立了一个完美的代理和一个完美的环境然后学习算法收敛在一个解决方案上,这种方法仍然有我们需要讨论的缺点。所以在这个视频中,我将解决一些RL可能存在的不明显的问题,并尝试提供一些方法来缓解它们。即使没有直接的方法来解决你将面临的一些挑战,至少它会让你思考它们。让我们开始吧。我是Brian,欢迎来到MATLAB技术讲座。
在本视频中,我们要解决的问题归结为两个主要问题:第一,一旦你有了一个学习过的策略,如果它不太完美,有没有办法手动调整它?第二个问题是你怎么知道这个解决方案会起作用呢?
让我们从第一个问题开始。为了回答这个问题,让我们假设我们已经学习了一个可以让机器人用两条腿走路的策略,我们准备将这个静态策略部署到目标硬件上。想想这个政策在数学上是什么。它是由一个神经网络组成的可能有成千上万的权重,偏差和非线性激活函数。这些值和网络结构的结合创建了一个复杂的功能,将高级观察映射到低级操作。
对于设计者来说,这个函数本质上是一个黑盒子。我们可能对这个函数的作用有一种直观的感觉。你知道将观察转化为行动的数学。我们甚至可以理解这个网络所识别的一些隐藏特征。然而,我们不知道任何给定权重或偏差值背后的原因。如果政策不符合规范或者如果工厂或其他运行环境发生了变化,你如何调整政策来解决这个问题?你改变了哪个权重或偏差?问题是,使问题更容易解决的东西——即把所有困难的逻辑压缩到一个黑盒函数——却使我们的最终解决方案变得难以理解。由于人类没有精心设计这个功能,也不知道它的每一点,因此很难手动定位问题区域并修复它们。
现在,有活跃的研究试图推动可解释人工智能的概念。这是一种思想,你可以设置你的网络,使它可以容易地理解和审计的人。然而,目前,大多数rl生成的策略仍然被归类为黑盒,设计师无法解释为什么输出是这样的。因此,至少在目前,我们需要学习如何处理这种情况。
相比之下,传统设计的控制系统通常有一个带有环路和级联控制器的层次结构,每个控制器的设计目的是控制系统的一个非常特定的动态质量。想想如何从附属物长度或运动常数等物理属性中获得增益。如果物理系统发生变化,改变这些增益是多么简单。
此外,如果系统的行为方式与您预期的不一样,那么使用传统设计,您通常可以将问题定位到特定的控制器或回路,并在那里进行分析。您可以隔离控制器并独立地测试和修改它,以确保它在指定的条件下执行,然后将该控制器带回更大的系统中。
这真的很难做到,当解决方案是一个单一的神经元集合,权重和偏见。所以,如果我们最终制定了一个不太正确的政策,而不是能够修复政策中冒犯的部分,我们必须重新设计代理人或环境模型,然后再次训练它。这个重新设计、培训和测试,再重新设计、培训和测试的循环可能很耗时。
但这里有一个更大的问题,它超越了训练一名特工所需的时间。这取决于环境模型所需的准确性。
问题是,我们很难建立一个足够真实的模型——一个将系统中所有重要的动力学以及干扰和噪声都考虑在内的模型。在某种程度上,它不会完美地反映现实。这就是为什么我们仍然需要做物理测试而不是仅仅用模型验证一切。
现在,如果我们用这个不完美的模型来设计一个传统的控制系统,那么我们的设计就有可能不能在真正的硬件上完美地工作,我们就必须做出改变。因为我们能够理解我们所创造的功能,所以我们能够调整控制器并对系统做出必要的调整。
然而,有了神经网络政策,我们就没有这种奢侈了。由于我们不能真正建立一个完美的模型,我们用它做的任何训练都不太正确。因此,唯一的选择是在物理硬件上完成对代理的培训。正如我们在之前的视频中讨论过的,这本身就具有挑战性。
减小这个问题规模的一个好方法是缩小RL代理的范围。就像我在上一个视频中展示的那样,我们可以将传统控制器封装在RL代理中,从而只解决一个非常特殊的问题,而不是学习一个采用最高级别的观察并命令最低级别的操作的策略。通过使用RL代理来瞄准更小的问题,我们将无法解释的黑盒子缩小到用传统方法难以解决的系统部分。
缩小代理显然不能解决我们的问题,它只是降低了它的复杂性。政策更加集中,所以更容易理解它在做什么,培训时间减少了,环境不需要包含那么多的动态。然而,即使这样,我们仍然有第二个问题:如何知道RL代理无论大小都能工作?例如,对于不确定性,它是否稳健?有稳定的保证吗?你能验证系统是否符合规格要求吗?
为了回答这个问题,让我们再次从如何验证一个传统的控制系统开始。最常见的方法之一就是通过测试。就像我们说过的,这是使用模拟和模型以及物理硬件进行测试,我们验证系统满足规格,也就是说,它做了正确的事情——跨越整个状态空间,在存在干扰和硬件故障的情况下。
我们可以使用rl生成的策略进行相同级别的验证测试。同样,如果我们发现了问题,我们必须重新培训政策来解决它,但测试政策似乎是类似的。然而,有一些相当重要的差异使测试神经网络策略变得困难。
首先,对于一个学习过的策略,很难预测系统在一种状态下如何基于它在另一种状态下的行为。例如,如果我们训练一个代理来控制电机的速度,让它学习从0到100转的步进输入,我们不能确定,没有测试,相同的策略将遵循从0到150转的类似的步进输入。即使电机呈线性运动,这也是正确的。这个微小的变化可能会导致一组完全不同的神经元被激活,并产生一个不希望的结果。除非进行测试,否则我们不会知道。
在传统的方法中,如果电机的行为是线性的,那么我们可以保证在线性范围内的所有步进输入都是相似的。我们不需要单独运行每一个测试。因此,我们必须使用RL策略运行的测试数量通常比使用传统方法要多。
神经网络策略难以通过测试进行验证的第二个原因是输入空间可能非常大且难以定义。记住,深度神经网络的一个好处是,它们可以处理丰富的传感器,比如摄像头的图像。例如,如果您试图验证您的系统可以使用图像来感知障碍,请考虑障碍可能以多少种不同的方式出现。如果图像有数千个像素,每个像素的范围从0到255,考虑一下有多少个数字的排列,以及测试所有数字是多么的不可能。就像阶跃输入的例子一样,仅仅因为你的网络学会了在光照条件、方向和比例下识别图像的一部分中的障碍,它不能保证它在图像中以任何其他方式工作。
我想提出的最后一个困难是形式验证。这些方法包括通过提供正式的证明而不是使用测试来保证满足某些条件。
事实上,通过正式的验证,我们可以断言一个规范将被满足,即使我们不能通过测试得出这个断言。例如,使用电机速度控制器,我们测试了从0到100 RPM和从0到150的步进输入。但其他人呢,比如50到300人,75到80人?即使我们取样了10000种速度组合,也不能保证每个组合都有效,因为我们不能测试所有的组合。它只是降低了风险。但是,如果我们有一种方法来检查代码或执行一些覆盖整个范围的数学验证,那么不能测试每个组合就没有关系了。我们仍然相信它们会奏效。
例如,如果在软件中执行信号的绝对值,我们不需要测试以确保信号总是正的。我们可以通过检查代码来验证它,并证明条件总是满足的。其他类型的形式验证包括计算稳健性和稳定性因素,如增益和相位裕度。
但对于神经网络来说,这种形式的验证更加困难,在某些情况下甚至是不可能的。由于我前面解释过的原因,很难检查代码并保证它的行为。我们也没有方法来确定它的稳健性或稳定性,我们也无法推断如果传感器或驱动器失效会发生什么。这一切都回到了我们无法解释函数在内部做什么的事实。
好的,这些就是学习神经网络使设计变得困难的一些方式。很难在一系列规格中验证它们的性能。如果系统确实失败了,就很难找出失败的根源,然后,即使你能找到根源,也很难手动调整参数或结构,只剩下重新设计和重新开始训练过程的唯一选择。
但我不想破坏你们对强化学习作为生产系统的有用工具的信心,因为,尽管说了这么多,有办法建立学习,这样在存在不确定性的情况下产生的政策会更加稳健。还有一些方法可以提高安全性,并使强化学习成为生产系统的一个可行选择。我们甚至可以用强化学习来解决一个稍微不同的问题,一个从一开始就避免了很多这些问题的问题。所以让我们以积极的方式结束这段视频并讨论这三个方面。我们将从使政策更加稳健开始。
尽管我们不能量化鲁棒性,但我们可以通过在agent学习过程中主动调整环境参数来提高系统的鲁棒性。
例如,对于我们的步行机器人,我们假设制造公差导致关节电机的最大扭矩在2到2.1纳米之间。我们将制造几十个这样的机器人,我们想要学习一种适用于所有机器人的单一政策,以适应这些变化。我们可以通过在每次仿真运行时调整电机转矩值的环境中训练代理来实现这一点。我们可以在每一段开始时统一选择一个不同的最大扭矩值,这样随着时间的推移,策略将收敛到对这些制造公差具有鲁棒性的值。通过以这种方式调整所有重要的参数——比如附体长度、系统延迟、障碍和参考信号等等——我们将最终得到一个整体稳健的设计。我们可能不能要求一个特定的增益或相位裕度,但我们将有更多的信心,结果可以在操作状态空间内处理更大的范围。
这解决了健壮性问题,但仍然不能保证策略在硬件上做正确的事情。我们不希望硬件损坏,或者有人因为不可预测的政策而受伤。所以我们还需要提高系统的整体安全性。我们提高安全性的一种方法是确定你希望系统避免的情况,然后在政策之外建立软件来监控这种情况。如果监控触发,那么就限制系统,或者接管系统,在它有机会造成破坏之前,将其置于某种安全模式中。这并不能阻止您部署一个危险的策略,但它将保护系统,让您了解它是如何失败的,并调整奖励和培训环境来解决这个失败。
增加健壮性和安全性的修复都是一种对我们学习神经网络策略的局限性的变通。然而,有一种方法可以使用强化学习,并且仍然能够利用作为传统架构的控制系统的鲁棒、安全、可变和可验证的结果。也就是简单地将它作为一个优化工具用于传统的控制系统。让我这么解释。想象一下,设计一个包含数十个嵌套循环和控制器的架构,每个循环和控制器都有几个增益。您可能会遇到这样一种情况,即您有100个或更多的个人增益值需要调整。您可以设置一个RL代理,以便一次性了解所有增益的最佳值,而不是手动调整每个增益。
代理将根据系统的表现以及获得这种表现所付出的努力而获得奖励然后这些行为将是系统中100个左右的收益。所以,当你开始训练时,在代理中随机初始化的神经网络会产生随机值,然后你会使用这些值来运行控制增益的模拟。现在很有可能第一集会产生一些垃圾结果,但在每一集之后,学习算法会对神经网络进行调整,使增益朝着增加回报的方向移动——也就是说,它提高了性能,降低了努力。
以这种方式使用强化学习的好处在于,一旦你掌握了一组最优控制增益,你就完成了;你不需要其他任何东西。我们不需要部署任何神经网络或验证它们或担心不得不改变它们。我们只需要将最终的静态增益值编码到系统中。通过这种方式,您仍然拥有一个传统架构的系统(一个可以在硬件上验证和手动调整的系统,就像我们习惯的那样),但是您使用强化学习优化选择的增益值填充它。这是一种两全其美的方法。
所以希望你们能看到强化学习对于解决困难的问题是非常强大的,而且它绝对值得学习并弄清楚如何将它与传统方法结合起来,以一种你对最终产品感到舒服的方式。在理解解决方案和验证它是否有效方面存在一些挑战,但正如我们所介绍的,我们现在确实有一些方法来解决这些挑战。
这是我想留给你们的想法。学习算法、MATLAB等RL设计工具、验证方法都在不断发展。我们离强化学习的全部潜能还很遥远。也许在不久的将来,它将成为所有复杂控制系统的首选设计方法。感谢收看本期视频。
如果你不想错过未来的Tech Talk视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制主题。下次见。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。