从系列:强化学习
Brian Douglas,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种速度组合,也不能保证每个组合都有效,因为我们不能测试所有的组合。它只是降低了风险。但是,如果我们有一种方法来检查代码或执行一些覆盖整个范围的数学验证,那么不能测试每个组合就没有关系了。我们仍然相信它们会奏效。
例如,如果在软件中执行该信号的绝对值,我们不必测试以确保信号将始终为正。我们可以通过检查代码并显示始终满足条件来验证它。其他类型的正式验证包括计算鲁棒性和稳定性因素,如增益和相位利润。
但对于神经网络来说,这种形式的验证更加困难,在某些情况下甚至是不可能的。由于我前面解释过的原因,很难检查代码并保证它的行为。我们也没有方法来确定它的稳健性或稳定性,我们也无法推断如果传感器或驱动器失效会发生什么。这一切都回到了我们无法解释函数在内部做什么的事实。
好的,所以这些是学习神经网络使设计变得困难的方法。很难在一系列规格上验证它们的性能。If the system does fail, it’s hard to pinpoint the source of the failure, and then, even if you can pinpoint the source, it’s hard to manually adjust the parameters or the structure, leaving you with the only option of redesigning and starting the training process over again.
但我不想破坏你们对强化学习作为生产系统的有用工具的信心,因为,尽管说了这么多,有办法建立学习,这样在存在不确定性的情况下产生的政策会更加稳健。还有一些方法可以提高安全性,并使强化学习成为生产系统的一个可行选择。我们甚至可以用强化学习来解决一个稍微不同的问题,一个从一开始就避免了很多这些问题的问题。所以让我们以积极的方式结束这段视频并讨论这三个方面。我们将从使政策更加稳健开始。
尽管我们不能量化鲁棒性,但我们可以通过在agent学习过程中主动调整环境参数来提高系统的鲁棒性。
例如,对于我们的步行机器人,我们假设制造公差导致关节电机的最大扭矩在2到2.1纳米之间。我们将制造几十个这样的机器人,我们想要学习一种适用于所有机器人的单一政策,以适应这些变化。我们可以通过在每次仿真运行时调整电机转矩值的环境中训练代理来实现这一点。我们可以在每一段开始时统一选择一个不同的最大扭矩值,这样随着时间的推移,策略将收敛到对这些制造公差具有鲁棒性的值。通过以这种方式调整所有重要的参数——比如附体长度、系统延迟、障碍和参考信号等等——我们将最终得到一个整体稳健的设计。我们可能不能要求一个特定的增益或相位裕度,但我们将有更多的信心,结果可以在操作状态空间内处理更大的范围。
这解决了鲁棒性,但它仍然没有给我们任何保证策略将对硬件做正确的事情。我们不想要的一件事是因为硬件因不可预测的政策而受到损害的损坏,或者有人受到伤害。因此,我们还需要增加系统的整体安全性。我们可以提高安全性是通过确定您希望系统避免的情况,无论如何,在策略范围内避免的情况,以及在监视这种情况的策略之外。如果该监视器触发,则在有机会造成损坏之前约束系统或接管并将其放入某种安全模式。这不会阻止您部署危险的政策,但它将保护系统,允许您了解它如何失败并调整奖励和培训环境以解决该故障。
提高稳健性和安全性的修复都是我们对学到的神经网络政策的局限性的替代方法。然而,有一种方法可以使用强化学习,并且仍然能够利用结果作为传统架构的控制系统的鲁棒,安全,可变的和可验证的结果。这是通过使用它作为传统架构控制系统的优化工具。让我以这种方式解释它。想象一下,用数十个嵌套环和控制器设计架构,每个架构都有几个收益。您最终可以使用100个或更多个人增益值来调整的情况。而不是尝试手动手动调整每次上涨,而是可以设置RL代理,以便一次为所有这些都是最佳值。
代理将根据系统的表现以及获得这种表现所付出的努力而获得奖励然后这些行为将是系统中100个左右的收益。所以,当你开始训练时,在代理中随机初始化的神经网络会产生随机值,然后你会使用这些值来运行控制增益的模拟。现在很有可能第一集会产生一些垃圾结果,但在每一集之后,学习算法会对神经网络进行调整,使增益朝着增加回报的方向移动——也就是说,它提高了性能,降低了努力。
以这种方式使用强化学习的好处在于,一旦你掌握了一组最优控制增益,你就完成了;你不需要其他任何东西。我们不需要部署任何神经网络或验证它们或担心不得不改变它们。我们只需要将最终的静态增益值编码到系统中。通过这种方式,您仍然拥有一个传统架构的系统(一个可以在硬件上验证和手动调整的系统,就像我们习惯的那样),但是您使用强化学习优化选择的增益值填充它。这是一种两全其美的方法。
所以希望你们能看到强化学习对于解决困难的问题是非常强大的,而且它绝对值得学习并弄清楚如何将它与传统方法结合起来,以一种你对最终产品感到舒服的方式。在理解解决方案和验证它是否有效方面存在一些挑战,但正如我们所介绍的,我们现在确实有一些方法来解决这些挑战。
这是我想离开你的想法。学习算法,RL设计工具,如MATLAB,验证方法都是一直推进。我们无处可追溯到加强学习的全部潜力。也许它将在未来成为所有复杂控制系统的首选设计方法之前。谢谢你看这个视频。
如果你不想错过未来的Tech Talk视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制主题。下次见。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。