FSD v12 观后感

Elon 的直播:https://twitter.com/elonmusk/status/1695247110030119054

原来打算标题是:自动驾驶终局。后来觉得过于标题党。毕竟还没有亲测,踏踏实实的说一下观后感吧。

我第一次在网上看FSD的视频是三年前,自己开始使用是2021年12月24日,时至今日将近两年。从激动到无感。觉得如果按照这进步速度,完全自动驾驶不可能成功。

作为一个对人工智能和机器学习有一些皮毛认知的,早期种草并常年深度使用ChatGPT的,每天开FSD Beta的亲测者来说,这次的v12视频给我的感觉是:自动驾驶的路已经走通了。

我没有内部消息,根据马斯克和特斯拉团队公开透露的信息,说一说我对v12的理解,尤其是跟之前版本完全不同的方面。

首先当然是:end-to-end(端到端)

端到端是指模型从输入(摄像头、IMU等的原始数据)直接生成输出(加减速转向等车辆控制指令),而不需要人工定义的中间步骤或特征提取。这听起来容易,但是从几十年前的自动驾驶的雏形至今,大家对是否可能实现端到端,甚至对应不应该去尝试端到端,都没有统一的看法。因为端到端很难很难。

举个例子,在某种意义上,ChatGPT就是端到端。例如,训练ChatGPT的时候,并没有告诉它,在英语里面,名词复数要加s,有些特殊名词不加,有些加es;是“I am”,不是“I are”;形容过去发生的,用动词过去式等等。完全没有教以上这些语法,不单语法没教,什么都没有教。有的只是海量的文本,机器自己学着学着就会了,在这种大型语言模型成功之前,没有多少人相信不教机器语法,机器也会输出语法完美的文字。就如同不用学人类棋谱的AlphaGo Zero完胜AlphaGo,之后连围棋规则都不教的AlphaZero完胜AlphaGo Zero。

在自动驾驶领域,端到端就是,不用告诉它什么是交通灯,交通灯长什么样子,如果是红灯就必须停下来等到绿灯才可以走之类的,通通不用,它自己看海量的行车视频,学着学着就会了。

你说,那是不是它就通过对海量的视频学习,虽然不知道那个“东西”人类称之为交通灯,但每次看到这个“东西”呈现红色,视频里的本车(ego)都停下来,所以它就决定停下来呢?我觉得未必。因为端到端不存在显式的物体识别。自动驾驶的模型根本没有必要硬生生识别出一个“东西”。就如同一个母语是英语的小小孩,当他说“three apples”的时候,他并没有意识到英语里面名词复数要加s的语法,甚至在他脑袋里都没有名词这个“东西”。

这就是端到端模型成功驾驭一项技能之后显得特别诡异之处。我们太不习惯,除了人类以外,还有其它系统,竟然也可以拥有不能精准解释的直觉。就如同,一个小小孩不懂什么是名词,但依然能正确使用名词单复数的现象是可以理解并接受的;然而,一段代码或者一个人工智能不懂什么是名词,但依然能正确使用名词单复数是天方夜谭的。。。直到ChatGPT出现了。

当然,ChatGPT是懂名词的,你让它去解释英语语法,它比很多语法书都说得清楚明了。但当它输出“three apples”的时候,它并没有去刻意运用英语语法把s加上去。就如同一个母语是英语的成年人,就算懂语法,说“three apples”时,他没有刻意去运用在学校学到的语法,因为不需要,因为直觉更好用。

为什么我认为v12能产生可靠的“直觉”?这就要说说v12的第二个不同之处。

Foundation Model(基座模型)

例如,GPT就是一个基座模型。

基座模型需要大量通用数据进行预训练,GPT使用都就是维基百科和各种网上能收集到的海量高质量信息。基座模型有庞大的参数,就如同人脑的神经元。在自然语言领域,事实证明,当数据量和参数量达到某一个临界值,模型就开始“涌现”所谓的智能,开始呈现出一些对“投喂”的信息的突破表面的简单理解,而进入深层的重组织,这恰似人类把知识变成智慧的过程。

想要说明白自动驾驶的基座模型是如何训练的,就不得不先说说自然语言的基座模型(例如GPT)是如何训练的。

想象有这样一个黑匣子,里面有成万上亿的节点,每个节点有一个神奇的旋钮可以调整这个节点。只要你在匣子的一边输入一段文字,这段文字就会依次的经过那亿万节点,最终在匣子的另一边输出同一段文字并续写更多的文字。调整一下亿万个节点的其中一个的旋钮,同样的文字经过这个节点出来的“信号”就会跟之前不同,从而最后这个匣子的输出也会因此而跟之前不同。

让我们开始训练这个黑匣子。

