Scaling Laws当道,但随着大模型应用的发展,基础模型不断扩大的参数也成了令开发者们头疼的问题。
为了减轻训练负担,Adapter、Prompt-Tuning以及LoRA等高效微调(Parameter Efficient Fine-Tuning, PEFT)算法越来越受到大家伙的青睐。
那么,问题来了——
尽管近年来高效微调领域发展迅速,涌现了多种方法,但不同PEFT方法背后的数学基础几乎没有得到深入研究。
此外,不同PEFT方法之间的性能差异及其原因尚未系统地探讨。这种理论深度的缺乏限制了研究者对这些方法潜在优势和局限性的理解,阻碍了它们在实际应用中的优化和创新。
为了解决这一问题,来自上海交通大学的研究者们在对各种PEFT方法进行全面数学分析后,提出了一种新的框架——子空间微调,旨在将所有已知的PEFT方法统一在一个理论下,
具体来说,子空间微调方法主要集中于调整原始参数的子空间,涉及子空间的重构和扩展。研究者深入探讨了不同方法如何操作子空间,并从分解理论的角度阐明了每种方法的数学原理。此外,研究者分析了为什么这些方法会导致性能差异,提供了理解不同PEFT策略内在动态的全面理论基础。
他们基于此提出了两种新的PEFT方法,新方法在仅微调0.02%参数的情况下,性能接近于全面微调。
研究者还介绍了一个有效的框架,在不引入额外训练参数的情况下,提升了LoRA等方法的性能。通过在三种不同模型上测试超过十种方法,广泛的实验验证了其理论的稳健性,同时展示了提出的方法和框架的有效性。
来看论文细节。
考虑任何给定主干网络层的冻结权重矩阵,其中n≤m,并用权重矩阵的性能来量化模型的性能,值越高表示性能越好。
假设存在最优权重矩阵 ,且对所有成立。PEFT的目标公式化为:
其中衡量两个矩阵之间的差异。函数被视为增量调优,表示对矩阵的每个元素的修改,但这种表征过于笼统。
从分解理论的角度看,调整矩阵涉及修改其对应的子空间,因此,所有PEFT方法可视为子空间微调。
如此,优化的目标是找到在基所生成的子空间内的最大投影,然后将与其对齐。
有两种方法实现这一目标:通过调整来逼近,或操作的子空间以接近或包含。
研究者将函数分配给两个主要角色:直接重构对应的子空间,以更好地对齐,或引入一个新子空间并与原始子空间结合。这些过程数学表示为:
其中,概括了的子空间重构过程,描述了子空间的联合。研究者将这些操作分别称为“子空间重构”和“子空间扩展”,并将现有方法分类为三类:
基于先前概述的框架,子空间重构方法首先将的空间分割为可解释的子空间,然后细化这些子空间以提高模型效率。许多PEFT策略集中于直接重构与原始权重矩阵相关的子空间,著名例子包括SAM-PARSER、Diff Pruning、(IA)3、BitFit、Prefix-tuning和Prompt-tuning等。
研究者从奇异值分解(SVD)开始探索,原始权重矩阵被分解为正交子空间,涵盖了原始矩阵空间的全部。分解表示为,这种分解将分成左奇异向量(列空间的正交基)、奇异值(调整维度和缩放)和右奇异向量(行空间的正交基)。通过调整分解获得的子空间,可以重构原始空间,分为三种模式:
基于这一理论,研究者提出了两种新的微调方法:SSL(Scaling the Subspace of the Left singular vectors)和SSB(Scaling the Subspace of Both left and right singular vectors)。
从下图中可以看出,SSL最少只需要微调0.02%的参数,SSB最少只需要微调0.06%的参数,就能实现全量微调99%的性能。
关于每种模式的具体操作、每种方法的具体内容、其背后的数学原理,以及研究者如何基于这一理论提出两种新方法的详细信息,请参阅原论文。
基于扩展的方法引入新子空间,结合该新子空间和原始权重矩阵的基生成扩展空间。
这些方法旨在找到最优权重在新空间内的最接近投影,通过引入额外的权重矩阵来扩大原始子空间的基以覆盖更大维度区域。通常,这些方法的转换函数定义为,其中s代表缩放因子,对应于新子空间,也称为附加项。
考虑权重矩阵,假设n≤m。理想情况下,有,即和占据相同的行和列空间,使它们定位在同一超平面内。
如果的秩为n,其列空间的维度等于n,生成子空间。若的秩小于n,它只能在内生成一个子空间。假设和的列空间基可以生成整个空间,在最优情况下,的列基向量应补充的列基,意味着的列空间代表这些空间的直和。
一些研究表明,最优权重会放大原始权重矩阵中某些特定任务的方向,这些方向对于预训练并不关键。此外,最优权重还会调整的主要方向。这些见解表明可能与 的子空间共享大量共同基。因此,可能只需考虑中缺少但中存在的一小部分基,使成为低秩矩阵。
实证研究表明,预训练模型的全参数微调通常可重新参数化为在低维子空间内优化,表明最优权重在这个受限的低秩子空间内变化。的低秩特性突出了基于扩展方法的参数效率基础。
另一个关键方面是缩放因子s。基于扩展的方法目标是确定在和形成的超平面内的最大投影,确保尽可能与方向对齐。给定固定的和,只有一个s值能使 \ 的方向与方向对齐,因此s值对性能的影响可能非常显著。
在参数高效微调中,有两大系列基于扩展的方法。第一系列是LoRA衍生,包括LoRA、AdaLoRA、TriLoRA、FLoRA、VeRA等。第二系列是适配器衍生,包括Adapter(H),Adapter(P),Parallel Adapter等。
在此基础之上,研究者提出了MPC框架,以进一步提升现有算法的性能。
从下图中可以看出,在不引入额外参数的情况下,MPC框架显著增强了各种PEFT方法的性能。
另外,MPC可以帮助PEFT方法实现更稳定的训练。与不使用MPC的方法相比,结合MPC的方法通常表现出更小的标准偏差。
关于这些方法的具体分析,LoRA和Adapter系列算法性能差异的原因,以及MPC框架的详细设计思路,请参阅原论文。
基于组合的方法同时执行子空间重构和扩展,结合了这两种方法的原理。
此外,对于某些方法,它们既可以分类为基于重构的方法,也可以分类为基于扩展的方法,研究者也将它们分类为基于组合的方法。研究者分析介绍几种代表性的基于组合的方法,如DoRA,Spectral Adapter和SVDiff等。
关于这些方法的具体细节请参阅原论文。
论文:https://arxiv.org/pdf/2407.05417
代码:https://github.com/Chongjie-Si/Subspace-Tuning
文章来自于微信公众号“量子位”,作者 “ChouJay”
【开源免费】DeepBI是一款AI原生的数据分析平台。DeepBI充分利用大语言模型的能力来探索、查询、可视化和共享来自任何数据源的数据。用户可以使用DeepBI洞察数据并做出数据驱动的决策。
项目地址:https://github.com/DeepInsight-AI/DeepBI?tab=readme-ov-file
本地安装:https://www.deepbi.com/
【开源免费】airda(Air Data Agent)是面向数据分析的AI智能体,能够理解数据开发和数据分析需求、根据用户需要让数据可视化。
项目地址:https://github.com/hitsz-ids/airda
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0