从系列:强化学习
布莱恩·道格拉斯,数学工厂
本视频解决了在生产系统中使用强化学习时遇到的一些挑战,并提供了一些缓解这些挑战的方法。即使没有直接的方法来解决你将面临的一些挑战,至少它会让你思考它们。
本视频将介绍验证学到的解决方案、确定故障位置和手动修复策略的困难。它将展示一些变通措施,使政策更加稳健,使整个系统更加安全。最后,它将展示如何使用强化学习来学习传统控制系统中的参数,以及为什么,目前,这可以是两个世界的最佳。
本系列的前四个视频介绍了强化学习的伟大之处,以及如何使用它来解决一些真正困难的控制问题。所以你可能会有这样的想法,你可以建立一个环境,在其中放置一个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 Nm之间。我们将要制造几十个这样的机器人,我们想为所有的机器人学习一个对这些变化有鲁棒性的单一策略。我们可以通过在每次运行模拟时调整电机扭矩值的环境中训练代理来实现这一点。我们可以在每次事件开始时在该范围内统一选择不同的最大扭矩值,以便随着时间的推移,该政策将收敛到对这些制造公差具有鲁棒性的程度。通过以这种方式调整所有重要参数,如附件长度、系统延迟、障碍物和参考信号等,我们最终将得到一个整体稳健的设计。我们可能无法要求特定的增益或相位裕度,但我们将更有信心,结果可以在操作状态空间内处理更大范围。
这解决了健壮性问题,但仍然不能保证策略在硬件上做正确的事情。我们不希望硬件损坏,或者有人因为不可预测的政策而受伤。所以我们还需要提高系统的整体安全性。我们提高安全性的一种方法是确定你希望系统避免的情况,然后在政策之外建立软件来监控这种情况。如果监控触发,那么就限制系统,或者接管系统,在它有机会造成破坏之前,将其置于某种安全模式中。这并不能阻止您部署一个危险的策略,但它将保护系统,让您了解它是如何失败的,并调整奖励和培训环境来解决这个失败。
增强鲁棒性和安全性的修复方法都是对我们学习神经网络策略局限性的一种变通方法。然而,有一种方法可以使用强化学习,并且仍然能够利用结果作为传统架构控制系统的鲁棒性、安全性、可更改性和可验证性。并且t只是将其用作传统体系结构控制系统的优化工具。让我这样解释。想象一下,设计一个具有数十个嵌套循环和控制器的体系结构,每个循环和控制器都有若干增益。最终,您可能会遇到一种情况,即您有100个或更多个单独的增益值需要调整。而不是尝试手动调整通过手工操作,您可以设置一个RL代理,一次为所有这些收益学习最佳值。
代理将因系统的性能以及为获得该性能所付出的努力而获得奖励,然后这些操作将是系统中的大约一百个收益。因此,当您开始训练时,代理中随机初始化的神经网络将只生成随机值,然后您将使用这些值来运行控制增益的模拟。现在,第一集很可能会产生一些垃圾结果,但在每集之后,学习算法会调整神经网络,使收益朝着增加回报的方向移动,也就是说,它会提高性能并降低努力。
以这种方式使用强化学习的好处在于,一旦你掌握了一组最优控制增益,你就完成了;你不需要其他任何东西。我们不需要部署任何神经网络或验证它们或担心不得不改变它们。我们只需要将最终的静态增益值编码到系统中。通过这种方式,您仍然拥有一个传统架构的系统(一个可以在硬件上验证和手动调整的系统,就像我们习惯的那样),但是您使用强化学习优化选择的增益值填充它。这是一种两全其美的方法。
所以希望你们能看到强化学习对于解决困难的问题是非常强大的,而且它绝对值得学习并弄清楚如何将它与传统方法结合起来,以一种你对最终产品感到舒服的方式。在理解解决方案和验证它是否有效方面存在一些挑战,但正如我们所介绍的,我们现在确实有一些方法来解决这些挑战。
这是我想留给你们的想法。学习算法、MATLAB等RL设计工具、验证方法都在不断发展。我们离强化学习的全部潜能还很遥远。也许在不久的将来,它将成为所有复杂控制系统的首选设计方法。感谢收看本期视频。
如果你不想错过未来的Tech Talk视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制主题。下次见。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。