24年10月来自U Oregon,西北大学,CMU,UCSD,U Maryland,SUNY Buffalo,Arizona 州立,Adobe,UMass,Intel,Meta AI,Dartmouth 学院,U Arizona 的论文“A Survey of Small Language Models“。

小型语言模型(SLM)因其高效且性能卓越,能够以极少的计算资源完成各种语言任务,而变得日益重要,使其成为包括设备端、移动设备、边缘设备等在内的多种应用场景的理想选择。本文对SLM进行全面的综述,重点关注其架构、训练技术和模型压缩技术。提出一种分类方法,对SLM的优化方法进行分类,包括模型压缩、剪枝和量化技术。总结可用于SLM基准测试的基准数据集以及常用的评估指标。此外,还重点指出仍需解决的关键挑战。
请添加图片描述

尽管大语言模型 (LLM) 在各种基准测试和实际应用场景中都展现出令人瞩目的性能,但它们的成功也伴随着巨大的成本。LLM 的训练和运行需要消耗大量资源,需要大量的计算和数据。这意味着它们通常需要在集中式专用硬件上进行训练和推理。

为了应对这些挑战,人们对小语言模型 (SLM) 的兴趣日益浓厚。小语言模型旨在保持大语言模型的准确性和/或适应性,同时受到一些限制,例如训练或推理硬件、数据可用性、带宽或生成时间。在这些限制条件下提升模型性能,可以改善下游目标,例如隐私、成本或在消费级设备上运行的能力。

对小语言模型进行综述的固有难点在于,“小型”和“大型”的定义取决于上下文和时间。 GPT-2 是 2019 年推出的“大语言模型”,拥有 15 亿个参数,比本次调查中涉及的许多“小型”语言模型都要小。然而,尽管规模有所变化,但训练小型语言模型的目标仍然相对稳定。

下面两个表分别总结小模型的技术和约束:

请添加图片描述
请添加图片描述

轻量级架构

轻量级语言模型架构旨在以更少的参数和更低的计算开销实现高效的性能,非常适合部署在资源受限的设备上,例如移动电话、边缘设备和嵌入式系统。典型的轻量级模型通常采用仅编码器架构和仅解码器架构。

轻量级仅编码器架构大多是 BERT 的优化版本(Devlin,2019)。例如,MobileBERT(Sun,2020)引入反向瓶颈结构,以平衡自注意网络和前馈网络,与基础版本的 BERT 相比,模型大小减少 4.3 倍,速度提高 5.5 倍。 DistilBERT(Sanh,2019)和 TinyBERT(Jiao,2019)的性能均超过 96%。

轻量级的仅解码器架构遵循自回归语言模型的结构,例如 GPT(Radford,2018,2019)和 LLaMA 系列(Touvron,2023b)。这些模型强调知识蒸馏、内存开销优化、参数共享和嵌入共享,以提高效率和可扩展性。BabyLLaMA(Timiryasov & Tastet,2023a)和 BabyLLaMA-2(Tastet & Timiryasov,2024)分别将来自多个教师的知识蒸馏成一个 5800 万参数的模型和一个 3.45 亿参数的模型,这表明知识蒸馏可以超越教师模型的性能,尤其是在数据受限的情况下。 TinyL-LaMA(Zhang,2024)仅需11亿个参数,通过优化内存开销(例如,通过FlashAttention(Dao,2022))实现高效率,同时在各种下游任务中保持良好的性能。MobilLLaMA(Thawakar,2024)采用一种参数共享方案,降低预训练和部署成本,并针对资源受限设备引入一个5亿个参数的模型。MobileLLM(Liu,2024e)进一步引入嵌入共享和分组查询注意力机制,并采用分块权重共享来降低延迟。

高效的自注意近似方法

由于自注意层中参数数量庞大,以及自注意本身计算成本高昂,部署大语言模型可能极具挑战性。

Reformer(Kitaev,2020)通过将点积注意机制替换为使用局部敏感哈希的注意机制,将自注意机制的复杂度从 O(N²) 降低到 O(N log N)。Roy(2021)使用基于在线 k-means 聚类的稀疏路由模块,进一步降低注意计算的复杂度。

