LLM常见面试问题- SFT篇

1、 Supervised fine-tuning(SFT)

微调是一种有监督的技术手段,是在已具备广泛知识基础的大型预训练语言模型上,利用针对性的数据集实施额外的训练过程,旨在使模型更精准地契合特定任务需求或深入某一专业领域。微调的核心目标在于实现知识的精细化灌输与指令系统的精确匹配,所以SFT的重点是学习样式和指令,而非知识注入。当前实践中,微调主要分为全参数微调和部分参数微调,下面详细说一下这两个方式的特点和技巧。

2、 全参数微调

主要是利用小学习率的方式,对大模型的全参数进行调整,以使其完全适应特定领域或任务。这种方法适用于拥有大量与任务高度相关的高质量训练数据的情况,通过更新所有参数来最大程度地优化模型对新任务的理解和表现。

2.1 全参数SFT需要的数据量

这个没有一个明确的答案,但是根据大家的经验和一些开源的技术报告来看,SFT的数据一般在2k-10k之间,epoch可以根据SFT数据设定为2-10个epoch,epoch和数据量成反比,SFT的数据在准确,不在量大,所以在数据比较精确的情况下,一般5k的数据5个epoch,就能得到一个不错的效果。

另外,对于一般的人类阅读和生成能力,仅在1000个样本上就可以有不错的效果,但是对于数学推理、代码生成等复杂任务,需要较大的数据量。

2.2 如何避免SFT灾难性遗忘

SFT数据比较多或者epoch比较大时,可能会导致SFT后大模型的通用能力下降,导致灾难性遗忘,这要根据实际场景判断,如果你只关注特殊领域的性能,通用能力下降你也不需要过度关注,如果想要不失去通用的生成能力,可以考虑以下几点:

  • 多任务微调:如果希望模型保持多任务泛化能力,可以一次性对多个任务执行微调。良好的多任务微调可能需要包含许多任务的50-100,000个示例。
  • 考虑PEFT的方法:也就是保留了原始LLM的权重,不采用全参数微调的方法。通过训练少量特定于任务的适配器层和参数。PEFT对灾难性遗忘表现出更大的鲁棒性,因为大多数预训练的权重保持不变。
  • 数据配比:在SFT数据中,增加一些通用生成的数据,避免SFT过度学习单一训练集内容。

2.3 SFT指令微调数据如何构建

SFT的重点是学习样式,而非知识注入,所以SFT的样本在于其质量而非数量,少量但精良的样本往往胜过大批中低品质的样本,实现同样甚至更优的微调效果。通常情况下,2-10k数据就会有一个不错的效果。这一理念在Meta发布的《[LIMA]: Less Is More for Alignment》论文中得到了有力阐述,该文献强调了在指令微调过程中,高品质微调数据的决定性作用。据此,我们应当将重心放在提升样本质量的打磨上,而非单纯追求数量的增长。

如何评估样本的效果,在评估微调样本质量的过程中,通常需要关注以下几个核心维度:

1、 样本多样性(Sample Diversity)

  1. 指令多样性:考察样本中指令的覆盖范围是否广泛,是否包含了各类任务类型、不同难度级别以及多样化的指令结构和表达方式,确保模型在微调后能应对多种复杂情境。
    2. 内容多样性:检查样本中提供的文本内容是否涵盖了不同主题、文体、长度以及语境,以避免模型在特定领域或文本类型上过拟合,确保其具备良好的泛化能力。

2、答案质量(Answer Quality)

  1. 准确性(Accuracy):评估答案是否准确无误地响应了给定指令和内容,是否忠实反映了任务要求,且不包含事实性错误、逻辑矛盾或语义模糊。
  2. 完备性(Completeness):考察答案是否全面覆盖了指令所要求的所有任务点,尤其对于多步骤或复合任务,答案应完整体现所有必要的操作结果。
  3. 简洁性与清晰度(Conciseness & Clarity):衡量答案是否言简意赅、表达清晰,避免冗余信息或含糊表述,确保模型在微调后生成的输出易于理解和使用。

