本文首发于《第一财经杂志》2021 年 5 月刊,作者吴洋洋,Unity 获权转载。
过去 10 年间,人工智能发展得非常快。但是同人类一样,这些 AI 也需要经过足够时间的训练,才具备被期待的智能。
2004 年成立的游戏引擎公司 Unity 希望在这个新领域占据一半以上的市场份额。作为Unity 的人工智能与机器学习高级副总裁,Danny Lange 认为训练 AI 最重要的工作就是为之创造一个足够真实的模拟环境,帮助这些 AI 在虚拟程序中完成训练,而不是把一台无人驾驶汽车放到真实的马路上去完成自我成长。而且,真实世界并不总是比游戏世界复杂,从技术的角度,这个问题可能是相反的,这也正是游戏引擎为什么可以反过来为在真实世界中行走的 AI 提供训练的原因之一。
Danny Lange
Unity 的人工智能与机器学习高级副总裁
以下采访中,Y 代表第一财经,L 代表 Danny Lange。
Y:游戏引擎为何可以用于工业领域?
L:游戏有很多种,有些是 2D 的,但是大部分游戏特别是大型游戏都是 3D 的。而在 3D 游戏中,我们面对的其实是一个有各种 3D 物体、各种作用力的物理世界,并且我们可以与之交互。游戏引擎会用非常快的速度处理显示屏上的像素组成,每当玩家操纵游戏里面的角色,像素会以玩家难以察觉的速度重新绘制,达到每秒 30 次以上。
这种技术在游戏领域应用已久,我们发现,它也可以应用在工业领域,尤其是机器人领域。有一个概念叫“数字孪生”,我们可以为测试环境开发一个“数字孪生”,在虚拟的仿真环境中测试机器人程序,用近乎实时的方式控制和操作仿真环境中的机器人。
上海国际汽车城自动驾驶虚拟仿真项目
这一切都在 Unity 的游戏引擎中进行,因为游戏引擎对 3D 环境的处理已经非常成熟了。通过虚拟环境去测试机器人,既安全又经济。因为在现实世界中测试机器人,需要冒着损伤贵重硬件的风险,但是在 3D 仿真环境中,这样的风险可以被规避。而且在仿真环境中可以测试机器人几千几万次,甚至能用人工智能技术训练机器人,成本远低于在现实中训练机器人。
Y:在创造一个数字孪生环境的时候,人工智能可以做什么呢?
L:每 18 个月,我们用于训练 AI 的数据量就会翻一番。这些数据对于模型的训练非常有利,模型越来越大,也越来越智能。我们会使用深度学习这样的技术来创造更多的可能性。比如,在现实物理世界中,我们面临的一个重要挑战就是收集训练数据非常困难,这种困难主要体现在两个方面:一是收集得非常慢;二是数据量有限。因此,我们使用合成数据来训练 AI。
在游戏引擎中,我们可以生成大量的合成数据,并且可以同时运行非常多的测试,比如说同时运行 1 万个测试,来快速获取合成数据,用于训练 AI。这在真实的物理世界中不可能实现。
Y:游戏是想象的世界,机器人或者是汽车需要面对的是真实世界,模拟真实世界所需要的数据维度是否更加复杂?
L:首先,实时 3D 技术在游戏中的应用和在工业中虽然核心技术相同,但也有很多不同之处。比如,工业领域对于精准度的要求要高得多,对于各种物理作用力,我们要模拟得更为精准,但同时它也不像游戏那样要求画面精美。
在工业世界,准确更为重要。其次,从收集数据的角度来说,现实世界的数据和合成数据之间确实存在差异。为了让合成数据尽量准确,我们会快速生成大量的合成数据,并且在合成数据中尽可能地引入非常多的变量,比如颜色、光照、行为等等,从而让合成数据获得足够的样本来随机化,尽可能地捕捉到所有现实世界中可能存在的情况。在现实世界中如果想要收集这样体量的数据,可能要花几年时间。然而通过人工合成同等量的训练数据,仅需要几分钟。
随机姿势与光照条件下的对象特写
Y:具体到训练一个流水线上的机器人,你们会怎么做?
L:Unity 的实时 3D 技术最初主要用于游戏开发,近几年被广泛应用于汽车、制造、工程建设等工业领域。单就工业领域来说,机器人在工业领域中已经存在了很多年,现在,它们的应用场景更广阔、也更灵活了。以前,机器人都是待在一个特定的位置,在一个有限的空间中按照既定程序来运行。但现在很多公司会让机器人和人类协作,于是就有了 Cobot(协作机器人)的说法。这些机器人需要从人手上拿过某些物体,或者以其他方式与人类协作。
在仿真环境中,我们会引入与人类似的一些代理(Agent),也可以将其称作“类人动物”(Humannoid)。我们训练机器人与 Humannoid 之间的互动,这样机器人就能在大量数据的训练下,学会如何才不会撞到人,如何和人之间来更好地传递物体。
通过合成数据,我们可以快速产生大量打过标记的图像,来高效地训练计算机视觉系统。试想在城市环境中训练 AI 去开车,有非常多复杂因素需要处理。在工业场合下训练机器人,和对 AI 无人驾驶技术的训练有相通之处。
基于 Unity 生成各类带标签的合成图像数据
Y:模仿工业流水线、汽车驾驶环境、建筑等不同场景时,需要面对的复杂度有何不同?可以模仿人体环境吗?
L:几天前,有人问我,我们可不可以使用 Unity 来模拟人的心脏,包括心脏跳动的状况,以及周围相关肌肉运动的情况。简单地回答,当前我们还做不到。Unity 的强项在于模拟一些刚性结构,包括机械手臂以及可移动的机器人。我们可以在结构以及力学方面实现非常好的模拟结果。人类器官比如心脏有非常多复杂因素,包括软组织、血液流动等等,当前还没有办法实现非常好的模拟,但在将来或许可以成为现实。
模拟其他领域,比如机器人、无人机、汽车以及工厂环境等,不同行业面临的挑战有所不同。当机尝航站楼需要一个数字孪生的时候,我们可以模拟机尝跑道、模拟飞机滑行的状况,以及整个机场的运维管理,包括空管等很多动态因素,很适合用 Unity 来做。另外包括工厂生产线数字孪生、自动驾驶汽车学习环境,所有的汽车厂商都在使用游戏引擎训练他们的模型和算法。
之前我在 Uber 工作,在无人驾驶汽车的训练过程中,需要考虑很多不同的动态因素,包括刹车距离、街上的交通状况、突然出现在车前的行人等等,都需要去综合考虑。我们要通过“几百万公里”的模拟训练,才能将算法放到车上。
由 Unity 引擎合成的逼真图像可以描绘自动驾驶场景中可能发生的各种低概率事件,从而改善自动驾驶系统的训练效果
Y:游戏世界和真实世界哪个更复杂?这种不同对技术意味着什么?
L:游戏世界比真实世界更复杂。因为在虚拟世界里,我们有更多的自由,能做的事情更多,不像在现实世界我们面临非常多的制约因素。举个例子,我们训练 AI 的时候,和我们训练人或者动物一样是需要花时间反复训练它的,在虚拟世界训练 AI 我们可以借助大量云端算力以超高速完成,仿佛我们可以将时间加速。但是在现实世界,我们无法加速时间。
另外,训练 AI 的时候我们也经常用到强化学习。强化学习可以理解为是一个缓慢的进化过程。系统从最开始比较低的水平,一点一点进步,最后变得非常好。在这个过程中,我们可以在任何一个时间点,将当前的学习状态保存在硬盘上,而未来我们可以回到状态中,选择其中一个时间点,再朝不同的另外一个方向去发展、训练。在现实中,我们无法扭转时间的走向,但是在虚拟世界可以。因此,虚拟世界中的很多事情在现实世界中没有办法做。通过虚拟世界,我们可以将更多的场景、可能性复现出来,从而帮助我们在现实世界中的决策。