专栏首页机器之心伯克利提出DeepMimic:使用强化学习练就18般武艺

伯克利提出DeepMimic:使用强化学习练就18般武艺

选自BAIR Blog

作者:Xue Bin (Jason) Peng

机器之心编译

运动控制问题已经成为强化学习的标准基准,深度强化学习方法被证明适用于包括操纵和移动的多种任务。但是,使用深度强化学习训练的智能体通常行为不太自然,会出现抖动、步伐不对称、四肢动作过多等现象。而最近 BAIR 实验室将模仿真实动作片段与强化学习结合,令智能体能从参考动作片段中学习流畅和高难度的动作。

我们从计算机绘图中得到了大量灵感,基于物理的对自然动作的模拟数十年来已经成为广泛研究的主题。对动作质量的关注通常受电影、视觉效果和游戏应用的推动。这些年来,关于基于物理的人物动画的大量工作开发出控制器,可生成适用于大量任务和人物的鲁棒性、自然动作。这些方法通常利用人类洞察纳入特定任务的控制结构,从而为智能体可执行的运动提供强大的归纳偏置(这些智能体包括有限状态机、简化模型和逆动力学)。但是由于这些设计决策,控制器通常特定于某种智能体或任务,为行走开发的控制器可能无法扩展至更加动态的技巧(缺乏人类洞察)。

在本研究中,我们将从两个领域中获取灵感,以利用深度学习模型的泛化性能,同时生成更自然的动作,可匹敌计算机绘图中全身运动模拟的当前最优水平。我们展示了一种概念层面上很简单的强化学习框架,使模拟智能体从参考运动片段中学习高动态、高难度动作,参考运动片段的格式是人类的动作捕捉数据。给出一个简单的技巧展示,如回旋踢或后空翻,我们的智能体能够学习一个鲁棒的策略来模仿该技巧。这些策略生成的动作与动作捕捉数据几乎难以区分。

视频内容

动作模仿

在大部分强化学习基准中,模拟智能体使用简单模型来呈现,模型仅提供粗糙的现实世界动态近似。因此智能体倾向于利用模拟的特性开发出现实中不可行的不自然行为。通过结合更真实的生物工程学模型可以使动作更加自然。但是构建高保真模型难度非常大,而且得到的动作有可能还是不自然。

另一种方法是数据驱动,人类运动的参考片段提供自然运动的样本。然后训练智能体通过模仿参考运动来生成更自然的动作。模仿运动数据的模拟在计算机动画中有很长的历史,近期也出现了一些使用深度强化学习的案例,如《DeepLoco: Dynamic Locomotion Skills Using Hierarchical Deep Reinforcement Learning》。尽管结果看起来更加自然,但是离生动再现大量运动还有很远的距离。

本研究中,我们的策略将通过一个运动模拟任务来训练,智能体的目标是再现给出的参考运动。每个参考运动都以目标姿势序列的形式呈现:

,其中 q_t hat 是时间步 t 的目标姿势。奖励函数旨在最小化目标姿势 q_t hat 和模拟智能体姿势 q_t 之间的最小平方误差。

尽管运动模仿应用了更复杂的方法,但是我们发现仅仅最小化追踪误差(和一些额外洞察)就可以达到非常好的效果。这些策略是使用 PPO 优化目标来训练得到的。

有了这个框架,我们能够开发出适合大量高难度技巧(包括移动、杂技动作、武术和跳舞)的策略。

仿真机器人学习模仿不同技巧。蓝色智能体是模拟智能体,绿色智能体在重演对应的动作捕捉片段。从上到下分别为侧空翻、侧手翻、蹬足上和单手跨栏。

下一步,我们把现有方法与之前模仿动作捕捉片段的结果(比如生成对抗模仿学习(GAIL))进行了对比。我们的方法要比 GAIL 简单很多,而且能够更好地复现参考动作。由此得到的策略避免了深度强化学习方法很多常见的 artifacts,使得智能体的运动可以像人一样流畅。