3、一致性(Consistency)

  1. 内部一致性:检查同一指令对不同内容的处理结果是否保持一致,即模型在相似情境下应给出相似的答案。
  2. 外部一致性:对比样本答案与已知的知识库、专家判断或公认的基准结果,确保答案符合领域共识和常识。

4、 难度适配(Difficulty Calibration)

  1. 难易程度分布:分析样本集中简单、中等、复杂任务的比例,确保微调数据集包含不同难度级别的样本,有助于模型逐步提升处理复杂指令的能力。

5、噪声控制(Noise Reduction)

  1. 标签错误检查:识别并剔除标注错误或不一致的样本,确保答案与指令、内容间的映射关系正确无误。
    2. 数据清洗:去除重复样本、无关内容或低质量文本,提升数据集的整体纯净度。

可以看出评估微调样本质量属于一项涉及多方面考量的综合性工作,旨在确保用于指令微调的数据既能有效驱动模型学习指令理解与执行的核心技能,又能促进模型在实际应用中展现卓越的性能和广泛的适应性。通过严谨的质量评估与持续优化,可以最大限度地利用有限的高质量样本资源,实现大模型指令微调的高效与精准。

2.4 进行SFT时,基座模型选用Chat还是[Base模型]?

选Base还是[Chat模型],首先先熟悉Base和Chat是两种不同的大模型,它们在训练数据、应用场景和模型特性上有所区别。

  1. 在训练数据方面,Base模型是基于海量语料库进行的无监督学习。它从大量文本中学习语言模式和知识,而不需要人工标注或监督。相比之下,Chat模型则是在指令微调的有监督学习下进行训练的。这意味着它使用人工标注的数据集进行训练,以便更好地理解和响应特定指令。
  2. 在应用场景上,Base模型主要用于无监督学习任务,如文本分类、情感分析、摘要生成等。这些任务主要关注文本内容的理解和处理,而不需要对特定指令做出响应。相反,Chat模型则主要用于指令学习任务,如问答系统、对话生成、[智能客服]等。在这些任务中,模型需要理解和响应人类的指令,以提供准确和有用的信息。
  3. 在模型特性上,Base模型预训练之后没有做任何调整。它提供了基本的语言理解和生成能力,但可能需要针对特定任务进行微调或优化。而Chat模型则是在Base模型上进行微调的版本,它通过指令微调和人工反馈强化学习等方法,使模型更加符合人类的价值观和指令要求。
  4. 总之,Base和Chat是两种不同的大模型,它们在训练数据、应用场景和模型特性上有所区别。Base主要用于无监督学习任务,而Chat则专注于指令学习任务。在模型特性上,Chat通常在Base上进行微调,以更好地适应特定任务的需求。

根据以上区别,在选择基座模型时也要考虑数据量和任务差别难度,对于训练数据量少的,任务和基座大模型比较优秀能力接近的选chat模型。对于训练数据量比较大,或任务与chat版本的相似的能力比较差,选择base版本。

另一种说法是base模型可以更方便做**知识注入,**而chat版本是做过对其的,不好做知识注入。所以基于base的SFT可以做的上限更高,更方便做知识的注入,而基于chat模型的SFT是做的样式学习或者指令学习。但是base也存在没有对其的风险,输出可能和希望有差距,需要更多的调优和对齐。

2.5 SFT多优化项问题

SFT对于需要优化多个能力项时(比如数学、聊天、推理等),需要多个SFT数据集,这比优化单一能力的难度要大很多,需要考虑数据配比、优化的策略等,参考论文:How Abilities in Large Language Models are Affected by Supervised Fine-tuning Data Composition。

img

策略解释:

  • 多任务学习:直接混合不同的SFT能力项数据进行SFT。若将每个数据源视为不同任务,则可视为多任务学习;
  • 顺序训练:按顺序依次在各能力项数据集上微调。由于通用能力是人类对齐的核心能力,我们将通用能力数据放在最后阶段微调;
  • 混合顺序训练:首先在特定能力数据集(代码、数学)上进行多任务学习,然后在通用能力数据集上进行SFT;
  • 两阶段混合微调(DMT):我们综合RQ1-3的结论与上述训练策略的优缺点,提出DMT策略。在第一阶段我们首先在特定能力数据集(代码、数学)上进行多任务学习。在第二阶段我们使用混合数据源进行SFT,其中包括通用数据和一定比例k的特定能力数据(k = 1, 1/2, 1/4, 1/8, 1/16, 1/32),这有助于缓解模型对特定能力的灾难性遗忘。

