随着ChatGPT的火爆,大模型受到的关注度越来越高,大模型展现出的能力令人惊叹。
在图片生成、推荐系统、机器翻译等领域,大模型已经开始发挥作用。给定一些提示词,图片生成网站Midjourney生成的设计图甚至已经超过了很多专业设计师的水平。
大模型为什么可以表现出令人惊叹的能力呢?为什么模型的参数量变大、容量变大,性能就会相应地变好呢?
某AI算法公司的专家告诉笔者:模型的参数量增加,可以理解为模型的维度升高,也就是说我们可以用更复杂的方式来模拟真实世界的规律。拿一个最简单的场景来举例,在一个平面图上给一个散点图,假如我们用一条直线(一个一元函数)来刻画图上的散点出现的规律,那么不管参数是多少,总会有一些点在这条直线之外。假如我们用一条抛物线(一个二元函数)来刻画这些点的规律,那么就会有更多的点可以落在这条线上。随着函数的升维,或者说自由度的增加,会有越来越多的点落在这条线上,也就是说对这些点的规律拟合得更加精准。
也就是说,模型的参数量越大,模型就越容易拟合海量数据的规律。
而随着ChatGPT的出现,人们发现,当模型的参数量到了一定程度之后,呈现出的效果不只是“性能变好”,而是“超出预期的好”。
在NLP(自然语言处理)领域存在一个学界和工业界还无法解释具体原理但令人很兴奋的现象:“涌现”(Emerging Ability)。
何为“涌现”?“涌现”是指,当模型的参数量呈线性增加到一定程度的时候,模型的精度呈指数型增加。
我们可以看一个图,下图左边展示了比例定律(Scaling Law),这是在2022年之前,OpenAI的研究者发现的现象,也就是说随着模型参数规模呈指数增长时,模型的精度会随之线性增加。左图的模型参数也不是指数级增长 而是线性增长
到了2022年1月,有研究者发现,当模型的参数规模超过一定程度时,模型精度提升的程度明显超过比例曲线,如下图右所示。
“涌现”示意图
落实到应用层面,我们会发现,大模型可以实现一些小模型无法实现的任务,例如大模型能做加减法、能做简单的推理等。
怎样的模型可以称之为大模型呢?
一般来说,我们认为参数量过亿的模型都可以称之为“大模型”。而在自动驾驶领域,大模型主要有两种含义:一种是参数量过亿的模型;另一种是由多个小模型叠加在一起组成的模型,虽然参数量不过亿,但也被称为“大模型”。
按照这样的定义,在自动驾驶领域,大模型已经开始被广泛运用了。在云端,我们可以发挥模型参数量增加带来的容量优势,用大模型完成一些数据挖掘、数据标注等任务。在车端,我们可以把分管不同子任务的多个小模型合并成一个“大模型”,这样可以节省车端计算环节的推理时间,增加安全性。
具体来说,大模型可以如何发挥作用呢?根据笔者与各位业内专家交流得到的信息,业界目前主要是在感知领域使用大模型。接下来,我们将分别介绍在云端和车端,大模型如何赋能感知任务。
01
大模型的应用
1.1 大模型在云端的应用
1.1.1 数据自动标注
采用大模型预训练的方式可以实现自动标注。以视频的clip标注为例,可以先用海量未标注的clip数据通过自监督的方式预训练一个大模型,然后用少量已经人工标注好的clip数据对模型做微调,使得模型具备检测能力,这样模型就可以自动标注clip数据。
模型的标注精度相对越高,对人的替代程度相应也越高。
目前,很多公司都在研究如何提高大模型自动标注的精度,以期精度达标后实现自动标注的完全无人化。
商汤绝影智能驾驶产品总监Leo告诉笔者:我们做过评测,对于道路上的常见目标物,商汤大模型自动标注精度可以达到98%以上,如此一来,后续的人工复审环节就可以十分精简。
商汤绝影在智能驾驶产品开发过程中,目前绝大多数的感知任务都已经引入大模型自动预标注,相比于以往,获取同等数量的数据样本,标注周期和标注成本都可以缩减数十倍以上,显著提高了开发效率。
一般来说,大家对标注任务的期望主要包括标注过程的效率高、标注结果的精确程度高以及一致性高。效率高和精确度高都很容易理解,一致性高是指什么呢?在3D识别的BEV算法中,工程师要采用激光雷达加视觉的联合标注,需要联合处理点云和图像数据。在这种处理环节里面,工程师可能还会需要在时序层面上做一些标注,那么前后帧的结果就不能区别太大。
假如采用人工标注,标注效果有赖于标注员的标注水平,标注人员水平的参差不齐可能导致标注结果的前后不一致,可能会出现一张图里标注框较大,接下来的一张比较小的情况,而大模型的标注结果前后一般比较一致。
但也有业内专家反映,用大模型做自动标注落实到实际应用上,还会有一些困难,尤其是在自动驾驶公司和标注公司的对接方面——很多自动驾驶公司都会把一部分标注工作外包给标注公司,还有的公司没有内部的标注团队,所有标注工作都是外包的。
目前,采用大模型预标注方式来标注的目标主要是一些动态的3D目标,自动驾驶公司会先用大模型针对需要标注的视频做一遍推理,然后把推理后的结果——模型生成的3D框给到标注公司。先用大模型做预标注,然后再把预标注后的结果交给标注公司的时候,主要会涉及到两个问题:一个是有的标注公司的标注平台不一定支持加载经过预标注的结果,另一个是标注公司不一定愿意在预标注后的结果上做修改。
标注公司假如要加载预标注的结果,需要有支持加载大模型生成的3D框的软件平台。然而,有的标注公司可能主要采用人工标注,他们就没有支持加载模型预标注结果的软件平台,如果和客户对接时拿到的是模型预标注后的结果,他们就没有办法承接。
此外,站在标注公司的角度,只有预标注的效果足够好,他们才能真正“省力”,否则可能是在增加工作量。
假如预标注的效果不够好,标注公司后续还是需要做很多工作,例如要把漏标的框标注出来、把标注错误的框删掉、把框的大小统一等。那么,采用预标注可能并没有真正帮他们减少工作量。
因此,在实际应用中,是否采用大模型先做预标注,需要自动驾驶公司和标注公司共同衡量。
当然了,目前人工标注的成本较高——假如让标注公司完全从头开始,1000帧视频数据的人工标注成本可能达到万元级。因此,自动驾驶公司还是希望尽可能提高大模型预标注的精度,尽可能降低人工标注的工作量,从而降低标注成本。
1.1.2 数据挖掘
大模型有较强的泛化性,适合用于对长尾数据的挖掘。
文远知行的某位专家告诉笔者:假如采用传统的基于标签的方式来挖掘长尾场景,模型一般只能分辨已知的图像类别。2021年,OpenAI发布了CLIP模型(一种文字——图像多模态模型,可以在无监督预训练之后将文本和图像对应,从而基于文本对图片进行分类,而非只能依赖于图片的标签),我们也可以采用这样的文字-图像多模态模型,用文字描述来检索drive log中的图像数据。例如,‘拖着货物的工程车辆’、‘两个灯泡同时亮着的红绿灯’等长尾场景。
另外,大模型可以较好地从数据中提取特征,然后找到有相似特征的目标。
假设我们希望从很多图片中找到包含环卫工人的图片,不需要先专门给图片打好标签, 可以用大量包含环卫工人的图片给大模型做预训练,大模型就可以从中提取出一些环卫工人的特征。然后,再从图片中找到和环卫工人的特征比较匹配的样本,从而挖掘出几乎所有包含环卫工人的图片。
1.1.3 用知识蒸馏的方式“教”小模型
大模型还可以采用知识蒸馏的方式“教”小模型。
何为知识蒸馏呢?用最通俗的话来解释,就是大模型先从数据中学到一些知识,或者说提取到一些信息,然后再用学到的知识“教”小模型。
在实践中,可以先把需要打标签的图片给大模型学习,大模型可以给这些图片打好标签,如此一来,我们就有了标注好的图片,将这些图片拿来训练小模型,就是一种最简单的知识蒸馏方式。
当然了,我们也可以采用更复杂的方式,如先用大模型从海量数据中提取特征,这些提取出来的特征可以用来训练小模型。或者说,我们还可以设计得更复杂,在大模型和小模型之间再加一个中模型,大模型提取的特征先训练中模型,然后再用训练好的中模型提取特征,交给小模型使用。工程师可以按照自己的需求选择设计方式。
笔者从小马智行了解到,基于大模型提取的特征进行蒸馏并finetune,可以得到行人注意力、行人意图识别等小模型,并且,由于在特征提取阶段是共用一个大模型,计算量可以减少。
1.1.4 测车端模型的性能上限
大模型还可以用来测试车端模型的性能上限。有的公司在考虑车端要部署什么模型的时候,会先把几个备选模型在云端测试,看增加参数量后,哪个模型的效果最好,性能最好可以到什么程度。
然后,把效果最好的模型作为基础模型,然后对基础模型做裁剪和优化后部署到车端。
1.1.5 自动驾驶场景的重建和数据生成
毫末智行在2023年1月的AI DAY上提到:“采用NeRF技术,我们可以将场景隐式地存储在神经网络中,然后通过渲染图片的监督学习,学出场景的隐式参数,然后就可以进行自动驾驶场景的重建。”
例如,我们可以在网络中输入图片、对应的位姿以及带颜色的场景密集点云,基于点栅格网络将带颜色的点云依据输入图片的pose在不同的分辨率上进行栅格化,生成多个尺度下的neural descriptors,然后通过网络对不同尺度下的特征进行融合。
然后,将生成的密集点云的descriptor、位置以及对应的相机参数和图片的曝光参数等信息输入到后续网络中进行可微调tone mapping,便可以合成出颜色和曝光比较一致的图片。
如此一来,我们便可以实现场景的重建。然后,我们可以通过改变视角、改变光照、改变纹理材质的方法来生成各种高真实感数据,例如通过视角变化可以模拟变道、绕行、调头等各种主车行为,甚至模拟一些即将碰撞的高危险性场景数据。
1.2 大模型在车端的应用
1.2.1 合并用于检测不同任务的小模型
在车端运用大模型,主要形式是把处理不同子任务的小模型合并,形成一个“大模型”,然后来做联合推理。这里的“大模型”并不是传统意义上参数量很大——例如参数过亿的大模型,当然了,合并后的模型与处理不同子任务的小模型相比会大很多。
在传统的车端感知模型中,处理不同子任务的模型是独立做推理的。例如车道线检测任务由一个模型负责,红绿灯检测任务由一个模型负责,随着感知任务的增加,工程师会在系统中相应地增加感知特定目标的模型。
以前的自动驾驶系统功能较少,感知任务相对容易,但是随着自动驾驶系统功能的升级,感知任务越来越多,假如仍然采用不同任务单独用负责相应任务的小模型来单独推理的方式,系统延迟会太大,存在安全隐患。
觉非科技的BEV多任务感知框架中,是将不同目标的单任务感知小模型进行合并,构成一个能同时输出静态信息——包括车道线、地面箭头、路口的斑马线、停止线等,还有动态信息——包括交通参与者的位置、大小、朝向等。觉非科技的BEV多任务感知算法框架如下图所示:
觉非科技BEV多任务感知算法框架示意图
该多任务感知模型实现了特征的时序融合——将历史时刻的 BEV 特征存入特征队列,在推理阶段,以当前时刻的自车坐标系为基准,根据自车运动状态对历史时刻的BEV特征做时空对齐 (包括特征旋转、平移),再将对齐后的历史时刻BEV特征与当前时刻的 BEV 特征进行拼接。
在自动驾驶场景中,时序融合能够提高感知算法的准确性,一定程度上弥补单帧感知的局限。以图中所示 3D 目标检测子任务为例,有了时序融合,感知模型可以检测到一些单帧感知模型无法检测到的目标 (例如当前时刻被遮挡的目标),还可以更加准确地判断目标的运动速度,以及辅助下游任务做目标的轨迹预测。
觉非科技BEV感知技术负责人戚玉涵博士告诉笔者:采用这样的模型架构,在感知任务变得越来越复杂的时候,多任务联合感知的框架能保证感知实时性,也能输出更多、更准确的感知结果提供给自动驾驶系统下游使用。
然而,多任务小模型的合并也会带来一些问题。从算法层面上来说,合并之后模型在不同子任务上的表现可能会有“回退”现象——即模型检测的性能比独立的单任务模型下降。虽然由不同的小模型合并而成的大模型的网络结构仍然可以很精巧,但是合并后的模型需要解决多任务联合训练的问题。
多任务联合训练中,各个子任务可能无法做到同时、同步收敛,且各任务之间会受到“负迁移”的影响,合并后的模型就会在某些特定任务上出现精度的“回退”。算法团队需要尽可能地优化合并的模型结构,调整联合训练的策略,降低“负迁移”现象的影响。
1.2.2 物体检测
一位业内专家告诉笔者:一些真值比较固定的物体适合用大模型来检测。
那么,什么是真值比较固定的物体呢?
所谓真值固定的物体,就是真值不会被天气、时间等因素影响的物体,例如车道线、立柱、灯柱、交通灯,斑马线、地库的停车线、停车位等,这些物体存在与否、位置在哪里都是固定的,不会因为下雨或者天黑等因素改变,只要车辆经过相应的区域,他们的位置都是固定的。这样的物体就适合用大模型来检测。
1.2.3 车道拓扑预测
某自动驾驶公司在公司的AI DAY 上提到:“我们在BEV的feature map的基础之上,以标精地图作为引导信息,使用自回归编解码网络将BEV特征解码为结构化的拓扑点序列,实现车道拓扑预测。”
02
如何用好大模型
在工业界开源的趋势下,基础的模型框架早已不是秘密。很多时候,决定一家公司能不能做出好产品的是工程能力。
工程能力决定了当我们想到一些可能对系统能力提升有效的方法时,是否能快速地验证这一想法的可行性。Tesla和Open AI很大的共同点就是这两家公司的工程化能力都很强,他们可以用最快的速度检验一个想法的可靠性,然后把大规模的数据运用到选定的模型上。
要在实践中充分发挥大模型的能力,公司的工程能力非常重要。接下来,我们将按照模型研发的流程来阐述用好大模型需要怎样的工程能力。
2.1 升级数据存储、文件传输系统
大模型的参数量很大,相应地,用于训练大模型的数据量也很大。例如,特斯拉的算法团队大概用了14亿张图片来训练团队去年在AI day上讲到的3D-occupancy network 。
实际上,图片量的初始值大概会是实际使用数量的几十倍或者上百倍,因为我们需要先从海量数据中筛选出对模型训练有价值的数据,因此,既然用于模型训练的图片是14亿张,那原始图片的数量一定远大于14亿。
那么,如何存储百亿量级甚至是千亿量级的图片数据?这对文件读取系统和数据存储系统都是一个巨大的挑战。尤其是,当前自动驾驶数据是clip形式,且文件数量规模大,对小文件随即存储的效率要求很高。
为了应对这样的挑战,业内有公司对数据采用切片存储的方式,然后采用分布式的架构来支持多用户、多并发的访问,数据的吞吐带宽可达到100G/s,I/O延迟可低至2毫秒。所谓多用户,是指很多用户同时访问某个数据文件;多并发,是指在多个线程里都需要访问某个数据文件,例如工程师在训练一个模型的时候,采用了多线程,每个线程都需要用到某一个数据文件。
2.2 高效地找到合适的网络架构
有了大数据,如何保证模型对数据信息抽象得比较好呢?这就需要模型有适合用于相应任务的网络架构,这样才能充分发挥模型的参数量大这一优势,让模型具备较强的信息提取能力。
商汤大模型研发高级经理Lucas告诉笔者:我们有一套标准化的、工业级的半自动超大模型设计的体系,依靠这个体系,在设计超大模型的网络架构时,可以用一套神经网络搜索系统做底座,找到最适合去学习大规模数据的网络架构。
设计小模型的时候,大家主要依靠人工来设计、调优、迭代,最终得到一个效果令人满意的模型,虽然这个模型不一定是最优的,但是在迭代后,基本能够满足要求。
而在面对大模型的时候,由于大模型的网络结构非常复杂,假如用人工来设计、调优和迭代,对算力的消耗很大,相应地成本也很高。那么,如何在有限的资源下,快速地、高效地设计出效果足够好的一种网络架构来用于训练就是一个需要解决的问题。
Lucas解释道:我们有一套算子库,模型的网络结构可以看成是一套算子的排列组合。这个工业级的搜索系统,可以在设定基本参数——包括多少层网络、参数量多大的前提下,计算如何对算子做排列组合,可以实现较好的模型效果。
模型效果可以根据一些指标来评定,包括对一些数据集的预测精度、模型运行时的显存占用、模型运行时间等。给这些指标赋予相应的权重,我们就可以据此来不断迭代直至找到满意的模型。当然了,在搜索过程中,我们会先用一些小场景来初步评估模型效果。
在评估模型效果的时候,如何选择一些较有代表性的场景呢?
一般来说可以选用一些通用的场景。设计网络架构主要是为了保证模型具备从大量数据中提取关键信息的能力,而不是希望模型可以针对性地学习到某些特定场景的特征,因此,虽然在确定好模型的架构之后,会用模型去完成一些挖掘长尾场景的任务,但是在挑选模型架构的时候,会用通用场景来评估模型的能力。
有了高效率、高精度的神经网络搜索系统,计算效率和计算精度足够高,模型效果才能快速地收敛,才能在一个庞大的空间里快速地找到一个效果好的网络架构 。
2.3 提高模型训练效率
在前面的基础工作做好后,我们就来到了训练环节,训练环节有很多值得优化的地方。
2.3.1 优化算子
神经网络可以理解为由很多基础的算子排列组合而来,算子的计算一方面占用算力资源,另一方面会占用内存。假如可以对算子做优化,让算子的计算效率提高,那么训练效率就能提高。
目前市面上已经有一些AI的训练框架——例如PyTorch、TensorFlow等,这些训练框架可以提供基础的算子供机器学习工程师们调用,从而构建自己的模型。有的企业会构建自己的训练框架,对底层算子做优化,以期提高训练效率。
PyTorch、TensorFlow由于需要尽可能地保证通用性,提供的算子一般都很基本。企业可以根据自己的需求,将基本的算子做融合,省去存储中间结果的步骤,节省显存占用,避免性能损失。
此外,针对一些特定算子由于在计算时对中间结果的依赖度高从而无法很好地利用GPU的并行性的问题,业内有公司自己构建了加速库,降低这些算子对中间结果的依赖度,从而使得计算过程可以充分发挥GPU的并行计算优势,提高了训练速度。
例如,在四种主流 Transformer 模型上,字节跳动的LightSeq 在 PyTorch 的基础上取得了最高 8 倍的加速。
2.3.2 用好并行策略
并行计算是一种“用空间换时间”的方法,也就是把没有计算依赖的数据尽可能并行,把大批量拆分成小批量,减少每个计算步骤中的 GPU 空闲等待时间,提高计算吞吐量。
目前很多公司都采用了PyTorch这个训练框架,这个训练框架里有DDP模式——作为一种分发式数据并行的训练模式,DDP模式设计了一个数据分发机制从而可以支持多机多卡训练,例如一个公司有8台服务器,每台服务器上有8张卡,那么我们就可以同时使用64张卡来训练。
没有这个模式的时候,工程师只能采用单机多卡的方式来训练模型。假设我们现在用10万张图片的数据来训练模型,在单机多卡模式下,训练时间会超过一周。假如我们希望用训练结果评估某个猜想,或者想从几个备选模型中挑选出效果最好的一个,这样的训练时长使得快速验证猜想快速检验模型效果所需的等待周期很长。那么研发效率就很低。
而采用多机多卡并行训练,实验结果大部分在2-3天都可以看到,如此一来,验证模型效果的流程就快了很多。
在具体的并行方式上,主要可以采用模型并行和Sequence并行。
模型并行又可以分为Pipeline并行和Tensor并行,如下图所示。
Pipeline并行和tensor并行示意图,图来自英伟达
Pipeline 并行也就是层间并行(图中上半部分),工程师在训练过程中可以记将模型的不同层划分到不同的 GPU 进行计算。例如图中上半部分所示,绿色部分的层和蓝色部分可以在不同的GPU上做计算。
Tensor 并行也就是层内并行(图中下半部分),工程师可以将一个层的计算划分到不同的 GPU 上。这种模式适合用于大矩阵的计算,因为可以实现 GPU 之间的负载均衡,但通信次数和数据量都比较大。
模型并行之外,还有Sequence并行,由于Tensor 并行没有对 Layer-norm 以及 Dropout 做拆分,因此这两个算子在每个 GPU 之间会重复计算,虽然这个计算的量不大,但却非常占用激活显存。
为了解决这个问题,在实际过程中,我们可以利用Layer-norm 和 Dropout 沿着序列的维度是相互独立的这一特性(即不同层之间的Layer_norm和Dropout之间互不影响),对Layer-norm和Dropout做拆分,如下图所示。这样拆分的好处在于不会增加通信量,并且可以大大减少显存占用。
Sequence并行示意图,图来自英伟达
在实践中,不同的模型适合的并行策略有差异,工程师需要根据模型的特点,还有采用的硬件的特点以及中间的计算流程,不断调试后再找到合适的并行策略。
2.3.3 用好“稀疏”性
在模型训练的时候,还要用好稀疏性,也就是未必每个神经元都要被“激活”——即在添加训练数据的时候,不是每个模型参数都要根据新添加的数据做更新,而是一部分模型参数保持不变,一部分模型参数随新添加的数据更新。
好的稀疏处理可以确保在保证精度的同时提升模型的训练效率。
例如,在感知任务中,当有新的图片传入时,可以选择需要根据这些图片来更新的参数,从而针对性地做特征提取。
2.3.4 统一处理基本信息
一般来说,公司内部不止会用到一个模型,这些模型可能会用到相同的数据,例如大部分模型都要用到视频数据。假如每个模型都把视频数据加载并处理一遍,会存在大量重复计算。我们可以把多数模型都需要用到的视频、点云、地图、CAN信号等各种模态的信息统一进行处理,这样不同的模型就可以复用处理结果。
2.3.5 优化硬件配置
在实际使用分布式训练的时候,可能会用到1000台机器,如何从存储数据的不同服务器中获取训练过程中的中间结果——例如梯度,然后再做一个超大规模的分布式训练,是一个很大的挑战。
要应对这个挑战,首先就需要考虑好CPU、GPU等该如何配置、网卡该如何选型、网卡快,机器间的传输才能快。
其次需要同步参数和保存中间结果,但是当规模很大的时候,这件事情就会变得非常困难,这会涉及到一些网络通信的工作。
另外,整个训练的过程时间很长,那么集群的稳定性就需要很高。
03
继续增加模型参数有意义吗
既然大模型已经能够在自动驾驶领域发挥一些作用,假如我们继续增加模型参数,可以期待大模型能展现出一些令人惊叹的效果吗?
根据笔者与自动驾驶领域的算法专家交流的结果,目前的答案恐怕是否定的,因为上文提到的“涌现”现象尚未在CV(计算机视觉)领域出现。目前大家在自动驾驶领域用的模型参数量远小于ChatGPT的参数量。因为在没有“涌现”效果出现的时候,模型性能提升和参数量增加之间大致呈线性关系,考虑到成本约束,各企业尚未将模型的参数量做到极大。
为什么计算机视觉领域尚未出现“涌现”现象呢?某位专家的解释是:
首先,虽然这个世界上的视觉数据远远多于文字数据,但是图像数据是稀疏的,即大部分照片里可能都没有多少有效的信息,而且每张图片里大部分像素都没有提供有效信息。假如我们取一张自拍照,除了中间的人脸,背景区域都没有有效信息。
其次,图像数据存在显著的尺度变化,并且完全非结构化。尺度变化是说包含同一个语义的object在相应的图片中可大可小。例如,我先拍一张自拍照,然后请距离较远的朋友再帮我拍一张照片,在这两张照片里,脸在照片里占据的比例差异很大。非结构化,是指每个像素之间的关系是不确定的。
但在自然语言处理领域,语言由于是人与人之间交流的工具,上下文之间通常是有关联的,而且每句话的信息密度一般较大,并且不存在尺度变化的问题,例如,在任何一个语种里,“苹果”这个词通常都不会太长。
因此,视觉数据的理解本身就会比自然语言更难。
某位业内专家告诉笔者:虽然我们可以预期模型的性能会随着参数量增加而提升,但是目前继续增加参数量的性价比较低。
举例来讲,假如我们把模型的容量在现有基础上扩大十倍,它的相对错误率能下降90%。这个时候模型已经可以完成一些人脸识别等计算机视觉的任务。假如此时我们把模型的容量继续扩大十倍,相对错误率继续下降90%,但是它能实现的价值却没有提高十倍,那么我们就没有必要继续扩大模型容量。
扩大模型容量会带来成本的上升,因为更大的模型需要更多的训练数据也需要更多的算力。当模型的精度达到可接受范围之后,我们需要在成本上升和精度提高之间做取舍,按照实际的需求在可接受精度情况下尽可能地降低成本。
虽然当前仍然存在一些我们需要提高精度的任务,但是大模型主要是在云端替代一些人工的工作,例如自动标注、数据挖掘等都可以用人来做。假如成本太高,那么经济账就“算不过来”。
但也有业内专家告诉笔者:虽然目前还没有到达质变点,但是随着模型的参数变多,数据量的增加,我们确实可以观察到模型的精度一直在提升。模型精度的提升可以反哺自动化标注,用来做标注任务的模型的精度足够高,标注工作就可以减少很多人力。虽然训练成本会随着模型规模的变大而增加,但目前成本和模型参数量基本呈线性关系。人力的减少可以抵消训练成本的增加,因此,整体上,增加参数量仍然是有收益的。
此外,在模型参数量增加的时候,我们也会采用一些方法提高训练效率从而尽可能降低训练成本。在现有的模型规模下,我们基本可以做到在保持成本基本不变的前提下,增加模型的参数量同时提高模型精度。相当于可以使得模型的成本不随着模型参数量的增加而线性增加,我们可以做到成本几乎不增加或者仅有很小幅的增加。
04
大模型其他可能的应用方式
除了上文提到的应用,我们还可以如何发掘大模型的价值呢?
4.1 在感知领域
CMU Research Scientist Max告诉笔者:用大模型来实现感知任务,核心不是堆叠参数,而是要打造可以‘内循环’的框架。如果整个模型无法实现内循环,或者说没办法实现不断地在线训练,那就很难实现很好的效果。
那么,如何实现模型的“内循环”呢?我们可以参考ChatGPT的训练框架,如下图所示。
ChatGPT训练框架,图摘自Open AI官方网站
ChatGPT的模型框架,可以分为三个步骤:第一步有监督学习,工程师先采集并标注一部分数据,然后用这部分数据来训练模型;第二步是设计一个奖励模型(Reward Model),模型可以自己输出一些标注结果;到了第三步,我们可以通过一个类似于强化学习的路径,实现自监督学习,用更通俗的语言来讲叫“自己和自己玩儿”,或者说“内循环”。
只要到了第三步,模型就不再需要工程师加入标注好的数据,而是可以在拿到无标注数据后自己计算loss,然后更新参数,如此不断循环,最终完成训练。
“假如在做感知任务的时候,我们可以设计好合适的Reward Policy,让模型训练不再依赖标注数据,就可以说模型实现了‘内循环’,可以根据无标注数据不断地更新参数。”
4.2 在规划领域
在围棋等领域,每个步骤的好坏比较容易评判,因为我们的目标一般只包括最终赢得对弈。
然而,在自动驾驶的规划领域,人对自动驾驶系统表现出来的行为的评价体系是不清晰的。在保证安全之外,每个人对舒适度的感受不同,我们可能还希望尽可能快地到达目的地。
换到聊天场景中,机器人每次给的反馈到底是“好”还是“坏”,其实也不像围棋那样有非常清晰的评价体系。自定驾驶也和这一点类似,每个人对于“好”和“坏”有不同的标准,而且他/她可能还有一些很难被清晰地表达出来的需求。
在ChatGPT训练框架的第二步,标注员去给模型输出的结果排序,然后用这个排序结果来训练Reward Model。在一开始,这个Reward Model并不是完美的,但是我们可以通过不断地训练,让这个Reward Model不断地逼近我们想要的效果。
某位来自人工智能企业的专家告诉笔者:在自动驾驶的规划领域,我们可以不断地收集汽车行驶的数据,然后告诉模型什么情况下人会接管(也就是说人会觉得有危险),什么情况下可以正常行驶,那么随着数据量的增加,Reward Model会越来越接近完美。
也就是说,我们可以考虑放弃显式地写出一个完美的Reward Model,而是通过不断给模型反馈的方式来得到一个不断逼近完美的解。
对比目前在规划领域通用的做法,即试图依靠人工书写规则显式地找到最优解,先采用一个初始的Reward Model,然后根据数据不断优化的方法,是一个范式的转变。
采用这种方式后,优化规划模块就可以采用一个相对标准的流程,我们需要做的只是不断地收集数据,然后训练Reward Model,不再像传统方法那样依赖于某个工程师对整个规划模块理解的深度。
此外,历史上所有的数据都可以用来训练,我们不用担心某个规则改动之后,虽然解决了当前遇到的一些问题,但是某些之前已经被解决了的问题再次出现,假如采用传统方法,我们可能就会被这种问题困扰。