为了将自注意层的计算复杂度从 O(N²) 降低到 O(N),包括 Wang (2020a)、Katharopoulos (2020)、Xiong (2021) 和 Beltagy (2020) 在内的多项研究提出线性注意机制。特别是,Katharopoulos (2020) 将自注意表示为核特征图的线性点积,从而降低计算复杂度。作者进一步证明,采用这种线性注意机制的 Transformer 模型可以被视为循环神经网络,从而实现更快的推理速度。基于这些基础,近期的研究进展催生更先进的架构。值得注意的例子包括 Mamba(Gu & Dao,2023;Dao & Gu,2024),它引入一种具有输入相关状态转移的选择性状态空间模型;以及 RWKV(Peng,2023),它将 Transformer 和 RNN 的元素与线性注意机制相结合。这些模型不仅实现线性时间和空间复杂度,而且在各种任务中都展现出优异的性能。这种高效序列建模架构的持续发展趋势旨在保持基于注意机制模型的表达能力,同时显著降低计算复杂度。

有一些先前使用仅编码器架构处理长文档的工作。Longformer(Beltagy,2020)结合局部窗口注意和任务特定的全局注意,其计算量随输入长度线性增长,因此具有很高的内存效率。Wang (2020a) 使用低秩矩阵近似自注意机制,将复杂度降低到 O(N)。这两项工作都表明,在各种下游任务中,采用线性自注意的 Transformer 模型在性能上与原始自注意机制相当。类似地,Xiong (2021) 使用流行的 Nystrom 方法 (Nyström, 1930) 来近似自注意操作,与传统 Transformer 模型相比,该方法在实验上表现出色。

神经架构搜索技术

针对特定任务和硬件限制,寻找最高效模型架构的自动化方法。

以往的研究主要集中在视觉任务(Tan & Le,2019;Zoph & Le,2016;Wu,2019;Guo,2020)和 BERT 模型(Xu,2021;Jawahar,2023;Ganesan,2021)的神经架构搜索(NAS)上,因为这些模型的参数相对较少,从而降低高效架构的搜索成本。然而,参数超过十亿的LLM给寻找更小、更高效的模型带来巨大挑战。其庞大的规模使得搜索过程计算量巨大且成本高昂。最近,MobileLLM(Liu,2024e)研究模型深度(即层数)和宽度(即头数)对性能的影响,有效地在较小的参数范围内对拥有数百万参数的语言模型进行有针对性的架构搜索。同时,Shen(2024c)通过探索合适的搜索初始化方法来缩小搜索空间,这有助于加快搜索过程的收敛速度。

小型多模态模型

近年来,大型多模态模型(LMM)在显著减少参数数量的同时,取得了与前代模型相当甚至更优的性能。值得注意的例子包括LLaVA-Next(Liu,2024a)、Idefics2(Laurençon,2024)和InternVL2(Chen,2023)系列模型。这一进展部分得益于更高效、更小的语言模型,例如 Gemma(Team,2024)和 phi-3-mini(Abdin,2024),同时也凸显精心整理的数据集的关键作用。此外,人们一直在努力减少多模态融合过程中视觉编码器的规模。例如,InternVL2 利用大型视觉编码器中间层的输出,同时舍弃后续模块。更小的模型,例如 PaliGemma(Beyer,2024)和 Mini-Gemini(Li,2024c),则采用轻量级的视觉编码器。单体式多模态模型更进一步,完全消除视觉编码器,转而使用轻量级架构来生成视觉tokens。例如,Chameleon(Team,2024a)采用 VQ-VAE 模型将图像编码和解码为离散tokens,而 Mono-InternVL(Luo,2024a)使用 MLP 为图像块生成视觉tokens,并结合模态特定的前馈网络(称为多模态混合专家)来区分模态。

虽然小语言模型(SLM)和大语言模型(LLM)的训练方法类似,但有一些针对SLM资源有限条件下的通用学习高效技术。

预训练技术

混合精度训练是提高SLM和LLM预训练效率的关键技术。该方法利用低精度表示进行前向和反向传播,同时保持高精度权重用于更新。例如,(Micikevicius et al., 2018) 提出自动混合精度 (AMP) 方法,该方法最初以32位浮点 (FP32) 精度保存权重主副本,同时以16位浮点 (FP16) 精度执行算术运算。然而,最近的研究 (Rae et al., 2021) 发现,由于其数值范围有限,该方法存在精度损失。为了解决这个问题,(Burgess et al., 2019) 提出 Brain Floating Point (BFLOAT16),它比 FP16 具有更大的动态范围和更多的指数位数。BFLOAT16 已证明其训练性能和表征精度优于 FP16。现代 GPU 架构通过专用的 Tensor Core 进一步提升混合精度能力。例如,虽然早期的 GPU 支持 FP16 和 BFLOAT16,但 NVIDIA 最新的 Hopper 架构引入对 8 位浮点 (FP8) 精度的支持 (Luo et al.),从而为大语言模型带来了更高的计算效率。

