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