机器人的强化学习
强化学习(RL)的核心是从交互中学习。
在今天的模块中,我们的机器人不会被明确的算法控制来平衡杆子,而是通过与我们设计的环境交互来学习如何做到这一点。
但这是什么样的交互呢?在强化学习的背景下,这些交互发生在智能体和环境之间。
1、用RL清洁厨房
考虑一个机器人智能体试图清洗脏盘子。从RL的角度来看,厨房、海绵和你上一顿饭的碎屑都是环境的一部分。随着机器人智能体清洗盘子,它与环境交互并随时间变化,希望达到一个干净的状态!
在任何给定时刻,环境都可以用其当前状态来描述,在这种情况下可能描述你的盘子在哪里以及它们还需要多少清洗。
机器人无法获得这些完美信息,而是只从环境中接收观察,由其各种传感器决定。
这些观察然后由策略处理,策略是智能体中将"观察到什么"映射到"接下来应该做什么"的部分。这个处理的输出是动作,智能体执行的特定运动或行为,希望将环境移动到干净厨房的期望最终状态。例如,将机械臂移近盘子或移向脏点。
但策略必须来自某个地方。它什么时候学会这个的?强化学习的学习部分需要另一个关键部分:**奖励。**每次智能体采取动作时,环境也会产生奖励:表示该特定动作有多"好"或"多坏"的数字。在本模块中,我们将在Isaac Lab框架内用Python定义这些奖励。
强化学习的目标是巧妙地演化策略,使得智能体与环境交互时奖励最大化。
通过一次又一次地与我们的模拟环境交互,发现产生我们描述的奖励的动作,训练策略,我们的机器人将学会如何使用数学函数来最大化该奖励。
最终,通过在Isaac Lab中训练我们的机器人,我们得到一个描述机器人学到的策略的神经网络。这就是深度强化学习中"深度"的来源,RL与深度神经网络的结合来处理复杂、高维输入和任务。我们在本模块中的工作都是关于深度强化学习。
从这个文件中,我们可以将给定的观察输入到该文件,并接收输出。我们可以使用这些在Isaac Sim中运行测试,看看我们的策略表现如何,并最终准备在真实机器人上运行策略!
2、为什么使用强化学习?
传统上,机器人有预编程的指令和有限的传感器输入来执行某些任务。虽然这对简单任务有效,但很难泛化且重新编程成本高昂。例如:
- 对于分拣物品的工业仓库机器人:如果目标物体在大小、形状、摩擦力或质量上有所不同怎么办?
- 对于自动驾驶汽车:我们如何处理动态条件,以及不可预测的环境?
- 对于人形机器人:我们如何编程更复杂的关节如手,并执行行走、跑步和跳跃等任务?
通过RL和模拟,我们甚至可以比实时更快地训练机器人。例如,考虑Isaac-Velocity-Flat-Spot-v0任务,它训练Boston Dynamics Spot四足机器人在平坦地形上移动时达到特定速度和方向(速度目标)。使用RSL RL库和NVIDIA RTX A6000 GPU,该任务可以以大约每秒90,000帧的速度训练。作为参考,典型视频可能以30-60fps运行!
我们在结果部分随机且部分由智能体(如我们的机器人)控制的情况下使用RL。
3、用奖励教学
让我们考虑另一个RL例子。如果你能用基本反馈来指导机器人行走,你会如何教它?在模拟中,我们可以通过时间步进、分析和计算奖励、再次步进然后重复来提供这种反馈。
但你会如何定义这些奖励和观察来描述走向目标是什么样子的?
奖励也可以有多种形式,让我们简要考虑几个主要类别:
- 稀疏奖励 - 当反馈很少或很重要时。
想想国际象棋游戏 - 哪些走法应该受到奖励?结束游戏的那步还是3步前的骑士捕获?赢得的最终目标直到最后才实现,这是一个稀疏奖励。
- 密集奖励 - 当反馈频繁且增量时。
想想机器人更接近其目标。
- 形状奖励 - 引入的额外奖励,通过注入一些关于问题域的知识来引导智能体朝向期望行为。
再想想国际象棋。正如我们讨论的,获胜是稀疏奖励。这个问题的形状奖励可以在吃子时给予,在游戏结束前提供中间反馈。
一个奖励可以是简单地奖励机器人更接近目标(密集奖励)。随着距离变小,奖励变大。我们可以使用简单的距离公式来测量。看起来很简单,我们完成了吗?
就像我们可能意外地教宠物我们不想教的"把戏"一样,我们可能刚刚教机器人向前跳然后摔倒而不是行走。它利用了奖励函数,但最终未能达到目标。这种方法需要更多的思考。
所以,我们重新审视我们的奖励,使它们更加健壮。我们可能用这样的奖励和观察来定义更多任务:
- 躯干应该基本垂直。
- 脚应该以一定时间阈值接触地面,不在地面上滑动。
- 整体身体跟踪某个方向走向目标。
- 监控从躯干到地面的高度传感器。
- 我们惩罚机器人将躯干放得太低。
现在经过足够的训练,我们可以创建一个基本的、成功的行走策略!你可能也听说行走被称为"移动"的一种形式。
这是强化学习的一些魔力:我们可以定义目标,而不是实现该目标的明确步骤来教机器人做一些新事情。
我们将回到奖励工程和任务设计这个话题。但首先,这个强化学习的想法从哪里来的?
4、强化学习的进步
强化学习不是一个新想法,事实上核心原则可以追溯到比你预期的更早。RL的早期基础可以追溯到1950年代。许多核心思想受到我们人类如何从试错中学习的启发。
然而,考虑到快速变化,如果这感觉像新想法也不会令人惊讶。
由于计算能力、深度学习和访问大数据集的进步,RL受到了一波关注。这使得RL算法能够解决更复杂的问题,从理论好奇心转变为现代AI研究和应用中实用且极具影响力的领域。
5、模拟和物理AI
为了解释为什么模拟对于用强化学习训练物理AI如此重要,让我们考虑一个替代方案。
如果我们尝试在物理世界中进行强化学习会怎样?
首先,我们需要大量相同的机器人。然后想象在物理世界中设置这个空间,每次完美重置,比如说甚至100次试验。这是很多工作,而且很难做对。还有更多:
- 我们如何获得足够的试验? 我们的100次试验例子对RL来说是一个小数字,我们可能至少需要几百次来训练健壮的策略
- 如果某些东西改变了,你需要重置训练 episode 怎么办?那是很多机器人要重置并保持一致
- 如果机器人崩溃了怎么办? 训练的早期阶段可能产生不可预测的结果,这在现实生活中将是危险的,一个错误可能花费数十万美元的原型机器人硬件。
- 即使它有效,时间和资源也将极其昂贵。
- 如果我们想测试一个还不存在的机器人怎么办? 在模拟中,我们可以在创建物理原型之前自由地迭代设计和测试RL策略。
这就是为什么物理AI诞生于模拟,以及为什么AI的下一个主要进化将在物理AI领域,当令牌与我们周围的物理世界交互时。
在模拟中,我们可以控制环境,甚至可以控制重力和摩擦等关键物理参数!就像我们有一个健身房,我们可以为机器人设计一个学习空间。我们甚至可以比实时更快地运行模拟器。我们也可以采取一步,进行分析,然后重复,直到终止或完成。
对于某些机器人应用,完成实际上是一个关键的安全任务。例如,如果机器人携带一个热的、重的物体,未能将其移动到安全的地方可能是危险的。
对于自动驾驶汽车,在某些情况下突然停止可能是危险的。这就是为什么我们的机器人可能需要在部署到测试场之前完成一定数量的模拟训练。我们可以有意地练习如何处理危险情况并评估行为,而不在物理世界中创造那种危险情况。模拟将继续成为未来机器人开发和制造中的标准实践。
但通过在模拟中控制世界,这难道不是看起来像作弊吗?如果我们控制世界,这难道不会让事情变得更容易吗?
我们实际上可以利用这种控制来为我们的机器人创造一个动态的训练环境。例如,如果机器人可以用较少或较多的摩擦力来玩立方体,那么策略可能在真实世界中工作时能够更好地处理各种立方体。我们在这个讲座模块中涵盖了更多关于"模拟到真实"转移的过程。
这个过程不仅可以改变我们如何编程现有机器人,还可以告知我们如何测试和调试最新的机器人。
6、强化学习最适合解决哪些问题?
虽然没有适合所有情况的完美答案,但强化学习非常适合以下领域:
- 结果部分随机且部分由智能体(如我们的机器人)控制。
- 问题需要探索和适应不确定的环境。
- 传统控制方法由于复杂动态或部分可观察性而失败。
- 存在高保真模拟来预训练策略。
原文链接:Reinforcement Learning for Robots — Getting Started With Isaac Lab
汇智网翻译整理,转载请标明出处