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