首先,把亿万个旋钮都给拧到一个随机的位置上。

然后,我们挑一些文字,例如“大展身手”。给匣子输入“大展”,经过所有节点后,匣子输出“大展汽车”。

想象有一个数学方程,只要你把正确答案“身手”和匣子的输出“汽车”代入方程,它就给你算一个数值叫“错得多离谱值”。例如算出“身手”和“汽车”的“错得多离谱值”是0.67。

然后,你去随机的(但非常轻微的)拧一下那万亿个旋钮的其中一个。目标是,让调整后新的输出的“错得多离谱值”比0.67低,例如0.66。然后按这个规律再多拧几个节点的旋钮。目标是,每次调整后都让新的输出的“错得多离谱值”比拧之前低那么一点点。如果万一高了就往反方向拧一拧再试试。

从此,你日以继夜地给匣子输入所有的成语,日以继夜地拧那亿万旋钮,每次都朝着“错得多离谱值”低的方向迈进一小步。然后你甚至开始输入一句一句的话,慢慢的发展到输入一段一段的文章,一本一本的书,最后整个互联网的文字。至于输出,你从让它尝试输出一个字词,到让它尝试输出一句话,后来让它输出一篇文章。

就这样不断的让匣子学习,朝着“错得多离谱值”低的方向迈进,在海枯石烂前的某一天,你惊觉,现在每次当你输入:

“大展”

它就会输出:

“大展身手”

甚至,当你输入:

“小明在学校的才艺表演上大展”

它就会输出:

“小明在学校的才艺表演上大展身手,把同学们都震惊了。”

然后,你好奇的去试一下:

“隔壁餐馆开张营业,小明祝李老板生意兴隆,大展”

它竟然输出:

“隔壁餐馆开张营业,小明祝李老板生意兴隆,大展宏图,一本万利!”

它不但会“大展身手”,还会“大展宏图”。更重要的是,它运用自如,毫无违和感。那是因为在日以继夜的学习中,它见过了太多的跟生意祝贺有关的文字,更大的概率是使用“大展宏图”。

你或许已经留意到了,匣子在学习的过程中,有一个很重要的东西,叫做“注意力”(attention)。如果你输入“大展”,它不但会注意“展”,还会注意“大”,然后同时会注意“大展”。如果你输入的是一句话,它不单止会很注意学习最后的几个字,它还会注意整句话。如果你输入的是一段文字,学习的时候它会通读上下文。通过这种不断从整体学习,然后把注意力都放在它认为跟接下来要不断学习的(也就是不断降低“错得多离谱值”的)下一个词最有关的上文,它就学会了“跟生意祝贺有关的文字,更大的概率是使用大展宏图”的窍门。

这就是我之前强调的,这一代的大模型,它们不单有知识,而且已经有了智慧。知识是你所学到的事实和信息,而智慧是如何有效地使用这些知识来解决问题和做出决策。简单来说,知识是“知道什么”,智慧是“知道如何做”。

以上,是我这个阶段对训练基座模型过程的理解的一个高度简化的概括。部分类比过于简化,可能会导致对技术原理的误解,大家将就着理解吧。

现在重头戏来了。让我们用同样的方法训练一个懂得在真实世界驾驶汽车的“黑匣子”吧。

首先是训练材料,这次没有什么“大展身手”、“大展宏图”了,只有:

“你停在中间车道白线前,前面30米离地高度10米有个显示红色的交通灯,紧挨着你的右车道距离2米有一辆车,左面方向有一辆来车,两点钟方向35米开外的人行道上,有三个小孩牵着一条长得很像猫的狗,路的另一边。。。(一万五千字省略)”

把以上的文字输入黑匣子,让它尝试输出0.5秒后的情景,它输出:

“你越过白线前进了5米,来到十字路口中间,前面25米离地高度10米那个交通灯依然显示红色,紧挨着你的右车道的车,它原地不动,左面方向的来车前进了5米,两点钟方向30米开外有三个小孩牵着一条长得很像猫的狗沿着人行道前进了一米,路的另一边。。。(一万五千字省略)”

因为这个输出是一个“冲红灯”的输出,这明显是一个“错得多离谱值”很高的一个输出。于是你去拧那亿万个旋钮,让它错的没有那么离谱。

接下来的事情大家都熟悉了,不断的输入,不断的拧旋钮,日以继夜,海枯石烂。。。有一天,你惊觉,当你输入上面的同一段文字,它输出:

“你依然停在中间车道白线前,前面30米离地高度10米那个交通灯依然显示红色,紧挨着你的右车道的车,它原地不动,左面方向的来车前进了5米,两点钟方向35米开外有三个小孩牵着一条长得很像猫的狗沿着人行道前进了一米,路的另一边。。。(一万五千字省略)”