除了这些混合精度方法之外,还采用各种优化和稳定性技术来防止模型崩溃,并进一步提高 SLM 和 LLM 的训练效率。尽管 Adam (Diederik, 2014) 和 AdamW (Loshchilov 和 Hutter, 2019) 优化器应用广泛,但为了提高训练速度和效率,人们也引入诸如 Adafactor (Shazeer 和 Stern, 2018) 和 Sophia (Liu, 2024b) 等内存高效的变型。为了进一步稳定训练过程,梯度裁剪 (Zhang, 2020) 被广泛用于防止梯度爆炸。此外,精心设计的初始化策略可以为模型训练提供良好的起点。这些技术的结合旨在实现最佳训练效率,保持数值稳定性,并生成更鲁棒、更强大的语言模型。

为了应对预训练阶段的计算需求,语言模型通常会在多个机器节点上进行预训练,从而高效利用分布式计算资源。为此,人们开发多种系统级优化技术。零冗余数据并行 (ZeRO) (Rajbhandari,2020) 提供三个渐进的优化阶段,每个阶段都会在设备上划分更多的训练状态:ZeRO-1 划分优化器状态,​​ZeRO-2 增加梯度划分,ZeRO-3 进一步划分模型参数。PyTorch 的全分片数据并行 (FSDP) (Zhao,2023b) 实现类似的概念。这些并行技术能够使用更大的批次大小进行训练,从而显著提高 SLM 和 LLM 的效率和可扩展性。

微调技术

在较小的、特定任务的数据集上进行微调,可以让 LLM 利用预训练期间获得的知识,使其在特定任务或领域中表现出色。微调技术旨在解决计算资源有限、数据质量、可用性和鲁棒性等挑战,确保能够高效地适应新任务,而无需进行大量的重新训练。

参数高效微调

参数高效微调 (PEFT) 仅更新一小部分参数或添加轻量级模块,而保持预训练模型的大部分参数不变。这种方法降低 SLM 微调过程中的计算成本,保留模型的知识,减少过拟合,并提高灵活性。LoRA 使用低秩分解(Hu,2021),Prompt Tuning(Lester,2021)在输入中插入可学习的提示,而 Llama-Adapter(Zhang,2023b;Gao,2023)则将提示添加到 LLaMA 的注意模块中。动态适配器(Kong et al., 2024; Feng et al., 2024; Gou et al., 2023; Liu et al., 2023b; Luo et al., 2024b)自动组合多个适配器,形成混合专家模型,以实现多任务处理并防止遗忘(Han et al., 2024; Yang et al., 2024)。

数据增强

数据增强可以提高训练数据的复杂性、多样性和质量,从而提升模型的泛化能力和下游任务的性能。AugGPT(Dai et al., 2023)使用 ChatGPT 对训练样本进行重述。Evol-Instruct(Xu et al., 2023)则利用多步修正生成复杂度更高的多样化开放域指令。反思调优(Li et al., 2023a, 2024a)通过基于预定义标准,利用 GPT-4 对指令和响应进行优化,从而提高指令调优的数据质量和指令-响应一致性。FANNO(Zhu et al., 2024)通过检索增强生成的方式,整合外部知识源,从而增强指令并生成响应。LLM2LLM(Lee et al., 2024b)在训练过程中,基于模型对训练数据的预测,生成更多难度较高的样本。

数据增强在训练数据有限的情况下也能有效地合成新数据,例如低资源语言(Whitehouse et al., 2023)、医疗和临床应用(Chintagunta et al., 2021)以及隐私敏感数据(Song et al., 2024),这使得模型能够更好地泛化,并在受限环境中表现得更加稳健。


模型压缩技术旨在降低大型预训练语言模型的规模和复杂度,同时保持其性能。因此,这些方法是从大语言模型 (LLM) 导出小语言模型 (SLM) 的关键途径。

剪枝技术

权重剪枝是一种模型优化技术,它通过减少参数数量来提高计算效率并降低内存使用量,同时保持性能水平。两种主要的剪枝方法:非结构化剪枝和结构化剪枝。

