Tesla的规控和阿尔法的狗狗——记Tesla Autopilot的规划和控制系统_学习_强化_函数

来源 |车右智能

知圈 | 进“滑板底盘群”请加微yanzhi-6,备注底盘

一些基础概念的修正和建立

图一【control and planning-36.png】来自知乎用户@徐俊杰的文章《自动驾驶课程Planning规划四》插图节选,取自URL:

回头看前三期文章里面的专业术语,确实有很多地方是不统一,甚至不专业的。从我们个人的阅读和理解的经验来说,如果读者具备和我们一样的思考维度,理解上倒是没什么问题。但实际情况就是每个人都拥有自己的专业方向和技术背景,由此造成的思考维度不一致是很常见的现象。因此如果文章中出现太多前后不一致(但表达的主要意思是一致的),或者不是业内约定俗成的技术术语,就会凭空增加阅读和理解的难度。这是我们和读者都不愿意看到的。

因此,我们这里参照一些比较正式的技术文章,给出一个清晰的背景定义,以避免阴差阳错鸡同鸭讲的尴尬局面。其关键就是对于规控部分的定义,请参照图1。小编认可这个结构上的划分,还是比较合理的。图1从左到右分别是:传感器层、感知模块Perception、Prediction预测模块、Planning规划模块和Control控制模块。小编用蓝色方框圈出两块是预测模块Prediction和规划模块Planning,在我们之前的系列文章中就没有做特别的区分,当作一体化处理了。但预测和规划的功能模块各自独立也毫无问题,且他们之间在时间序列上有先后关系:先对周围对象车辆做轨迹和行为预测,再在这个预测的基础之上做自车ego的路径规划。注意图1的预测模块和规划模块内部其实还分别做了更细的功能划分,也都有时间线上的先后关系:

1. 预测模块Prediction:Current State——>Trajectory——>Future States,意思是先捕捉到道路参与目标的当前状态,再预测其运动轨迹,最后给出一个时间范围内的未来场景状态;(小编:这里所谓的“时间范围”基本是指一个规划周期内,秒级尺度。预测时间拉得更长更远只会降低预测的置信度。)

2. 规划模块Planning:Route planning——>Behavioral Planning——>Motion Planning,具体含义是根据预测模块的输出和自身的驾驶需求(目的地导航规划结果),来综合制定自车在未来规划时间段内的Route,并据此决定车辆自身的驾驶行为,比如在Route上是左转、直行还是右转等等。最终还需要在Route上计算并输出Motion运动规划结果,成为随后的控制模块可以执行的油门、刹车和方向指令。

在这个Planning规划模块中,同时使用了Route、Behavioral和Motion等词汇,实际上我们之前文章中还使用过path、trajectory等词汇,容易引发混淆。我们希望读者这样理解:在Planning模块以内,Route+Behavioral是给出一个时间范围内,车辆行驶轨迹上的规划,它们只代表几何尺度上的含义,而不具备车辆运动动力学上的含义(比如:在route上的每个时间间隔上,车辆ego的速度、航向、加速度和加加速度等指标)。只有动力学指标对于后续的控制系统才有现实意义,所以Planning模块内部有一个Motion Planning的规划阶段,即完成此关键任务。读者可以把我们之前提到过的trajectory的概念和这里的Route的概念划等号(小编:需要特别注意的是,这个Route不是我们之前常说的导航功能所输出的Route路径的意思),这是我们讨论了三期的核心内容。

本文内将采用Route的概念来替代之前模糊的Trajectory和Path的概念。

Tesla FSD beta的规控架构

本片公众号的标题可能会引发部分读者的好奇心,但我们确实不想做一个言之无物的标题党。所以在谈论Alpha Go的下棋策略之前,我们需要先看一下FSD beta规控架构到底是怎样的,以及为什么我们会把它和阿尔法狗狗联系在一起。

图二【control and planning-35.png】来自Tesla 2021 AI Day演讲视频截图和后期加工,取自URL:

