大语言模型的常用微调方法
文章目录
- 数据构造与清洗
- 数据构造方法
- 1.基于 Self-Instruct 方法的数据构造
- 2.面向结构化知识的数据构造
- 数据清洗方法
- 1.IFD 指标法
- 2. MoDS 方法
- 2.2 分词器构造
- 2.2.1 分词器概述
- BPE 分词器
- WordPiece 分词器
- Unigram 分词器
- 2.3 大型语言模型的微调方法
- 前缀调优
- 提示调优
- P-Tuning v2
- LORA
- 2.3.5 DyLoRA
- 2.3.6 AdaLoRA
- 2.3.7 QLORA
- QA-LoRA
- LongLoRA
- 2.3.10 VeRA
大型预训练模型是一种在大规模语料库上预先训练的深度学习模型,它们可以通过大量无标注数据上进行训练来学习通用语言表示,并在各种下游任务中进行微调。预训模型的主要优势是可以在特定任务上进行微调,并且可以在多个任务上进行迁移学习,而提高了模型的训练速度和效率。
数据集的构造对于大型语言模型的微调至关重要。大型语言模型通常需要大量的数:来训练,以便更好地理解和处理复杂的任务。本章将通过分别介绍基于Self-Instruct 及结?化知识的数据构造方法来提升大型语言模型微调阶段的数据质量。
对于预训练模型,分词器(tokenizer)分词是非常重要的一步。分词器将输人的原始本转化为模型可以处理的数字序列,并且将这些数字序列分为 token(标记)和 segment(段)等。我们将从分词器入手,介绍大型语言模型预训练的常用分词方法,如 WordPiece BPE (Byte Pair Encoding,字节对编码)等。
随着模型参数规模的扩大,微调和推理阶段的资源消耗也在增加。在模型微调时,I 了加载训练参数外,还需要大量显存存储梯度和优化器信息。因此,资源消耗情况会随训练参数规模的扩大而不断增加。针对这一挑战,可以通过优化模型结构和训练策略来低资源消耗,本章也将详细介绍多种高效参数调优的方法。
最后我们将结合 LLaMA 预训练模型进行微调实战。
数据构造与清洗
数据构造是构建大模型过程中的关键环节,涵盖数据的获取、清洗、标注、预处理利模型评估等多个步骤。公开数据集、企业数据库、社交媒体平台以及网络爬虫都是非常重要的数据来源,而面向行业的专业研究和实验则为特定领域模型提供了专业数据。与此同时,数据清洗也十分重要,结合Meta发布的 LIMA (Less Is More for Aligoment)模型,在LLaMA-6SB的基础上,只用1000个精心准备的样本数据进行微调,不需要 RLHF (Re.inforcement Learning from Human Feedback,人类反馈强化学习)就达到了和 GPT-4 相媲美的程度。研究者从实验中得出结论:大型语言模型中几乎所有知识都是在预训练期间学习的,并且只需要有限的指令调整数据来教模型生成高质量的输出。因而,在整个过程中,对数据质量的不断监控和优化是保障大型语言模型高性能的不可或缺的环节。如何有效地从大量标注数据中通过合适的数据清洗方法获取“精选”数据也十分重要。
数据构造的方法有多种,我们将对基于 Self-Instruct方法的数据构造及面向结构化知识的数据构造进行介绍。同时,我们也将介绍面向数据清洗任务的 IFD 指标法及 MoDS方法。
数据构造方法
1.基于 Self-Instruct 方法的数据构造
大型的“指令微调”语言模型,即通过微调以响应指令的模型,已经展现出在将零样
本泛化到新任务方面的卓越能力。然而,这些模型在很大程度上依赖于人类编写的指令数据,而这些数据通常在数量、多样性和创造力方面存在一定的限制,从而阻碍了模型的通用性。为了解决这一问题,研究者引入了 Self-Instruct框架,利用指令微调技术可以提升大型语言模型应对信任的能力并提高模型泛化性。
在Self-Instruct 框架中,我们利用公开的大型语言模型 API进行数据收集,以提高预训练语言模型的指令跟随能力。首先利用一个任务种子集作为任务池的起点,随机采样出多个任务指令,利用大型语言模型生成新的指令内容;再利用大型语言模型判断指令任务是否为分类任务(分类任务与生成任务的要求有所不同);然后利用大型语言模型对新的指令内容进行补全,生成输出结果,并且判断如果需要额外输入文本,也进行同步生成;其进行数据过滤,将满足要求的数据加入任务池中;最后重复上面几步操作,直到数据达至数量要求。生成的数据不仅可用于语言模型本身的指令调整,还能让大型语言模型 API更好地遵循指令,从而提高其泛化能力和适应新任务的灵活性。这一自我引导的数据收集方法为大型语言模型的性能提升提供了创新性的途径。
2.面向结构化知识的数据构造
结构化知识数据指的是在一个记录文件中以固定格式存在的数据。在日常工作中,我们有大量的数据存储在数据库、表格以及知识图谱中。这部分数据大多来源于数据专家的收集,精准度较高,但由于这部分数据在使用时需要数据专家进行支撑或定制程序才能面向自然语言进行相关知识查询,因此如何有效地收集结构化数据中的知识数据变得十分重要。
结合前文所提及的 Self-Instruct 方法进行结构化数据的收集,是一种非常有效的数据收集方式——Self-Instruct 方法可以通过引导模型自行生成任务指导,从而实现数据的自动化收集和扩充。在处理结构化数据时,可以设计相应任务所需的提示语(prompt),要求模型根据已有的结构化数据生成类似的数据样本。例如,可以通过自动生成表格记录、数据库查询或图谱关系等方式,引导模型在结构化数据领域生成更多的样杰这样的自我引导方法有助于半富数据集,提高模型的泛化能力,同时球少了人工标注的工作量。下面我们格介绍如何使用表格数据及图谱知识进行结构化数据收集。
数据清洗方法
1.IFD 指标法
在论文“From Quantity to Quality: Boosting LLM Performance with Self.Guided Data Selec-tion for Instruction Tuning”中,研究者提出了一种可以从大量可用数据集中自动识别高质量数据的方法,并提出了一个指令跟随难度(Instruction-Following Difmculty, IFD)指标。
利用 IFD 指标自动筛选“精选数据”(Cherry Data),再利用精选数据进行模型指令微调,获取更好的微调模型,主要涉及以下3个步骤。
步骤1:利用少量数据进行模型初学,所选用的数据采用K-Means 算法对数据进行聚类,针对聚类结果,选取每个簇中的若千数据组成初学数据,并结合大型语言模型进行微调得到初学模型 (Brief Model)。
步骤2:利用初学模型计算原始数据中的所有 IFD 指标,IFD指标包含两个部分,即条件答案分数(Conditioned Answer Score, CAS)与直接答案分数(Direct Answer Score, DAS),其中,条件答案分数采用初学模型再结合指令生成答案阶段预测每个指令时的概率值组成交又熵。
步骤3:利用 IFD 指标对原数据集进行排序,选择分数靠前的数据作为精选数据,对原始模型进行指令微调、获取最终的精选模型。
利用 IFD指标对数据进行筛选,降低了大型语言模型对答案本身拟合能力的影响,可以直接衡量给定指令对模型生成答案的影响。较高的IFD分数表明模型无法将答案与给定的指令内容进行对齐,表明指令的难度更高,对模型调优更有利。
2. MoDS 方法
随着研究的不断深入,研究者在论文 “MoDS: Mode- oricnted Date Seetion for Instruction Tuning”中提业了一种面向模型的指令数据选择方法,MoDS方法。MoDS方法要通过数据质量、数据覆盖范围、数据必要性3个指标来进行数据的筛选。
1)数据质量。为确保数据质量、VoDS方法设计采用了一套奖励模型对数据进行打分。将原始数据的 Instrucion、Input、Output三个部分进行拼接,送入奖励模型,得到评分结果,当评分超过阅值时,则认为数据质量达标,从而构建并得到一份高质量数据集
2) 数据覆盖范围。为了避免所选数据高度相似,可通过K中心贪心(K-Center.Greedy)算法进行数据筛选,在最大化多样性的情況下,使指令数据集最小化,获取种子指令数据集(Seed Instruction Data, SID)。进一步地,确保所选数据中的指令足够多样、沙及知识范围更广。
3) 数据必要性。不同的大型语言模型在预训练过程中所学到的知识和具有的能力都不同,因此在对不同的大型语言模型进行指令微调时,所需的指令数据也需要不同。利用初始模型对数据质量阶段获取的高质量数据集进行预测,利用奖励模型对预测结果分别进行打分,当得分较低时,说明当前模型无法处理好该条数据,对评分低于阈值的数据进一步收集得到必要性数据集。
在模型训练阶段,针对必要性数据集进行结合K中心贪心算法的数据多样性筛选,最终得到增强指令数据集(Augmented Instruction Data, AID),利用 AID 与 SID 进行最终模型的微调。
2.2 分词器构造
分词器在大型语言模型中的作用是将原始文本转换为模型可理解的输人形式。它负责将文本分割成基本单位,并将其转换成模型词汇表中的索引或向量表示。分词器能够标准化输人、处理不同语言、处理待殊文本形式,并控制输人长度,直接影响模型的性能和效果。
2.2.1 分词器概述
在深人介绍分词器之前,我们需要先回答一个重要问题:为何需要对文本进行分词?
词在文本中是最小的独立单元,携带了一定的造又信息。在模型训练过程中,采用分词能够有效降低文本数据的维度,进而提高训练效率。分词器针对不同的粒度也有不同的分词方式,如字符级分词、单词级分词、子词级分词等。
例如针对以下文本:Let’s go to work tomorrow!
1)字符级分词:按照单字符进行分词,就是以char 为最小粒度。显然,该方法的词表中仅需存储字符级别的token,能够最大限度地缩减词表的大小,但分词后的结果仅是单个字符,会导致严重的缺失,如英文中仅采用字母表示,几乎失去了所有的词汇语义信息,使得在后续训练阶段失去重要意义。
2)单词级分词:按照词进行分词,在英文中可以采用空格进行分割。该方法能够用有效地为每个单词进行分词,从语义层面保留了词语信息,但是分词结果中的“Let’s" “tomorrow!”等词的分词结果,存在由于大小写、缩写或标点符号导致的冗余,且单词众多,导致词表不断扩大,如 Transformer XL° 使用基于空格和标点符号的规则分词方式,其词表中的词汇量超过 250 000个,这使得训练的代价非常高昂。同时,即使扩充了词表的规模,也依然存在词表外词(Out-Of-Vocabulary, OOV,又称未登录词)难以表征的情况。
3)子词级分词:按照词的子词进行分词,类似于利用词根和词源来学习一系列单词。通过这些共通的基本单元可以构造更多的词汇,每一个基本单元即是词表的组成部分。
需要指出的是,我们的分词器属于基于统计意义的分词器,而非基于语言学的分词器。然而,一旦经过大量训练数据的学习,这些基本单元也能够掌握语言学上的含义。子词级分词能够有效平衡字符级分词器与单词级分词的优缺点,在大模型预训练中的分词器中得到广泛应用,如BPE、WordPiece 和 Unigram等。
BPE 分词器
BPE 是由爱丁堡大学的Rico Sennrich 等学者于2015年在论文“Neural machine transla-tion of rare words with subword units”中提出的一种简单而高效的数据压缩形式。在研究神经网络机器翻译时,传综的外理方式是为机器翻译任务设定一个固定的词汇表。然而,器翻译面临的是未登录词问题,传统应对方法是对词汇表进行频繁更新,这无疑增加了理的复杂性和工作量。为了解决这二难縣、Rico Sennrich等人提出了一种更为简单且有好的解决方法,即通过将未登录词编码为子单词单元序列,使神经机器学习模型能够处理义登录词问题。这种方法便是BPE。其核心思想是在迭代过程中将原始序列中最频繁出现的字节替换为单个未使用过的字节。具体的算法逻辑如下。
1)采用任意分词方法(如空格分割方法)对所有文本进行分词。
2)统计所有词语的词频,将所有词语以字母形式进行分割,得到相关字符,并设置词库的上限。
3) 统计任意两个字符连续出现的总次数。
4)选取出现次数最高的一组字符对,替换2) 中获得的字符统计,并将该字符对加入词库中。
5)重复3)和4),直到词库规模达到预设上限。
BEP方法是一种高效的分词方法,可以显著缩短训练时间,在大语言模型的训练中体现尤为明显。
WordPiece 分词器
WordPiece 分词器最初由 Google提出,旨在解决神经机器翻译中的未登录词问题。该分词方法被广泛关注,特别是在深度学习领域得到了应用,如常用的预训练语言模型 BERT 尤采用了 WordPiece 分词。WordPiece 可以视作 BPE的一种变体。它首先将所有字符添加可词库中,并需要预先设定词库的规模。在不断添加子词的过程中,WordPiece 与 BPE最C的区别在于子词加入词库的方式。WordPiece 选择最大化训练数据的可能词对,而不考虑司频。这也意味着从初始构建的词库开始,在语言模型的训练过程中,不断更新词库,直词库达到所设规模为止。具体操作步骤如下。
1)对待训练语料进行字符拆分,并将拆分的字符加入初始词库中。
2)设置词库上限。
3) 开始训练语言模型。
4)结合训练的语言模型,将能够最大化训练数据概率的子词作为新的部分加入词库。
5)重复3)和4)直至词库的规模达到上限。
Unigram 分词器
众多研究已经验证,子词单元(Subword)是婴做量路机器翻泽中开放词汇问题的一种有效方法。尽管通常会将句子转换为独特的子后.后千子词的分词结果可能存在潜在的歧义。即使在使用相同词汇的情况下,业可能空振多种分词错果。为了应对这一挑战,Google公司的Kudo 提出了基于Unioram遇管程用的是干子词的分词算法。该算法利用简单的正则化方法来分制歧义,并将其视为陽声、以据育油经机器翻译的鲁棒性。在训练过程中,该算法使用多个概率抽样的基于子词的外词乘训练模型。这种分词方法被称为Unigram分词方法。Unigram分词方法也是一种经管秘采用的分词方式,与BPE、Word-Piece两种分词方式的主要区别是,Unigram在构建词库时基本每含了所有词语和符号,然后采用的逐步删除的方式得到最终的词库。具体步骤如下
- 构建基本包含所有词语和符号的词库。
2)设置词库规模。
3)开始训练语言模型。
4)删除具有最高损失x%的词对。
5)重复3)和4)直至词库规模达到预定规模。
2.3 大型语言模型的微调方法
大型语言模型已经让我们看到了模型的基础能力,与此同时,当个人用户或企业用户准备好数据后,针对模型的微调也能迅速看到模型的迁移能力。随着模型参数规模的不断扩大,使用全量参数规模的训练在模型微调和后续推理阶段必然会导致资源消耗。在模型微调时,不仅需要消耗资源在加载模型的训练参数方面,还需要大量显存资源用于存储训练这些参数的梯度及优化器信息,资源消耗的情况随着训练参数规模的扩大而不断增加。在模型推理时,多个模型的加载也会消耗大量算力资源。
结合上述两种情况,研究者的优化方向也从两个方面共同推进。一方面,针对训练参数过多导致资源消耗巨大的情况,可以考虑通过固定基础大型语言模型的参数,引人部分特定参数进行模型训练,大大减少了算力资源的消耗,也加速了模型的训练速度。比较常用的方法包括前缀调优、提示调优等。另一方面,还可以通过固定基础大型语言模型的架构,通过增加一个“新的旁路”来针对特定任务或特定数据进行微调,当前非常热门的LORA 就是通过增加一个旁路来提升模型在多任务中的表现。
上述各种在模型参数调优阶段进行的操作,开源社区 Hugging Face将其归纳为高效参数调优方法(Parameter-Efficient Fine-Tuning,PEFT)。 PEFT 方法能够在不微调所有模型参数的情况下,有效地让预训练语言模型适应各种下游应用。PEFT方法只微调了少量额外的模型参数,从而大幅降低了大模型训练和微调的计算与存储成本。通过合理使用 PEFT 方法,不但能提高模型的训练效率,还能在特定任务上达到大型语言模型的效果。
前缀调优
为了更好地结合大型预训练语言模型来执行下游任务,目前广泛采用的方法是针对大型语言模型进行微调来提升其表现。然而,微调的一个显著特点是修改了语言模型的所有参数,因此需要为每个任务存储一个完整的模型副本。在这种情况下,研究者提出了前缀调优( Prefix Tuning) 这二方法,这是一种轻量级的微调替代方法,专门用于自然语言生成任务。前缀调优的独特之处在于它不改变语言模型的参数,而是通过优化一系列连续的任务特定向量(即前缀)来实现优化任务。
前缀调优方法通过冻结LM参数并仅优化前缀模块来实现。因此,在训练中只需要为每个任务存储前缀即可,使得前缀调优具有模块化和高效利用空间的特点。
研究者表示,前级调优的灵感来自于语言模型提示,允许后续标记重点关注这个前级,就好像它们是“虚拟标记”二样。这种方法可在特定任务的上下文中引导模型生成文本,而无须修改庞大的语言模型。“前级调优的轻量级设计有望在 NLP任务中提供高效的解决方案,避免了存储和计算资源的浪费,同时保持了模型的性能。
提示调优
提示调优(Prompt Tuning)是一种简单而有效的机制,该方法采用“软提示”( Sor Prompt)的方式,赋予语言模型能够执行特定的下游任务的能力。该方法是由 Brian Leste 在论文“The Power of Scale for Parameter-Efficient Prompt Tuning”中提出的,相较于软护示中直接采用反向传播学习来优化模型参数,提示调优通过冻结整个预训练模型,只允认每个下游任务在输人文本前面添加k个可调的标记(Token)来优化模型参数。这里所使的“软提示”采用端到端的训练方法,并可以完整地学习参与训练的全量数据的参数信息使该方法在少样本提示方面表现出色。
相较于模型调整需要为每个下游任务制作一个任务特分的预训练模型副本,并需要在单独的批次中执行推理,提示调优只需要为每个任务存储-个小的任务特定提示,并允许使用原始的预训练模型进行混合任务推理。在论文的实验又比中,对于TS-XXL模型,每个经过调整的模型副本需要110亿个参数,相比之下,提方调优需要的参数规模仅为20480个参数。
P-Tuning v2
如前所述,提示调优采用连续提示的思想,在原始输人词嵌入序列中添加可训练的连续嵌入。尽管提示调优在相应任务上取得了一定的效果,但当底座模型规模较小,特别是小于1000亿个参数时,效果表现不佳。为了解决这个问题,清华大学的团队提出了 P-Tun-ing v2方法,该方法是一种针对深度提示调优的优化和适应性实现,最显著的改进是对预训练模型的每一层应用连续提示,而不仅仅是输人层。深度提示调优增加了连续提示的功能,并缩小了在各种设置之间进行微调的差距,特别是对于小型模型和困难的任务。此外,该方法还提供了一系列优化和实现的关键细节,以确保可进行微调的性能。P-Tuning v2 方法实际上是一种针对大型语言模型的软提示方法,主要是将大型语言模型的词嵌入层和每个Transformer网络层前都加上新的参数。实验表明,P-Tuning v2在30亿到100亿个参数的不同模型规模下,以及在提取性问题回答和命名实体识别等NLP任务上,都能与传统微调的性能相匹敌,且训练成本大大降低。
LORA
随着大型语言模型的不断推进与应用,对领域数据进行大规模预训练,然后通过微调来适应特定任务成为当前自然语言处理的一种重要范式。模型不断迭代,训练一个全量参数微调的模型需要的算力资源十分庞大。因此,如何制定有效的策略来进行大规模模型微调变得至关重要。微软公司在2021年提出了一种名为Low-Rank Adaptation (LoRA,低秩适配器)的方法。LoRA的核心思想是通过冻结预训练模型的权重,并将可训练的秩分解矩阵注人 Transformer 架构的每一层,从而显著减少下游任务中可训练参数的数量。在训练过程中,
2.3.5 DyLoRA
随着预训练模型规模的持续扩大,微调过程变得愈发耗时且资源密集。为应对此同LoRA 方法应运而生。该方法通过保持模型的主要预训练权重不变,仅引入可学习的薇断异值分解(即LORA块)模式,就可以提升参数效率。但随着研究的深人,LoRA 块存由大核心问题:首先,一且训练完成后, LoRA 块的大小便无法更改,若要调整 LoRA 块的明则需重新训练整个模型,这无疑增加了大量时间和计算成本;其次,LoRA 块的大小是松练前设计的固定超参,优化秩的过程需要精细的搜索与调优操作,仅设计单一的超参无法有效提升模型效果。
为解决上述问题,研究者引入了一种全新的方法—一DyLoRA(动态低秩适应)。D LoRA 的架构如图 2-6所示,研究者参考LoRA 的基本架构,针对每个 LORA 块设计了出影(W…) 和下投影(W…) 矩阵及当前LoRA 块的规模范围R。为确保增加或减少秩利明显阻碍模型的表现,在训练过程中通过对 LoRA 块对不同秩的信息内容进行排序,形
前向截断 DyLoRA 参数更新
预定义的随机分布中进行抽样,来对 LORA 块镜像上投影矩阵和下投影矩阵截断,最终确认单个 LoRA块的大小。
研究结果表明,与LoRA 相比,使用DyLoRA 训练出的模型速度可提升4~7倍,且性
能几乎没有下降。此外,与LoRA 相比,该模型在更广泛的秩范围内展现出了卓越的性能。
2.3.6 AdaLoRA
正如 DyLoRA 优化方法一样,提出 AdaLoRA的研究者也发现,当前LoRA存在的改
进方向:首先,由于权重矩阵在不同 LoRA 块和模型层中的重要性存在差异,因此不能提前制定一个统一规模的秩来约束相关权重信息,需要设计可以支持动态更新的参数矩阵;其次,需要设计有效的方法来评估当前参数矩阵的重要性,并根据重要性程度,为重要性高的矩阵分配更多参数量,以提升模型效果,对重要性低的矩阵进行裁剪,进一步降低计算量。根据上述思想,研究者提出了 AdaLoRA方法,可以根据权重矩阵的重要性得分,在权重矩阵之间自适应地分配参数规模。1
在实际操作中,AdaLoRA采用奇异值分解(SVD)的方法来进行参数训练,根据重要性指标剪裁掉不重要的奇异值来提高计算效率,从而进一步提升模型在微调阶段的效果。
2.3.7 QLORA
随着模型参数规模的不断扩大,如何在较小规模算力水平下镜像大模型训练引起了研究者的广泛关注,Tim Dettmers等研究者在论文“QLoRA: Eficient Finetuning of Quantized LLMS”中提出了一种高效的模型微调方法——QLoRA, 通过 OLORA 微调技术,可以有效降低模型微调时的显存消耗。QLoRA 的架构如图 2-7所示,从图中可以看出,QLoRA 是针对LoRA 的改进,而改进的主要模式是采用4bit精度和分页优化来共同减少模型的显存消耗
- 4bit NormalFloat (NF4)NF4是一种新型数据类型,
它对正态分布的权取来)
信息理论上的最优选择。
可”Qm保化没术浪少了平为内存份做用,CCdM已t化iomn
再量化来实现
务.分8化8有D于管理内有海值,防止排建前在热进和的使不是的n 实。2我米经者能够在单个48GB GPU上收洲s9亿个参数期。
模型、同的楼在的务性能。例如,在训练Guanaeo 楔型时,仅需在GPU上微调24h,即可达到与 ChatGPT相当的 99.3% 性能水平。
QA-LoRA
大型语言模型取得了讯猛发展,尽管在许多语言理解任务中表现强大,但由于巨大计算负担,尤其是在需要将它们部男到边缘设备时,应用受到了限制。在论文“QA-LoR Quantization-avare Low.rank A dantalion of laree language models”中,研究者提出了一量化感知的低秩适应(OA-LORA)算法。该方法来源于量化和适应的自由度不平衡的想。具体而言,预训练权重矩阵的每一列只伴随一个缩放和零参数对,但有很多 LoRA&数。这种不平衡不仅导致了大量的量化误差(对 LLM的准确性造成损害),而且使得将助权重整合到主模型中变得困难。因此,研究者提出采用分组运算符的方式,旨在增加量化自由度的同时减少适应自由度。QA-LoRA的实现简便,仅需几行代码,同时赋予原始的LoRA 两倍的能力:在微调过程中,LLM的权重被量化(如INT4), 以降低时间和内存的使用;微调后,LLM和辅助权重能够自然地集成到一个量化模型中,而不损失准确性。通过在 LLaMA 和 LLaMA2模型系列的实验中证明,QA-LoRA 在不同的微调数据集和下游场景中验证了其有效性。
LongLoRA
通常情况下,用较长的上下文长度训练大型语言模型的计算成本较高,需要大量的训
练时间和GPU资源。例如,对上下文长度为8192的自注意层进行训练需要的计算成本是
上下文长度为2048的16倍。为了在有限的计算成本下扩展预训练大型语言模型的上下文大小,研究者在论文“LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models”中提出了 LongLoRA的方法,
LongLoRA 在两个方面进行了改进:首先,虽然在推理过程中需要密集的全局注意力,但通过采用稀疏的局部注意力,可以有效地进行模型微调。在LongLoRA中,引人的转移短暂的注意力机制能够有效地实现上下文扩展,从而在性能上与使用香草注意力(Vanilla Attention)进行微调的效果相似;其次,通过重新审视上下文扩展的参数高效微调机制,研究者发现在可训练嵌人和规范化的前提下,用于上下文扩展的LoRA 表现良好。
LongLoRA在从 70亿、130亿到700亿个参数的LLaMA2模型的各种任务上都取得了良好的结果。具体而言,LongLoRA 采用LLaMA2-7B模型,将上下文长度从4000个Token扩展到10万个Token.展现了其在增加上下文长度的同时保持了高效计算的能力。这为大型语言模型的进一步优化和应用提供了有益的思路。
2.3.10 VeRA
目前,LoRA 是一种常用的大型语言模型微调方法,它在微调大型语言模型时能够减少
可训练参数的数量。然而,随着模型规模的进一步扩大或者需要部署大量适应于每个用户或任务的模型时,存储问题仍然是一个挑战。研究者提出了一种基于向量的随机矩阵适应(Vector-based Random matrix Adaptation, VeRA)的方法,与LoRA 相比,VeRA 成功将可训练参数的数量减少了10倍,同时保持了相同的性能水平。