非结构化剪枝移除不太重要的单个权重,从而在减小模型规模方面提供更精细的控制和灵活性。例如,为了对大语言模型进行不规则剪枝,SparseGPT(Frantar 和 Alistarh,2023)将剪枝任务重新表述为稀疏回归问题,并使用逐层近似回归求解器优化剩余权重和剪枝后的权重。SparseGPT 可以高效地处理像 OPT-175B 和 BLOOM-176B 这样的大规模模型。此外,(Boža,2024)集成 ADMM(Boyd,2011)算法进行权重更新,以进一步减少剪枝误差。Wanda(Sun,2023)在剪枝过程中同时考虑权重和激活值,从而无需更新权重。 这个 n:m 剪枝策略(Zhou,2021)通过从每 m 个权重中精确剪除 n 个权重,将非结构化剪枝引入模型加速,从而平衡剪枝的灵活性和计算效率,显著提升模型速度。NVIDIA 的 TensorRT 利用这种稀疏模式来优化内存访问并降低计算负载,加速 GPU 上的推理,尤其是在 A100 等硬件上。值得注意的是,非结构化剪枝通常会产生稀疏矩阵,需要专门的硬件或算法才能最大限度地发挥计算优势(Frantar & Alistarh,2023)。
结构化剪枝(Wang et al., 2020b; Santacroce et al., 2023; Ma et al., 2023; Tao et al., 2023; Xia et al., 2024; Kurtić et al., 2024)旨在通过以结构化的方式移除参数组来压缩LLM,同时保持其性能,从而实现更高效的硬件实现。该方法的一个主要方向是模型中神经元的稀疏性。例如,Li et al. (2023b) 观察到前馈网络中普遍存在稀疏性。Liu et al. (2023e) 提出使用小型神经网络进行基于输入的动态剪枝,称为“上下文稀疏性”。Mirzadeh et al. (2024)将预训练模型中的激活函数更改为 ReLU 并进行微调以提高激活稀疏性。

最近的研究也关注 Transformer 架构中的冗余问题,以减少 GPU 内存使用并提高速度(Michel,2019;Voita,2019;Ge,2024)。例如,Sajjad(2023)和 Xia(2022)研究层冗余以实现有效的结构化剪枝。输入相关的剪枝方法,如上下文稀疏性(Liu,2023e)和 FastGen(Ge,2024),这些方法应与高效实现的挑战一起考虑,以优化计算和内存。

量化

量化被广泛用于压缩参数数量庞大的LLM。GPTQ(Frantar,2022)专注于逐层权重量化,并使用逆Hessian矩阵来最小化重构误差。为了充分利用快速整数矩阵乘法的优势,越来越多的量化方法(Liu,2023a;Dettmers,2022b;Kim,2023;Xiao,2023;Yao,2022;Lin,2024;Liu,2023d,2024d,2023c;Shao,2023)被应用于LLM,这些方法同时量化权重和激活值。 AWQ(Lin,2024)和ZeroQuant(Yao,2022)考虑激活值来评估权重的重要性,从而能够更有效地优化权重量化。此外,对于KV缓存量化(Hooper,2024;Liu,2024f;Yue,2024),KV缓存被专门量化,以实现高效的长序列长度推断。

激活值量化的另一个挑战在于那些超出典型激活值分布范围的异常值。SmoothQuant(Xiao,2023)通过将量化难度从激活值转移到权重来平滑激活值异常值。Spin-Quant(Liu,2024d)引入旋转矩阵将异常值转换到一个新的空间。近年来,量化-觉察训练(QAT)方法,例如 LLM-QAT(Liu,2023d)和 Edge-QAT(Shen,2024b),因其优异的性能而备受关注。这两种方法均采用基于 float16 模型的知识蒸馏来恢复量化误差。近期的一些工作(Shen,2024a,b;Zeng,2024)在移动设备和 FPGA 上实现量化 LLM,以验证权重和激活值量化对 LLM 的有效性和效率。

知识蒸馏技术

经典的知识蒸馏方法(Hinton,2015)涉及训练一个高效的模型(称为“学生模型”)来复现一个更大、更复杂的模型(称为“教师模型”)的行为。这里主要是从一个或多个白盒教师语言模型到目标学生语言模型的蒸馏策略。

Babyllama(Timiryasov & Tastet,2023b)是最早使用 Llama 模型作为教师模型,开发出紧凑型 5800 万参数语言模型的模型之一。这项工作的一个关键发现是,从鲁棒教师模型进行蒸馏可以在同一数据集上优于传统的预训练方法。类似地,(Gu,2024)对蒸馏损失进行改进,使学生模型能够生成更高质量的响应,并具有更好的校准和更低的暴露偏差。如(Wen,2023)所示,序列级蒸馏损失也可以通过使用广义的 f-散度来改进。(Liang 2023) 通过使用任务感知过滤器扩展语言模型的逐层蒸馏策略,这些过滤器仅从教师模型中蒸馏出特定任务的知识。最近的研究(Wan,2024a,b)表明,可以通过策略性地合并多个语言模型的输出概率分布,将它们融合为一个教师模型,从而将知识蒸馏到小语言模型中。

