https://arxiv.org/abs/2411.03350
基础都是transformer架构,没啥好说的。
小模型的获取无非三条路:了从LLM中获得SLM,主要使用三种技术:剪枝、知识蒸馏和量化。
剪枝移除较不重要的参数,减小模型大小,同时尽量保持性能。
知识蒸馏将知识从大型教师模型转移到较小的学生模型,保留了原始模型的大部分理解。
量化降低参数精度,显著降低内存和计算需求,对准确度的影响最小。这些方法在尺寸减小、效率和性能保持之间取得平衡。
非结构化剪枝和结构化剪枝区别:
无结构剪枝[70, 91, 179, 268, 285, 381, 385]通过逐个移除权重而不考虑其内部结构来剪枝大型语言模型(LLM)。根据特定标准(例如大小或对输出的影响)剪除最不重要的参数。这种方法可以在保持性能的同时实现显著的压缩。然而,它也可能导致不规则的内存访问模式和硬件效率降低,因为剪枝后的模型缺乏规则结构。SparseGPT[91]是一种代表性的无结构剪枝方法,它使用一种新颖的稀疏回归求解器,可以将大型GPT模型如OPT-175B[383]和BLOOM-176B[162]剪枝至高达60%的稀疏度。Wanda[285]结合权重大小和输入激活来高效地识别并丢弃影响较小的参数。它在单次前向传播中操作,迅速实现高稀疏度而无需重新训练。还值得注意的是,最近的研究特别针对剪枝与低秩适应(LoRA)[127]之间的兼容性问题,例如LoRAPrune[381]。
结构化剪枝[12, 17, 43, 111, 167, 174, 207, 216, 341, 358, 388],它通过针对整个结构组件—如神经元、通道或层—进行剪枝,而不是逐个元素剪枝。这种方法允许直接减少维度,从而有效地降低模型复杂性和内存使用。尽管结构化剪枝可能导致比非结构化剪枝更高的准确率下降,但它简化了实现过程,无需专用硬件。ShortGPT[216]提出了块影响(BI)指标,该指标基于各层对隐藏状态的转换来衡量其重要性。本质上,通过改变隐藏状态的程度来衡量一个变换器块的影响。通过计算BI分数,ShortGPT确定哪些层对整体性能贡献最小,并移除这些不重要的层。这种简单而有效的层移除策略显著减少了模型的参数和计算需求。LLM Pruner[207]提供了一种在没有原始训练数据集的情况下高效剪枝LLM的方法。它采用了一个三步压缩流程:发现(识别相互依赖的结构)、估计(评估每个组的性能影响)和恢复(训练后处理以解决性能损失)。
知识蒸馏。知识蒸馏(KD)通过训练学生模型模仿教师模型的输出,将较大的教师模型压缩成较小的学生模型[122]。这使得学生模型能够在参数更少的情况下保留教师模型的大部分能力,非常适合在资源有限的环境中缩小大型语言模型(LLMs)的规模,同时保持性能。KD可以分为白盒和黑盒方法[320, 353, 398],如图6所示。在白盒KD中,学生模型可以访问教师模型的内部状态或输出分布[6, 106, 140, 151, 155, 236, 377]。广义知识蒸馏(GKD)[155]引入了偏斜KL散度来稳定梯度并提高性能,使用自适应的非策略方法来最小化噪声反馈并提高效率。黑盒KD仅依赖于教师模型的输出,而不访问模型内部[41, 240, 319]。像逐步蒸馏[126]这样的方法使用教师生成的推理来训练更小的模型,从而提高性能。LaMini-LM [336] 利用GPT-3.5 Turbo的响应创建了一个多样化的指令数据集,使得小型模型能够表现出强大的性能。
量化通过将浮点表示转换为低精度格式,减少了大型语言模型(LLMs)的存储和计算需求,显著降低了存储需求和计算复杂度。现有的方法分为两类:训练后量化(PTQ)和量化感知训练(QAT)。图7展示了这两种量化方法。训练后量化在训练完成后应用,简化了模型压缩,无需改变架构或重新训练,尽管可能会导致精度损失
低秩技术。低秩技术通过用两个低维矩阵近似高维权重矩阵来压缩大型语言模型(LLMs),从而减少计算和内存需求。一个大小为 𝑚 × 𝑛 的矩阵 W 可以近似为 W ≈ A × B,其中 A 是 𝑚 × 𝑟 矩阵,B 是 𝑟 × 𝑛 矩阵,且 𝑟 远小于 𝑚 或 𝑛,显著减少了参数数量。基于这一概念,Ji 等人[141]提出了一种针对 LLMs 的低秩压缩方法,利用观察到的 LLMs 虽然具有高秩权重,但其特征交互倾向于表现出低秩性质。该方法使用池化协方差矩阵估计特征分布,并根据各层对低秩压缩的敏感性分配不同的压缩比率。使用高斯过程作为代理模型的贝叶斯优化策略优化低秩维度的分配,确保模型在实现显著压缩的同时保持性能。从模型压缩转向微调,Cho 等人[54]利用 HETLORA 方法解决系统和数据异质性问题,该方法使用异构低秩近似来适应不同客户端的能力和数据复杂性。通过结合局部秩自剪枝与稀疏权重聚合,它平衡了高低秩 LoRA 模块,与统一方法相比提高了收敛速度和性能。
以下是模型压缩技术的对比表:
标准 | 剪枝 | 知识蒸馏 | 量化 | 低秩技术 |
---|---|---|---|---|
定义 | 移除不需要的参数 | 从大模型向小模型转移知识 | 降低参数的精度 | 对权重进行低秩分解 |
目标 | 减少模型大小和计算量 | 缩小模型,保持性能 | 降低模型大小,加速处理 | 减少参数和计算量 |
方法 | 根据重要性剪枝或裁剪层 | 小模型模仿大模型的输出 | 将参数转换为低精度 | 将矩阵分解为更小的组件 |
优势 | 显著减少大小和计算量 | 在小模型中保持性能 | 加快推理速度,占用更少存储 | 高效,基本能保持性能 |
劣势 | 可能降低准确性,内存访问不规则 | 资源密集,需要大型教师模型 | 可能导致精度损失,可能需特定硬件 | 效果因秩选择而异 |
模型大小影响 | 高度减少 | 通过知识转移显著缩小 | 高度相关于精度降低 | 中等,减少冗余参数 |
性能影响 | 过度剪枝可能导致性能下降 | 若蒸馏良好则保持 | 轻微至中等损失,取决于方法 | 基本保持性能,可能需要调优 |
复杂性 | 中等,需评估参数 | 高,涉及双模型训练 | 中等,因精度级别而异 | 中等,需矩阵分解 |
应用场景 | 资源受限的环境 | 为资源受限环境创建高效模型 | 快速推理需求、边缘设备 | 权重冗余较多的情况 |
主题 | 方法 | 主要贡献 |
---|---|---|
从零开始训练 | MindLLM [359] | 双语预训练轻量级模型,具有高级架构特性 |
MobiLlama [299] | 通过参数共享实现模型能力与效率并重的设备端语言模型 | |
MobileLLM [199] | 深而薄的架构,采用高级技术优化移动设备上的大语言模型部署 | |
监督微调 | MobileBERT [286] | 紧凑型BERT模型,可在下游任务上进行微调 |
Alpaca 7B [292] | 52,000个ChatGPT生成的指令跟随示例,从175个自指导任务中生成,以微调Llama 7B [301] | |
RLHF [235] | 收集人类偏好的数据,训练奖励模型,并使用强化学习微调语言模型 | |
DPO [249] | 使用动态加权机制调整优选和非优选响应的对数概率,防止模型退化问题 | |
知识蒸馏中的数据质量 | TinyStory [86] | 小型语言模型可以使用儿童友好数据集和基础词汇生成连贯的故事 |
AS-ES [340] | 将推理步骤分类为抽取和抽象段,以增强小模型的链式推理能力 | |
Self-Amplify [25] | 无代理自生成推理方法,使小型语言模型能够自动注释链式推理数据 | |
小语言模型的蒸馏 | GKD [6] | 通过使用策略序列和灵活的散度度量对齐训练和推理分布 |
DistiLLM [155] | 使用偏斜KL散度损失增强稳定性,并采用自适应的非策略生成输出利用 | |
Adapt-and-Distill [362] | 在蒸馏前对教师和学生模型进行领域适配,增强小模型性能 | |
量化 | SmoothQuant [342] | 通过每通道缩放变换,在激活和权重之间平衡量化难度实现8位量化 |
BiLLM [133] | 使用基于Hessian的指标选择显著权重,应用二进制残差近似和最优分割搜索进行精确量化 | |
LLM-QAT [198] | 通过无数据知识蒸馏和对数蒸馏进行量化和微调,来自全精度模型 | |
PB-LLM [267] | 选择性地对非显著权重进行二进制化,同时保留显著权重的高精度,平衡模型压缩和准确性 | |
OneBit [350] | 使用与符号值无关的分解法实现近似1位量化,平衡极端压缩和最小性能损失 | |
BitNet [316] | 基于BitLinear层和量化感知训练的1位Transformer架构,优化低精度表示以提高准确性和训练稳定性 | |
BitNet b1.58 [206] | 引入三值权重系统增强BitNet,从30亿参数中获得全精度性能,减少内存和延迟成本 | |
小语言模型的LLM | Ma et al. [209] | 结合LLMs和SLMs的自适应过滤和重新排序范式,改进信息抽取任务 |
MoQE [154] | 仅对专家权重进行量化,比在相同数据集上训练的密集模型表现更好 | |
SLM-RAG [192] | 提出使用检索增强生成(RAG)的小语言模型可以与大型语言模型(LLM)相媲美 |
对于小型语言模型,数据质量的重要性超过了数据的数量和多样性[359]。实验表明,使用质量过滤方法剔除低质量数据可以提升小型语言模型(SLM)的性能[359]。与能够处理多样和庞大数据集的大模型不同,SLM在数据清晰度更高的情况下表现更好,可能是由于其在处理噪声方面的能力有限。一般来说,数据处理包括几个步骤:(i) 格式清理,去除HTML、CSS和JS标识符以及非文本元素,确保文本输入的清洁;(ii) 低质量内容过滤,排除文本与内容比例较低的网页;(iii) 使用局部敏感哈希(LSH),特别是SimHash算法[71, 261]进行去重,防止内容重复;(iv) 通过启发式方法和敏感词汇表过滤敏感信息,用特殊标记替换私人信息;(v) 自重复内容过滤,去除广告常见的重复短语,提升训练数据集的信息价值[40, 359]。这些步骤共同确保了训练数据的高质量和信息丰富性。SLM从这些技术中显著受益。例如,MindLLMs [359],一种提供1.3B和3B版本的双语轻量级语言模型,采用了这些数据处理技术,从而提高了能力获取,同时缓解了如灾难性遗忘等问题。
对于大型语言模型(LLMs),由于模型规模和数据量巨大,通常采用一轮训练。而对于SLM,则可以进行多轮训练[291]。考虑到某些样本较难拟合,可对难以拟合的样本以较高概率进行训练[291]。每轮训练中,根据样本的总体损失来更新数据采样概率。实验结果表明,两轮训练和50%的采样率在性能和训练效率之间达到了良好平衡。Tang等人[291]的研究显示,采用深且窄的神经结构和多轮训练可以增强Pangu 1.5B专业模型的性能。此模型在多个基准数据集上优于传统训练的Pangu 1.5B及其他类似规模的大型语言模型,平均性能提升达8.87%。
监督微调(Supervised Fine-Tuning,SFT)采用与预训练类似的训练方法,但特别针对将模型调整为符合多种指令数据集中的指令。这种方法旨在提升模型在特定情境下的响应性和适应性,如由训练数据指定的上下文要求。例如,Alpaca [292]、UltraChat [79]、WizardLM [346]、SlimOrca [181]、ShareGPT [315]、Capybara [66]、Deita [193]和MetaMathQA [366]等多个模型均整合了对话数据集,以增强其在情境感知对话和指令遵从方面的能力。
通常,如图9所示,现有的SFT方法可分为三大类:
基于下游数据的经典微调:通过特定任务的标注数据训练SLM,将通用的语言表示迁移到具体任务中,如情感分析。在LLM时代,这种方法依然有效,比如通过小型模型(如BERT [392])校准LLM的响应或分配风险评分,或使用MobileBERT [286]优化移动设备上的性能。
基于LLM生成数据的指令微调:该方法使用LLM生成的数据[79, 181, 292]或带有LLM注释的人类问题[315],以对生成模型进行指令对齐,从而提升其指令遵从和推理能力。例如,Alpaca 7B [292] 使用52k个由ChatGPT生成的跟随指令示例,来源于175个自主指令的种子任务,对Llama 7B [301]进行微调。同时,StableLM [24, 303]则在Restruct-v1数据集上进行训练,包含摘要、问答和情感分析任务,并使用[202]中的指令数据。
基于人类反馈的偏好优化:该方法旨在更好地将语言模型与人类偏好对齐。人类反馈的强化学习(RLHF)[235]收集人类偏好的数据,训练奖励模型,并使用强化学习微调语言模型。直接偏好优化(DPO)[249]则提供了RLHF的简化替代方案。与RLHF不同,DPO避免了显式的奖励建模和强化学习技术,而是通过动态权重机制调整优选与非优选响应的对数概率,避免了依赖概率比率的方法常见的模型退化问题。例如,Llama 3.2 1B和3B在后期训练中应用了SFT和DPO,以增强对指令和人类偏好的对齐能力。
从关于从头训练小语言模型(SLM)的讨论过渡到这里,本节探讨了数据质量在知识蒸馏(KD)中的关键作用。其主要目的是强调由大型语言模型(LLM)生成的高质量数据如何显著提升小语言模型(SLM)的学习效率和表现。核心思想在于,经过精心设计的数据集在KD中应用时,可以帮助SLM更有效地模仿其更大模型的高级能力。
如图10所示,这些数据可以来源于:(1)其他强大的LLM(例如GPT-4 [2]),它们远大于目标SLM且功能更强大;或(2)目标SLM本身。
从其他模型增广数据
由于模型规模的限制,研究表明训练SLM需要简单且易理解的数据 [86, 163, 340]。TinyStory [86] 展示了具有相对少量参数(数千万级)的语言模型依然能够生成适合3-4岁儿童的连贯故事。这是通过让GPT-3.5或GPT-4 [2] 从基础词汇表中选择的三个关键词生成简单且易理解的故事来实现的。生成的故事用于训练SLM,使其能够产出类似的叙述。这种方法表明,多样且易理解的数据能够帮助较小的模型表现出类似于大型语言模型的行为,例如遵循缩放规律并获得更高性能。为增强小模型的链式思维(CoT)能力,许多努力也使用LLM生成高质量的CoT数据,这些数据随后用于训练小模型,帮助其端到端地模仿CoT推理过程 [210, 340]。AS-ES学习[340]认为,先前的方法往往忽略了小模型在有限容量下学习复杂推理的局限性,即便为其提供了非常详细的推理过程。这些详细的过程依然需要更多的细微能力,如提取和抽象。因此,该研究引入了一种新的训练范式,将推理步骤分为两类:抽取性片段,用于提醒模型上下文并为后续结论打下基础;和生成性片段,用于推断上下文中未明确陈述的附加洞见。
从自身增广数据
除了从其他LLM蒸馏数据外,语言模型也可以使用自身生成的数据进行训练 [25, 131, 300]。鉴于投票策略可以提升LLM的表现,通向多数答案的推理路径可以进一步用于微调LLM [131]。同样,SLM也可以利用现有的推理生成方法生成自己的训练数据。Self-Amplify [25]指出,人工标注链式思维(CoT)数据非常耗时,因此提出了自动生成推理数据的方法。这些方法主要涉及三个步骤:(1)选择模型能够正确预测的样本(𝑥, 𝑦)作为少样本示例;(2)推理生成,使用事后解释方法生成推理过程;(3)为SLM设计提示,最终的提示基于先前生成的推理内容。
为了应对将知识从大语言模型(LLM)蒸馏到小语言模型(SLM)中的特定挑战,专门的知识蒸馏(KD)策略聚焦于通过克服两个主要差距来提升SLM的性能:分布不匹配和领域差距。
分布不匹配:这种差距发生在训练期间的输出序列分布与SLM在推理时生成的序列分布不一致,可能导致学生模型性能不佳。
领域差距:当SLM训练的特定领域与LLM的领域不同时,这种差距会对学生模型的性能产生影响。
关键见解:
量化是一种有效的将大语言模型(LLM)适应为小语言模型(SLM)的方法,尽管模型压缩通常会导致性能下降。为了解决量化带来的性能降低问题,提出了多种方法来增强SLM的性能。这里的重点在于详细讨论如何通过量化方法提高SLM的效率和效果。根据量化方法的不同,这些技术可以分为两大类:训练后量化(PTQ)和量化感知训练(QAT)。
训练后量化(PTQ):在已训练好的固定模型上进行量化,主要包括权重量化和激活量化。
量化感知训练(QAT):在模型量化后再包含一个训练阶段。这种方法通常用于极端低比特量化(如2位或1位),以帮助模型恢复部分性能。例如,PB-LLM选择性地二值化非重要权重,从而在减少模型尺寸的同时保持性能。一些方法如OneBit和BitNet通过分解浮点矩阵并使用混合精度策略来解决1位量化的性能问题。OneBit引入符号-值独立分解(SVID)方法,将浮点矩阵分解为1位矩阵和两个浮点向量,从而实现极限压缩与性能的平衡。BitNet b1.58使用三元矩阵权重系统(-1, 0, 1)构建出1.58位模型,在显著降低内存和延迟成本的同时与全精度模型表现相当。LLM-QAT则使用无数据知识蒸馏,通过模型自身生成数据来微调量化后的模型,成功实现了4位权重和6位激活的准确量化,超越了现有的训练后量化方法。
关键见解:
为提升大语言模型(LLM)的性能,使用了多种技术,如检索增强生成(RAG)和专家混合(MoE)。这些技术在有限的计算资源下也有可能帮助小语言模型(SLM)维持或提升性能。然而,将这些高级技术有效地集成到能力有限的SLM中仍然是一个尚待解决的挑战。
检索增强生成(RAG):RAG通过引入检索机制增强模型在知识密集任务中的表现。它允许模型从数据仓库中获取相关的上下文信息,从而更好地理解特定主题并生成更准确的输出。对于SLM而言,能否处理长上下文推理是一个关键问题。近期研究表明,对于已经具有较好表现的7B规模模型,量化到INT4不会损害其性能或长上下文推理能力。同时,有研究显示,采用RAG的7B级别SLM在某些情况下可以达到甚至超过更大型模型(如GPT-3.5和GPT-4)的性能,这表明RAG对SLM是一个有效的策略,值得进一步研究。
专家混合(MoE):MoE通过专家并行实现LLM的高效扩展,但其显著的内存开销需要模型压缩技术来适应SLM。研究发现传统的量化技术对MoE模型效果不佳。**量化专家混合(MoQE)**显示,与传统的前馈网络(FFN)层相比,MoE模型中的专家层对量化更具鲁棒性,因此只对专家权重进行量化即可,在同样数据集上取得了比稠密模型更优的表现。另一研究建议由于FFN权重仅作用于一部分输入token,应将更多比特分配给注意力权重。这些研究表明,在MoE架构中,FFN层应被量化或减少比特分配。
关键见解:
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!