我们的方法(左)与 Merel et al. [2017] 方法的对比,后者使用 GAIL 模仿动作捕捉数据。相比之前使用深度强化学习的研究,我们的智能体动作显然更加自然。

洞见

参考状态初始化(RSI)

假设智能体正在尝试模仿后空翻,那么它如何知道在半空中做一个完整旋转会得到高奖励呢?由于大多数强化学习算法是回溯性的,它们只能观察到访问过的状态奖励。在后空翻实例中,智能体必须先观察成功的后空翻轨迹,才能了解哪些状态能够得到高奖励。但由于后空翻对于起跳和着地的初始条件很敏感,智能体不大可能通过随机探索偶然性地执行成功的后空翻轨迹。为了给智能体一个提示,在每个 episode 开始时,我们把智能体初始化至从参考动作随机采样的状态。因此,智能体有时候会从地面开始,有时候会从后空翻的中间状态开始。这样即使智能体尚未熟悉如何达到这些状态,它们也能学习到哪些状态能获得高奖励。

RSI 通过将智能体初始化至从参考动作随机采样的状态,为它提供丰富的初始状态分布。

以下是使用 RSI 训练和未用 RSI 训练的后空翻策略对比,在后者的训练中智能体总是被初始化到固定的初始状态,即后空翻动作的起始点)。没有用 RSI 训练时,智能体没有学习到「空翻」,只学到了「后」。

视频内容

未用 RSI 或 ET 训练得到的策略对比。RSI 和 ET 对于学习更多动态的动作至关重要。左:RSI+ET;中:无 RSI;右:无 ET。

提前终止(ET)

提前终止对于强化学习从业者来说至关重要,它通常用来提高仿真效率。如果智能体在某个状态被困住了,不再可能成功学习到动作,那么该 episode 将提前终止,以避免继续模拟。这里我们证明提前终止实际上对结果有显著影响。还以后空翻为例。在训练的早期阶段,其策略是很糟糕的,智能体大部分时间都在失败。智能体一旦摔倒,就很难再恢复到原来的状态,因此智能体大部分时间内都在地上挣扎。这和其它方法论如监督学习中遇到了类别不均衡问题相似。一旦智能体到达了这样的状态(例如摔倒),就终止这个 episode,以缓解该问题。ET 结合 RSI 有助于确保数据集的主要部分是由接近参考轨迹的样本构成的。没有 ET,智能体永远无法学会「空翻」,而只是摔倒然后在地上尝试表演这个动作。

更多结果

通过提供不同的参考动作,类人体总共已学会超过 24 种技能。

视频内容

训练类人体模仿丰富的技能。

除了模仿动作捕捉片段,我们还可以训练类人体执行其他任务,比如踢一个随机放置的目标,或者把球扔向目标。

训练向随机目标扔球的策略。

我们也可以训练一个仿造的 Atlas 机器人模仿人类的动作捕捉片段,尽管 Atlas 的形态和质量分布非常不同,它依然可以重现预期的动作。该策略不仅可以模仿参考动作,还可以从相当显著的干扰中恢复过来。

训练 Atlas 来完成回旋踢,即使存在外部扰动,训练出的策略也极为稳健。

但是如果我们没有动作捕捉片段,该怎么办?假设我们想要模拟霸王龙。因各种原因,捕捉霸王龙的动作不现实。所以,作为替代,我们可以用手绘的艺术动画来做关键帧,然后训练策略来模拟这些动作。

模拟训练霸王龙,来模仿艺术创造的关键帧。

而且不只是霸王龙,让我们训练一头狮子:

模拟狮子,参考动作由 Ziva Dynamics 提供。

用 418D 状态空间和 94D 动作空间模拟一条龙。

这里想说的是,一个简单的方法表现都很惊人。只是最小化循迹误差(tracking error),我们就能训练掌握不同特征和技能的策略。我们希望该研究有助于启发为虚拟和现实机器人开发更多动态动作技能。探索从更多源(例如视频)中模拟动作也是令人激动的研究方向,例如动物和杂乱环境中比较难的动作捕捉。

论文:DeepMimic: Example-Guided Deep Reinforcement Learning of Physics-Based Character Skills