语言模型知识蒸馏面临的一个问题是,蒸馏策略主要在以下情况下有效:(1)教师模型和学生模型共享同一个token化器;(2)教师模型的预训练数据可用。Boizard(2024)通过引入一种受最优传输文献启发的通用 logit 蒸馏损失来解决这个问题。通常,蒸馏还会与剪枝技术相结合,以创建更小的语言模型。例如,(Sreenivas et al., 2024; Muralidharan et al., 2024) 的研究表明,通过迭代剪枝大语言模型,然后使用蒸馏损失进行重新训练,可以构建出性能强大的小模型。

最近的研究进展探索超越传统标签蒸馏的方法,在蒸馏过程中引入额外的监督信息,从而创建更小的语言模型。Hsie(2023)发现,在蒸馏过程中使用“推理”作为额外的监督来源可以提高样本效率。此外,作者还发现,蒸馏后的模型在常用的自然语言理解(NLI)、常识问答(Commonsense QA)和算术推理基准测试中优于大型语言模型。类似地,(Dai et al., 2024; Magister et al., 2023; Ho et al., 2023; Fu et al., 2023) 将推理链从较大的语言模型提炼到较小的语言模型,并保留标签信息。此类提炼后的模型已被证明具有更强的算术、多步骤数学、符号和常识推理能力。


数据集

在各种场景下预训练和评估 SLM 的常用数据集,提供多样化的上下文示例,使模型能够在不同的学习环境中有效泛化。

高效推理。此场景要求模型以尽可能低的延迟和高吞吐量快速生成输出。针对此场景的评估数据集通常侧重于需要快速响应的任务,例如问答、文本分类和自然语言理解。为此,一些适用于此场景的示例评估数据集包括 SuperGLUE (Sarlin et al., 2020)、SQuAD (Rajpurkar et al., 2016)、TriviaQA (Joshi et al., 2017)、CoQA (Reddy et al., 2019)、Natural Questions (NQ) (Kwiatkowski et al., 2019) 以及更多其他数据集 (Chang et al., 2024),这些数据集涵盖各种需要更快响应时间的任务。

隐私保护。数据集在支持小语言模型 (SLM) 开发并保护敏感信息方面发挥着重要作用。诸如 PrivacyGLUE (Shankar et al., 2023) 之类的数据集将差分隐私技术应用于情感分析等常见任务。匿名数据集,例如 MIMIC(Johnson,2020)和 n2c2 数据集,包含用于医疗任务的去标识化临床笔记,从而保护个人健康信息。此外,联邦数据集(例如 LEAF2)允许数据在不同设备间保持分布,通过联邦学习框架支持隐私保护设计。

TinyML 和设备端。在这些场景中,重点在于在资源高度受限的环境中部署 SLM。TinyBERT(Jiao,2020)和 OpenOrca(Lian,2023)等框架发挥着关键作用,它们支持在专为此类环境定制的精选数据集上训练和评估 SLM。TinyBERT 是 BERT 的精简版,针对大小和速度进行优化,使其适用于对延迟要求极低的设备端应用。类似地,OpenOrca 等子集提供兼顾性能和资源限制的实用数据集,支持开发小型高效模型,这些模型可以部署在低功耗设备上,且不会牺牲准确性。

指标

不同环境下 SLM 的关键指标,根据具体限制进行组织。

延迟。评估延迟的两个关键指标是推理时间(Narayanan,2023)和吞吐量(Arora,2024)。推理时间衡量模型处理输入并生成输出的速度,这对于需要即时反馈的用户应用至关重要。另一方面,吞吐量评估模型在给定时间内可以处理的标记或样本数量,因此对于大规模任务或时间敏感型应用尤为重要。

内存。在内存受限的环境中部署模型时,内存效率成为首要考虑因素。峰值内存使用量(Lee,2024a)等指标反映模型在推理过程中消耗的最大内存量。类似地,内存占用和压缩比(Cao,2024)用于衡量模型的紧凑程度以及所应用压缩技术的效率,从而使模型能够在内存限制下运行而不牺牲性能。

隐私。隐私预算(Yu,2024)是基于差分隐私的指标,用于量化模型在训练和推理过程中保护敏感信息的能力。此外,噪声水平(Havrilla,2024)通过评估在保持模型性能的同时确保隐私所需的噪声量,来衡量隐私和准确性之间的权衡。

能量优化。能量效率比(Stojkovic,2024b)评估模型能量消耗与其整体性能之间的关系,从而深入了解 SLM 在实际应用中的能耗情况。其他指标,例如热效率和空闲功耗(Patel,2024),则衡量模型在执行任务或空闲状态下的能量消耗,这对于在嵌入式系统或移动设备等能源受限环境中进行长期部署至关重要。

SLM 的应用

请添加图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