LLM Agent中间插个队,总结下指令微调、对齐数据相关的计划,现已凑够7篇论文能够呼唤神龙啦!论文都是以优化指令样本为中心,Data-Centric的观点比较共同:指令微调也便是对齐阶段的数据质量>>数量,少数+多样+高质量的对齐数据,就能让你快速具有作用杠杠的模型。留意以上三者是充沛必要关系,不是说数据越少越好,是三者的有机统一。
假如你对指令微调还不甚了解,建议先看看下解密Prompt系列4. 晋级Instruction Tuning。
当时对指令微调部分的普遍认知有两个思路
- 抽象派:把模型输出和人类偏好进行对齐
- 务实派:赋予模型使命指令的理解和完结能力
两个思路其实异曲同工,重心落在使命+对齐,既依据用户指令应该召回模型预练习学习的哪些常识,以及把这些常识用什么样的格式和风格进行输出,类似于把预练习学习的常识重新排列组兼并输出。能够类比探测Bert Finetune对向量空间的影响,只不过指令微调调整的高维空间愈加细分多样。
于是才有本章的讨论,那咱们构建质量更高,覆盖范围更广的数据,是否比随机造大量的指令数据作用要更好。究竟你抖音刷1000条杂七杂八的中医养生小常识,或许比不上精读黄帝内经+神农本草不是~
LIMA
- 论文:LIMA: Less Is More for Alignment
- 关键:人工构建1K高质量样本用于对齐,高质量主要指输出的风格共同性,以及输入的多样性
LIMA是比较早提出Quality Over Quantity观点的论文。论文提出一个假设是模型的常识和能力几乎悉数是预练习阶段注入的。而指令微调阶段的对齐只是学习和人类交互的答复方法。因此一个输入多样,输出方法共同的高质量指令数据集能帮模型快速学到答复方法。
指令数据集的构建方法是人工从Stack Exchange, wikiHow和Reddit里面分类挑选更高质量的问题和答复,来构建指令样本集。咱们详细说下Stack Exchange样本的构建,其他两个思路是共同的
- 分类采样: 为了保证多样性,把Stack的分成75个科学类别和99个其他类别,从每个类别中采样200个问题
- 挑选:为了保证质量,在以上每个类别中挑选问题评分最高的,再挑选该问题中答复得分最高的
- 过滤:为了保证输出的共同性,过滤太长(4096字符)/太短(1200字符)的答复,过滤以第一人称答复,或许引用了其他答复的内容。以及对内容进行清洗只保留代码和文本部分。
- 样本构建:随机运用问题的标题或许描绘作为输入,运用答复做为输出。
除了运用已有的QA数据,几位作者还人工构建了200条依据个人偏好随机创立的prompt,以及编写的答复,在答复编写过程中中心是留意答复风格的共同性。重要的事情说三遍,共同性,共同性,共同性。论文反复强调共同的答复风格能够加速模型收敛。
论文运用的是65B的LLAMA模型,1000条样本,微调了15个epoch,lr=1e-5, batch=32, max_seq_len =2048。最终是人工在验证集打分上,挑选了5-10个epoch之间的checkpoint。
论文针对数据集的质量,数量和多样性进行了消融实验,如下图
- 多样性:类似质量和数量,输入指令多样性更高的stack exchange的作用优于输入相对单一的wikiHow数据集
- 质量:平等量级上过滤后质量更高的stack Exchange数据集微调的作用更好
- 数量:从质量过滤后单一的stack exchange中采样更高量级的练习样本,并不能明显带来作用提高。之前公认的样本数量越多越好,或许更多是数量提高带来的指令多样性提高。
当然论文挑选的样本数自身并无十分大的参阅意义,由于这个挑选的基座模型,模型巨细,数据自身的多样性都相关,所以需要详细模型详细分析。
ALPAGASUS
- 论文:AlpaGasus: Training A Better Alpaca with Fewer Data
- 代码:lichang-chen.github.io/AlpaGasus/
- 数据: github.com/gururise/Al…
- 关键:模型自动化挑选高质量指令微调样本
论文起名终于从和动物纠缠不清,到开端上天入地,模型起名AlpaGasus=Alpaca+Pegasus,故名飞天羊驼,哈哈最近总会让人情不自禁想到飞天茅台
比照LIMA,ALPAGASUS没有对什么是高质量进行很清晰的界说,可是提出了自动化样本过滤的计划,成本更低,更简略粗暴。从原始52K的ALPACA样本中运用大模型自动挑选高质量的9K样本进行模型微调。
论文在以下4个测验集上进行评价,运用GPT-4给原始Alpaca和飞天羊驼进行偏好打分,胜率如下,在不同量级的练习样本上,飞天羊驼以80%+的胜率逾越Alpaca,当练习样本在9K左右的时候,胜率最高~
自动样本过滤机制比较简略,便是运用如下Prompt,让Chatgpt给(instruction, input, response)的三元组样本进行打分,并依据最终的打分散布,选定4.5分作为阈值,挑选打分>4.5的9K样本用于下游模型微调。
论文还进行了消融实验,比照了不同的挑选阈值得到的不同练习样本量的影响,3k/6k/9k中9K的样本量级,模型作用最好,但超过后模型作用会有下降。延伸下大概便是高质量的数据越多越好,但低质量的数据越少越好。同时比照了随机采样9K作为作为对照组,作用是明显差于运用模型打分挑选出的9K样本。
自动化数据挑选看起来十分美好且梦境,但笔者自己有一个疑问,论文运用chatgpt来挑选样本,又用GPT4作为评价,是否会引进bias,这个bias主要来自chatgpt和gpt4相对共同的偏好。这一点除非引进人工评价,或许多个大模型例如Claude之类同时进行最终的评价打分,否则个人感觉或许出现妈妈看自己的孩子咋看都美观的情况……
LTD
- 论文:Maybe Only 0.5% Data is Needed: A Preliminary Exploration of Low Training Data Instruction Tuning
- 关键:聚类过滤类似度高的样本,挑选多样性样本用于对齐
LTD的样本挑选中心放在多样性,在使命微调上只运用0.5%的练习样本,还比原有作用提高了2%。论文对多样性给出了更形象的描绘便是用最少的样本,去近似刻画当时悉数指令集的空间散布。这么一描绘,其实答案现已呼之欲出了,跑不了cluster,KNN,k-center这些计划,论文实现如下
详细分成3个步骤
- Sample embedding: 把指令样向量化,这儿论文是把指令+答复一同输入BERT模型进行编码,而且做了l2正则化,这样后续聚类核算间隔就能够直接运用cosine间隔
- Clustering:作者运用K-Means对所有指令样本进行聚类,不过个人更偏好aggolomerative clustering,究竟k-means是密度聚类,而层次聚类是依据间隔的,在文本聚类中间隔是有清晰含义的,能够更好保证不同cluster直接的粒度相对共同
- Corest Sampling:依据聚类成果挑选有代表性的样本来构建指令集。我本以为论文会直接从每个cluster动进行随机采样,意料之外的是论文采用了贪心的K-center算法来选取更有代表性的数据点,算法如下。目标是找到K的中心点,使得所有点到间隔最近的中心点的间隔之和最小化。实现是先用聚类中心点作为开始中心点,遍历所有其他点找到离所有开始点间隔最远的点,把这个点也参加中心点,然后屡次重复以上过程。
除了以上介绍的论文之外,还有几篇论文思想也或有类似,包括以下Reference中的
- InstructionGPT-4:把多样性和质量进行归纳打分的多模态微调模型
- Instruction Minning: 运用指令评价集推理Loss来对指令数据进行高质量挑选的
- Polite Flamingo:经过改写和重构构建高质量多模态模型输出数据
- Textbooks:编程使命上构建教科书等级质量的预练习数据,和对应的习题集数据用于微调作用明显逾越StarCoder
想看更全的大模型相关论文整理微调及预练习数据和结构AIGC使用,移步Github >> DecryPrompt
Refernece
- InstructionGPT-4: A 200-Instruction Paradigm for Fine-Tuning MiniGPT-4
- Instruction Mining: High-Quality Instruction Data Selection for Large Language Models
- Visual Instruction Tuning with Polite Flamingo
- Textbooks are all you need
- K-center Greedy算法的论文,Active Learning for Convolutional Neural Networks: A Core-Set Approach