大彻大悟了,这就是大结局了?

但你说不对啊,车上摄像头只产生视频不生成文字呀,怎么才能转换成上面这段一万五千字的描述?

其实,这几十年,自动驾驶领域研究的就是物体识别,就是把一帧一帧的视频里面的物体识别出来,这个是汽车,这个是交通灯,这个是小孩,这个是猫。。。哦不,这好像是狗。然后很多厂家还用雷达或者激光雷达,得到一些物体的距离,如果视频的物体和雷达的物体吻合,就熔合在一起,成为视频上那个物体的距离数据。

但是,请注意,但是,开篇的时候我们提到,直到自然语言基座模型训练出来之前,人们总是痴迷于研究如何教会机器什么是名词,然后教会机器名词是怎么变复数的,因为人们不可以想象不教机器语法,机器也会输出语法完美的文字。

那人们痴迷于研究如何教会机器什么是车什么是小孩什么是猫狗,然后教会机器那些车,小孩和狗是如何走的,他们通常走多快等等,是不是也是不可以想象不教机器这些,机器就不知道如何驾驶呢?其实,如果有一个自动驾驶的基座模型,就不需要教机器识别物体了。就如同不需要教GPT语法。

基座模型不需要那一万五千字的输入,那它需要什么输入?它需要各个方向摄像头的原始感光数据(photon count)。

你说这有点扯吧。那些感光数据都是一长串人类无法看懂的0和1,连我们人类,都得先通过图像处理,才知道拍的是什么,若人类不帮忙,这黑匣子怎么从这串0和1之中分辨出里面的车啊人啊猫猫狗狗?别天真了,当你输入“大展身手”给黑匣子的时候,你以为它真的懂得你输入的是中文?对于它来说,也就是一长串0和1,跟人类看到的自以为是中文的输入没有半毛钱关系。

输入不再是文字而是感光数据,那输出呢?很简单,输出同样是感光数据。

那拿什么去跟这个输出比较,从而得出“错得多离谱值”?也很简单,安全的人类司机的驾驶数据。找真实记录的人类司机某一个时刻的原始感光数据作为输入,让黑匣子猜0.5秒之后的感光数据输出,然后对比人类司机驾驶0.5秒后的感光数据,就可以得出“错得多离谱值”,然后就可以拧那亿万个旋钮降低那个值,然后日以继夜海枯石烂。。。

下图看似是特斯拉七个摄像头在某一个时刻拍下来的。但其实不是,这是输入了一组真实的七个摄像头记录的感光数据之后,让“黑匣子”猜想下一个时刻(例如0.5秒后)七个摄像头最有可能看到什么。这七幅图都是生成出来的!

source: [CVPR’23 WAD] Keynote – Ashok Elluswamy, Tesla

你可能会问,这种生成下一个时刻的路况不难啊,游戏机上面的赛车游戏不都是这样生成一帧一帧的路况图吗?关键的不同是,赛车游戏是一行一行的代码调用Unreal或者Unity之类的图像引擎,按照一定的物理模型计算视野内每一个显示的物体的下一个位置。但用这个特斯拉的基座模型,没有代码,没有图像引擎,没有物理模型,没有物体,没有位置。。。这七幅图就像是我们画水彩画那样画出来的!

百模大战?

先假设特斯拉这种建立基座模型的路是真的走通了,接下来会不会像语言模型领域那样,出现百模大战呢?我的结论是不太可能。

首先是训练数据的来源。预训练的一个关键就是大量高质量的数据。对于训练自然语言,这数据基本是开源免费可用的。例如前几天发布的Falcon 180B,训练用的85%的数据是来自RefinedWeb。大量高质量的车载摄像头原始感光数据,现阶段特斯拉拥有超其他车厂几个数量级的数据。除非事实是,训练一个基座模型远远不需要特斯拉现有的数据量,又或者人工合成模拟数据就可以足够训练一个基座模型;否则,这个坎很难逾越。在GPT的时代,有不少团队是用GPT来生成人工合成文本来作为训练数据的,虽然训练出来的模型就是GPT的“学生”,但效果也很好。有必要的话,特斯拉自己可以这样训练,然而其他团队想用特斯拉生成的数据来训练自己的基座模型,那就要等到特斯拉开源模型或者提供付费驾驶模型调用服务的时候了。

然后就是训练数据的规模。对于自然语言,训练数据就是文本,TB级别的高质量数据就已经是整个互联网了。一个团队花点钱,买个云服务的GPU,花个一千几百万美金,吭哧吭哧的就训练完了。但视频原始(未经压缩)数据,小小一段动则几个GB。数据不能放在硬盘训练的,最好就是在GPU/TPU里面,不行也要在RAM里。特斯拉现在有PB级别的“热”存储。连互联网软件大厂都没有几个有这个规格的配置,不用说车厂了,那小团队就更别想了。