上图2是Ashok在AI Day 2021上所展示的FSD beta规控架构。请读者回忆我们之前的公众号文章,我们曾经提到过Ashok以一个地库停车场为例,来陈述A*算法用作自动驾驶Route planning的局限性,分两种情况:

1. A*原始算法,仅以到目标点的“几何距离最短”为Route搜索启发条件(单一的Heuristic),结果是40万次迭代才能发现一条不到三十米的路径搜索——Route Planning动作,代价惊人;

2. A*改良算法,不仅以到目标点的“几何距离最短”为启发条件,还增加了“导航线路”为另一个启发条件(两个Heuristic),结果的确有大幅度改善,但也需要两万多次迭代,才能找到一条满足需求的路径搜索结果——Route Planning动作,代价依然不小。

在规划模块中的Route确定过程中,如果要满足商业车辆运营在开放的道路环境中,提供那种实时性、高可靠性的路径规划算法,那么就必须依赖可以提供更加全面信息的Heuristic方式,从而能启发和加速路径搜索算法的质量和效率。

答案就是Ashok所强调的:神经网络。也就是图二的标题:Planning Using Neural Network Heuristic。我们分两部分描述:

图三【control and planning-37.png】来自Tesla 2021 AI Day演讲视频截图和后期加工,取自URL:

图3显示了规控模块的强化学习部分,这是标准的神经网络结构,小编相信它是来自于“强化学习”方法(小编:基本上机器学习可以分为三个主流部分,监督学习、无监督学习和强化学习)。我们在图上所能看到的h、f和g网络,从模块单元角度看,虽然不清楚其具体的网络模式:FC?CNN?or其它?暂时不考虑这个黑盒问题,有一点是清晰的,h、f和g网络,串联起来就是一个RNN-Recurrent Neural Network循环神经网络结构。

图四【control and planning-38.png】来自CSDN的专题文章《循环神经网络》,取自URL:

如果按照图4中RNN网络按照时间线展开,我们就可以发现,RNN 跟传统神经网络最大的区别在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。其中具体的,U是输入层到隐藏层的权重矩阵,o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。

我们对比图3和4不难发现,FSD beta的规划模块也遵循了RNN结构,强调在路径规划的时间线上,每一个feature map的输入都和前一个时间点的状态S和驾驶动作相关。这符合自动驾驶的现场需求,因为自动驾驶也是强烈的时间相关和伴随的状态相关。所以我们可以这样看待图3中的FSD beta规控架构:

1. h、f和g都是RNN中所定义的权重函数,但其功能意义各不相同;

2. h权重函数的输入为感知系统提供的feature map结果,应该是多重feature map,以获取全面的外界道路信息;输出为状态State,S0,S1…… 包含自车ego位置状态和周围环境的状态;

3. f权重函数的输入为状态State,输出则为车辆轨迹规划结果,即我们上一篇公号文章中所提到的“5 Constant Curvature Arcs——5个固定曲率的弧线来作为规划输出”。如果从驾驶动作的角度考虑,就是ego自车所采取的驾驶Action;

4. g权重函数则扮演了从State S0到S1,S1到S2…..的状态转移函数。

这里可能有读者在问,那么强化学习的要素体现在哪里呢?

Ashok的演讲并未提及这些实现思路,虽然不是百分百确定,但小编认为这些权重函数h、f和g(小编:你也可以把它们称作模型),大概率是应该通过强化学习的方法来获取的。最有可能的思路是:

1. 通过阴影模式的方法在实际的车辆驾驶行为中来记录人类驾驶员的操作动作;

2. 或者采用类似Waymo的ChauffeurNet的方式进行Behavior Cloning学习(小编:严格讲这不算强化学习,算监督学习);

3. 或者利用dojo平台的能力对这些数据进行筛选后,利用它们训练这些h、f和g函数(小编:这里用到的训练方法应该是在dojo仿真平台上、且利用强化学习的方法来离线训练这些函数);

4. 最后将这些Offline方式训练得到的h、f和g函数部署在Online规控链条中,上车发挥作用。

