向AI转型的程序员都关注公众号 机器学习AI算法工程
一、简介
预训练大语言模型(LLM)具备强大的通用能力,但在需要深入理解技术语言或特定领域知识的专业领域中,它们往往表现不佳。因此,虽然预训练使LLM能够捕捉通用知识,但微调(Fine-tuning)对于将这些模型适应特定领域至关重要。
微调 通过将预训练模型适配到具体任务,提升了其在医疗、法律分析或科学研究等领域的性能。例如,经过微调的模型能够更有效地识别领域特定术语,推理复杂关系,并提供更准确且符合语境的响应。
传统上,微调通常涉及更新模型的所有参数。如今,大型语言模型通常拥有数十亿个参数,因此传统的微调方法需要消耗大量的计算和存储资源。
此外,部分云端托管的大语言模型(如ChatGPT、Gemini等)定期使用新数据更新参数。这使得下游用户不得不在每次模型更新后重新对更新后的模型进行重复微调。这一过程会消耗大量的时间和计算资源,显然在应用上是不现实的。
针对上述挑战,本文分享三篇相关研究: LoRA 、 Q-LoRA 和 PortLLM 。 LoRA 通过矩阵分解巧妙地降低了微调阶段的计算成本; Q-LoRA 提出通过4位量化的预训练模型传播LoRA的梯度,进一步提升了效率; PortLLM 在LoRA的基础上引入一种类似知识迁移的机制,使得微调阶段的模型参数增量可以在不同版本的模型间移植。
二、LoRA (Low-Rank Adaption)
LoRA 通过对特征矩阵进行 低秩分解 为两个低秩矩阵的乘积,在训练过程中只对分解后的低秩矩阵进行更新,从而降低了可训练的参数量。
2.1.更新矩阵的低秩分解
神经网络包含许多执行矩阵乘法的密集层。这些层中的权重矩阵通常具有满秩。过去的工作
指出,在适应特定任务时,预训练语言模型具有较低的“内在维度”,即使在随机投影到较小的子空间中时,仍能高效学习。受此启发,我们假设在适应过程中,权重更新也具有较低的“内在秩”。
对于预训练的权重矩阵
,对其更新
进行低秩分解
, 从而
,其中
,
且秩
。在训练过程中,
被冻结,不接收梯度更新,而
和
包含可训练的参数。对于前向传播,LoRA将其修改为:
2.2. 将LoRA应用到Transformer中
原则上,LoRA可以应用到神经网络中的任何权重矩阵,以减少可训练参数的数量。在Transformer架构中,自注意力模块中有四个权重矩阵(
、
、
、
), MLP模块中有两个权重矩阵,将
(或
、
)视为一个维度为
的单一矩阵。为了简化和参数效率,本文仅调整注意力权重以用于下游任务,并冻结MLP模块。
2.3. 实验效果
本文基于以下实验验证了LoRA方法:
- RoBERTa Base/Large实验 :在GLUE基准8项任务中,以0.3M/0.8M参数量取得87.2/89.0平均分,提升参数效率(仅为全微调的0.1%-1%),达到或超越全微调性能。
- DeBERTa XXL实验 :针对1.5B大模型,仅用4.7M参数(全微调0.3%)取得91.3平均分,提升训练效率,证明大模型场景下的参数高效性。
- GPT-2生成实验 :在E2E NLG任务中,以0.35M/0.77M参数使BLEU达70.4/媲美全微调,提升生成质量与训练速度,节省99%显存开销。
- GPT-3 175B扩展实验 :以4.7M参数(全微调0.01%)在WikiSQL、MNLI等任务中匹配或超越全微调,提升部署灵活性,内存需求降低3倍且无推理延迟。
LoRA在各类模型(RoBERTa、DeBERTa、GPT-2/3)和任务(NLU、NLG)中,以极低参数量(全微调的0.01%-1%)实现与全微调相当或更优的性能,同时显著降低计算和存储成本。
三、QLoRA(Quantized Low-Rank Adapters)
QLoRA是一种高效微调方法,能够在极低内存消耗下(单块48GB GPU)微调超大规模语言模型(如65B参数),同时保持与16位全精度微调相当的性能。
QLoRA的主要提出三种优化策略:
- 4位标准浮点数量化 (4-bit NormalFloat Quantization);
- 双重量化 (Double Quantization);
- 分页优化 (Paged Optimizer)。
3.1. 4位标准浮点数量化
NormalFloat (NF,标准浮点数)是一种数据类型,它基于分位数量化(Quantile quantization),是一种信息论上最优的数据类型,可以确保每个量化区间从输入张量中分配相同数量的值。分位数量化通过经验累积分布函数估计输入张量的分位数来工作。分位数量化的主要局限性在于分位数估计的这个过程会比较费力。
在神经网络中,预训练的权重通常具有零中心的正态分布,标准差为σ。通过缩放σ,可以使得分布恰好适应NF的范围。对于NF,作者设置了一个任意的范围[-1, 1]。因此,数据类型和神经网络权重的分位数都需要被归一化到这个范围。
对于范围在[-1, 1]内的零均值正态分布,QLoRA计算信息理论上最优的数据类型。方法如下:
- 估计理论N(0, 1)分布的
个分位数,得到一个k位的分位数量化数据类型;
- 将这个NF的值归一化到[-1, 1]范围;
- 通过绝对最大值重标定,将输入权重张量归一化到[-1, 1]范围,然后进行量化。
之后,按如下方式估计数据类型的
个
值:
3.2.双重量化
由于4位标准浮点量化保存模型时我们不仅要保存量化后的结果,还要保存每个块的量化常数,从而造成了额外的内存占用。因此引入双重量化对量化常数进行量化以进一步节省内存。
QLoRA的双重量化就是对这个量化常数再做一次8bit的量化,在进行量化常数的量化时,QLoRA以每256个量化常数为一组再做一次量化。因此它额外增加的内存消耗有两部分组成,一部分是量化后的8bit的第一层的量化常数,第二部分是为量化常数做量化的第二层的32bit的量化常数。双重量化的每次量化几乎不增加额外的内存占用。
3.3. 分页优化
分页优化是针对梯度检查点做的进一步优化,以防止在显存使用峰值时发生显存OOM的问题。
QLoRA分页优化借鉴了操作系统内存分页调度策略,将保存的部分检查点转移到CPU内存上,以节省对显存的使用。
3.4. QLoRA
使用上述组件,我们为量化基础模型中的单个线性层定义QLORA,如下所示:
其中
定义为:
四、PortLLM
PortLLM提供了一种无需训练的框架,这个框架基于最初的预训练模型进行微调以获得微调后的参数变化(模型补丁),并将模型补丁应用于后续更新的预训练模型以节约微调成本。
4.1 假设
如下图所示,PortLLM将预训练的大语言模型的第一个版本记为
, 其后续的更新预训练版本记为
。类似地,使用
表示基于第一个大模型版本
微调得到的模型,
表示基于更新后的预训练模型
微调后得到的模型。两个微调过程的模型补丁记为
和
, 而预训练模型演进的参数增量
。为方便表示,称
和
为个性化适配器,
和
为继续预训练适配器。
假设: 个性化适配器
和
的秩远小于继续预训练适配器
和
的秩:
4.2 基本方法
PortLLM旨在通过将较旧的个性化适配器(模型补丁)
应用于继续预训练模型
,来近似微调后的更新模型
,即
换句话说,可以将先前微调过程中的额外知识
直接添加到最新的LLM
中,从而以极低的成本取得与基于最新的模型
微调得到的模型
接近的效果。
4.3 PortLLM可移植性分析
理论依据: 经过微调的更新模型
可以分解为一个朴素更新项和一个残差矩阵C,如下所示:
由于4.1中的假设: *个性化适配器
和
的秩远小于继续预训练适配器
和
的秩* ,其次
确保了
, 基于上述原因,容易得出结论: 残差矩阵的秩远小于朴素更新矩阵的秩 。
我们声称残差矩阵与朴素更新相比可以忽略不计。证明:首先,回顾第3.2节中的假设,即∆θ′_i和∆θi的秩远小于∆θ的秩。其次,θ′ = θ + ∆θ确保了rank(θ′) ≥ rank(θ)。因此,我们得出结论:残差矩阵的秩远小于朴素更新矩阵的秩。
实验验证: 如下图所示,朴素更新项
是残差矩阵
的66-136倍。因此可以验证 结论残差矩阵相较于朴素更新可以忽略不计 。
4.4 实验结果
上图为PortLLM与传统方法在不同下游任务上的Zero-shot对比实验,通过实验结果表明PortLLM的模型补丁能够在不同模型版本之间传递个性化知识,并且取得了与传统方法相当的准确率。
上图为PortLLM的计算效率实验,相较于传统方法,PortLLM无需可训练参数,减少了近2000万个训练参数量,把操作时间从微调所需的数小时缩短到几秒钟。而且PORTLLM方法即插即用,减少了对昂贵云基础设施的需求,尤其是在大规模微调场景中。
五、总结
本文介绍了三种高效微调大语言模型的方法,旨在解决传统微调中高计算和存储成本的问题:
- LoRA :通过低秩矩阵分解,仅更新少量参数(全微调的0.01%-1%),在多项任务中达到或超越全微调性能,显存需求降低3倍且无推理延迟。
- Q-LoRA :结合4位量化、双重量化和分页优化,单卡即可微调650亿参数模型,内存节省75%且性能无损。
- PortLLM :提出“模型补丁”概念,将旧版模型的微调增量直接迁移到新版预训练模型,实现零训练参数、秒级适配,准确率与重新微调相当。
实验表明,这些方法在医疗、法律等下游任务领域显著降低模型微调成本,为低成本、高效率的模型微调提供了实用方案。
六、相关文献
[1]Hu E J, Shen Y, Wallis P, et al. Lora: Low-rank adaptation of large language models[J]. ICLR, 2022, 1(2): 3.
[2]Dettmers T, Pagnoni A, Holtzman A, et al. Qlora: Efficient finetuning of quantized llms[J]. Advances in neural information processing systems, 2023, 36: 10088-10115.
[3]Shahroz R, Li P, Yun S, et al. PortLLM: Personalizing Evolving Large Language Models with Training-Free and Portable Model Patches[C]//The Thirteenth International Conference on Learning Representations.
机器学习算法AI大数据技术
搜索公众号添加: datanlp
长按图片,识别二维码
阅读过本文的人还看了以下文章:
整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx