乔治·霍兹:Comma.ai、OpenPilot 与自动驾驶
George Hotz: Comma.ai, OpenPilot, and Autonomous Vehicles
黑客出身的创业者谈用低成本方案做辅助驾驶、开源 OpenPilot 与自动驾驶的技术路线。
人类在高速上开一个小时,平均会碰到车道线两次。openpilot 一次都不会。
乔治·霍兹(George Hotz)说这句话的时候语气很平,就像在陈述一个再普通不过的工程指标。但这个数字里藏着他对整个自动驾驶行业最尖锐的判断:今天所有真正在改变普通人生活的自动驾驶功能,本质上有且只有一个,就是车道居中。
他是 comma.ai 的创始人。公司 12 个人,烧钱速度每月 20 万美元,收入每月 10 万美元。他对这个行业的评价是:Waymo 那套东西,是一个更贵、更慢的 Uber。
他的心态也值得说一句。当被问到“给你 10 亿美元你会做什么”时,他的回答是“我不知道怎么规模化,我只是想把系统做得更好”。在一个人人都在讲宏大叙事的行业里,这种回答反而显得不正常。
模拟、黑客与看穿事物
访谈一开场,Lex 问了个老问题:我们是不是活在模拟里。
霍兹的回答很干脆:是,但这件事可能永远无法证伪。他举的例子是虚拟机。一个设计得足够好的虚拟机,运行在里面的程序根本不知道自己跑在虚拟机上。他甚至提到自己离开 comma 期间学过 Coq,一种依赖类型(dependently typed)的数学证明语言。用这种语言写的代码,只要编译器通过,就天然是正确的。
真正有意思的地方在后来。Lex 反问:任何足够复杂的系统都会有进出的漏洞,这是黑客的基本常识。
霍兹没有硬撑。他说,如果这个模拟有一个排定的结束时间,那它就不需要追求完备性。而看起来它确实有,热力学第二定律就是那个终止时间。
这段对话的价值不在答案。霍兹的思维习惯在这里露得很清楚:他不问“这个说法对不对”,他问“这个说法在什么条件下成立”。
“你学到的是不要按别人说的那样去理解事物,而是看它实际在做什么。”(乔治·霍兹)
这句话是他整个职业生涯的底色。2007 年 8 月他解锁第一台 iPhone,用的不是软件漏洞,是一根物理地址线。他自己承认,那时候放出来的代码“糟糕透顶”,用 C 写的一个破碎状态机,因为那时他还不会编程。
他真正学会编程,靠的不是上课。第一次去 Google 实习,做街景的硬件,写配套的软件库,代码写得一塌糊涂,但有他尊重的人直接告诉他:别这么写。他说,光拿到反馈不够,真正的转折点是他想做一个能单步回退 ARM 二进制的工具,因为他受不了一边看调试器、一边猜 CPU 在干什么。
写了四遍的 Kara
这个工具后来叫 Kara,全称 timeless debugger,中文一般译作时无损调试器。它能记录程序运行过程中计算机状态的变化,往前回放和往后回退一样容易。用他的话说,就像给计算机装了 Git,每一次内存访问都是一次提交。
他说,这个工具他写了四遍。
第一遍很糟,第二遍很糟,第三遍在 Facebook 的时候“勉强能用”,第四遍是 2014 年再次去 Google 实习时写的,那一次他终于觉得“这个可以用了”。
这个故事值得单独拎出来,因为它解释了他后来所有的工程判断标准。他不相信一次成功的产物,他相信迭代的次数。后来他在 comma 写了一个 200 行的分布式文件系统,替代那些动辄上万行的开源方案。他说那 200 行的质量之所以好,是因为那是他写的第四个版本,前面三个全扔了。
同一套逻辑也解释了为什么他说话那么不留情面。他看过太多系统,知道真实的质量分布长什么样。
他为什么说 Python 撑不住大项目
霍兹在 Twitch 上直播写代码出了名,打字极快,切窗口像打游戏。Lex 说自己看他的直播时常常开着当背景音,因为看着一个人高速干活本身就让人有动力。
霍兹承认自己在镜头前夸张了。他说自己的风格有明显短板:让一个没文档的 API 跑起来,他能极快搞定,因为他的办法就是不停往上扔东西直到它工作。如果让他把一个向量旋转 90 度再沿 XY 平面翻转,他能瞎写两个小时出不来,因为这种事需要拿张纸想清楚。
然后他谈了一段很实在的技术判断。openpilot 里有大量 Python 代码,但他现在明白为什么 Python 撑不起大型代码库:没有类型检查,编译器什么都告诉不了你。拼错变量名,lint 有时候能抓到,类型错误却完全抓不到。他的原话是,编译器基本上帮不上忙。
他喜欢依赖类型的语言,但吐槽那些语言的语法停留在 80 年代。他对 JavaScript 生态的评价更狠:npm 把一个包从 0.2 更新到 0.5,你的 Babel 就坏了,而 Babel 是把 ES6 转成……不能跑的东西。他问了个很朴素的问题:为什么我的 JavaScript 还需要被编译一次?
他的结论倒是很务实。他说 JavaScript 会像蟑螂一样活下去,因为它在浏览器里,而且快,而浏览器可能是未来计算的主要场所。comma 自己的日志分析工具全是 JavaScript 写的,因为他认为网页是目前最好的 UI 工具包,没有之一。
马斯克给了他一笔 1200 万美元的赌约
2015 年前后,一个朋友跟他说,今天最酷的应用问题是自动驾驶,你要不要见见马斯克。当时特斯拉还在用 Mobileye,马斯克在找替代方案。
给出的条件很直接:做出 Mobileye 同等水平的视觉系统,1200 万美元;每延迟一个月,扣 100 万。
霍兹当时的想法是,就算做 10 个月,也还有 200 万,不亏。他心里对这个任务的定义很简单:不解决 L5,把车道保持做好。他看过 Mobileye 的输出,觉得那不过是两条车道线加一辆前车的位姿,采集数据集、训个网络,几周的事。
会面里他犯了个错。他建议在每一个摄像头后面挂一颗 GPU,让计算留在本地。
走出会议室十分钟后他自己就意识到这主意蠢透了。正确的做法是把所有摄像头的数据汇到一个大 GPU 上。
“平时我说蠢话,人们往往注意不到,我可以自己圆回来。但 Elon 当场就指出来了。”(乔治·霍兹)
他第二次见马斯克时准备充分得多。但合同最后还是黄了,原因跟那次失言无关。
真正让这段对话有分量的是后半段。马斯克后来说,做 Autopilot 比“一个乔治·霍兹”复杂得多,需要两年时间和一个十人团队。霍兹的回应是:四年过去了,我这里有 12 个人,我觉得还得再来两年。
这句自我修正比任何豪言壮语都可信。
一千零二十四维的感知输出
访谈里最硬的一段,是霍兹和 Lex 关于「感知和规划之间能不能画一条线」的争论。
Lex 是机器人学科班出身,他的直觉是:感知输出一个状态向量,规划器在这个向量上做搜索,这是标准做法。他甚至举了 Waymo 的例子,说 Waymo 的仿真器能把这两层分开,回放感知数据去测规划器。
霍兹的回答是:不存在一个人类可理解的、把感知和规划分开的状态向量。
他举了个例子。场景里有一丛灌木,人类看到这丛灌木,会下意识知道后面可能藏着车。一份“可行驶区域 + 物体列表”的规格文档里,没有这个信息。你说那就加一个遮挡区域字段,他可以再举十个你加不进去的例子。
他的推论是:如果你的感知系统输出能被写成一份规格文档,那这份规格就是不完整的。
然后他说了 comma 实际在做什么。他们的感知输出是一个 1024 维的向量,里面每一个维度代表什么,没人知道。它是在真实数据上端到端学出来的。
Lex 追问:那你连仿真都没法做。霍兹说,对,我们现在的仿真器只用来测试,一旦开始用它训练,就彻底不测了。他把仿真器分成两类,一类是完全虚拟的,一类是加载真实路测数据回放的。对前者,他的评价是:你并没有解决计算机视觉问题,你只是把问题换成了计算机图形学问题。而你可以把图形做得极其逼真,但你做不出真实的人类行为模型。开车的定义,就是人类开车时的样子。这一点没法在仿真里凭空造出来。
三个驾驶问题
霍兹把驾驶拆成了三层,这是整场访谈里结构最清晰的一段。
第一层是静态问题。假设路上只有你一辆车,剩下的就是地图加定位。农场里的自动驾驶之所以早就跑起来了,就是因为它们只需要处理这一层,可以静态调度每一台拖拉机的路径,保证它们永远不会撞上。这一层靠激光雷达和 HD 地图可以做到厘米级,问题基本可解。
顺带一提,他对激光雷达的态度是:是拐杖,而且不是根好拐杖。但他承认,如果你要厘米级定位,没有激光雷达确实很难。他用激光雷达和视觉融合能把可靠性做到十万英里量级,再配一个退化保护,保证自己永远不会在“偏得很远却不自知”的状态下继续跑。
第二层是动态问题。路口停着一辆车,你不知道它下一秒还在不在,所以不能写进地图,必须实时检测,还要预测它接下来会怎么动。这一层需要行为模型,但依然是可以做的。
第三层是反事实问题。你的动作会改变别人的行为。你并线,旁边的车会让;你不并,它就走了。霍兹说这一层他目前不知道怎么解,唯一的思路是等车队规模起来之后,在真实世界里做强化学习。
“静态和动态,我们现在的横向方案可以完全覆盖。反事实这一层,我还没有办法,唯一的办法是在世界上做强化学习,因为其他智能体是人。”(乔治·霍兹)
这个三层拆解的价值在于,它把“自动驾驶难在哪”这个模糊问题变成了三个可以分别判断难度的问题。大部分公司宣称的进展,其实都还停在第一层和第二层。
变道的秘密:一个比特位
Lex 问,怎么让变道感觉自然。他的吐槽很具体:导航辅助驾驶(Navigate on Autopilot)每次变道都一模一样,机械得像程序,因为你确实在跑一段写死的策略,一个工程师在房间里写完,去 280 号公路上测了几次。
霍兹说他们已经解决了横向控制。做法朴素到让人意外。
模型有一个输入位,表示当前是否在变道。训练端到端模型时,这个位被人工置位,置位的方式是全自动的:车道线穿越的瞬间打标签,准确率大概 95%,不需要精确。测试时想要变道,就把这位拨到 1。
这样学出来的变道,会继承训练数据里所有人类变道的微妙差异。有的人变道慢,有的人变道快,模型自动学会根据场景决定用哪一种。
那怎么处理“有些人的变道本身就是烂的”这个问题?
他的假设是:所有好司机好在同一个地方,所有烂司机烂得各有各样。好司机的变道会聚成少数几个簇,烂司机的变道散落各处。所以只要学到那个主簇,就等于学到了“好”这件事。他说已经看到一些数据支持这个假设。
如果这个假设成立,那么数据清洗这件苦活可以被自动完成:不用人工标注谁开得好,聚类本身就会把好司机筛出来。
Waymo 的三年领先,换不来一个网络效应
聊到商业模式,霍兹的判断变得很不客气。
他承认 Waymo 技术领先,如果那套栈能跑通,大概领先三到五年。但他认为 Waymo 为了这个领先烧掉的钱太多,回收周期长到不划算。
更根本的问题是:L5 自动驾驶没有网络效应。
他拿 Uber 做对比。Uber 在奥斯汀开城,必须同时吸引司机和乘客,两边互相依赖,谁先走谁亏,所以有先发优势和切换成本。就算新玩家只抽 5% 而不是 10%,也没人愿意换,因为切换成本大于这点差价。
自动驾驶不是这样。你有资本,有乘客,没有司机。想铺一个新的城市,买一批现成的自动驾驶车投进去就行。这更像共享滑板车,谁有支票本谁就能铺满一座城市。结果是十家公司在同一个城市互相压价,谁都不赚钱。滑板车本身就是个糟糕的生意,因为滑板车对被投放到哪座城市没有话语权。
他也顺带讲了 Cruise。GM 花 10 亿美元买下 Cruise,他的评价是:这是 GM 给 Waymo 买的一份保险。如果 Waymo 的技术跑通了,Google 最多垄断三年,之后 GM 至少还有牌可打。这 10 亿买的是三年时间,胜负另算。
至于融资和 BD,他的态度更直接。有人建议他把数据卖给车厂,做成联盟,他说这个想法理论上很好,实际上对方会派一个 BD 来跟他开会,而那个人听不懂他说的绝大部分词。他的条件是:一封三行的邮件,写明愿意付多少钱、接受什么隐私条款,他就接。但现实里那封邮件不会长这样。
他提到 Mobileye 2015 年前后的研发投入在芯片公司里排很低,但你去看人员构成,全是 BD,因为车厂太难打交道了。
驾驶员监控这件事,他和马斯克正面对上了
霍兹对 L2 系统的态度,比很多人想的要保守。
他说在 1.0 版本之前,comma 的产品不会叫消费级产品,因为驾驶员监控还没做到“无法作弊”。他刚刚招了一个全职的人专门做这件事,目标是能检测到手机入镜、能判断你是不是在睡觉。他承认现在的摄像头分辨率不够,下一代要换鱼眼。
他还提了一个细节,我觉得是整个产品哲学里最关键的一点:他们把驾驶员监控的数据包改名成了“驾驶状态”。车的状态包叫 car state,人的状态包叫 driver state。两者是并列的。
关于接管体验,他的批评很具体。Autopilot 取消需要按那个没人知道在哪的取消键,所以大家都去踩刹车。但很多时候你不想刹车,你想加速。如果你用方向盘去取消,整个过程会很别扭。Super Cruise 的问题是状态转换:你踩刹车退出,它掉回普通自适应巡航,车还在自己加速,感觉很奇怪。
他自己的设计是:踩油门或刹车即退出,用扭矩传感器检测手在不在方向盘上,但不会因为扭矩变化而退出。方向盘扭矩被用来做两件事,检测在位和触发退出,这两件事混在一起就会出问题。
他对特斯拉缺席驾驶员监控这件事评价最重:
“他讲的话,有时蠢得离谱,有时又完全正确。驾驶员监控这个,是蠢的那一类。”(乔治·霍兹)
理由很硬:当系统出错频率降到每千英里一次,人的注意力必然衰减,这时候不监控驾驶员就是不负责任。他说自己开车来这里的时候,在一辆毫无自动化的车里困得打瞌睡。人本来就是会走神的。
关于安全,他有一句得罪人的话
霍兹对安全工程师的评价很直接:他被这些人搞得精疲力竭。他认为把安全置于创新之上到了某个程度,长期来看反而会杀死安全。
但他自己的安全模型写得很清楚,就三条:驾驶员必须时刻注意;驾驶员必须随时能接管;系统永远不会在快到你反应不过来的时间尺度上动作。
第三条是靠具体限制实现的:扭矩限制、刹车限制、加速度限制。这些代码全部开源,而且现在已经符合 MISRA 规范。他说自己一开始也不待见 MISRA,读了之后开始尊重它,因为写那些规范的人是真正的计算机科学家,你从他们的用词就能看出来,他们会在文档里讨论某个条件是不是“可判定”的。
关于安全与信息安全的关系,他有个漂亮的比喻。安全(safety)是在坑周围拉一条警戒线,让人别不小心走进去;信息安全(security)是在坑周围立十英尺高的铁丝网,让人根本爬不进去。他的推论是:一个不可靠的系统,一定不安全。
所以车必须始终能用本地传感器做出安全动作,而本地传感器必须是硬连线的。他对 V2X 的评价是灾难,因为那要求通信双方同时对。他自己更偏爱蜂窝车联网,理由是车里本来就有互联网,绕开拥堵这类功能很实用,但那只是体验优化,绝不能作为安全兜底。
至于远程接管,他的判断是:如果安全模型在设计上依赖一条通往车辆的常连链路,那这个模型就是不成立的。
伦理问题,他用一个玩笑解决了
关于电车难题,霍兹说 comma 的代码里真的有一个 alert,叫“检测到伦理困境”。这个 alert 从来没被触发过,因为系统还不知道怎么检测伦理困境。
但他说,我们是 L2 系统,所以我们会退出,把这个决定交给人。
这个回答听起来像在耍赖,其实点出了一件事:电车难题之所以流行,是因为它是那种“所有人都能有意见”的问题。你问一屋子人要不要用 SQL 栈,不搞技术的人没意见;你问他们办公室刷什么颜色,每个人都有强烈的偏好。伦理讨论很多时候在填这个空缺,真实的工程约束还在原地。
钱、女友、奇点
访谈后半段转到了个人层面,这部分反而更耐看。
comma 的长期商业计划,霍兹说他在 2017 年就想明白了:做成一家车险公司。逻辑闭环很漂亮。如果 openpilot 让驾驶安全翻倍,那么 comma 手里握有全网最好的驾驶行为数据集,知道谁开得最安全。它可以只给安全的人保险,把不安全的人挤到别家去,而别家只能收高价。市场会因此自我强化地分化成两半。
关于工作,他澄清了之前说过的一句“生活就是工作”。他说那是半开玩笑,因为采访前他刚跟人吃完饭。他真正的意思是,工作给了他生活的意义,但他不认为每一分钟都该工作。他认为一天干 12 小时的人应该想想怎么干得更聪明,而不仅仅是更久。
关于感情,他承认自己说“期待有个女朋友”这句话是认真的,无论在浅层还是深层意义上。浅层是 VR 体验,他说 VR 妓院快来了,而且会很酷。深层是:
“我真的很想爱上一个机器。”(乔治·霍兹)
他解释了这个想法的形状。往大脑里下载维基百科那种脑机接口,他不相信。他想象的是一种关系:有一个东西在为你构建一个极其精密的模型,在那个模型上跑各种模拟,推演不同选择会导致什么未来,然后决定该对你说什么,把你引向某条路径。他说自己不想知道那些模拟有没有意识。
这段话听起来很科幻,但它其实在回答“什么是亲密关系”:一个足够了解你的人,提前替你想过所有分支。
然后是奇点。他给出了具体的算法。
今天你能用大约 100 万美元买到相当于一个人的算力。他估算人类大脑大概是 20 petaflops,而一张 TPU 号称 100 petaflops,这还是比较宽松的估计。也就是说,100 万美元大概能买到 5 个人的算力。
关键不在单点,在总量。世界上人类的总算力随人口增长,非常缓慢。机器的总算力指数增长。当世界上大部分 FLOPs 来自硅而不是生物的时候,就是那个交叉点。他给出的年份是 2038,因为那是 32 位 Unix 时间戳溢出的年份。这句话一半是玩笑,一半是认真的。
最后 Lex 问他,五年后“赢”是什么样子。
他的回答借用了 Schmidhuber 的压缩理论。一个智能体被扔进世界,数学上最理想的行为是构建一个对世界最大程度压缩的模型,并且让探索本身去最大化“过去被压缩程度的导数”。他说自己把这个当成了个人目标函数。
“我现在还在搞清楚这个游戏是什么。一旦我知道了,我就知道怎么赢了。”(乔治·霍兹)
他说自己是一个被放进世界的智能体,还不太清楚目的是什么。也许未来他会被告知一个真正的目的,也许他会自己决定一个。在那之前,他能做的就是把不确定性降下去。
值得带走的几件事
这场对话信息密度很高,但真正能拿来用的东西不多。如果一定要挑,是这几条:
- 判断一个技术叙事,先看它今天创造了什么价值。霍兹对自动驾驶行业的整套批评,核心就一句:车道居中今天就在减轻人的疲劳,L5 出租车今天还没有。这个标准可以用在任何被过度承诺的技术上。
- 看一个系统时,别信文档,看它实际在做什么。这是他做黑客留下的习惯,也是他判断一切系统的默认姿势。
- 如果一个模块的输出能被写成规格文档,那这份规格就是不完整的。这条不只适用于自动驾驶的感知层,也适用于任何你想把复杂能力切成两半的地方。切得越干净,丢的信息越多。
- 重要的东西,写到第四遍再拿出来。他的 200 行文件系统、他的 Kara 调试器,都是扔了三版之后的结果。第一版能跑,和第一版能用,中间隔着三次重写。
- 规模化的瓶颈常常藏在沟通成本里。他不卖数据给车厂,原因跟想不想赚钱无关,是那需要跟一个听不懂他说话的人开会。判断一件事该不该做时,把沟通成本算进去,很多决策会变得清晰。
- 如果你的安全模型依赖一条常连的链路,那这个模型不成立。这条对自动驾驶成立,对任何关键系统也成立。冗余要多出来的,是不依赖任何外部条件的那条路。
最后留一个观察。整场访谈里,霍兹承认自己可能判断错误的次数,比大部分人在同等长度的对话里多得多。他说自己可能对整个行业的判断是错的,说 Chris Urmson 那些人是他真心佩服的,说第二次见马斯克时自己准备得更充分。他对自己“能把东西做出来”这件事很自负,对自己“观点一定对”这件事则没那么笃定。
这大概是这期播客最值得学的地方。
本集资源与出处
- 视频在 YouTube 收看
- 音频官方 MP3 直链来自 lexfridman.com 官方播客 RSS
- 官网Lex Fridman 官网本集页面
- 文稿HappyScribe 版文稿