当然这仅仅是技术猜测,但当我们后续查看Alpha Go的下棋策略时(小编:DeepMind提供AlphaGo和AlphaGo Zero两个版本的公开原理论文,任何人都可以非常详细地了解其工作机理),我们可以看到它们之间存在千丝万缕的联系。关于强化学习,后续我们再谈这个话题。在图2所示的整体架构中,FSD beta在从“强化学习”所得到的RNN网络中,已经可以得到从“场景状态-S”到车辆行驶“动作-a”之间的映射关系了,即自车ego的行驶Route了。这是我们训练这些函数的目标,就是要找到精准的、可靠的驾驶轨迹Route。

那么看起来问题又来了,既然强化学习+RNN的网络模型已经可以提供Route输出了,为什么FSD beta还是需要将其Route输出给下图5中的Monte-Carlo Tree Search蒙特卡洛决策树剪枝方法呢?而这个MCTS的具体功能又是什么呢?

图五【control and planning-39.png】来自Tesla 2021 AI Day演讲视频截图和后期加工,取自URL:

如上图5所示,自车从状态S0开始起步规划本轮Route线路。根据图4的规控RNN网络输出可知(小编:读者应当注意的是,图5中MCTS树形图中的状态S节点之间的转移,依赖图4中从S到a之间的映射网络和输出):

第一步:在t0时刻:

为了能够让自车ego在规划范围内,最终抵达期望的终点位置,自车ego可以通过选择两个动作a0,分别是a00和a10来到达两个新的S1状态,分别是S01和S11。注意,这里的状态State,就是指自车的位置、周围参与物体的位置等信息,因为最终还是轨迹规划,而轨迹和位置直接相关。而a00和a10这两个动作在这一步、这一时刻这就是h、f和g函数的概率输出,而且它俩还是当仁不让的最高概率输出结果,伯仲难分……所以MCTS树修剪算法干脆同时选择它俩来建议(小编:也可以说是模拟,并未真实发生)自车ego可以采取的下一步的驾驶动作,即生成左右两个树形分支。于是在后台进行的MCTS算法更新过程当中,规控算法会同时采用两个动作进行Route规划操作。

第二步:在t1时刻:

在t1时刻,自车ego同时从S01和S11状态出发,利用RNN算法预测最合适的动作a,然后各自得到a01和a11后,进入状态S02和S12。注意在这个过程中,两个分支各自都是选择了唯一的动作,没有让双分支再进一步细分出更多分支。但明显地,S02状态并不理想,这可以较容易地从感知模块中获取相关信息,用于判定在S02状态下,是否存在碰撞风险?是否存在违反交通规则的风险?等等,只要未达到机器判定的风险等级标准,那就继续执行Route路线规划的预测工作。(小编:注意S02的状态颜色)

第三步:在t2时刻:

T2时刻是关键一步,自车ego在S02状态的基础下做动作预测得到动作a02,导致车辆进入S03状态,结果正是在这个状态发生了预测的人工接管(不是真实发生的);另一个分支上,从S12状态出发,得到两个高概率的预测动作a12和a22,后者导致自车ego进入S23状态,而系统很容易判定在这个Route的状态下,驾驶员和乘客的体感不够舒适……

由此,在这个MCTS的树修剪范围内,我们最终只看到一条最佳的Route存活下来,并最终走到规划的终点,S15状态。至此我们可以明白MCTS的作用:它可以甄选出强化学习和RNN无法取舍的S-a状态和动作预测,在其中找出更合理的预测选择;而所有的这些甄选过程都是通过计算模拟的,只要修剪甄选速度足够快,我们就可以在每个时间点都能选出未来时间段内的最佳Route。对于自动驾驶来说,这就是预先规划行为,而对于棋类运动的走子(策略)网络来说,这就是模仿高手的预先布局,只是凭借计算机的算力,它可以将这个预先发挥到极致,一眼看到终局。

截至目前,Ashok谈到的关于FSD beta规控对于神经网络的技术引用部分就这么多了。但如果你只阅读到这里,你可以只是停留在知其然而不知其所以然的状态。包括小编自己,在2021年AI Day过去这么久之后,一直没有对FSD beta的规控系统留下特别深的印象,就是这个原因。直到后来偶然接触到AlphaGo的落子策略,小编才意识到AlphaGo和FSD beta在这一块,很有可能是类似的。所以有下面的章节……

