今天是2023年10月25日,星期三,北京,天气晴。
我们来看看微调数据与策略方面的事情,研究如何通过SFT来解锁具有多种能力的LLM非常重要。
最近读到一篇工作《HOW ABILITIES IN LARGE LANGUAGE MODELS ARE AFFECTED BY SUPERVISED FINE-TUNING DATA COM- POSITION》(https://arxiv.org/pdf/2310.05492.pdf)很有启发。
该工作关注SFT期间数学推理、代码生成和一般人类对齐能力之间的数据构成。
其从扩展的角度研究了模型能力与数据量、数据组成比例、模型参数和SFT策略等各种因素之间的关系,重点关注SFT中数学推理、代码生成和一般指令遵循能力之间的数据组合问题,旨在研究模型性能与不同因素之间的关系,包括数据量、数据组成比例、模型规模和SFT训练策略。
具体来说,主要研究以下四个问题:
1、推理、编码和通用能力如何随SFT数据量而变化?
2、在SFT中结合三种能力时是否存在性能冲突?
3、导致性能冲突的关键因素是什么?
4、不同的SFT策略对组合数据有什么影响?
也得到了一些很有趣的实验结果:
1、不同的能力表现出不同的扩展模式,在数据量相同的情况下,较大的模型通常表现出更优越的性能。
2、随着数据量的持续增加,数学推理和代码生成能力也在不断提高,一般能力则是在样本数达到一千左右时才得到提升,且提升速度较慢。
3、在数据量较低的情况下,数据组合会带来各种能力的提高,而在数据量较高的情况下,能力则会发生冲突。
4、组成数据量会影响性能,而组成比例的影响则微乎其微。
这是一个很有趣的工作,本文进行介绍,供大家一起参考。
不同的SFT策略包括多任务学习、顺序训练、混合顺序训练和双阶段混合微调(DMT),为学习具有复合SFT的多功能LLM提供了经验指导。如表1所示:
1.多任务学习:直接混合不同的SFT数据源D=∪1≤i≤kDi并应用SFT。如果将每个数据源视为不同的任务,这就可以视为多任务学习。
2.顺序训练:在每个数据集上依次应用SFT。具体来说,依次对编码、数学推理和综合能力数据集进行训练。
3.混合序列训练:该工作先在专业数据集(代码、数学)上应用多任务学习,然后在通用能力数据集上应用SFT。
4.双阶段混合微调(DMT):首先在专业数据集上应用SFT,这与混合序列训练策略的第一阶段相同。在第二阶段,使用混合数据源执行SFT,该数据源由普通数据以及不同比例的代码和数学数据k(1,1/2,1/4,1/8,1/16,1/32)组合而成。在第二阶段加入代码和数学数据有助于模型回忆专业能力。
为了解决以上问题,实验设置很重要:
给定有SFT数据集{D1,D2,...,Dk},其中每个数据集={qi,j,ri,j}j包含一个来源的查询和回复。
每个SFT数据集都对应一种能力,还有k个域内指标来衡量它们。
为了研究不同数据集组成(D⊂∪1≤i≤kDi)和训练策略下域内度量在不同规模的LLM上的表现,收集了三个SFT数据集{D1,D2,D3},包括GSM8KRFT、CodeAlpaca和ShareGPT,分别代表数学推理、编码和一般人对齐能力SFT数据集。
其中:
CodeAlpaca旨在构建和共享用于代码生成的指令跟随LLaMA模型,该模型完全基于StanfordAlpaca,包含20K个用于微调模型的数据。
GSM8KRFT是一个数学数据集,它在原始GSM8K数据集的基础上,通过剔除抽样整合了多种推理路径,从而得到了增强。训练集中包含7.5K个问题和110K个回答。
ShareGPT指的是VicunaChiang等人使用的多轮聊天历史记录。ShareGPT包括来自人类的询问以及来自ChatGPT和其他聊天机器人的回复。
整合由这三个数据集组成的新SFT数据集D,以研究数据组成对模型性能的影响。
并使用标准prompt进行测试:
使用GSM8K测试集、HumanEval和MT-Bench来测量数学推理、编码和一般人类对齐等能力。其中:
HumanEval包含164个原始编程问题,每个问题平均分配9.6个测试用例。为了确保全面评估LLM合成代码的功能正确性,HumanEval+大幅增加了测试用例的数量,平均每个问题有774.8个测试用例。
GSM8K是一个用于测量大语言模型数学推理能力的数词问题数据集。该工作使用默认测试集来测量模型。该工作根据贪婪解码准确率(maj@1)计算得分。
MT-Bench使用为处理对话量身定制的综合问题,对多轮对话中的LLM进行评估,提供了一套全面的问题,专门用于评估模型处理多轮对话的能力。 由于MT-bench的分数会有波动,进行了三次实验并取平均值。
使用LLaMA系列作为预训练语言模型,并使用FastChat框架进行微调,迭代训练3个epoch,batch_size为16。
在ShareGPT等包含约10万个样本的数据集上,可以通过SFT激活指令跟随能力。
然而,Zhou等人的研究表明,强大的基础模型只需1000个样本就能实现人类对齐。数学推理等专业能力需要大量数据,这与一般能力不同。因此,研究每种能力如何随着数据量的增加而提高至关重要。
因此,该工作使用从GSM8KRFT、CodeAlpaca和ShareGPT分别获得的训练集{1、1/4、1/16、1/64、1/256}的比例,在不同规模的LLaMA上进行SFT。
这样,该工作就可以用不同的数据大小和模型大小来评估每种能力。
图2显示了SFT后不同能力的单个数据缩放曲线,可以看到不同的能力表现出不同的缩放曲线。具体来说:
数学推理能力与不同模型大小的数据量呈正相关,同样,一般的人类对齐能力也呈现出几乎单调递增的缩放曲线。
然而,值得注意的是,一般对齐能力仅在1k左右的数据样本(从1/256到1/64)中出现,达到一定阈值(1/64)后,其性能会缓慢提高,表明少量高质量的SFT数据就有可能在LLM中出现一般的人类对齐能力。
另一方面,当模型的参数数较少时,对码能力表现出不规则的缩放曲线(7B和13B)。然而,当参数数增加到33B时,其编码性能与数据量呈近似对数线性趋势。
一种可能的解释是,CodeAlpaca和HumanEval中的样本分布不同。较大的模型可以捕获域内样本中代码数据分布的共享知识,这使它们能够对分布外(OOD)样本表现出一定程度的泛化。
另一个观察结果是,在数据量相同的情况下,较大的模型通常表现得更好。例外情况是,在数据量极少(1/256)的情况下,较小的模型可能会优于较大的模型。
如果有足够的数据,较大的模型会有稳定的更好表现。
为了知道SFT数据集混合后,每种能力有何不同。该工作用不同数量的混合数据进行研究,并将它们与个人能力表现进行比较。
因此,该工作在单个来源设置方面,与问题1中的设置一致,分别使用来自GSM8K、CodeAlpaca和ShareGPT的{1、1/4、1/16、1/64、1/256}量的训练数据,对不同大小的LLaMA模型进行微调。
在混合源设置中,分别从GSM8K、CodeAlpaca和ShareGPT中抽取了{1、1/4、1/16、1/64、1/256}量的训练数据,并按照相应的比例直接混合使用。
通过这种方法,构建了不同能力领域比例固定的数据集,同时改变了数据总量,这些数据集用于微调LLaMA模型。
图3展示了在单独来源和混合来源设置下,不同规模的LLaMA在三个基准上的结果。观察结果如下:
与单源能力相比,低源能力有所提高,高源能力有所下降。就LLaMA-7B而言,与单源设置下的数据缩放曲线相比,使用混合源数据微调的模型在高资源(100%)下始终表现出三个能力域之间的性能冲突。
然而,随着数据量的减少,在1/64到1/16的数据范围内,两种设置之间出现了性能转折点。
值得注意的是,使用混合来源数据进行微调的模型在低资源(1/256)时表现出性能提升,这表明在低资源环境下,来自不同来源的SFT数据相互受益。
然而,当数据量足够大时,其他来源的数据可能会被视为域内泛化的噪音。随着模型规模的增加,在低资源环境下,数学和综合能力的性能增益也会增加。
在13B和33B模型中,混合源设置的缩放曲线显然与之前分析中观察到的趋势相似,即随着数据量的增大,会出现成绩交叉点。
然而,一个关键的区别出现了,即随着模型参数大小的增加,大型模型在低资源条件下表现出更明显的性能提升。
离群点是LLaMA-7B(仅代码,1/256)。一个可能的原因是,引入少量未见过的代码数据很容易破坏预训练模型的原始代码能力,其较低的HumanEval分数(低于6分)也证明了这一点。
总之,该工作的研究结果表明,在低资源条件下,大型语言模型在从不同数据源获取通用和专用能力方面表现出色。
由于存在高资源环境下的能力冲突的现象,需要研究造成冲突的原因,即两个可能的因素是其他能力的数据量过高或其他能力的数据比例过高。
因此,该工作将编码和数学作为组合的专业数据源,将ShareGPT作为一般数据源,并设计了以下三种设置,分别控制一种数据源的数量,并改变普通数据和专业数据的比例:
1.固定通用数据,扩展专用数据:使用完整的ShareGPT训练集,并采样不同比例的GSM8KRFT和CodeAlpaca作为混合数据{1,1/4,1/16,1/64,1/256}。
2.固定专用数据,扩展通用数据:使用GSM8KRFT和CodeAlpaca的完整训练集,并抽取不同比例的ShareGPT作为混合物。
3.固定1/64一般数据,扩展专用数据:受LIMA设置的启发,使用1/64的ShareGPT集(约1500个示例),并以GSM8KRFT和CodeAlpaca的不同比例作为混合采样。
那么,问题来了:
模型的性能是否会随着普通数据和专业数据的不同比例而变化?如图3前三幅图所示,该工作对专门能力和一般能力之间的数据比率(k)进行了消融研究。
专门能力和一般能力之间的数据比率(k)。需要注意的是,比率是按数据量归一化的,例如,k=1表示专门使用数据量=专门所有数据量。该工作一般使用数据量一般所有数据量。
该工作以固定的专业数据设置(直接混合100%的代码和数学数据进行训练)和固定的一般数据设置(100%的一般数据进行训练)为基准,观察到:
(1)随着一般数据比例从1/256增加到1/1,固定的专业数据、缩放的一般数据设置在数学推理方面的表现与固定的专业能力设置相似。这表明,数据比例k的变化对数学能力的影响微乎其微。
该工作认为数学能力和一般能力是不冲突的,因为它们在语义空间中的差异太大。然而,在考虑HumanEval(固定专业数据)时,缩放一般数据设置与基线相比出现了明显的波动。
该工作将此归因于ShareGPT中包含了一定比例的代码数据。由于数据格式和分布的不同,当数据比率k增加时,相似数据特征的存在会加剧能力间的性能冲突。
(2)随着专用数据比例从1/256增加到1/1,固定一般数据、缩放专用数据的设置与基线相比没有显示出明显的性能变化。
当不同SFT能力之间的任务格式和数据分布存在显著差异时,数据比例的影响微乎其微。然而,当存在一定程度的相似性时,数据比率会导致明显的性能波动。
在一般数据资源极其有限的情况下,专业数据的比例是否会对模型的性能产生影响?该工作进一步探讨了当模型刚刚获得一定程度的一般人类对齐能力(k=1/64)时,不同专业数据比例的影响。
图4底部3幅图展示了两种设置下的对比实验。该工作观察到:
无论一般能力的数据量是丰富(k=1)还是稀缺(k=1/64),MT-Bench的性能都不会随着专业数据比例的变化而出现明显波动。
此外,在数学推理中,1/64的通用数据设置表现出的缩放趋势与完整的通用数据设置几乎相同。
然而,就编码能力而言,在相同的编码数据量和不同的比例下,两种设置下的编码能力是不同的。
该工作可以将这些SFT数据集输入具有不同训练策略的模型。在本节中,该工作将对这些设置进行实验,研究它们如何影响每种能力的性能。
实验设计:首先,该工作介绍以下三种训练策略:
1.多任务学习:该工作直接混合不同的SFT数据源D=∪1≤i≤kDi并应用SFT。如果该工作将每个数据源视为不同的任务,这就可以视为多任务学习。
2.顺序训练:该工作在每个数据集上依次应用SFT。具体来说,该工作依次对编码、数学推理和综合能力数据集进行训练。由于综合能力是人类配准中最重要的能力,因此该工作将ShareGPT作为最后一个数据集。
3.混合序列训练:该工作先在专业数据集(代码、数学)上应用多任务学习,然后在通用能力数据集上应用SFT。
结果与分析表1列出了不同训练策略在数学推理、代码生成和一般人类对齐能力方面的表现。在这些策略中,多任务学习保留了专门能力,但对一般能力的伤害最大。
顺序训练和混合顺序训练保留了一般能力,却损失了太多的专门能力。观察到的结果符合预期,因为在最后的微调阶段,混合顺序训练策略不受专门数据源的影响,从而有效地保留了其泛化能力。
然而,多阶段训练的一个固有缺点是会出现对先前知识的灾难性遗忘,这促使该工作进一步探索既能减轻对专门能力的灾难性遗忘,又能最大限度地保持泛化能力的方法。
4.双阶段混合微调(DMT):基于从问题1到问题4的观察,该工作提出了一种新的训练策略,可以减少多任务学习过程中的能力冲突,并缓解顺序训练过程中的灾难性遗忘问题。
如上图所示:
首先在专业数据集上应用SFT,这与混合序列训练策略的第一阶段相同。
在第二阶段,该工作使用混合数据源执行SFT,该数据源由普通数据以及不同比例的代码和数学数据k(1,1/2,1/4,1/8,1/16,1/32)组合而成。
在第二阶段加入代码和数学数据有助于模型回忆专业能力。表2列出了DMT(k=1/256)的结果,对比例k的详细比例分析见讨论部分。
我们再来看看模型精度与DMT策略的对比。
在表1中,与混合顺序训练策略相比,采用DMT(k=1/256)策略的LLaMA-7B在数学推理(32.6到41.92)和代码生成(15.24到17.68)方面都有显著提高,这表明在最后的微调阶段混合专业能力数据对灾难性遗忘有明显的缓解作用。
关于13B和33B模型,与混合顺序训练策略相比,DMT(k=1/256)在数学推理(13B:40.48到46.47/33B:44.24到56.36)和代码生成(13B:18.3到19.5/33B:24.4到25.5)方面明显减轻了灾难性遗忘。
1、不同能力语义表征的可视化
在前面提到的数据组成分析中,该工作观察到当不同数据源直接混合时,性能会明显下降。
那么,是否可以探索不同数据源之间语义表征分布的潜在相互影响。
因此,该工作从CodeAlpaca、GSM8kRFT和ShareGPT数据集中随机抽取了100个查询,并提取了位于模型第15层的隐藏层表示。
随后,该工作使用t-SNE工具包VanderMaaten&Hinton(2008年)对三种能力的表征进行了可视化。
图5中的结果表明,原始LLaMA-13b和带有DMT(k=1/256)的LLaMA-13b的语义表征都出现了明显的坍塌现象。虽然这两个模型在数学数据表示方面都表现出一定程度的分离,但在代码和一般样本的表示之间仍然存在一定程度的重叠。
2、Sharegpt中专门域的消减
在问题2中,该工作观察到,与单一数据源相比,使用混合数据源会提高低资源条件下的能力,但降低高资源条件下的能力。然而,ShareGPT中编码和数学样本的存在带来了不确定性,即低资源条件下的性能提升是完全归因于这些特定的编码和数学数据,还是一般数据集中的其他正交样本(如翻译或提取)。
因此,为了研究在移除ShareGPT中的代码和数学样本后,之前的结论是否仍然有效,该工作使用开放集标签InsTag对ShareGPT中的样本进行标注。
为了过滤与编码和数学能力相关的数据,该工作使用正则表达式匹配来剔除标签中包含关键词"编码"或"数学"的实例。最后,该工作得到了一个没有任何代码或数学相关信息的ShareGPT数据集(从90K减少到63K)。
该工作从GSM8K、CodeAlpaca和修改后的ShareGPT数据集(不含代码数学)中抽取了不同比例的训练数据(1、1/4、1/16、1/64、1/256)。这些样本按照相应的比例直接混合。随后,使用该混合数据集对LLaMA模型进行微调。
分析结果图6显示了该工作的实验结果。可以看到:
从ShareGPT中移除代码和数学不仅在一定程度上缓解了高资源条件下不同能力间的性能冲突,而且在低资源环境下也能保持稳定的收益。
该工作认为,这些发现背后的潜在原因在于ShareGPT、CodeAlpaca和GSM8KRFT数据集之间代码和数学数据分布的差异。
这种分布差异在SFT短语中引入了额外的噪声,而消除这种噪声则能使模型更好地概括编码和数学能力。
此外,在资源匮乏的情况下,这一现象表明ShareGPT中的代码和数学样本并不是提高性能的关键因素,而是数据的多样性和可变性。
ShareGPT中的代码数学数据并不是影响性能提升的关键因素,这突出表明了该工作结论的普遍性。
3、双阶段混合微调中的专门数据量
为了不同的k值对模型性能的影响,当该工作将k值从0调整到1/256时(k=0等于混合顺序训练),SFT模型的专门化能力和一般人类对齐能力都有显著提高。
相反,当k从1/4增加到1时,模型的一般能力有所下降。该工作认为这与研究问题2的结论是一致的,即高资源环境会导致冲突,而低资源环境会导致混合来源的收益。
此外,当k从1/256增加到1/4时,该工作观察到一般能力和专门能力之间呈线性反比趋势,特别是一般能力的增加与专门能力的下降同时出现。
这表明,需要根据具体要求调整k,以实现多种能力之间的平衡。
本文主要介绍了《HOW ABILITIES IN LARGE LANGUAGE MODELS ARE AFFECTED BY SUPERVISED FINE-TUNING DATA COM- POSITION》这一工作,该工作探讨了SFT阶段的数据组成,重点是数学推理、代码生成和一般的人工对齐能力。
该工作提出了四个研究问题来指导该工作的研究,并分析了不同能力和因素(如数据量、数据比例、模型参数和训练策略)之间的扩展趋势。
该工作的研究结果揭示了不同能力之间截然不同的扩展模式,当使用相同的数据量进行训练时,较大的模型表现出更优越的性能。
此外,该工作还观察到,在SFT阶段混合数据源可提高低资源场景下的性能,但在高资源场景下则会降低性能。
有趣的是,随着模型参数大小的增加,低资源增益现象变得更加突出。此外,该工作的观察结果表明,数据量直接影响性能冲突。
这是一个很有趣的工作,尤其是对四个不同训练策略、数据混合比例的论述,都具有借鉴意义,供大家一起思考。
1、https://arxiv.org/pdf/2310.05492.pdf
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。