OpenChat正在研究如何通过crlft方法,针对质量不高的数据,从指令跟随能力泛化到更通用的能力,从而显著提升整个SFT模型的性能。
近日,嘉程创业流水席第210席【探讨AI多模态从基座到应用的最新趋势和前沿动态】,邀请了清华大学计算机系博士程思婕分享,主题是《如何有效利用混合质量数据训练高性能的监督微调模型》。
以下是正文内容:
今天,我要分享的主题是“基于混合质量数据的监督微调语言模型”,我将主要介绍OpenChat——一个正在推进的微调语言模型项目。
自2023年5月项目讨论以来,我们一直在持续推进该项目。目前,几乎所有的模型、训练脚本和具体训练方法都已在Github和HuggingFace上开源。我们提供了一个OpenChat在线试玩Demo,欢迎大家尝试。
项目经历了几次迭代。首先,我们针对指令微调任务发布了模型的开源版本,该版本达到了指令微调模型的最佳状态,在9月份超越了ChatGPT。目前,我们尝试的一些指令微调任务已能超过GPT-4,在大多数通用任务上,我们也能达到与ChatGPT同等表现。因此,这是一个持续迭代的过程。我们不仅提升了指令微调任务的性能,还针对通用推理任务进行了相应的优化。
OpenChat技术背景
接下来给大家介绍一下这期间我们所使用的技术。
-
简要介绍一下SFT的背景。最早期的工作来自斯坦福的Alpaca,他们使用了52k指令跟随型数据对模型进行了微调。具体来说是通过175条self-instruct种子数据,在ChatGPT的基础上进行self-instruct操作,生成了52k新数据,并将其用于LLaMA 7B的直接监督微调,从而得到了Alpaca-7B。这部分数据的主要问题在于,由于是模型自行生成,可能导致多样性表现不佳,能力比较局限。
-
Vicuna是伯克利提出的一项新工作,它的工作方法非常简单,主要使用了70k ShareGPT数据。这些数据是用户在使用ChatGPT过程中,认为有价值并分享到ShareGPT.com的。这70k数据中,查询是用户自己构思,回答是来源于GPT-3.5或GPT-4。在获取这些数据之后,通过监督微调方法进行训练,最终得到的模型效果优于Alpaca。
这些数据的主要优势在于,查询是由用户自定义的,因此与基于ChatGPT生成的数据相比,它们在多样性和用户质量方面都更为出色。
-
然而,用户共享的数据量非常有限,因此,我们会采取各种方法来做数据的增强。WizardLM主要在数据深度和广度上进行了扩展,使其数据更加多样化。
-
在执行Instruction-following任务时,其主要目标是理解用户意图,但也可能需要不断地进行修改。在这种情况下,我们会通过多轮对话方式,给出不同的指令。因此,在多轮对话方面,UltraChat对合成数据进行了进一步的优化。
-
最后,简要介绍一下RLHF——基于人类反馈的强化学习。简而言之,就是首先由人类对同一问题的多个回复进行排名,然后训练一个reward model(奖励模型)来判断每个回复的生成质量。最后,使用PPO强化学习算法对大型语言模型进行微调。
数据质量对模型性能具有根本性影响
OpenChat的主要目标是提升SFT阶段的性能。刚刚提到,我们有多个版本,首先介绍一下第一个版本。我们认为用户分享的数据更加多样且高质量,因为这些查询是由人类用户自己构思的。这些回答可以与ChatGPT或GPT-4生成的较好回答进行类比。过去的做法是直接使用监督微调,而不考虑数据质量的差异性。所有数据都被同等地输入到基础模型(例如LLaMA)中进行微调,忽略了低质量数据可能产生的消极影响。在实验过程中,我们发现数据质量对模型的性能具有根本性的影响。如果按照这种方式进行训练,低质量数据可能会大大降低高质量数据对模型的贡献。
因此,我们早期的思路非常简单:正如刚刚提到的,Vicuna使用了70k ShareGPT数据。除了用户自己构建的查询外,主要的数据差异在于回答来源。其中一部分来自GPT-4,另一部分来自GPT-3.5。早期的GPT-4和GPT-3.5之间的数据质量存在很大差异。一般认为,GPT-4生成的数据质量较高,而GPT-3.5生成的答案则次优,质量相对较差,但其中一些数据效果不错。这些低质量数据可能会对最终模型的表现产生消极影响。因此,我们进行了一个简单的尝试:从70k ShareGPT数据中,仅保留了6k由GPT-4生成的高质量数据,删除了约64k GPT-3.5生成的数据。在这6k数据上,我们进行了SFT,得出了令人惊讶的结果。随后的一些工作也证实了同样的观点:数据的质量对模型的表现非常重要。
这是第一个版本的模型表现。我们主要评估了Vicuna-bench和Alpaca-bench。可以看到,OpenChat仅使用了6k数据,我们就能够比Vicuna 70k、Alpaca 50k的模型效果更好,在Vicuna-bench和Alpaca-bench上都能得出相似的结论。
这证明了在SFT过程中,数据质量远比数据数量更为重要。当数据质量非常高时,完全可以用几千条数据甚至超过几万条、几十万条的监督微调数据的效果。
基于混合质量数据提升模型性能
实际上,ShareGPT中的数据超过70k,但在第一个版本中,我们仅使用了6k GPT-4生成的数据,放弃了六万多条质量良好的数据。虽然不能保证每个GPT-3.5生成的数据都很好,但它们应该也会有一定的帮助。
在第二个版本中,我们想解决的问题是如何在SFT阶段有效利用未充分利用的数据——即如何在充分利用70k数据的同时,确保效率并避免低质量数据对高质量数据产生负面影响?
我们采取的方法非常简单:我们认为应该明确地向模型提供一些信号,指示哪些数据是高质量的,哪些是较高或中等质量的。在训练过程中,模型会意识到数据质量的差异,并有选择性地进行学习。尽管ChatGPT的性能可能优于LLaMA等开源模型,会带来一些正向提升效果,但当数据质量较低时,我们学习它的权重会相对略低。
简单来说,我们设计了两种方法。
-
首先是粗粒度奖励:我们认为模型应该更多地学习来自GPT-4而非GPT-3.5的数据。因此,我们为每条数据分配了一个奖励,类似于强化学习中的做法,其中GPT-4的数据奖励为1,GPT-3.5的为0.1。实际上,这就是在SFT过程中,在学习每条数据之前,为模型分配一个权重。
-
第二种方法是基于类别的标记,这是工业界熟悉的方法。我们会在提示前加上一个标签:如果数据来自GPT-4,我们会给它一个GPT-4的提示;如果来自GPT-3.5,我们则使用GPT-3.5的提示。
结合这两种方法,在输入阶段,模型可以清晰地识别数据来源是GPT-4,奖励为1;或者数据来源是GPT-3.5,质量较低,奖励为0.1。
总的来说,GPT-4和GPT-3.5的数据质量都不错,但GPT-4的数据质量通常更高,因此我们将其视为Expert Data。然而,并非所有GPT-4的数据都是高质量的,也不是所有GPT-3.5的数据质量都低于GPT-4。因此,我们的团队同学尝试为每条指令跟随数据分配更细粒度的反馈,让模型在学习过程中自行判断数据质量,我认为这是不错的后续探索方向。
在基准测试中,我们对比了多个最先进的模型。我们使用了70k数据,相比之下,其他开源模型的数据量通常更大。
在结果方面,Vicuna-bench是一个公认的用于评估指令跟随能力的基准测试。我们发现,在Alpaca和MT-bench中,我们的模型都达到了当时最好的表现。虽然Vicuna-bench的成绩略低于LLaMA2的官方版本,但远远超过了之前的开源模型。我们还观察到,与LLaMA2 chat相比,我们的模型性能提高了约3个百分点。因此,可以说我们的SFT整体表现非常出色。
我们还对AGIE valuation进行了评估,这是一个综合性的任务。它不仅考察指令跟随能力,还结合了不同类型的任务(例如数学、英文、编程等)在多个维度上进行评估。我们列出的基础模型,包括OpenChat以及之前提到的Vicuna和官方聊天版本,都是基于LLaMA2进行SFT的。
我们发现,大多数模型在SFT后都会出现坍缩问题。在许多方面,它们的效果甚至不如基础模型。我们认为,这是因为在学习过程中,模型忘记了一些基础能力,只在指令跟随能力上有所提升。然而,OpenChat13B在大多数领域的表现都与之前的基础模型相当,甚至更好,这表明我们的模型具有更强的泛化能力。
此外,我还想介绍两个小的分析实验。
首先,我们证实了GPT-3.5和GPT-4在数据质量上存在差异:总体来说,GPT-3.5的下限会更低,最差的情况可能只有零点几分;而GPT-4的表现会更好,有更多接近满分的数据样本,低分的情况较少。
其次,我们验证了在推理阶段在GPT-4或GPT-3.5上的影响。我们发现,如果指定模型在推理时扮演GPT-4的角色,其性能会比扮演GPT-3.5的角色要高得多。这表明模型学会了区分这两者之间的差异,并且在影响阶段,能够有选择性地生成答案。
此外,我们进行了一些可视化分析。不加区分地把所有数据塞给LLaMA2,并通过SFT把所有的数据样本混合处理。在可视化中,红色代表GPT-3.5生成的数据,蓝色代表GPT-4生成的数据。结果显示,模型完全没有学习到两者之间的差异。然而,当我们采用OpenChat的方法进行SFT时,可以明显看出模型已经识别出高质量数据与中等质量数据之间的差异。
多维度增强模型通用能力
最后,介绍我们的最新版本——版本三。这个版本不仅关注指令跟随能力。我们注意到,开源模型在基础能力上与闭源模型(例如基于API的GPT或Claude等)差异比较明显。因此,我们开始关注推理能力,包括数学、编程以及人们在推理过程中常用的数据。我们发现,在某些下游任务上,仅提升指令跟随能力的效果非常有限,更应该关注模型的推理能力。我们的目标是不仅提升指令跟随能力,还要在多个维度上增强模型的通用能力。只有这样,未来我们的开源模型才能真正可用。因此,在数据方面,我们也进行了一些调整,开始使用更大规模的数据,并在多个维度(如推理、编程、数学等)中加入了更多数据。基于之前提到的方法,我们通过condition的方式提升了模型的性能。
SFT的挑战在于它可能导致“跷跷板现象”。如果只是提升单一领域(例如创建一个数学专家模型)相对容易,只需添加一些高质量数据做提升即可。但要在多个维度上提升模型的能力,而不出现某一个维度提升了后,另外一个维度能力下降的情况,则非常困难。然而,通过condition的方法,我们的模型在SFT之后在多个维度上都实现了能力提升。
左侧展示了ChatGPT与3月份ChatGPT的性能对比,MT-bench是我们刚刚提到的指令跟随数据,其他则是目前多领域通用能力的评测。OpenChat在这些评估中也能达到与GPT相当的效果,甚至在总体水平上超过了GPT 3月份的表现。
右侧是Grok最近发布的一个模型,我们的表现也明显优于他们的33B模型。Grok-1是一个更大的模型,我们也实现了可匹配的效果。
最后一行,我认为是一个非常有趣的现象,我们将OpenChat与开源领域每个基准测试中的最佳模型进行了比较。在单个维度上进行改进相对容易,效果也更为明显。目前,OpenChat在通用维度上的训练之后,能比开源的、在每个维度上做了提升之后的最佳模型,总体评分更高。
简而言之,OpenChat正在研究如何通过crlft方法,针对质量不高的数据,从指令跟随能力泛化到更通用的能力,从而显著提升整个SFT模型的性能。目前,我们也在探索开源模型,希望未来能够做一些端测,并部署在PC以及一些更小的硬件设施上。
我的分享就到这里,谢谢大家!
Q&A
席友:在不同的任务上,对于高质量数据的标准是否有所不同?
程思婕:在第三个版本中,我们不仅关注指令跟随能力,因为OpenChat的ICLR版本已经涵盖了这一方面。在通用模型中,我们在训练过程中发现数据质量问题至关重要。在最新版本中,我们主要使用了从GPT-4收集的或人类自己标注的开源数据。这些数据都经过了人类验证——无论是GPT-4生成后的人工验证,还是直接由人类标注。总的来说,数据质量非常重要,可以说,少量的高质量数据比大量未经区分的混合数据效果要好。关于数据质量,不同任务的需求不同,在提升某个任务时,应该使用与任务相关的高质量数据进行提升。
全文完
嘉程资本Next Capital是一家专注科技领域的早期投资基金,作为创新者的第一笔钱,我们极度信仰科技驱动的行业创新,与极具潜力的未来科技领袖共同开启未来。
我们的投资涵盖人工智能、硬科技、数字医疗与健康、科技全球化、生物科技与生命科学、企业服务、云原生、专精特新、机器人等领域。投资案例包括元气森林、熊猫速汇、寻找独角兽、店匠、士泽生物、芯宿科技、未名拾光、橄榄枝健康、硅基仿生等多家创新公司。
嘉程资本旗下的创投服务平台包括「嘉程创业流水席」,「NEXT创新营」、「未来联盟」等产品线,面向不同定位的华人科技创新者,构建了大中华区及北美、欧洲和新加坡等国家地区活跃的华人科技创新生态,超过3000位科技行业企业家与巨头公司高管在嘉程的平台上分享真知灼见和最新趋势。
嘉程资本投资团队来自知名基金和科技领域巨头,在早期投资阶段富有经验,曾主导投资过乐信(NASDAQ:LX)、老虎证券(NASDAQ:TIGR)、团车(NASDAQ:TC)、美柚、牛股王、易快报、PingCAP、彩贝壳、云丁智能等创新公司的天使轮,并创办过国内知名创投服务平台小饭桌。
嘉程资本
握手未来商业领袖
BP 请发送至 BP@jiachengcap.com
微信ID:NextCap20176