强化学习RL的基础概念

在本文中我们不打算花费很大篇幅去介绍强化学习的细节内容,因文中涉及的AlphaGo及其后续版本,是典型的强化学习落地案例,FSD beta是否使用了强化学习还存疑(但属于大概率)。所以需要协助读者建立一个基本概念,有助于理解围棋Go网络和FSD自动驾驶规划网络之间的关系,即可。

作为AlphaGo的发明公司,DeepMind本身也就是研究强化学习方法发家的。棋类运动因天然的博弈性、规则明确清晰和数字化样本获取成本低廉等特点,也特别适合棋类和游戏类娱乐或运动(比如Atari)以强化学习的方式落地。与之形成对比的是,在一些数字样本获取成本高昂的场景和行业,强化学习的推广和落地部署就特别困难。比如:医疗行业。强化则意味着在模型的训练过程中,甚至实践过程中都需要大量试错(小编:医疗行业的试错可能意味着生命的代价),而试错的代价有时是难以估量的。

技术上一个折中的手段是通过建立计算机“仿真环境”来降低模型的试错成本,例如在自动驾驶行业,建立仿真平台及环境来帮助强化学习方法落地就是一种惯用的技术手段(小编:这也是我们车右智能的本行)。但同样需要考虑的是,仿真世界再逼真,其和真实环境也不可避免地存在各种差异,这有可能导致强化学习在仿真环境下表现不错,但真实落地障碍却始终难以控制,这也是业内公认的难题。当然这属于另一个话题了,本文不涉及。

图六【control and planning-42.png】来自知乎账号“一点人工一点智能”的文章《自动驾驶前沿综述》,取自URL:

上图6中显示了标准的强化学习——Reinforced Learning架构。红色实体为Agent,即智能体;灰色实体为Agent所活动所依赖的外部环境;绿色功能模块为策略函数,对于自动驾驶来说,就是驾驶策略Driving Policy,代表Agent在Environment内活动的方式方法;紫色线条则包含了环境对于Agent策略的奖励(或者惩罚),以及环境自身的更新(或者可以理解为Agent对于环境的观察结果)。以上要素整体上形成了一个决策或者学习的闭环(黄色闭环)。

从第一性原理出发,强化学习是人类在现实环境中学习策略的基本方法之一。如果我们把图6中所描述的强化学习闭环直接在机器人实时环境中部署,并针对特定任务设计专用的奖励策略,那么我们就能在开放环境中部署一个针对特定任务的“基础智能”:机器人可以在开放环境中按照事先设计好的奖励策略,一步一步通过试错最终达成目标。这种完全依赖现场部署强化学习的方法同时具备强大的自主性(优点)和极低的达成效率(缺点)等特点。在完全陌生的环境下,可能这种方法是唯一可行的方法。小编相信送去火星和月球的漫步车,在导航规划和简单任务都会别无选择只有这种方法。

但如果在部署之前我们就能利用人类历史经验,得到一个较为成型的“策略函数-Policy”,并将其引入强化学习闭环,那么这个“基础智能”就可以避免从零起步,以一个合理的、各方都可以接受的试错成本开始执行特定任务,并在执行任务中(或者训练中)逐步完善自我。这个在AlphaGo的早期版本有所体现,它会利用模仿学习方法从人类高手所记录下来的16万对局中学习一个基本的落子策略作为起点,再进入后续的强化学习周期中通过自我博弈进行自我完善。

以上,总的来说这种将“强化学习闭环”的方法以整体形式落地实际环境的方法,有不可替代的优点,但也有两个明显的弱点:

1 实时性不强,不适合实时性非常高的任务,比如自动驾驶;

2 试错成本相对较高,有些场景下高得不可接受(即不允许试错)。

