与传统机器学习类似:LLM(大型语言模型)= 优化器;代码 = 参数;LangProp = PyTorch Lightning
欢迎来到云闪世界。您可能已经使用 ChatGPT 撰写电子邮件、总结文档、查找信息或帮助您调试代码。但我们能否更进一步,让 ChatGPT 驾驶汽车呢?
去年 3 月,当我开始在Wayve实习时,我们想要回答的就是这个问题。Wayve 是一家位于伦敦的自动驾驶初创公司,将端到端学习应用于城市驾驶这一具有挑战性的问题。当时,该公司即将成立其 LLM 研究团队,该团队已成功开发了LINGO-1和LINGO-2。AutoGPT刚刚问世,Voyager尚未问世。然而,LLM 带来的颠覆是显而易见的。问题是,我们如何将这项新技术应用于驾驶这个语言不是主要模式的领域?(完整代码和索引可联系博主)
在这篇博文中,我想概述一下我们的论文LangProp,该论文是我们上个月(2024 年 5 月)在 ICLR(国际学习表示会议)的 LLM 代理研讨会上发表的。
动机:让我们将 ML 应用于代码编写,确实是如此。
将 LLM 应用于驾驶的挑战有两个方面:首先,顾名思义,LLM 是非常大的模型,需要大量的计算并且运行速度很慢,这使得它们不太适合安全关键的实时应用,例如自动驾驶;其次,虽然语言擅长高级描述并且是逻辑、推理和规划的复杂工具,但它不具备描述观察和提供空间控制操作所需的粒度和细节。
然而,我们意识到,我们不一定非要使用 LLM 来推断驾驶行为。我们可以做的是让 LLM 自己编写驾驶代码。
如果您曾经使用 ChatGPT 编写代码,那么这听起来可能是一个糟糕的想法。它编写的代码很少能立即运行,并且经常包含一些错误。但是,如果我们使用 LLM 来检测错误并自动修复它们,从而迭代地提高代码质量,会怎么样呢?
我们进一步推进了这个想法——不仅仅是修复错误,我们还设计了一个训练框架,使我们能够改进 LLM 生成的代码,以实现您选择的目标函数。您可以“训练”您的代码以改进训练数据集并尝试减少损失。通过在验证数据集上运行代码,可以量化代码改进。
这听起来像机器学习了吗?因为它本质上就是!但我们是在微调 LLM 吗?不——事实上,没有经过微调的神经网络。相反,我们正在微调代码本身!
在 LangProp 中,“代码”是模型的参数,而 LLM 是引导参数向减少损失的方向改进的优化器。为什么这很酷?因为通过应用这种思维,我们现在可以以数据驱动的方式自动优化软件本身!通过深度学习,我们见证了数据驱动方法在解决难以描述的问题方面的强大力量。但到目前为止,机器学习的应用领域一直局限于由数值参数化的模型。现在,它们也可以处理用代码描述的系统。
如果您了解人工智能的历史,那么这是一种将曾经流行的符号人工智能方法与更现代、更成功的机器学习方法统一起来的优雅方法。符号人工智能是让人类专家以逻辑和代码的形式描述一个完美的世界模型。这有其局限性,因为许多复杂的任务(例如对象识别)超出了人类专家仅凭逻辑可以描述的范围。另一方面,机器学习让数据自己说话,并以自动化的方式拟合出一个最能描述它们的模型。这种方法在包括模式识别、压缩和函数逼近在内的广泛学科中都非常成功。然而,在逻辑、推理和长期规划领域,简单地用神经网络拟合数据往往会失败。这是因为在神经网络参数空间的模态中学习如此复杂的操作具有挑战性。有了 LLM 和 LangProp,我们终于可以应用数据驱动的学习方法来学习符号系统并自动改进它们。
免责声明
在我们进一步探讨之前,我觉得有必要先做一些免责声明。
- LangProp 的这项工作是 Wayve 的实习项目,并不直接反映公司的研发重点或战略。这篇博文的目的是将 LangProp 描述为一篇论文,这篇博文中的所有内容都是以我个人的身份撰写的。
- 虽然我们主要针对自动驾驶的情况展示了 LangProp,但我们也想强调它的局限性,例如 (a) 它需要对环境进行完美的观察,(b) 我们只让它在模拟环境中工作,距离实际部署还很远,(c) 生成的驾驶代码并不完美也不复杂,并且存在许多问题,不适合实际部署。我们将 LangProp 视为一个研究原型,展示了 LLM 应用于数据驱动软件优化的潜力,而不是一个可部署的产品。
如果您需要有关 LangProp 的局限性的更多信息,请查看我们论文附录中的局限性部分。
话虽如此,让我们看看 LangProp 是如何工作的!
LangProp 如何工作?
…我们带回了符号人工智能和进化算法
LangProp 的设计类似于 PyTorch Lightning — LangProp 模块会跟踪经过训练并用于推理的参数(脚本集合)。在训练模式下,策略跟踪器会记录前向传递过程中的输入、输出和任何异常。代码的性能由目标函数评估。根据得分,策略跟踪器会重新对当前存在的脚本进行排序,并将排名前 k 的脚本传递给 LLM 进行细化。在推理时,做出预测就像调用得分最高的代码一样简单。
LangProp 训练器需要训练一个 LangProp 模块、一个训练数据集和一个验证数据集。数据集可以是任何可迭代对象,包括 PyTorch Dataset 对象,这使得将 LangProp 应用于现有任务更加容易。训练完成后,我们可以保存一个检查点,它是精炼代码的集合以及一些用于对代码进行排名的统计数据。
我们用来选择最佳代码并改进它们的机制类似于进化算法,其中最初随机选择样本,但随后保留并扰动性能高的样本以产生新一代更适合的样本。
将 LangProp 应用于驾驶
现在让我们尝试使用 LangProp 来驾驶 CARLA!
CARLA是一款用于自动驾驶研究的开源驾驶模拟器。有一个排行榜挑战赛可以对您的自动驾驶汽车代理进行基准测试。我们在这次挑战赛中在标准路线和城镇上测试了 LangProp。
将 LangProp 制定为机器学习框架的好处是,现在我们不仅可以应用经典的监督学习,还可以应用模仿学习和强化学习技术。
具体来说,我们首先在离线数据集上进行训练(专家提供的包含状态和动作对的演示),然后进行在线部署。在线部署期间,我们使用 DAgger [1],这是一种数据集聚合技术,通过在线部署收集的样本会用专家标签进行标记,并与当前数据集进行聚合。
模型(代码)的输入是环境状态的 Python 字典,包括车辆和周围参与者的姿势和速度,以及与交通信号灯/停车标志的距离。输出是驾驶动作,即车辆应行驶的速度和转向角度。
每当出现违规行为时,例如无视交通信号灯或停车标志、与其他车辆、行人或自行车相撞,或长时间静止不动,都会对绩效分数产生惩罚。训练目标是最大化模仿学习分数(代理与地面真实动作标签的匹配程度)和强化学习分数(减少违规惩罚)的综合分数。
LangProp 驾驶代理实际作用
现在观看 LangProp 代理商的驾驶!
自动驾驶(1)
我们在训练过程中发现,ChatGPT 生成的初始驾驶策略存在很大缺陷。具体来说,它经常学习一种复制先前速度的幼稚策略。这是模仿学习领域中一种众所周知的现象,称为因果混淆 [2]。如果我们仅在离线数据集上使用行为克隆进行训练,与其他更复杂的策略相比,这种幼稚但简单的策略会获得较高的分数。这就是为什么我们需要使用 DAgger 和强化学习等技术来确保该策略在在线推出时能够发挥作用。
经过一两次迭代后,模型会停止复制之前的速度并开始向前移动,但要么过于谨慎(即只要附近有行动者就会停下来,即使他们不在碰撞路线上),要么鲁莽(向前行驶直到撞上行动者)。再经过几次迭代后,模型学会与前方车辆保持距离,甚至根据车辆的相对速度动态计算该距离。它还通过查看速度和位置矢量来预测其他行动者(例如,乱穿马路的行人)是否会与车辆发生碰撞。
在我们的的实验中,我们表明 LangProp 驾驶代理的表现优于许多之前实现的驾驶代理。我们将其与 PPO 专家代理(Carla-Roach [3]、TCP [4])和研究人员实现的专家代理(TransFuser [5]、InterFuser [6]、TF++ [7])进行了比较,发现 LangProp 的表现优于除 TF++ 之外的所有专家代理。所有专家代理都是在 2021 年 9 月 GPT 3.5 训练截止日期之后发布的,因此这个结果既令人惊讶又令人兴奋!
感谢您与我同行!虽然在这项工作中我们主要探索了 LangProp 在 CARLA 自动驾驶中的应用,但我们也表明 LangProp 可以轻松应用于更一般的问题,例如 CartPole-v1 的典型 RL 环境。LangProp 在可以以文本或代码形式获得性能反馈的环境或问题中效果最佳,这为模型提供了更丰富的语义信号,而不仅仅是数字分数。
类似 LangProp 的训练有无数种可能的应用,可以根据数据迭代改进软件,我们很高兴看到这个领域将会发生什么!
感谢关注雲闪世界。(亚马逊aws和谷歌GCP服务协助解决云计算及产业相关解决方案)
订阅频道(https://t.me/awsgoogvps_Host)
TG交流群(t.me/awsgoogvpsHost)