主要结论:

随着数据量的增加,数学推理、代码生成和通用能力的性能变化趋势如何?

  • 不同能力项有不同的Data Scaling曲线:数学推理能力,通用能力与数据量呈正相关模型的性能缩放曲线。值得注意的是通用能力只需要大约 1k数据样本便会产生性能激增(数据量从1/256 到 1/64),并在达到一定阈值提高缓慢(1/64),这契合于LIMA[5]文中所提到的“Less is more”。然而代码能力在7B,13B则呈现不规则的性能曲线,33B呈现log-linear的趋势;
  • 数据充足的情况下,更大参数量的模型往往有更强大的性能;

在SFT阶段中,将三种能力项数据直接混合是否会产生性能冲突?

  • 与单数据源相比,混合数据源设置呈现低资源性能增益,而高资源性能冲突: 三种能力的性能放缩曲线一致呈现高资源下(1/1)混合数据源设置弱于单数据源,然而随着数据量下降二者产生性能转折,最终低资源(1/256)下混合数据源产生明显性能增益;
  • 随着模型参数量的提高,数学推理与通用能力在低资源下的性能增益更加显著;

什么是产生性能冲突的关键因素?

  • 当不同的SFT能力之间存在显著的任务格式和数据分布差异时(数学和通用数据之间),数据比例的影响较小。然而,当存在一定程度的相似性时(代码和通用数据之间),数据比例可能会导致明显的性能波动;
  • 即便在通用数据资源非常有限的情况下,特定能力的数据比例的放缩也没有对通用能力造成明显影响;

不同的SFT训练策略对数据组成的影响是什么?

  • 多任务学习在尽可能保留了特有能力,但是通用能力性能下降显著;
  • 两种顺序训练保留了通用能力能力,但是由于多阶段的微调产生灾难性遗忘,使得他失去了太多的特定能力(尤其是数学);
  • 在不同的模型参数量下(7B,13B,33B),DMT (k = 1/256)策略在特定能力方面(数学,代码)均有显著改善,甚至对于通用能力也有一定程度的优化;

总结

大模型混合多种能力项数据进行微调时,会呈现高资源冲突,低资源增益的现象。我们提出的DMT策略通过在第一阶段微调特定能力数据,在第二阶段微调通用数据+少量的特定能力数据,可以在保留通用能力的同时,极大程度地挽救大模型对特定能力的灾难性遗忘,这为SFT的数据组成问题提供了一个简单易行的训练策略。值得注意的是,第二阶段微调时混合的特定能力数据量需要根据需求而定。

2.6 全参数微调技巧

a. SFT模式选择

模式一:基于base模型+领域任务的SFT;
模式二:基于base模型+领域数据 continue pre-train +领域任务SFT;
模式三:基于base模型+领域数据 continue pre-train +通用任务SFT+领域任务SFT;
模式四:基于base模型+领域数据 continue pre-train +通用任务与领域任务混合SFT;
模式五:基于base模型+领域数据 continue pre-train(混入SFT数据) +通用任务与领域任务混合SFT;
模式六:基于chat模型+领域任务SFT;
模式七:基于chat模型+领域数据 continue pre-train +领域任务SFT;

  • 在资源充足的情况下,如只考虑领域任务效果,建议选择模式二;
  • 在资源充足的情况下,如考虑模型综合能力,建议选择模式五;
  • 在资源不允许的情况下,我会考虑模式六;

