24年6月来自UMass Amherst,、MIT CSAIL和MIT LIDS的论文“Text-to-Drive: Diverse Driving Behavior Synthesis via Large Language Models”。
通过模拟生成各种场景对于训练和评估安全-关键系统(例如自动驾驶汽车)至关重要。然而,对其他车辆的轨迹进行建模以模拟各种有意义的密切互动仍然成本高昂。采用语言描述来生成驾驶行为,是一种很有前途的策略,为人类操作员提供了一种可扩展且直观的方法来模拟各种驾驶互动。然而,大规模注释语言-轨迹数据的稀缺使得这种方法具有挑战性。为了解决这一差距,Text-to-Drive (T2D),通过大语言模型 (LLM) 合成各种驾驶行为。其引入一种分两个阶段运行的知识驱动方法。在第一阶段,用 LLM 的嵌入式知识为场景生成驾驶行为的各种语言描述。然后,用 LLM 的推理能力在模拟中合成这些行为。T2D 的核心是使用 LLM 构建状态图,将低级状态映射到高级抽象。该策略有助于完成下游任务,例如总结低层观测、评估策略与行为描述的一致性以及塑造辅助奖励,所有这些都无需人工监督。
如图所示:给定一个场景描述,T2D 利用大语言模型生成驾驶行为的多样化描述,然后在模拟中合成它们。
当前的模拟器在控制周围车辆的行为和扩展这些互动方面面临着重大挑战。
在模拟中添加不同的驾驶行为可以促进对不同驾驶行为概况进行全面测试。
这解决了数据驱动模拟器使用的驾驶数据集中固有的偏见,这些数据集往往范围有限,并且来自狭窄的地理区域。
克服这些限制的一个有希望的方向是将基础模型的功能扩展到模拟器中。知识驱动的方法利用大语言模型 (LLM) 的嵌入式知识来策划全面而多样的驾驶场景,从而无需对潜在的交互进行详尽的手动脚本编写。此外,利用自然语言来控制这些场景的生成,提供了一种直观的方法来指定所需的行为轨迹。该技术允许基于语言描述生成驾驶场景,使人类操作员更容易策划有意义的测试用例。该策略的一个显著应用是将文本数据(例如事故报告)连接到现实世界中的地面模拟。本文工作采用这种知识驱动的方法,利用丰富的知识源来生成多样化的驾驶场景。这种方法可以补充仅依赖于人类驾驶数据的数据驱动模拟器。
如图所示T2D概述。左图:首先,LLM 生成驾驶行为的各种描述,这些描述可以通过自然语言界面融入人类偏好。中间图:接下来,LLM 根据驾驶行为描述生成
低级状态翻译器 (LLST)
、主函数和辅助函数。LLST 将低级状态转换为抽象状态(参见中间下方块中的示例),然后记录其状态访问历史记录(参见右下方块中的示例)。主函数仅在车辆表现出目标行为时才给予奖励,使用有限状态机对行为出现进行形式验证(参见左下方块中的示例)。辅助函数为达到中间状态提供奖励,并且可以迭代更新。右图:最后,采用标准多智体 RL 框架,以主函数和辅助函数为指导,训练驾驶策略。
生成行为描述
在知识驱动方法中,用 GPT-4 的零样本生成功能,从场景的简明描述中生成各种驾驶行为的描述 L ∼ πL (.|scene)。对于每种场景类型(交叉路口、合并路口、高速公路),生成 50 种驾驶行为描述。然后,为每个场景选择一个较小的、具有代表性的六种行为子集进行模拟,以提供对所有生成行为的详细分析。
从环境检索
通过检索增强生成 (RAG) 增强代码生成模型 πC,以提供有关模拟环境充分的上下文。这涉及使用
抽象语法树 (AST)
对源代码进行分段,使用文本嵌入模型 (text-embedding-ada-002) 嵌入代码,并将嵌入存储在数据库中。为了保留代码段之间的依赖关系,用 ctags 生成存储库映射。这里用 LangChain 来实现 RAG 框架。
在检索过程中,用行为描述 L 来查询嵌入数据库并检索相关代码段。用此代码和存储库映射作为 π 的上下文。使源代码可访问,用有关低级状态的 API 丰富代码生成模型。例如,在处理行为“加速合并入口匝道”时,模型可以利用属性 car.speed 并访问函数 car.on ramp()。此检索可确保在代码空间中可以获取驾驶策略的低级观察结果。
底层状态翻译器
给定行为描述 L,代码生成模型 πC 生成一个低级状态翻译器 M ∼ πC (.|L)。状态翻译器 M 有三个主要职责:(1)分解行为,(2)将低级状态映射到抽象状态,(3)记录抽象状态访问。首先,M 将行为分解为抽象状态 Q。每个抽象状态 q ∈ Q 捕获驾驶行为的一个基本方面。例如,在“在入口匝道上晚点合并”的情况下,q 可以是“在入口匝道上”、“合并”和“在入口匝道末端附近”中的任何一个。这种分解有四个优点:首先,它将行为离散化为关键阶段以捕捉行为的不同方面;其次,它将 Q 限制为与目标行为相关;第三,通过合并初始的益处,它提供清晰、客观的指导,使 M 的生成更加一致和可靠;最后,它允许状态名称位于语言域中。
此外,M 由 LLM 构建为状态图。将 M 定义为多元组 M = (Q,T,E,U,G),其中 T 是由事件 E 触发的转换集,以 G 的一个保护(guard)为条件,并导致来自 U 的更新操作。E 的事件表示驾驶环境内的低层变化,例如速度、位置和航向。G 的保护是布尔函数,在低级状态下在某些条件下返回 true。用 LLM 的代码生成功能来实现保护的条件和抽象状态名称之间的语义对齐。此步骤利用代码生成模型 πC 和 RAG 框架。具体来说,用 gpt-4-1106-preview 变型 [26] 并将温度设置为 0.2。由于任务的客观性,此决定旨在获得更确定的输出。
翻译器从 U 执行的更新操作,会导致状态历史字典 HQ 更新,该字典保留所有抽象状态访问的历史记录。在每个时间步长上,它都会附加一个布尔值,指示是否已访问过某个状态。在 T 个时间步长内,状态历史字典 HQ 可以表示为 H : Q → {true, false} 。然后 HQ(q) = Hq 是与 q 相关的访问历史。这既可以识别当前状态占用情况,也可以跟踪状态访问和转换。这些特性非常有效地总结驱动策略的低层观测,提供回代码和语言空间。
主要奖励函数
LLM 生成的主要函数 RP,它将 HQ 作为输入并返回奖励 RP : HQ → {0,5}。此函数有两个目的:首先,它评估驾驶策略 πP 与目标行为 L 的行为一致性;其次,当车辆表现出目标行为时,它会给予大额奖励。为了生成 RP ∼ πC (.|(Q, L)),将抽象状态名称 Q 和行为描述 L 组合作为 πC 的输入。LLM 将 RP 构建为对目标行为 L 进行建模的有限状态机 (FSM)。该 FSM 可以描述为一个多元组,RP = (Q, Σ, δ, q0, F );其中 Σ = {q|q∈Q} 是输入字母表,δ: Q×Σ → Q 是转换函数,q0 是初始状态,F 是接受状态,表示已实现目标行为。
RP 的抽象状态利用状态翻译器 M 中的 Q。将 M 中的每个 q ∈ Q 视为表示行为快照的代码抽象。例如,状态“入口匝道末端”是条件 0 < car.headway () < 30 和 car.on ramp() 的抽象。然后,行为转换函数 δ 在抽象状态之间添加转换,以捕捉目标行为的时间动态。这对于“晚时合并”等驾驶行为特别有用,这需要在转换到“合并”状态之前访问“入口匝道末端”。由 LLM 生成的 FSM 形式结构,提供一个框架用于验证由 H 给出的抽象行为序列。该策略将 LLM 的推理封装到一个紧凑的 FSM 中,可以在 LLM 推理后访问。这种结构化格式使离线应用程序能够利用 LLM 的推理来评估驾驶策略训练期间的行为一致性。在实现中,将环境最小速度设置为 0,这样车辆无法倒车,从而避免复杂的 RP 生成。
然后,用 FSM 在车辆达到可接受状态 F 时给予奖励。方法的一个重要细微差别是状态翻译器和主函数之间的双功能关系。状态翻译器将驾驶策略的低级观察抽象到代码域中,而 RP 在代码域中评估这些抽象并提供奖励以指导驾驶策略 π。这种互惠关系鼓励跨不同空间的行为一致性。
辅助奖励函数