因此,现在强化学习通常的落地方法,是采取通过强化学习闭环来训练策略函数Π or价值函数V/Q(两者都可以用于策略Policy的探索、遴选和执行),将通过训练且达到部署标准的策略函数Π or 价值函数V剥离出来后,部署到实际应用场景。这种训练和部署分离的应用模式,和监督学习类似(小编:监督学习也是通过大量样本先学一个模型,再将模型部署到场景中去)。在Tesla的FSD beta规控模块中的f函数(请参考图3),应该就是类似的学习和部署方法。潜台词是,这和驾校培养人类驾驶员的基本原理是一致的。同样地,我们在AlphaGo的训练和部署方式中,也看到了类似方式的存在。

Alpha Go的秘密

谷歌控股的英国公司DeepMind,在六年前开始研发AlphaGo,后从欧洲冠军樊麾开始(AlphaGo内部版本),到李世石(AlphaGo版本),最后再到柯洁(AlphaGo Master版本),以及后来可以完全在训练中脱离人类棋局样本的AlphaGo Zero,前后也就两三年的时间。现在我们可以观察到具体技术细节的是AlphaGo和AlphaGo Zero的技术论文,第一作者都是DeepMind的Silver,下图7这位。具体论文链接可以google到,小编这里就不贴了。

图七【control and planning-43.png】来自B站大卫席尔瓦的访谈,取自URL:

我们之所以在自动驾驶领域提到围棋和AlphaGo,主要还是我们认为两者之间存在相当类似的应用场景、非常相似的最终网络架构,以及对于强化学习的运用思路。当然这里有很大的技术推测成分,仅一家之言,希望能给读者一个启示。

图八【control and planning-40.png】来自stackoverlfow.com网站文章《AlphaGo Zero board evaluation function uses multiple time steps as an input…》,取自URL:

图8显示了AlphaGo Zero版本的状态State描述方式。本质上它是一个维度为19*19*17的张量,其维度的含义为:

1. 19*19代表着棋盘参数,即围棋棋盘上可以落子的点数;如果落子了,那个点位就是1,如果没落子,那个点位就是0;

2. 17代表其中8张黑色平面给黑子用于记录过去8步的落子位置;而8张白色平面给白子用于记录过去8步的落子位置。这种描述方式下,可以想象越新的落子平面将会包含过去的落子局势;

3. 17平面中的最后一个平面,即图6中最底层的那个平面,将通过全0或者全1来指示当前最新一步是轮到黑棋还是白棋走。

以上19*19*17的张量即为AlphaGo所用来描述棋盘局势(State)基础,所谓的AlphaGo网络,其本质就是要利用这个张量所描述的棋盘的“势”作为AlphaGo策略函数Π的输入,然后输出足够高水平的应对落子点位,直到赢棋。读者在这里可以扩展着思考一下,上面这个表示围棋“势”的张量,其实和一个标准的十字路口的交通场景,没有本质区别。围棋的落子点位从多步尺度来看,其本质也是一种“轨迹”,如果确保己方落子所绘制出的“轨迹”能按照围棋的规则制胜,和如何确保让一辆自动驾驶的车辆顺利地、符合交通规则定义并无碰撞地穿越路口,也是寻找那个最优的“轨迹”。

回到我们前述对于FSD beta规划方案的介绍,我们把图3在这里再贴一次如下:

图九【control and planning-37.png】来自Tesla 2021 AI Day演讲视频截图和后期加工,取自URL:

我们认为图9在显式的RNN网络架构中,存在隐性的强化学习结果,即这里所显示的h、f和g函数。它们大概率是通过强化学习的方法训练出来的函数模型,这也符合人类培养驾驶员的一贯方法。在强化学习的领域,如前所述,我们将这些函数尤其是构成从State到action映射的f函数,称作策略函数——Policy Function(小编:往往用Π来表示策略函数)。

上图9中的f函数应该是标准的策略函数实现,它负责将路口状态State翻译成自车ego最应该对应的驾驶策略a,并输出a指导控制系统完成车辆控制。

图十【control and planning-41.png】来自王树森老师的强化学习介绍,取自URL:

注意:在本篇公众号文章中我们就不具体再展开讨论AlphaGo的Policy function和Value function是怎么利用强化学习的方法所得到的了,细节内容还是很多的,和本文讨论的焦点问题也不一致。所以我们只需要知道他们是经过标准的强化学习(其中policy function还利用了模仿学习的技术)过程最终形成的即可。

图十一【control and planning-44.png】来自:

当AlphaGo手握训练完备的Policy network和Value network的时候,它处理每一步落子的方法并非直接依赖Policy network的输出。在上图11的左侧,落子策略网络会选择和另一个简化版本的走子网络(为了更低的时延)形成左右手对弈,一直下到终局。后根据终局的胜负结果,来判定落子策略网络的输出是否足够靠谱。这种判定的方法就是MCTS剪枝方法,如下图:

图十二【control and planning-45.png】来自:

/ ;

MCTS的剪枝方法的出发点是,更好地评估Policy——落子策略网络的输出,是否真的可以帮助AlphaGo战胜人类顶级选手。这一点可以比较容易地理解,因为策略网络的训练水平,严重依赖人类所能提供的有效训练数据,如果数据的多样性不够,那么policy network的输出就有可能被从未见过的招数所击败,或者出现局部受损。只有利用算力在尽可能出现频率高的应对手后尽量评估各种情况,甚至一路评估到终局,这样筛选出来的应对手,才是“最佳的”,至少可以保证战胜人类。实际上正是如此,在AlphaGo Master在2017年对阵当时的世界第一人柯洁时,柯洁的等级分大概3800多分,而经历网上上百盘匿名对弈的AlphaGo Master版本,已经是4800多分了。这几乎就是柯洁和业余高手之间的对决胜负率了。当前的AlphaGo Zero据说内部对弈Master版本时,可以做到100:0全胜。这就是MCTS+强化学习策略网络+算力的实力。

具体MCTS如何从落子策略网络中找出最佳应对手呢?请参考上图12。他是分为四个过程,在快速对弈到终局之后,进行打分,分高的着法被挑选出来,被AlphaGo呈现在屏幕上。有点类似柯洁每下一步之前,都回头和古力、马晓春、聂卫平模拟对弈到终局好多盘,然后选出自己最满意的着法,再回头和AlphaGo下出这一手落子一样,只是人类算力远不能和计算机媲美而已。

Alpha Go和FSD beta

同理,在FSD beta这一侧,策略网络形态的f函数输出的驾驶动作a,同样没有被车辆的控制模块立即采用,而是被拉进MCTS树结构中进行剪枝操作,从而能够在f函数输出的动作a后选中,挑选出最好的a,来同时满足效率、安全和舒适性的统一(小编:注意,图12的AlphaGo和图5的FSD beta在架构和原理上是完全一致的)。这明显是更好的策略Policy和路径Route遴选方法,从而让自动驾驶的规划系统可靠性上再上一个台阶。只是在路径规划的角度看,车辆通过一个十字路口的难度在计算上要小于围棋棋盘上的关键一手;但从动态目标实时变化的态势上看,对于自动驾驶预测系统的要求相对较高,而围棋没有这个需求,都是静态局面。

根据我们的观察,路径规划的结果经常会出现跳变和抖动,就是交通合作动态目标的超出预测的机动行为所导致,当然这是超出规划模块能力范围的,只能尽力适应和调整。因此,我们说自动驾驶系统的预测模块,是规划模块是否准确的前提;而感知模块的准确性又是预测模块的前提。环环相扣,少了谁也不行。

==卷尾语===================

本文不带有任何立场和倾向,我们只是从公开资料着手,试图分析行业主流技术的原理和表现,让读者可以在多种自动驾驶系统实现中做横向对比和思考。

码字不易,读者如果看着有收获,欢迎转发,请注明来自微信公众号—车右智能。

车右智能:一个一直用心仿真的自动驾驶技术信徒

info@co-driver.ai

备注:

1 封面底图来自互联网插图,URL资源:

特别声明

本文仅代表作者观点,不代表本站立场,本站仅提供信息存储服务。

分享:

扫一扫在手机阅读、分享本文