AI SoC入门:14从Transformer大模型到端到端自动驾驶算法
原创 thatway1989 那路谈OS与SoC嵌入式软件 2024-12-04 21:08
本系列之前的文章基本把芯片非AI的讲完了,剩下的就是MIPI--》ISP--》NPU还有VPU的内容了。
本文属于科普类
,不仅芯片和底层软件从业者,所有的人都适合阅读,都需要使用AI来提高工作能力
,非常重要!!!
欢迎推荐转发给你的朋友
。
介绍这些之前,我们从事情的开始:2022年11月30日OpenAI公司基于GPT-3的聊天机器人ChatGPT,引发LLM大语言模型巨大的应用热潮,甚至被誉为第四次工业革命。时间很近,距今基本两年左右,结果是直接将AI和其附属的AI芯片推向了风口,英伟达更是躺赢起飞,而且欧美对AI的**软硬件技术对中国也加强了封锁**。
其实LLM的迅猛发展离不开硬件芯片的进步,OpenAI也正是用了NVIDIA GPU为其GPT模型提供动力,才实现了大量数据**的训练从而诞生了ChatGPT。谷歌最早2017年发布的Transformer算法论文,但是当时的谷歌不知道用大算力的GPU进行硬件并行计算加速进行大规模数据的计算,也可能但是的GPU不成熟,然后到了2022年让OpenAI捷足先登了。总之,AI的发展跟芯片的算力息息相关,很多时候软件算法很早就做出来了,但是硬件不满足,无法实施和应用**,更不知道最终的效果如何,这也是AI SoC的价值所在。
我们这里讨论的AI SoC,如果没有AI那就没有了研究的意义,直接买一个高通的手机芯片更便宜,那个出货量大,这也是座舱安卓独立目前没必要被大SoC兼并的原因:便宜。但是要搞AI就需要自己在SoC中集成AI功能的NPU及其附属系统了,就是要利用硬件来加速Transformer这种神经网络算法,来为APP服务。
对于科技我们经历了PC、手机的时代,但是手机已经无法支撑AI应用场景的落地,目前的汽车、机器人、飞行器会更加的合适,拥有更大的电源和强的算力支持。马斯克还是牛,将金融和科技进行了好的融合,不光投资,亲自带队干干:特斯拉、OpenAI等,而且很先进。新的行业机会多,多追追风口有好处。
之前的文章SoC入门-3自动驾驶AI芯片框架
介绍了AI SoC里面的大致构成,在AI SoC入门-5NoC总线
文章里面有更清晰的解释,这里摘抄过来:
一般SoC都有一个
NoC通信的图,上图只是一个举例,实际在AI SoC中会更加的复杂,可以看到。不同的IP接入NoC时可以根据需求选择需要的功能接入。一般独立连入NoC的子系统如下:
CPU子系统:里面有很多core,通过cmn连接到NoC;其他gic、dma、etr、rom、pvt、mailbox等通过
DDR子系统:内部会通过硬件IP区分安全区域和非安全区域的访问,例如使用tzc的IP,一般通过APB接入NoC。
SRAM:一般通过AXI总线接入NoC
CRU:控制SoC的clock和reset功能,一般是整个SoC控制的CRU在安全世界权限。子系统内部也有CRU,不是直接接入NoC。
DTM:追踪调试器
CM:加解密引擎
UFS:与传统的eMMC存储相比,UFS在性能上有显著的提升。UFS具有串行接口、全双工通信和分层架构的优势,可以提供更高的数据传输速度、更低的功耗和更大的存储容量。
LSSY:低速外设子系统,包括gpio、spi、i2c、qspi、uart等
HSSY:高速外设子系统,包括eth、usb、SD、DMA
MIPI:负责相机信息的传输,通过CSI接入NoC
ISP:对MIPI过来的信息进行处理,例如白平衡、降噪等,之后给NPU进行AI处理。里面会嵌入一些流媒体信息处理的NoC来接入外面总的NoC总线。
NPU:一般AI使用了大量数据,NoC会有独立的资源分配,例如DDR中会有独立的NPU NoC通路连接,不用跟其他的子系统争夺资源。
VPU:视频编解码处理单元。在NPU处理完视频图片对识别的物体进行标示后,一般需要显示在座舱里面的屏幕上,这时候的数据传输压力比较大,就需要用上VPU进行编解码后显示,或者编码后的摄像头数据直接上传到云端。
FSI:功能安全岛,监控整个系统的状态,对错误进行处理。
FCCUMUX:故障上报配置相关,用于实现功能安全
PMU:电源管理单元,一般高级的SoC,PMU有自己独立的核和固件,独立接入NoC
本系列之前的文章基本把非AI的讲完了,剩下的就是MIPI--》ISP--》NPU还有VPU的内容了。
1. LLM介绍
1.1 LLM发展历程
1.1.1 NLP
大型语言模型(LLM)的创建并非一蹴而就。语言模型的第一个概念始于被称为自然语言处理(NLP)的基于规则的系统。这些系统遵循预定义的规则,根据文本输入做出决策并推断结论。这些系统依靠if-else语句处理关键字信息,并生成预定的输出。可以将其想象成一个决策树,如果输入包含X、Y、Z或没有包含这些字母,则输出则是预先确定的响应。例如:如果输入包含关键字“母亲(mother)”,则输出“你母亲怎么样了?(How is your mother)”。否则,输出“你能详细说明一下吗?”。语言建模的研究始于20世纪90年代,最初采用了
统计学习方法,通过前面的词汇来预测下一个词汇。然而,这种方法在理解复杂语言规则方面存在一定局限性。
1.1.2 神经网络
最早取得的重大进展的是神经网络。1943年,数学家沃伦·麦卡洛克受到人脑神经元功能的启发,首次提出“神经网络”这一概念。神经网络甚至比“人工智能”这个术语早了大约12年。每一层的神经元网络都以特定的方式组织,其中每个节点都有一个权重,决定了它在网络中的重要性。最终,神经网络打开了封闭的大门,为人工智能的发展奠定了基础。2003年,深度学习先驱Bengio在他的经典论文《A Neural Probabilistic Language Model》中,首次将
深度学习的思想融入到语言模型中,使用了更强大的神经网络模型,这相当于为计算机提供了更强大的“大脑”来理解语言。这种方法让模型可以更好地捕捉语言中的复杂关系,虽然这一步很重要,但仍有改进的空间。
1.1.3 单词嵌入
计算机无法像人类一样理解句子中单词的含义。为了提高计算机对语义分析的理解能力,必须首先应用单词嵌入技术,该技术使模型能够捕获相邻单词之间的关系,从而提高各种NLP任务的性能。然而,需要有一种方法将单词嵌入存储在内存中。长短期记忆(LSTM)和门控循环单元(GRU)在神经网络中是一个巨大的飞跃,它们能够比传统神经网络更有效地处理序列数据。虽然LSTM在某些情况下已不再使用,但这些模型为更复杂的语言理解和生成任务铺平了道路,这些任务最终导致了Transformer模型的诞生。
1.1.4 Transformer
2017年谷歌《Attention Is All You Need》论文引入了
Transformer架构的神经网络模型,通过大量文本数据训练这些模型,使它们能够通过阅读大量文本来深入理解语言规则和模式,就像让计算机阅读整个互联网一样。所以它对语言有了更深刻的理解。这种方法在很多任务上表现得非常好。Attention机制使transformer的根本创新成为可能,它实现了语言处理的并行化,即同时分析特定文本中的所有单词,而不是按顺序分析。在这篇论文发表之后,谷歌的BERT在2018年被开发出来,并被誉为为所有NLP任务的基线。作为一个开源模型,它被用于众多项目中,为人工智能社区提供了构建项目和成长的机会。它的场景理解能力,预先训练的本质和微调选项,以及Transformer模型的演示,为开发更大的模型奠定了基础。
1.1.5 LLM
LLM(大语言模型):与此同时,研究人员发现,随着语言模型规模的扩大(增加模型大小或使用更多数据),模型展现出了一些惊人的能力,通常在各种任务中表现显著提升。这时我们进入了大语言模型 (
LLM ) 时代。除了BERT之外,OpenAI公司还发布了GPT-1,这是他们的Transformer模型的第一次迭代。GPT-1拥有1.17亿个参数,随后GPT-2(2019年发布)实现了巨大飞跃,参数量增长至15亿个,而GPT-3(2020年发布)更是达到了惊人的1750亿个参数。OpenAI公司基于GPT-3的聊天机器人ChatGPT在两年后的2022年11月30日发布,并引发巨大的应用热潮,真正实现了强大人工智能模型的民主化。
1.1.6 AGI通用人工智能
LLM已经在许多领域产生了深渊的影响:
在
自然语言处理领域,它可以帮助计算机更好地理解和生成文本,包括写文章、回答问题、翻译语言。在
信息检索领域,它可以改进搜索引擎,让我们更轻松地找到所需的信息。在
计算机视觉领域,研究人员还在努力让计算机理解图像和文字,以改善多媒体交互。
最重要的是,LLM的出现让人们重新思考了
通用人工智能 ( AGI ) 的可能性。AGI是一种像人类一样思考和学习的人工智能。LLM被认为是AGI的一种早期形式,这引发了对未来人工智能发展的许多思考和计划。总之,LLM让计算机更好地理解和使用语言,正在改变着我们与技术互动的方式,同时也引发了对未来人工智能的无限探索。
LLM的发展历程虽然只有短短不到五年的时间,但是发展速度相当惊人,截止2023年6月,国内外有超过百种大模型相继发布。按照时间线给出了2019年至2023年6月比较有影响力并且模型数量超过100亿的大语言模型,如下图所示:
闭源LLM:
GPT系列,openAI公司
Claude,Anthropic 公司
paLM系列,谷歌
文心一言,百度
星火,科大讯飞
开源LLM:
LLaMA系列,Meta公司开源:https://github.com/meta-llama/llama
GLM系列,清华大学和智普:https://github.com/THUDM
通义千问,阿里巴巴:https://github.com/QwenLM/Qwen/tree/main
Baichuan,百川智能:https://github.com/baichuan-inc
参考:https://www.51cto.com/article/794670.html
1.2 LLM特点
LLM能被推向如此高度的核心就是“涌现能力”。
大语言模型(LLM)指包含数百亿(或更多)参数的语言模型,这些模型在大量的文本数据上进行训练,计算机的“大脑”变得非常巨大,拥有数十亿甚至数千亿的参数。这让计算机可以在各种任务上表现非常出色,
有时甚至比人类还要聪明。为了探索性能的极限,许多研究人员开始训练越来越多庞大的语言模型,例如拥有1750亿参数的GPT-3和5400亿参数的PaLM。尽管这些大型语言模型与小型语言模型(例如BERT的3.3亿参数和GPT-2的15亿参数)使用相似的架构和预训练任务,但它们展现出截然不同的能力,尤其在解决复杂任务时表现出了惊人的潜力,这被称为“
涌现能力”。以GPT-3和GPT-2为例,GPT-3可以通过学习上下文来解决少样本任务,而GPT-2在这方面表现较差。因此,研究界给这些庞大的语言模型起了个名字,称之为“大语言模型(LLM)”。而LLM的一个杰出应用就是ChatGPT,它是GPT系统
LLM用于与人类对话式应用的大胆尝试,展现出了非常流畅和自然的表现。
涌现能力指的是一种令人惊讶的能力,它在小型模型中不明显,但在大型模型中显著出现。可以类比到物理学中的相变现象,涌现能力的显现就像是模型性能随着规模增大而迅速提升,超过了随机水平,也就是我们常说的量变引起了质变。
具体类说,涌现能力可以定义为与某些
复杂任务相关的能力,但我们更关注的是它们具备的通用能力,也就是能够应用于解决各种任务的能力。接下来,让我们简要介绍三个典型的LLM涌现能力:
上下文学习:上下文学习能力是由GPT-3首次引入的。这种能力允许语言模型在提供自然语言指令或多个任务示例的情况下,通过理解上下文并生成相应输出的方式来执行任务,而无需额外的训练或参数更新。
指令遵循:通过使用自然语言描述的多任务数据进行微调,也就是所谓的指令微调,LLM被证明在同样使用指令形式化描述的未见过的任务上表现良好。这意味着LLM能够根据任务指令执行任务,而无需事先见过具体示例,这展示了其强大的泛化能力。
逐步推理:小型语言模型通常难以解决涉及多个推理步骤的复杂任务,例如数学问题。然而,LLM通过采用“思维链”推理策略,可以利用包含中间推理步骤的提示机制来解决这些任务,从而得到最终答案。据推测,这种能力可能是通过对代码的训练获得的。
LLM具有多种显著特点,这些特点使它们在自然语言处理和其他领域中引起了广泛的兴趣和研究。以下是LLM的一些主要特点:
巨大的规模:LLM通常具有巨大的参数规模,可以达到数十亿甚至数千亿个参数。这使得它们能够捕捉更多的语言知识和复杂的语法结构。
预训练和微调:LLM采用了预训练和微调的学习方法。它们首先在大规模文本数据上进行预训练(无标签数据),学会了通用的语言表示和知识,然后通过微调(有标签数据) 适应特定任务,从而在各种NLP任务中表现出色。
上下文感知:LLM在处理文本时具有强大的上下文感知能力,能力理解和生成依赖于前文的文本内容。这使得它们在对话、文章生成和情境理解方面表现出色。
多语言支持:LLM可以用于多种语言,不仅限于英语。它们的多语言能力使得跨文化和跨语言的应用变得更加容易。
多模态支持:一些LLM已经扩展到支持多模态数据,包括文本、图像和语音。这意味着它们可以理解和生成不同媒体类型的内容,实现更多样化的应用。
涌现能力:LLM表现出令人惊讶的涌现能力,即在大规模模型中出现但在小型模型中不明显的性能提升。这使得它们能够处理更复杂的任务和问题。
多领域应用:LLM已经被广泛应用于文本生成、自动翻译、信息检索、摘要生成、聊天机器人、虚拟助手等多个领域,对人们的日常生活和工作产生了深远的影响。
伦理和风险问题:尽管LLM具有出色的能力,但它们也引发了伦理和风险问题,包括生成有害内容、隐私问题、认知偏差等。因此,研究和应用LLM需要谨慎。
1.3 LLM关键组件
大型语言模型(LLM)的核心组件和架构是其成功的关键。下面我们将深入解析几个关键组件:
Transformer架构深入解析:
Transformer架构是大型语言模型背后的核心架构。它采用了自注意力机制来捕捉输入序列中的长距离依赖关系,避免了传统循环神经网络(RNN)中存在的梯度消失问题。Transformer包括编码器和解码器两个部分,其中编码器用于将输入序列编码为隐藏表示,而解码器则用于根据编码器的输出生成目标序列。
自注意力机制(Self-Attention)的工作原理:
自注意力机制是Transformer架构的核心之一。它允许模型在处理每个输入位置时都可以关注到其他位置的信息,并且可以动态地调整不同位置的重要性。通过计算每个位置与其他位置的相关性,自注意力机制可以有效地捕捉序列中的语义关系,从而提高模型在自然语言处理任务中的性能。
位置编码与序列建模:
在Transformer模型中,由于不包含任何位置信息,因此需要引入位置编码来表征输入序列中单词的位置信息。位置编码通常是通过将位置信息编码为向量形式,并与单词的词向量相加得到的。通过引入位置编码,Transformer模型能够更好地理解输入序列的顺序信息,从而提高模型的性能。
解码器与编码器的功能与区别:
Transformer模型由编码器和解码器组成,它们分别承担着不同的功能。编码器负责将输入序列转换为隐藏表示**,捕捉输入序列的语义信息;而解码器则负责根据编码器的输出生成目标序列**。解码器在生成过程中还会利用自注意力机制来关注到输入序列的不同部分,从而生成更加准确的输出序列。
看到这里可能觉得就是把一堆信息揉碎塞给计算机里面,然后给一个问题,从这一堆信息里面查找关联性,然后给出问题的输出,这技术好像歪门邪道啊,但是找相关性其跟数学是有一定的关系,只是整个过程借鉴了人的神经网络的生物学原理,可称之为奇巧淫技也不过分。
1.4 Langchain 简介
尽管大型语言模型的调用相对简单,但要创建完整的应用程序,仍然需要大量的定制开发工作,包括API集成、互动逻辑、数据存储等等。为了解决这个问题,从 2022 年开始,许多机构和个人相继推出了多个开源项目,旨在帮助开发者们快速构建基于大型语言模型的端到端应用程序或工作流程。其中一个备受关注的项目就是LangChain 框架。
LangChain 框架是一个开源工具,充分利用了大型语言模型的强大能力,以便开发各种下游应用。它的目标是为各种大型语言模型应用提供通用接口,从而简化应用程序的开发流程。具体来说,LangChain 框架可以实现数据感知和环境互动,也就是说,它能够让语言模型与其他数据来源连接,并且允许语言模型与其所处的环境进行互动。
LangChain 作为一个大语言模型开发框架,可以将 LLM 模型(对话模型、embedding模型等)、向量数据库、交互层 Prompt、外部知识、外部代理工具整合到一起,进而可以自由构建 LLM 应用。LangChain 主要由以下 6 个核心模块组成:
模型输入/输出(Model I/O):与语言模型交互的接口。
数据连接(Data connection):与特定应用程序的数据进行交互的接口。
链(Chains):将组件组合实现端到端应用。
记忆(Memory):用于链的多次运行之间持久化应用程序状态。
代理(Agents):扩展模型的推理能力,用于复杂的应用的调用序列。
回调(Callbacks):扩展模型的推理能力,用于复杂的应用的调用序列。
参考:https://blog.csdn.net/telescopewang/article/details/132711226
2. Transformer算法介绍
人工智能的三个要素是算法、数据和计算资源。Transformer 模型作为一种机器学习算法,可以应用于人工智能系统中的数据处理和建模任务。
算法: Transformer 是一种基于自注意力机制的神经网络模型,用于处理序列数据的建模和表示学习。它通过自适应地关注输入序列中的不同位置,并利用多头注意力机制对序列中的关系进行建模。Transformer 的算法创新使得模型能够处理长距离依赖、捕捉全局关系,并在多个自然语言处理任务中取得卓越的性能。
数据: Transformer 模型的训练需要大量的数据。在自然语言处理任务中,可以使用大规模的文本语料库来训练 Transformer 模型。这些数据可以包括语言对、文本摘要、问题-回答对等。丰富和多样的数据有助于提高模型的泛化能力和性能,并使其适应不同领域和任务。
计算资源: Transformer 模型通常具有较大的模型规模和参数量,因此需要充足的计算资源进行训练和推理。训练大规模的 Transformer 模型可能需要使用多个图形处理器(Graphics Processing Units,GPU)或者专用的计算设备(如Google的TPU)。并行计算和分布式训练技术可以加速 Transformer 模型的训练过程,并提高模型的效率。
Transformer 模型作为一种算法,可以通过大规模数据的训练,并依赖充足的计算资源来实现在自然语言处理和其他任务中的应用。算法、数据和计算资源三者相互依赖,共同推动了 Transformer 模型在人工智能领域的发展和应用。
Transformer是完全基于自注意力机制的一个深度学习模型,且适用于并行化计算,导致它在精度和性能上都要高于之前流行的RNN循环神经网络。
Why Transformer?
RNN(循环神经网络):能够捕获长距离依赖信息,但是无法并行计算;
CNN(卷积神经网络):能够并行,无法捕获长距离依赖信息(需要通过层叠或者扩张卷积核来增大感受野),记忆的长度是有限的!
Transformer整体结构:
从功能角度上,将Transformer各个组件划分到四个功能模块,对应于图1中4中颜色框框选部分:输入模块(绿色框框)、编码器模块(红色框框)、解码器模块(蓝色框框)、输出模块(黑色框框)。
输入模块:将词库中每一个词(中文就是字了,为了更大众化地表达,我们就称之为词吧)以及开始标志转化为嵌入词向量,词嵌入向量的维度为embedding dimension,一句话中总共的单词长度为sequence length,因此可以得到一个sequence_length ×× embedding_dimension大小的矩阵,其中每一行代表的是一个词。有了词嵌入矩阵还不够,还需要在矩阵中添加位置编码,随后将矩阵传入编码器模块。这一系列操作,就是输入模块负责的功能。输入模块有两个部分,功能实现是一模一样的,区别在于一个是对源数据进行编码,也就是我们现在第一步中所做的操作,另一个是对目标数据进行编码。
编**码器模块**:编码器模块接收到输入模块传输过来的矩阵后,要完成多头注意力计算、规范化、前向传播等等一系列操作,而且这些操作还不止进行一次(8次),最终将输出结果传入解码器模块。编码器模块是Transformer模型最为核心的部分,创新使用的多头注意力机制是Transformer算法性能突出的关键。
解码器模块:输出矩阵从编码器传到了解码器模块,我们姑且称这个矩阵为矩阵A吧。解码器接收到矩阵A后,解码器对应的输入模块也开始工作,这个输入模块会对目标数据进行词嵌入、添加位置编码等一些列操作,形成另一个矩阵,我也给它命一个名,叫矩阵B吧。矩阵B进入解码器后,进行掩码,再进行一次注意力计算,然后往前传递,与矩阵A“胜利会师”。会师后,两者共同进行注意力计算,生成新的矩阵,并进行前向传播和规范化。进行一系列类似操作后,将矩阵传入输出模块。从这里可以看出,解码器模块,是有两个输入的,一个来自于编码器,一个来自于输入模块对目标数据的编码。
输出模块:输出模块对解码器模块的输出矩阵进行一次线性变换,然后通过softmax层转换为概率分布矩阵,矩阵中概率最大值对应的英文词汇为这一次传输的输出结果,即翻译结果。
先推荐一个书网络图书《transformers快速入门》:https://transformers.run/
2.1 Embedding输入模块
Transformer 中单词的输入表示 x由单词 Embedding 和位置 Embedding (Positional Encoding)相加得到。
单词 Embedding(Input embdding) 单词的 Embedding 有很多种方式可以获取,例如可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训练得到。
- 位置 Embedding(Positional Encoding) 位置 Embedding 表示单词出现在句子中的位置。因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于 NLP 来说非常重要。所以 Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。
由于 Transformer 模型没有显式的位置信息,为了使模型能够捕捉序列中的位置信息,需要引入位置编码。位置编码是一种将序列中每个位置的信息嵌入到表示中的技术。常用的位置编码方式包括正弦和余弦函数编码,通过将位置信息与输入向量相加,使得模型能够区分不同位置上的输入。
将单词的词 Embedding 和位置 Embedding 相加,就可以得到单词的表示向量 x,x 就是 Transformer 的输入。
为什么是将PE与词向量相加,而不是拼接呢?
其实,拼接相加都可以,一般来说词向量的维度就已经蛮大了,再拼接一个相同维度大小的位置向量,维度顿时提升一倍,这样训练起来会相对慢一些,影响效率。两者的效果是差不多地,既然效果差不多当然是选择学习习难度较小的相加了。
2.2 Encoder编码器
作为编码器的组成单元, 每个编码器层完成一次对输入的特征提取过程, 即编码过程。由N个编码器层堆叠而成。
2.2.1 注意力机制
Transformer 结构中的 Multi-Head Attention是由多个Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。讲多头注意力机制前,先了解下注意力机制。
我们观察事物时,之所以能够快速做出判断,是因为我们大脑能够将注意力能够以高分辨率接收于图片上的某个区域,并且以低分辨率感知其周边区域,并且视点能够随着时间而改变,换句话说就是人眼通过快速扫描全局图像,找到需要关注的目标区域(在阅读文本时就是快速扫描全文,然后找到关键段落、关键词),然后对这个区域分配更多注意,目的在于获取更多细节信息和抑制其他无用信息,从而快速作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果。
正是基于人类大脑这一特点,进行仿生,从而提出了深度学习中的注意力机制。在神经网络中,注意力机制可以认为是一种资源分配的机制,可以理解为对于原本平均分配的资源根据对象的重要程度重新分配资源,重要的单位就多分一点,不重要或者不好的单位就少分一点。说白了就是权重。
注意力机制是 Transformer 模型的核心。它允许模型在生成表示时,根据输入序列中不同位置的重要性进行自适应的关注。自注意力机制通过计算查询(Query)和键(Key)之间的相似度,得到每个位置对查询的注意力权重,然后将注意力权重与值(Value)相乘并进行加权求和,得到最终的上下文表示。自注意力机制使得模型能够直接建模序列中不同位置之间的依赖关系,从而在捕捉长距离依赖时更加有效。
Self-Attention 的输入用矩阵 X 进行表示,则可以使用线性变阵矩阵 W Q , W K , W V计算得到 Q , K , V。计算如下图所示,注意 X , Q , K , V的每一行都表示一个单词。
线性变阵矩阵 W Q , W K , W V从哪里来?
这个是参数,调参就是这么调的。
拿到QKV后,就可以进行注意力训练了,如下:
阶段一:query 和 key 进行相似度计算,得到权值系数;
阶段二:将权值进行归一化,得到直接可用的权重
阶段三:将权重和 value 进行加权求和,
得到矩阵Q , K , V之后就可以计算出Self-Attention 的输出了,计算的公式如下。
公式中计算矩阵 Q和 K 每一行向量的内积,为了防止内积过大,因此除以 dk 的平方根。Q 乘以 K 的转置后,得到的矩阵行列数都为 n,n 为句子单词数,这个矩阵可以表示单词之间的 attention 强度。下图为 Q 乘以 K 的转置,1234 表示的是句子中的单词。
得到QK^T之后,使用 Softmax计算每一个单词对于其他单词的 attention系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1。
得到 Softmax 矩阵之后可以和V相乘,得到最终的输出 Z。
上图中 Softmax 矩阵的第 1 行表示单词 1 与其他所有单词的 attention 系数,最终单词 1 的输出 Z1 等于所有单词 i 的值 Vi 根据 attention 系数的比例加在一起得到,如下图所示:
经过注意力机制层后,输出矩阵中的每个词向量都含有当前这个句子中所有词的语义信息,这对提升模型性能是极为关键的。
2.2.2 多头注意力机制
上文说到,自注意力机制中queryquery、keykey、valuevalue都是通过同一数据做矩阵变换获得,这就会造成一个问题:模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置。换句话说就是自己与自己的相似度肯定很高,从而获得极高的注意力,而忽略其他内容。这显然并不合理。Transformer作者采取的一种解决方案就是采用多头注意力机制(MultiHeadAttention)。同时,使用多头注意力机制还能够给予注意力层的输出包含有不同子空间中的编码表示信息,从而增强模型的表达能力(从不同角度去观察,获得更加丰富的信息)。
多头注意力机制为什么有效呢?我们也可以类比理解一下,让一个同学阅读一篇文章60分钟,对比让6个同学每个阅读10分钟,然后汇总多个同学的理解那种方式获取到的信息多呢?应该是第二种,每个人的思维方式、角度总是不一样的,从多种角度看问题获取到的信息更多。多头注意力自己就是这么个思路。
多头注意力机制是对自注意力机制的扩展。它通过在每个注意力机制中引入多个独立的注意力头(Attention Head),使得模型能够同时学习多种不同的查询、键和值的表示。在多头注意力机制中,会对输入序列进行一次独立的注意力计算,然后将多个注意力头的结果进行拼接或加权求和,得到最终的上下文表示。多头注意力机制的引入有助于模型对不同相关性模式的建模能力。
那么,多头注意力机制怎么实现的呢?使用多头注意力机制后,我们需要将query、key、value分割为h份。Multi-Head Attention 包含多个 Self-Attention 层(Scaled Dot-Product Attention),首先将输入X分别传递到 h 个不同的 Self-Attention 中,计算得到 h 个输出矩阵Z。下图是 h=8 时候的情况,此时会得到 8 个输出矩阵Z。
得到 8 个输出矩阵 Z1到Z8后,Multi-Head Attention 将它们拼接在一起 (Concat),然后传入一个Linear层,得到 Multi-Head Attention 最终的输出Z。
看到 Multi-Head Attention 输出的矩阵Z与输入的矩阵X的维度是一样的。
2.2.3 Add 和 Norm
所有深层网络模型都需要用到标准网络层,因为随着网络层数的增加,通过多层的计算后参数可能开始出现过大或过小的情况,这样可能会导致学习过程出现异常,模型可能收敛非常的慢。因此都会在一定层数后接规范化层进行数值的规范化,使其特征数值在合理范围内。规范化层对应于图中“Add & Norm ”所标识的组件。
Add & Norm 层由 Add 和 Norm 两部分组成,其计算公式如下:
其中X表示 Multi-Head Attention 或 Feed Forward 的输入,MultiHeadAttention(X) 和 FeedForward(X) 表示输出 (输出与输入 X 维度是一样的,所以可以相加)。
Add指 X+MultiHeadAttention(X)是一种残差连接,通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分,在 ResNet 中经常用到:
Norm指 Layer Normalization,通常用于 RNN 结构,Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。
2.2.4 Feed Forward
完成多头注意力计算后,考虑到此前一系列操作对复杂过程的拟合程度可能不足,所以,通过增加全连接层来增强模型的拟合能力。前馈全连接层对应于图中“Feed Forward”所标识的组件。
Feed Forward 层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数,对应的公式如下。
其中X是输入,Feed Forward 最终得到的输出矩阵的维度与X一致。
2.2.5 子层残差连接
输入到每个子层以及规范化层的过程中,还使用了残差连接,我们把这一部分结构整体叫做子层连接(代表子层及其连接结构),在每个编码器层中,都有两个子层,这两个子层加上周围的链接结构就形成了两个子层连接结构。如图所示,为Transformer结构中的两个子层连接结构,这两个结构在同一个编码器层中上下相连。无论是在编码器中,还是在解码器中,子层连接结构都是重要的组件。
在深层的神经网络中,梯度消失或梯度爆炸问题可能会影响模型的训练。为了缓解这个问题,Transformer 引入了残差连接。在每个子层或子模块的输入和输出之间,会进行残差连接,即直接将输入与输出相加。这种连接方式使得模型能够更容易地传播梯度,加快训练速度并提高模型的性能。
2.3 Decoder解码器
上图红色部分为 Transformer 的Decoder block 结构,与 Encoder block 相似,但是存在一些区别:
包含两个 Multi-Head Attention 层。
第一个 Multi-Head Attention 层采用了 Masked操作。
第二个 Multi-Head Attention 层的 K, V 矩阵使用 Encoder 的编码信息矩阵 C 进行计算,而 Q 使用上一个 Decoder block 的输出计算。
然后还有一个Feed Forward
最后有一个 Linear和Softmax 层计算下一个翻译单词的概率。
我们为什么要添加解码器模块,编码器后面直接接全连接层或者残差结构、循环网络层不可以吗?
不是不可以,只是性能要降低很多。一方面是在Transformer的解码器模块中,使用了多个解码器(Transformer的paper中说是6个),每个解码器都创新地使用了多头注意力机制,这里的注意力机制还比编码器模块中的多头注意力机制丰富,多个注意力机制层数据来源不同(queryquery、keykey、valuevalue);另一方面,在Transformer的解码器训练过程中使用了“teacher-forcing”这么一种训练方式,teacher-forcing是指在训练网络过程中,每次不使用上一个阶段的输出作为下一个阶段的输入,而是直接使用训练数据的标准答案(目标数据)的对应上一项作为下一个阶段的输入。
2.3.1 Masked Multi-Head Attention
先来理解下什么是掩码向量。我们可以这么来理解掩码张量的作用:我们建模目的,就是为了达到预测的效果,所谓预测,就是利用过去的信息(此前的序列张量)对未来的状态进行推断,如果把未来需要进行推断的结果,共同用于推断未来,那叫抄袭,不是预测,当然,这么做的话训练时模型的表现会很好,但是,在测试(test)时,模型表现会很差。
如何进行遮掩呢?我们可以创建一个与需要被遮掩张量相同size的张量,即掩码张量,掩码张量中元素一般只有0和1,代表着对应位置被遮掩或者不被遮掩,至于是0位置被遮掩还是1位置被遮掩可以自定义,因此它的作用就是让另外一个张量中的一些数值被遮掩,或者说被替换。一般来说,是被替换成一个非常小的数字(负无穷)。为什么用非常小的数字呢?掩码操作一般是在计算注意力得分后,softmax操作之前,被遮掩就是为了最小化被分配的注意力,那么被遮掩的位置替换成一个非常小的数值,下一步进行softmax操作后,被遮掩的位置就成了一个趋近于0的概率时,即分配的注意力趋近于0,也就达到了被遮掩的目的。
在训练时,因为有目标数据可用,所以第一个解码器层多头注意力子层的输入来自于目标数据,上文提到过,这种机制叫做“teacher-force”,但是在测试时,已经没有目标数据可用了,那么,输入数据就来自于此前序列的解码器模块输出,没有预测过,那么就是起始标志的编码。同时,注意这里的注意力是自注意力,也就是说queryquery、keykey、valuevalue都来自于目标数据矩阵变化得来,然后计算注意力,另外,这里计算注意力值时,一定使用掩码操作。后续的5个解码器层的输入数据是前一个解码器层的输出。
Decoder block的第一个 Multi-Head Attention 采用了
Masked 操作,因为在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息。下面以 “我有一只猫” 翻译成 “I have a cat” 为例,了解一下 Masked 操作。下面的描述中使用了类似 Teacher Forcing 的概念,在 Decoder 的时候,是需要根据之前的翻译,求解当前最有可能的翻译,如下图所示。首先根据输入 “” 预测出第一个单词为 “I”,然后根据输入 “ I” 预测下一个单词 “have”。
Decoder 可以在训练的过程中使用 Teacher Forcing 并且并行化训练,即将正确的单词序列 ( I have a cat) 和对应输出 (I have a cat ) 传递到 Decoder。那么在预测第 i 个输出时,就要将第 i+1 之后的单词掩盖住,注意 Mask 操作是在 Self-Attention 的 Softmax 之前使用的,下面用 0 1 2 3 4 5 分别表示 “ I have a cat ”。
第一步:Decoder 的输入矩阵和 Mask 矩阵,输入矩阵包含 “ I have a cat” (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5×5 的矩阵。在 Mask 可以发现单词 0 只能使用单词 0 的信息,而单词 1 可以使用单词 0, 1 的信息,即只能使用之前的信息。
第二步:接下来的操作和之前的 Self-Attention 一样,通过输入矩阵X计算得到 Q , K , V矩阵。然后计算 Q和K^T 的乘积 QK^T
第三步:在得到QK^T之后需要进行 Softmax,计算 attention score,我们在 Softmax 之前需要使用Mask 矩阵遮挡住每一个单词之后的信息,遮挡操作如下:
得到 Mask QK^T之后在Mask QK^T上进行 Softmax,每一行的和都为 1。但是单词 0 在单词 1, 2, 3, 4 上的 attention score 都为 0。
第四步:使用 Mask QK^T与矩阵V VV相乘,得到输出Z,则单词 1 的输出向量Z1 是只包含单词 1 信息的。
第五步:通过上述步骤就可以得到一个 Mask Self-Attention 的输出矩阵Zi,然后和 Encoder 类似,通过 Multi-Head Attention 拼接多个输出 Zi 然后计算得到第一个 Multi-Head Attention 的输出 Z与输入 X维度一样。
2.3.2 第二个Multi-Head Attention
Decoder block 第二个 Multi-Head Attention 变化不大, 主要的区别在于其中 Self-Attention 的K , V矩阵不是使用 上一个 Decoder block 的输出计算的,而是使用 Encoder 的编码信息矩阵 C计算的。根据 Encoder 的输出 C 计算得到 K , V根据上一个 Decoder block 的输出 Z ZZ 计算 Q (如果是第一个 Decoder block 则使用输入矩阵 X 进行计算),后续的计算方法与之前描述的一致。这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask)。
编码器的输出的结果将会作为key、value传入每一个解码器层的第二个子层连接结构,而query则是当前解码器层的上一个子层连接结构的输出。注意,这里的query、key、value已经不同源了,所以不再是自注意力机制。完成计算后,输出结果作为第三个子层连接结构的输入。
2.3.3 第三个子层残差连接
第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接。完成计算后,输出结果作为输入进入下一个解码器层。如果是最后一个解码器层,那么输出结果就传入输出模块。
解码器就是将6个解码器层进行堆叠。第一个解码器层接受目标数据作为输入,后续的解码器使用前序一个解码器层的输出作为输入,通过这种方式将6个解码器层连接。最后一个解码器层的输出将进入输出模块。
2.4 输出模块
线形层:通过对解码器模块的输出进行线性变化得到指定维度的输出, 也就是转换维度的作用。
softmax层:使最后一维的向量中的数字缩放到0-1的概率值域内, 并满足他们的和为1。
我们继续以汉译英模型为例,说一说输出模块是怎么将一系列的张量转化为一个个的词汇了。假设我们目标数据有1000个英文单词,线形层接收到解码器模块最终输出矩阵后,将会输出一个长度为1000的张量,其中每一个元素对应词汇表中一个单词。将这个张量继续传入softmax层中进行softmax操作,转换为概率分布矩阵。概率分布矩阵最大值所对应的单词即为此时模型翻译的输出结果。
Softmax 预测输出单词:Decoder block 最后的部分是利用 Softmax 预测下一个单词,在之前的网络层我们可以得到一个最终的输出 Z,因为 Mask 的存在,使得单词 0 的输出Z0只包含单词 0 的信息,如下。
Softmax 根据输出矩阵的每一行预测下一个单词
这就是 Decoder block 的定义,与 Encoder 一样,Decoder 是由多个 Decoder block 组合而成。
2.5 Transformer应用
Transformer本身是做自然语言翻译任务的,所以文章把其称为Transformer,而我们通常提到Transformer倾向于将文章中利用Self-Attention的Encoder或Decoder的子结构称为Transformer。Transformer的一大应用就是替代RNN和CNN,作为模型上下文相关的特征提取器,广泛应用与机器翻译、阅读理解、情感分析、对话识别等NLP领域。
机器翻译:Transformer模型已经在机器翻译领域中取得了显著的成功,尤其是在大规模多语种翻译任务中。通过训练Transformer模型,可以将一个源语言句子自动翻译为一个目标语言句子。
语言建模:由于Transformer模型具有强大的序列建模能力,因此可以应用于语言建模任务。在这种情况下,模型的目标是对给定的文本序列进行建模,以预测下一个单词或字符。
问答系统:Transformer模型也可以用于问答系统,其中模型的任务是回答给定问题的答案。在这种情况下,模型首先需要将问题和相关文本进行编码,然后生成答案。
文本分类:另一个常见的应用场景是文本分类任务,其中模型的任务是将输入文本分为不同的类别。在这种情况下,可以使用Transformer模型来将输入文本转换为一个向量表示,然后将其输入到分类器中进行分类。
语言生成(Language Generation): Transformer 被广泛用于语言生成任务,如对话系统、问答系统和聊天机器人等。通过编码输入序列并使用解码器生成输出序列,Transformer 能够生成具有语法正确性和上下文连贯性的自然语言文本。
命名实体识别(Named Entity Recognition): Transformer 在命名实体识别任务中取得了显著的性能提升。通过对输入句子进行编码和标注,Transformer 能够识别和分类文本中的命名实体,如人名、地名、组织机构名等。
情感分析(Sentiment Analysis): Transformer 被广泛用于情感分析任务,包括情感分类和情感极性预测。通过对输入文本进行编码和分类,Transformer 能够自动识别文本的情感倾向,如正面、负面或中性。
语义角色标注(Semantic Role Labeling) : Transformer 在语义角色标注任务中取得了显著的性能提升。通过对输入句子进行编码和标注,Transformer 能够自动识别和标注句子中的谓词-论元结构,从而揭示句子的语义角色关系。
计算机视觉:Transformer模型也可以应用于计算机视觉任务,例如图像分类和目标检测。在这种情况下,可以使用Transformer模型对图像进行编码,以提取其特征表示,然后将其输入到分类器或检测器中进行分类或检测。
语音识别(Speech Recognition): Transformer 技术也在语音识别领域得到了应用。例如,Conformer 是一种结合了 Transformer 和卷积神经网络(Convolutional Neural Network,CNN)的模型,用于语音识别任务。它在编码输入音频序列时利用了 Transformer 的自注意力机制,从而提高了语音识别的性能。
推荐系统(Recommendation Systems): Transformer 技术在推荐系统领域也得到了应用。例如,Transformer 模型可以用于建模用户和物品之间的关系,并预测用户对物品的兴趣和偏好。这样的模型可以用于个性化推荐、广告点击率预测和推荐排序等任务。
时间序列预测(Time Series Forecasting): Transformer 技术在时间序列预测中也发挥了重要作用。通过将时间序列数据转换为序列输入,并利用 Transformer 模型的自注意力机制进行建模,可以实现对时间序列的准确预测。这在金融市场预测、天气预测和交通流量预测等领域具有应用前景。
图像生成(Image Generation): Transformer 技术在图像生成领域也取得了一些突破。例如,Image GPT 是一种基于 Transformer 的图像生成模型,通过对图像像素序列进行建模,能够生成逼真的图像样本。这在计算机图形学、虚拟现实和创意艺术等领域具有应用潜力。
除了上述领域,Transformer 技术还在机器学习的其他领域和任务中得到了应用,如强化学习、多模态学习和分子设计等。Transformer 的强大表示学习能力和并行计算性质使其成为了一种通用且强大的模型架构,可以应用于各种复杂的数据建模和处理任务。
可以说
Transformer 不一定是处理问题最高效的算法
,但是是目前最像人思考方式的算法
,所以可以用于跟人进行交流,并用人的思维方式去解决问题
。例如驾驶员去开车,人怎么思考决策开车的,
Transformer 就比较擅长。换句话就是
Transformer 擅长做人做的事情和跟人进行交流
。所以算是一次技术革命
。
2.6 Transformer优缺点
Transformer模型具有以下优点:
并行化:相对于循环神经网络(RNN)和卷积神经网络(CNN),Transformer模型可以更容易地进行并行化处理,这使得它能够更快地训练和推理。
全局信息:Transformer模型使用自注意力机制来计算每个位置与其他所有位置的关联程度,因此可以更好地捕捉全局信息,而不是只关注固定大小的局部区域。
无需预训练:相对于传统的基于词向量的模型,例如word2vec和GloVe,Transformer模型可以在不使用预训练词向量的情况下进行端到端的训练,从而避免了预训练和微调的过程。
适用于多种任务:由于其灵活的架构和强大的建模能力,Transformer模型可以应用于各种自然语言处理任务,例如机器翻译、语言建模、问答系统和文本分类。
Transformer模型的一些缺点包括:
模型复杂计算资源要求高:由于其较大的模型规模和复杂的计算图结构,Transformer模型需要较多的计算资源和存储空间,这可能会限制其在某些环境中的应用。
对训练数据量要求高:由于其较大的模型规模和高维度的输入特征,Transformer模型需要大量的训练数据来避免过拟合和提高模型的泛化能力。
无法处理序列中的位置信息:由于Transformer模型不考虑序列中的位置信息,因此在一些任务中可能无法处理需要考虑顺序的序列,例如时间序列分析等任务。
Transformer模型具有较高的灵活性和建模能力,但需要较多的计算资源和训练数据来训练,并且无法处理一些需要考虑序列顺序的任务。
参考:
3. UniAD端到端自动驾驶通用算法
论文pdf:
https://openaccess.thecvf.com/content/CVPR2023/papers/Hu_Planning-Oriented_Autonomous_Driving_CVPR_2023_paper.pdf 项目地址:https://github.com/OpenDriveLab/UniAD
自动驾驶通用算法框架——Unified Autonomous Driving(UniAD)首次将检测、跟踪、建图、轨迹预测,占据栅格预测以及规划整合到一个基于 Transformer 的端到端网络框架下, 完美契合了 “多任务”和“高性能”的特点,可称为自动驾驶中的技术突破。地平线与上海人工智实验室提出了自动驾驶通用算法框架——Unified Autonomous Driving(UniAD)。在nuScenes数据集下的所有相关任务都达到 SOTA性能,尤其是预测和规划效果远超其他模型。
在汽车上的自动驾驶AI芯片要运行的算法基本就如这个UniAD,各家技术算法估计会调整,但是基础都还是基于Transformer的。今天看到几个消息都是地平线的余轶南创业去搞具身智能,进军机器人了。估计是机器人用的AI芯片比较多,又是风口,而且地平线创立之初就是搞机器人的,不过那时技术应用还不成熟,为了生存转向了汽车。春江水暖鸭先知,就自己率先下场了。
3.1 问题和贡献
通常自动驾驶任务都是分模块,独立的部署和优化。这样的操作会带来俩问题
累积误差。
各个任务模块(例如感知、预测和规划)之间的协调不足,可能会导致系统性能下降。如果任务之间的协调不足,可能会导致信息丢失或误解,从而影响系统的整体性能
传统的端到端算法可分为:基础的端到端算法,直接从传感器输入预测控制输出,但是优化困难,在充满复杂视觉信息的真实场景中应用面临较大挑战;按照任务划分网络的显式设计,但是网络模块之间缺乏有效的特征沟通,需要分阶段的输出结果,任务间缺乏有效交互。本文提出的决策导向的感知决策一体设计方法,用token特征按照感知-预测-决策的流程进行深度融合,使得以决策为目标的各项任务指标一致提升。
UniAD ,该框架将所有驾驶任务整合到一个网络中。让感知和预测都为规划做出贡献。该框架以利用每个模块的优点,并提供互补的特征抽象,以便从全局视角进行交互。任务通过统一的query接口进行通信,以便相互促进规划。
本文的三个主要贡献
规划导向的自动驾驶框架:作者提出了一种新的自动驾驶系统设计理念,即以规划为目标,优化前置的感知和预测任务,使得各个任务能够协同合作,提高最终的规划性能和安全性。
统一的自动驾驶(UniAD) :作者提出了一种综合性的自动驾驶算法框架,将全栈的驾驶任务(包括检测、跟踪、在线地图、运动预测、占据预测和规划)集成在一个网络中,利用query-based的设计连接各个模块,实现了端到端的优化和推理。
优异的实验结果:作者在具有挑战性的nuScenes数据集上进行了广泛的实验,验证了UniAD在各个任务上的有效性和优越性。文章还进行了大量的消融实验,分析了各个组件的作用和贡献。文章展示了UniAD在复杂场景下的可视化结果,证明了其对规划导向的自动驾驶的潜力。
3.2 组成
上图由四个transformer decoder-based 模块和 一个planner模块组成。可分为6个部分。Query Q在整个流程中都起着关键作用,连接各个模块。
3.2.1 Bev-feature摄像头感知检测
将一系列多摄像头图像输入到特征提取器中,然后将得到的透视视图特征通过BEVFormer中的BEV编码器转换为统一的鸟瞰视图(BEV)特征B。值得注意的是,UniAD并不局限于使用特定的BEV编码器,还可以使用其他替代方案来提取具有长期时间融合或多模态融合的更丰富的BEV表示。这种处理方式为自动驾驶系统提供了更全面和丰富的环境感知信息。
3.2.2 TrackerFormer跟踪动态物体
TrackFormer模块中可学习的参数叫做track queries. 它从BEV特征图B中query信息,来做到agent的检测和跟踪。
track queries是可学习的,代表agent及其状态。
track queries关注B以提取信息,并随时间更新其嵌入
对于 TrackFormer,使用 detection queries 进行新目标的检测,在此后只用 track queries 对每个目标进行追踪。TrackFormer 的输出包括只关注受控车本身的 ego-vehicle query,和 QA。MapFormer 输入 map tracker,输出 QM。
3.2.3 MapFormer分割静态地图
MapFormer是一个用于地图全景分割的模块,它使用地图query作为道路元素(例如车道和分隔线)的语义抽象,并对地图进行分割和分类。它还利用agent query和地图query之间的交互来捕捉agent和道路之间的关系,从而为下游的运动预测提供有用的信息。
3.2.4 MotionFormer运动预测
MotionFormer模块捕获了agent和地图之间的交互,并预测每个agent的未来轨迹。
由于每个agent的行动可能会显著影响场景中的其他agent,因此该模块对所有考虑的agent进行联合预测。
同时,我们设计了一个自车query,以显式地模拟自车,并使其能够与场景中的其他agent进行交互
3.2.5 OccFormer占用预测
OccFormer使用BEV特征B作为query,使用agent 的信息作为键和值,然后预测多步未来的占用情况,同时以agent为单位保留特征
这种设计使得系统能够在预测未来的占用情况时,考虑到每个智能体的特性和状态,从而提高了预测的准确性和可靠性
3.2.6 Planner规划
规划器利用来自MotionFormer的自我车辆query来预测规划结果,并避开由OccFormer预测的已占用区域,以避免碰撞。
UniAD 将原始导航信号(左转、右转、直行)转化为可学习的 embedding,并将此 embedding 和 ego-vehicle 结合得到 plan query。通过此 plan query 和 BEV 特征 B 的结合,可以被解码为最终的航路点 τ。
UniAD 的训练分两部分,首先单独训练 perception模块,然后进行端到端的训练。
3.3 UniAD效果
UniAD可以感知左前方等待的黑色车辆,预测其未来轨迹(即将左转驶入自车的车道),并立即减速以进行避让,待黑色驶离后再恢复正常速度直行。
得益于UniAD的地图分割模块,其可以沿着分割得到的道路结构适时地转弯。
在视野干扰较大的雨天环境中,UniAD也能感知到周围车辆进行正常行驶。
在视野干扰较大且场景复杂的十字路口,UniAD能通过分割模块生成十字路口的整体道路结构(如右侧BEV图中的绿色分割结果所示),并完成大幅度的左转。
在夜晚视野变暗的情况下,UniAD仍然能感知到前方以及右侧的车辆(双车道场景),确保自车行驶。
总的来说,UniAD作为一项极具创新性的自动驾驶技术,具有很大的潜力和应用价值。尽管该技术目前仍处于发展初期,但其已经引起了人们的广泛兴趣和关注,未来的发展前景非常值得期待。
3.4 地平线的端到端
“
我们是一个披着芯片外衣的软件算法公司。 ” 地平线创始人兼CEO 余凯曾在采访中这样解读地平线的优势打法:“在变化中抓确定性,
全局是以一打十,局部是以十打一。”
去年,地平线作为第一作者提出的Unified Autonomous Driving(UniAD),首次为自动驾驶端到端通用网络架构的设想给出了具体范式,并一举荣获CVPR 2023 最佳论文。今年年初,地平线又开源了稀疏化端到端自动驾驶感知算法——Sparse4D系列。
但Sparse4D并不仅仅是范式,其还将是地平线征程5、征程6芯片之上的算法样板间之一。
英伟达还是通用的GPU,其成功如果是躺赢,那地平线就是精准狙击,因为地平线这就是为端到端自动驾驶服务的。尽管其软件算法使用了硬件BPU去实现,已经非常的先进,但是其还是落后特斯拉的FSD大概一年时间。
神经网络的“智商”则取决于模型、数据和算力三者之间协同效应的大小,主要通过构建算力,采集、挖掘、补充数据,训练迭代来提高其智能程度。只要算力充足,一天即可“消化”数十,甚至数百倍人效的工作。这相对于普通的工作就是某个算法合适的时候,技术直接突变,没有好的算法进展会完全为0。这跟盖房子不一样,不是每天都能盖一层。
“随着Sparse4D量产,地平线将完成端到端感知系统的商业闭环。 ” 余轶南表示。
今年开始,随同征程5、征程6芯片,地平线将向智能驾驶一级供应商(Tier One,T1)和主机厂提供Sparse4D感知算法模型。
与当下第一梯队玩家量产的模块化+后处理组成的BEV+Transformer感知方案不同,Sparse4D是完全的端到端感知系统。其完全由神经网络,消除了由人类撰写代码的后处理环节。通过前端传感器输入数据后,可直接输出3维(长宽高 3D)+时间的4D感知结果,以及3-9秒(依据不同精度)的预测结果。
在nuScenes纯视觉3D检测和3D跟踪两个榜单上,Sparse4D均位列第一,成为SOTA(state-of-the-art model 某领域的最佳实践模型),领先于包括SOLOFusion、BEVFormer v2和StreamPETR在内的一众最新方法。下面是的Sparse4D算法架构:
但要做端到端,就意味着放弃现有算法积累的代码。“因为我们是聚焦于计算方案和感知系统的,所以对我们来说做端到端感知是刚需。” 余轶南表示。
究其原因,
人类工程师撰写代码解决问题的速度,远赶不上城市场景中出现问题的速度**。**
Sparse4D的目标,是实现一个高性能高效率的长时序纯稀疏融合感知算法:既能加速2D到3D 的转换效率,又能在图像空间直接捕获目标跨摄像头的关联关系。
稀疏化计算是更类似人脑的一种神经网络架构方式。
稠密计算的深度神经网络倾向于将每一层中的每个新神经元都与前一层中的所有神经元连接起来。但灵长类生物大脑中的神经元越多,平均下来每个神经元与其他神经元的连接就越少。但由于大脑天然对“重点”敏感,人类大脑消耗的能量是GPU的十分之一,但强度要高出10亿倍。
Transformer的自注意力机制构建起了能够“注意重点”的深层神经网络。
但要在端侧处理诸如城市驾驶这样的超复杂问题,仍需进一步提升计算效率**。** 与人类类似的,尽可能高效使用神经网络中每个权重的稀疏网络便成为新的解题方式。
从结果来看,稀疏类计算的Sparse4D在不增加模型推理计算量的前提下,显著提升了模型的检测效果。
同时,由于已经实现了目标检测的端到端(无需dense(稠密)-to-sparse(稀疏)的解码),instance(实例,如一张行人正在穿过车前的图片)在时序上已经具备了目标一致性(同一个instance始终检测同一个目标)。Sparse4D在无需修改任何训练流程的情况下,即可拓展完成端到端的检测和多目标跟踪任务。
端到端体系下,极高的研发效率可在极短时间内将各类技术方案的逻辑链路、研发链路实际跑一遍,企业只需要就方案的实际效果和成本进行评估选择即可。
蔚小理、小米、智己都公布了自己的端到端模型上车计划,地平线在Sparse4D之外,也在预研全栈(感知+规控)端到端技术。
“我们还是比较冷静的。”余轶南将地平线对热技术、热概念的打法归纳为两步:“
在我们没有看准的时候,我们不会冒进,尽可能保持低成本的方式跟随。一旦看准要上的时候,会投入可能十倍于别人的资源去推动核心技术突破,然后将沉淀下的经验成果开放地赋能给合作伙伴。”
参考:
后记:
本篇大致说说明了AI芯片要运行的算法,也就是把软件算法做成硬件叫NPU或者BPU/TPU等各种PU。例如把一个函数做成了硬件,那这个硬件就是算子,软件要执行这个函数就需要这个硬件去运行,控制硬件运行的是机器码,所以又需要AI**编译器的协助。
一般AI中的算法函数都是对数据进行处理,例如两个矩阵相乘,但是传统的冯诺依曼架构一般运算单元比较快,数据准备的比较慢是以计算为中心的。为了加快数据的准备,把数据和算法放一块作为一个单元进行打包,无数个包还可以并行计算,这就是存算一体的架构**。这就像中央集权和联邦政府一样。这些以后慢慢介绍,敬请期待。
“啥都懂一点,啥都不精通,
干啥都能干,干啥啥不是,
专业入门劝退,堪称程序员杂家”。
欢迎各位有自己公众号的留言:申请转载!
纯干货持续更新,欢迎分享给朋友、点赞、收藏、在看、划线和评论交流!
彩蛋:
本公众号提供微信技术交流群,一起探讨汽车软件技术(先加微信:thatway1989,备注感兴趣的技术方向)。
有需要投放广告、商业合作的也可以联系博主。
赞赏1元钱交个朋友