接着就是算力。跟上面一点类似,特斯拉的算力已经是对标互联网大厂的了。

那互联网大厂和车厂强强联手有戏吗?那需要天时地利人和。共同的愿景,超一致的决策,长时间的无缝合作,无条件的彻底给对方免费分享行车数据,和免费提供昂贵算力,而不问自己还是对方获益更多,推心置腹的信任,绑在一条船上的决心。。。

最后的最后,杀手锏是影子模式。这个模式很直白,就是如果车是人类在驾驶,自动驾驶就会在一旁预判,像个“影子”一样。当预判决策和人类司机的实际操控不一致,如果那人类司机是个“好榜样”,这一次操作就成为很好的“学习”数据。当然,影子模式更恐怖的使用方法是,自动驾驶系统在驾驶,下一个版本或者下一代的自动驾驶在一旁预判,出现预判不一致,就可以认真研究一下这两代自动驾驶,在这次操作上到底谁更优秀。闻到了AlphaGO Zero的双手互搏的味道了吧?这里已经没有人类的驾驶经验什么事了?可能是我孤陋寡闻,根据能找到的去年的一篇知乎,除了特斯拉,还没有其他车厂的车标配影子模式。要部署如此庞大数量的装备了影子模式的车辆到路面进行真实驾驶,其他车厂需要不止三五年。

当然,我是很不希望看到一家独大的,良性的竞争才能催生创新。真心希望各路英雄,八仙过海,寻找到突破口。

一些反直觉的引申

例如,它可以在不懂英文的情况下,按照路面标识行车,就算标识上写的是英文。如果是STOP它就停,如果是No Right Turn On Red,它红灯时就不去尝试右转。虽然它就是看懂了,但它就是不懂英文。

它自己决定行车速度。在老马的v12演示中,他一直把时速设在85英里。然而车子会根据沿路看到的限速牌,结合当前的路况和自身的车况,自行决定安全且合理的行车速度。

它自己决定行车路径,不需要高清地图,甚至不需要地图。新时代的司机可能会觉得这很扯,没有导航,甚至没有地图,怎么开车?!其实就在不远的二十年前,我当时在多伦多开车就是没有导航的。车上有纸质地图也大多数时间放在后备箱,除非你是在附近送餐的,一般是不需要查地图的。知道自己的出发地,如果去的是一个没去过的新地方,出门前大致查看一下要使用哪条高速,下了高速出去怎么拐,离目的地大概有多远,就可以出发了。沿路靠的是大方向和路上标识的指引。当然了,有时候会走错,饶一点弯路总能很快找到。其实就算现在,你如果在一个稍微有点规模的地下停车场,想要开出去,基本也是靠回忆自己进来的路径和方向,主要靠标识,慢慢的也开出去了,你总不可能上去问物业要一份停车场地图吧。当然了,有地图的指引,还是省很多弯路的,所以自动驾驶还是会参考地图。但估计对驾驶决策的权重会很轻,真的只是“出发时瞅一眼,走丢了拿出来看看”那种权重。

对这个使用地图与否的情况,再从通用人工智能(AGI)的角度多说一句。一定要地图的自动驾驶和不一定要地图的自动驾驶看似只是地图的区别,其实有着质的不同。由基座模型提供驾驶决策不依赖地图的自动驾驶,代表着的是一个智能代理(agent),是给任务就去执行,是仅掌握了驾驶知识和拥有驾驶智慧的区别。再直白点举例,如果你是一个老广州,但最近三十年都住在外地,现在回到广州,拿着三十年前的广州地图,你是依然有办法从白天鹅开到华南植物园的,可能有点绕,可能你走人民路东风路而不走内环路。但传统的自动驾驶,靠这张三十年前的地图,很有可能是到不了的,因为有些路改道了。然而拥有基座模型的自动驾驶就如同老司机那样,一定可以。

还有比较反直觉的就是,大部分的bug,修复它们并不需要改任何代码。而是用更多的类似路况在基座模型的基础上微调(还记得那些旋钮吗?)但不用亿万个旋钮都拧,拧其中很小很小一部分就可以了。然后每隔一段时间,例如一年,重新训练新的一代基座模型,就如同GPT3到GPT4。这种代际更新,需要的频率会越来越低。

好了,如果你竟然看到这里,谢谢!

One thought on “FSD v12 观后感

Leave a reply to Robotaxi 全国落地过程以及中美差异 – Weiran's Recycle Bin Cancel reply