(call/cc

Never say never

Nothing works and no one knows why

2018年初,我开始跟Google内部都很少人知道的Robotics at Google接触。在此之前,我作为YouTube TV负责数据和增长方向的tech lead, 把这个产品从无到有,从零做成了一个不错的业务,项目步入了按部就班的良性循环,我也开始寻找职业生涯的下一个大问题。

对看着阿西莫夫作品长大的我来说,机器人是一个极其浪漫的主题,但现实中的机器人行业完全没有这份浪漫。目前,机器人仍然只在汽车制造、大型仓储等特定领域有成功的商业应用。在其他方面,虽然经常可以看到很炫的演示,以及一些小规模的部署应用,但是这些应用常常碰到一个问题:就算能用,使用机器人的整体运营成本往往远高于定制的低技术方案,即使无限放大规模,也产生不了经济优势。

人们不需要(也害怕)机器人有科幻小说里的能力。人们更希望有个笨笨的低成本工作帮手,完成一些如分拣垃圾、简单装配这样的重复单调的工作。笨不是弱智,这个工作帮手得有常识,能适应非标准工件和不同的环境状况,通过简单的示教也能迅速上手新的工作。但是,现在不管是研究所里还是工业应用的机器人,离这样的能力仍然非常遥远。这个领域充满了根本性未解决的问题。

如果说AlphaGo对社会的冲击还是意识上的,那解决机器人问题对人类社会能产生大得多的实质影响。这是一个值得我投入十年职业生涯的问题。同时,Google, 尤其是Google AI, 是一个合适的平台。它能提供相对充足的资源,又有足够的耐心让团队不必为短期出成果奔忙。这可能是创业团队很难提供的。

于是我就愉快地入坑了。Google Robotics是一个非常多元的组织, 有传统的roboticsts, 有ML researcher,还有像我这种没有任何相关经验的软件工程师。它跟X, DeepMind等也有广泛的合作。所以到组的头一个月,我的主要工作就是跟各种人聊天。一个月下来,我最常想到的就是一个我从读书的时候就开始听的老梗:

Theory is when you know everything but nothing works.

Practice is when everything works but no one knows why.

In our lab, theory and practice are combined: nothing works and no one knows why.

虽然当时我们已经在研究上取得很多进展,在特定任务如grasping上,Qt-Opt 等已经取得了很好的成绩。但是,我们离一个通用的适应多种任务的机器人系统还非常遥远。我过去遇到的挑战,大都是有简单明了的长期商业和技术路线图,而工程实现困难;在这里,我们连这样的路线图都没有。

这期间我们还团建了,一个在机器人上搞ML,特别是很多人在搞RL的组,团建内容是带大家去看专业训狗师训练狗狗。我觉得老板就是在说:瞧瞧人家是怎么搞reinforcement learning的, 再看看你们,训出来的都是些个什么玩意儿?!

Nothing works and no one knows why.

在这样的条件下找工作方向,是需要一些信仰的 —— 你要在没有客观事实证明的情况下坚信你选择的方向。我个人的信仰是:要让机器人获得真正的通用能力,你必须用一个巨大的真实机器人集群,在实验室受控但仍尽量复杂多元的环境中,进行持续的大规模数据采集、模型训练和验证。

没错,就是俗话说的大力出奇迹。大力不一定能出奇迹,但连这点力气都不出,那就毛都不会有。

首先,通用能力不能靠硬编程,只能通过学习的方法获得(强调一下:我并不认为纯粹使用机器学习就能达成目标)。而将任何机器学习算法应用于实际,必须在真实环境上进行大量的测试;评价任何算法改进,必须通过科学的随机A/B实验,在各种不同条件分组下进行评估。这不是几个或者十几个机器人做得来的,你必须要有一个足够大的机器人集群进行持续的大规模算法评估,才能在合理时间内得出科学可靠的结果,发现算法漏洞,支持持续不断的算法改进。

再者,真实环境下采集的数据可能是最好的机器学习数据源。这一点可能在RL社区会引起争议,毕竟由于基本物理定律限制,机器人集群不可能无限大,移动速度不可能无限快,也不能随意摔打,简单的online RL很难直接在真实机器人集群应用。然而,除了传统的在模拟环境训练然后sim-to-real在真实环境优化的思路,Offline / batch RL等也有了一些发展;World Models, GraspGAN 等思路指出了运用真实环境数据构建或优化模拟环境进行有效训练的可能性。这些方法提高了真实环境数据的利用效率,让扩大集群规模采集尽量多的非特定任务数据变得更有利可图。而且,机器人上的ML工作远不止RL, 机器人视觉等方面的工作里真实数据是理所当然的金标准。我相信的是,当我们的目标是开发能部署实用的算法,真实环境采集的数据源的重要性会越来越高。

也许大规模机器人集群和数据采集的重要性不存在争议,问题只是:这太难了。对任何一个Google体量的大公司,买一堆机器人或机械臂倒不是难事,Google还开源过一些低成本实验机器人设计。问题是要怎么运作维护这个机器人集群。如果每个机器人都需要一个安全员看着,每做完一次实验就要人手复位,那机器人集群是不可能扩展和24x7持续运作的。所以你首先就得尽量减少human-in-the-loop, 提高自动化运维水平。管理一台服务器,一个机架,和一个数据中心需要的软件系统完全不同,管理一个机器人集群也是如此。

它对数据系统也是一个挑战。还是由于基本物理定律限制,机器人的运作时间永远是昂贵的,而且不像模拟环境,真实物理环境本质上是无法重现的。你需要事无巨细采集一切可观察的数据,而不仅仅是当前任务或者算法所需,这样你可以无数次在后台重放数据查找问题,或者把数据重用到新的任务或算法中。这里的数据带宽需求,即使用上已知最好的压缩策略也不可小觑。你的数据源还不是有稳定连接的机房服务器,是很多时候只能用wifi通信还到处乱跑的机器人。另一方面,不管是监控和查错需要,还是很大一部分算法架构,都要求低延迟的数据处理。你需要一个处理高吞吐,高容错,低延迟需求的数据系统。做数据系统的同学都知道这三个需求是本质冲突的,再放到我们需要的机器人集群规模,即使是见惯了几个世界级产品的大场(gou)面(shi)的我,也感到棘手。

To solve robotics, solve data first.

两年多来,我带领的Robotics data infrastructure team似乎已经算是初窥门径。我们找到了一个足够通用和强大的数据模型,围绕这个数据模型构建了大规模数据存储和持续数据处理平台,在此之上构建了实用的数据分析和可视化工具。我们一点点地获得在大规模机器人集群上进行数据采集、处理、分析和算法评估的能力。我自封了一个「Google Robotics首席铲屎官」的头衔,我伺候着机器人祖宗,铲的是屎,对辛苦耕耘的农民伯伯来说就是宝贝。

当然,没有大新闻。数据不会自动变成智能,这需要整个团队在各种方向的不断努力。我自己的内心里,其实不太希望我们放出像AlphaGo这样的大新闻,我希望人们对工作生活中越来越多出现的各种形态的机器人帮手习以为常,人们通过享受科技革命的成果而不是社会冲击,才终于意识到:科技革命已经发生。