论文链接:https://xbpeng.github.io/projects/DeepMimic/index.html

摘要:角色动画(character animation)的一个长期目标是把行为的数据驱动性与可在物理模拟中执行相似行为的系统结合起来,从而逼真地回应扰动和环境改变。我们的研究表明,强化学习方法可用于学习模仿大量样本动作片段的鲁棒控制策略,同时也可以学习复杂的恢复,以适应形态的改变,完成用户特定的目标。我们的方法处理关键帧动作、高度动态动作(比如动作捕捉的翻转和旋转)以及重定向动作。

通过结合动作-模仿(motion-imitation)目标与任务目标,我们在交互式设定中训练能够智能反应的智能体,例如向目标方向行走或朝用户指定的目标扔球等。这种方法具有使用动作片段的便利性与动作质量,以高效定义所需的风格和外观,还结合了 RL 方法和基于物理的动画所提供的灵活性和泛化性。我们进一步探索了大量将多个片段集成到学习过程的方法,以构建出能执行多个不同技能的智能体。我们还展示了使用多个对象(人、Atlas 机器人、双足恐龙和龙)和多种技能的学习结果,包括移动、武术和杂技等。

原文地址:http://bair.berkeley.edu/blog/2018/04/10/virtual-stuntman/

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 学界 | DeepMind论文三连发:如何在仿真环境中生成灵活行为

    选自DeepMind 机器之心编译 参与:smith、黄小天、路雪 一只猴子在树林之间敏捷而灵活地跳跃穿梭,或者一名足球运动员快速带球过人、劲射得分,这些表现皆...

    机器之心
  • DeepMind最新力作:分布式强化学习框架Acme,智能体并行性加强

    近年来,在深度学习技术和算力提升的双重加持下,强化学习已经在众多复杂的 AI 挑战中取得了辉煌战绩。无论是象棋、围棋、麻将,还是王者荣耀以及各类雅达利经典游戏,...

    机器之心
  • IJCAI 2019 | 有趣!这是一篇玩倩女幽魂的多智能体强化学习研究

    混合动作空间:与离散动作空间或连续动作空间不同,拥有混合动作空间的智能体在每一步执行动作时都需要选择一个离散动作以及该离散动作对应的一个或多个连续性动作参数的值...

    机器之心
  • 第2章 选择排序

    链表每个元素都存储了下一元素的地址,所以可以使用随机内存地址串在一起,只要有足够的内存空间,就可以为链表分配内存;

    村雨遥
  • 【深度学习】一文教你如何确定好的“学习率”

    【导读】近日,数据科学家Hafidz Zulkifli发布一篇文章,主要讲解了深度学习中的“学习率”,以及如何利用学习率来提高深度学习模型的性能并减少训练时间。...

    WZEARW
  • 【深度学习4大技术方向】Keras之父、谷歌研究员拆解机器自主学习

    【新智元导读】 Keras作者、《Python深度学习》一书的作者 Francois Chollet 在博客上发文探讨深度学习的未来,从技术演化的角度,提出未来...

    新智元
  • 塔秘 | 极简Python带你探索分类与回归的奥秘

    前言 本文从分类和回归两个方面介绍了基本的监督学习方法,并用Scikit-Learn做了实例演示。 ? 为何使用人工智能和机器学习? 地球的未来在于人工智能和机...

    灯塔大数据
  • React Native组件篇(一) — Text组件

    在iOS中很多组件都有显示文字的功能,一般文字都是写在Label上。在ReactNative中类似Label显示文字的组件叫什么呢,也就是我们今天要学的这个T...

    ZY_FlyWay
  • java常用的几种数据结构,堆栈,队列,数组,链表,哈希表

    先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面...

    IT云清
  • mxnet框架样本,使用C++接口

    哇塞,好久么有跟进mxnet啦,python改版了好多好多啊,突然发现C++用起来才是最爽的. 贴一个mxnet中的C++Example中的mlp网络和实现,感...

    Gxjun

扫码关注云+社区

领取腾讯云代金券