3、 部分参数微调(Sparse Fine Tuning / Selective Fine Tuning/Parameter-Efficient Fine-Tuning/PEFT

部分参数微调策略仅选择性地更新模型中的某些权重,尤其是在需要保留大部分预训练知识的情况下。这包括:

  1. prefix/prompt-tuning: 在模型的输入或隐层添加k个额外可训练的前缀 tokens(这些前缀是连续的伪 tokens,不对应真实的 tokens),只训练这些前缀参数;
    2. P-tuning: P-Tuning 利用少量连续的 embedding 参数作为 prompt使 GPT 更好的应用于 NLU 任务,而 [Prefix-Tuning] 是针对 NLG 任务设计,同时,P-Tuning 只在 embedding 层增加参数,而 Prefix-Tuning 在每一层都添加可训练参数
    3. P-tuning v2:V2更接近于prefix- tuning,微调了每一层transformer的输入embedding,v2在大小模型都有效;
    4. [Adapter-Tuning]:将较小的神经网络层或模块插入预训练模型的每一层,这些新插入的神经模块称为 adapter(适配器),下游任务微调时也只训练这些适配器参数;
    5. [LoRA](Low-Rank Adaptation):通过向模型权重矩阵添加低秩矩阵来进行微调,既允许模型学习新的任务特定模式,又能够保留大部分预训练知识,从而降低过拟合风险并提高训练效率。
    6. AdaLoRA: 是对LoRA的一种改进,它根据重要性评分动态分配参数预算给权重矩阵;
    7. QLoRA:使用一种新颖的高精度技术将预训练模型量化为 4 bit,然后添加一小组可学习的低秩适配器权重,这些权重通过量化权重的反向传播梯度进行微调。

img

4. 冻结(Freeze)监督微调

在这种微调方式中,部分或全部预训练模型的权重被冻结(即保持不变不再训练),仅对模型的部分层(如最后一层或某些中间层)或新增的附加组件(如任务特定的输出层或注意力机制)进行训练。这样可以防止预训练知识被过度覆盖,同时允许模型学习针对新任务的特定决策边界。

5. 总结

5.3 选用全参数SFT还是部分参数的SFT

这个说法不一,所以要根据自己场景选用不同的方法,如果资源充足的话,建议SFT和PEFT都尝试一下,选用效果最用的方式,如果资源不足,建议选PEFT。

从理论分析上来看,SFT会修改大模型全量参数,可以在数据量充足的情况下学习更多的内容,效果上限应该更高,但也存在灾难性遗忘等不稳定情况。PEFT不管是prompt training还是LORA都是只修改少量参数,所以他的优点就是需要资源少,稳定性高,但是存在效果上限问题,有些场景下效果不好,特别是基座大模型在该领域任务上的效果本身就不好,很难通过PEFT来提升。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

### 关于 medical-o1-reasoning-SFT 的概述 medical-o1-reasoning-SFT 是一种专注于医疗领域推理能力的大型语言模型LLM),该模型通过监督微调(Supervised Fine-Tuning, SFT)来增强其在特定医学场景下的表现。这种方法不同于 DeepSeek-R1-Zero 所使用的强化学习训练方式,而是依赖大量标注良好的数据集来进行参数调整[^3]。 对于希望深入了解此主题的研究人员和技术爱好者来说,可以参考以下资源: #### 技术文档 - **Hugging Face 文档**: Hugging Face 提供了详尽的技术文档,涵盖了如何使用预训练模型并对其进行微调的过程。这些指南不仅适用于通用任务,也特别适合那些想要针对医疗应用定制化 LLM 的开发者。 #### 开源项目实例 - **Medical NLP GitHub Repository**: 访问 [simplescaling/s1](https://github.com/simplescaling/s1),这里提供了完整的模型、数据以及实现代码,可供研究者们下载和实验。虽然该项目主要关注一般性的自然语言处理问题,但是其中许多技术和实践同样适用于构建基于SFT的医疗专用LLMs[^2]。 #### 示例教程 为了帮助理解具体操作流程,下面给出一段简单的 Python 代码片段作为示范,展示怎样加载一个预先存在的 BERT 模型,并利用自定义的数据集执行监督微调过程: ```python from transformers import BertForSequenceClassification, Trainer, TrainingArguments model = BertForSequenceClassification.from_pretrained('bert-base-uncased') training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=8, ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=val_dataset, ) trainer.train() ``` 这段脚本展示了基本的工作流,包括初始化模型、设置训练参数、创建 `Trainer` 对象并将之应用于实际数据上完成整个训练周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值