大模型(LLMs)微调面试指南
整理自:AiGC面试宝典 更新时间:2024年8月
目录
1. 如果想要在某个模型基础上做全参数微调,究竟需要多少显存?
一般 nB 的模型,最低需要 16-20nG 的显存(CPU offload 基本不开的情况下)。
以 vicuna-7B 为例,官方样例配置为 4×A100 40G,测试确实能占满显存。(global batch size 128,max length 2048)
当然训练时会用到以下技术降低显存:
- FSDP(分布式训练)
- 梯度累积
- 梯度检查点(Gradient Checkpointing)
📝 通俗解释:就像你要同时打开很多软件需要足够内存一样,训练大模型也需要足够显存。7B参数的模型大约需要140GB左右显存,相当于3-4张高端显卡的显存总和。通过一些优化技术可以降低显存需求,但硬件成本仍然很高。
2. 为什么SFT之后感觉LLM傻了?
原版答案: SFT的重点在于激发大模型的能力,SFT的数据量一般也就是万恶之源alpaca数据集的52k量级,相比于预训练的数据还是太少了。如果抱着灌注领域知识而不是激发能力的想法,去做SFT的话,可能确实容易把LLM弄傻。
新版答案: 指令微调是为了增强(或解锁)大语言模型的能力。
其真正作用:
指令微调后,大语言模型展现出泛化到未见过任务的卓越能力,即使在多语言场景下也能有不错表现。
📝 通俗解释:这就像让一个大学生去学小学数学题,虽然他会做,但可能觉得太简单而不好好做。SFT数据太少时,模型可能"敷衍了事",反而表现变差。正确的做法是用SFT激发模型已有的能力,而不是灌输新知识。
3. SFT 指令微调数据如何构建?
构建SFT数据需要关注三个核心要点:
- 代表性:应该选择多个有代表性的任务
- 数据量:每个任务实例数量不应太多(比如:数百个),否则可能会潜在地导致过拟合问题并影响模型性能
- 不同任务数据量占比:应该平衡不同任务的比例,并且限制整个数据集的容量(通常几千或几万),防止较大的数据集压倒整个分布
📝 通俗解释:就像做饭一样,食材要有代表性(各种蔬菜、肉类都要有),每种食材不能太多(否则会浪费),而且要保持平衡(不能全是肉或全是菜)。
3.1 提升SFT的prompt的代表性有什么好的方法?
方法一:明文TAG法(InsTag) 对SFT的prompt进行打tag,对其中的名词和动词进行分类打标,最后通过tag对prompt的分布进行调整,保证tag的分布是均匀的。
方法二:模型embedding聚类方法 通过模型最后一层的embedding对prompt进行表示,通过prompt embedding的距离表示prompt的相似度,对于过于相似的prompt进行删除。
方法三:复杂度提升法(Wizard方法) 从complexity角度,对prompt直接进行难度的升级,所以即使在同一个语意空间的prompt也会变得diverse。通过GPT4进行prompt难度升级,然后构成complexity丰富的prompt。
📝 通俗解释:
- 方法一:像给文章打标签(体育、科技、娱乐),然后确保每类标签数量差不多
- 方法二:像把相似的照片分组,把太相似的删掉,保持多样性
- 方法三:像把简单的问题改成更难的版本,让模型学到更多
3.2 提升SFT的prompt的数据量有什么好的方法?
IFD方法:利用以下公式进行数据选择: $$r_{\theta}(Q, A) = P_{\theta}(A|Q)/P_{\theta}(A)$$
这个公式是计算pretrain model生成对齐后模型的answer的难度(在prompt的condition下生成A的概率)。这个概率越低,越说明生成难度高,那么SFT模型学习到的对齐规律越多,那么我们更应该选择这个SFT数据。
Hybrid Method(混合方法) 从complexity(复杂度)、diversity(多样性)和quality(质量)三个方向对SFT数据建模。
📝 通俗解释:IFD方法就像考试出题,越难的题目越能考验学生的能力,也越值得放进训练集。混合方法则是从多个角度评估数据质量,综合筛选最好的数据。
4. 领域模型Continue PreTrain数据选取?
技术标准文档或领域相关数据是领域模型Continue PreTrain的关键。
因为领域相关的网站和资讯重要性或者知识密度不如书籍和技术标准。
📝 通俗解释:就像学习专业知识,看权威教材和行业标准比看新闻网站更有效。书籍和标准文档知识更密集、更系统。
5. 领域数据训练后,通用能力往往会有所下降,如何缓解模型遗忘通用能力?
动机:仅仅使用领域数据集进行模型训练,模型很容易出现灾难性遗忘现象。
解决方法:通常在领域训练的过程中加入通用数据集。
比例问题:目前还没有一个准确的答案。主要与领域数据量有关系,当数据量没有那么多时,一般领域数据与通用数据的比例在 1:5到1:10之间 是比较合适的。
📝 通俗解释:就像让学生只学数学,他的语文英语可能会退化。需要在学专业的同时也复习通识课程,保持综合能力。一般专业:通用=1:5到1:10是比较合适的配比。
6. 领域模型Continue PreTrain,如何让模型在预训练过程中就学习到更多的知识?
领域模型Continue PreTrain时可以同步加入SFT数据,即MIP(Multi-Task Instruction PreTraining)。
预训练过程中,可以加下游SFT的数据,可以让模型在预训练过程中就学习到更多的知识。
📝 通俗解释:就像在大学专业课学习期间,同时也做一些习题和项目实践,让学生更早接触实际应用,学的更扎实。
7. 进行SFT操作的时候,基座模型选用Chat还是Base?
资源有限 → 用Chat模型基础上训练
资源充足 → 在Base模型上训练
(资源 = 数据 + 显卡)
具体建议:
- 数据量 < 10k → 选用Chat模型作为基座
- 数据量 ≈ 100k → 在Base模型上微调
📝 通俗解释:Chat模型就像一个已经培训过的员工,Base模型像一张白纸。资源少时用Chat模型可以更快上手,资源充足时用Base模型可以更好地按自己需求培养。
8. 领域模型微调指令&数据输入格式要求?
在Chat模型上进行SFT时,请一定遵循Chat模型原有的系统指令&数据输入格式。
建议:不采用全量参数训练,否则模型原始能力会遗忘较多。
📝 通俗解释:就像让一个已经懂礼貌的员工学新东西,要用他习惯的说话方式沟通,否则他可能不会好好回应。
9. 领域模型微调领域评测集构建?
领域评测集是必要内容,建议有两份:
- 选择题形式 → 自动评测,方便模型进行初筛
- 开放形式 → 人工评测,比较浪费时间,但用作精筛更贴近真实场景
📝 通俗解释:像考试一样,先用选择题快速筛选(机器批改),再用问答题精细评估(人工批改),两者结合全面评估模型能力。
10. 领域模型词表扩增是不是有必要的?
领域词表扩增真实解决的问题是解码效率的问题,给模型效果带来的提升可能不会有很大。
📝 通俗解释:就像扩充中文字典,对阅读理解帮助不大,但能提高查词速度。对于模型来说,词表扩增主要提高生成效率,对效果提升有限。
11. 如何训练自己的大模型?
两步走策略:
- 基于中文文本数据在LLaMA-65B上二次预训练
- 加CoT和instruction数据,用FT + LoRA SFT
详细方法:
- 第一阶段:扩充领域词表(比如金融领域词表),在海量领域文档数据上二次预训练LLaMA模型
- 第二阶段:构造指令微调数据集,在第一阶段的预训练模型基础上做指令精调
低成本方案:使用LoRA训练
- 不用LoRA:7B模型需要8卡A100
- 用LoRA:单卡3090就可以
📝 通俗解释:训练大模型就像培养一个专业人才,先让他广泛学习(预训练),再专门培训(微调)。LoRA就像给普通电脑升级了高效显卡,让普通人也能训练大模型。
12. 训练中文大模型有啥经验?
根据报告《Towards Better Instruction Following Language Models for Chinese》的消融实验结论:
| 因素 | 结论 |
|---|---|
| 词表扩充 | 扩充中文词表后,可以增强模型对中文的理解能力 |
| 数据质量 | 数据质量越高越好 |
| 数据语言分布 | 加了中文的效果比不加的好 |
| 数据规模 | 数据规模越大且质量越高,效果越好 |
📝 通俗解释:训练中文大模型的关键是:要有中文词表(认得汉字)、数据质量要高(教材要好)、要有足够的中文数据(多看中文书)、数据量要大(看得越多越好)。
13. 指令微调的好处?
- 对齐人类意图:能够理解自然语言对话(更有人情味)
- 提升准确性:定制版GPT-3在不同应用中的提升非常明显,准确率能从83%提升到95%,错误率降低50%
- 高效便捷:踩在巨人肩膀上,直接在1750亿参数的大模型上微调,不用重头训练
📝 通俗解释:指令微调就像给一个天才少年请了个好老师,教会他更好地理解人的意图,回答问题更准确,反应更像人。
14. 预训练和微调哪个阶段注入知识的?
两个阶段都有知识注入:
- 预训练阶段:注入通用的知识(通过大量无监督数据学习通用的语言知识和模式)
- 微调阶段:注入特定领域的知识(在特定任务相关的监督数据上学习)
📝 通俗解释:预训练像基础教育(语文数学都学),微调像专业培训(学医、学法律)。两个阶段都重要,各有分工。
15. 想让模型学习某个领域或行业的知识,是应该预训练还是应该微调?
可以使用预训练和微调相结合的方式:
- 先用篇章数据进行预训练以获取广泛的知识
- 再用问答对数据进行微调,使模型更好地学习到特定领域的知识
注意:如果样本集小,没有大量的篇章文档数据,只进行微调也能注入知识,不必太纠结预训练。
📝 通俗解释:就像学医,先看大量医学书籍(预训练),再跟着医生实习(微调)。如果没条件看书,直接实习也能学到一些。
16. 多轮对话任务如何微调模型?
ChatGLM-6B的做法:简单地把上一轮对话扔进下一轮的input里。
缺点:随着轮数增加,history存储的对话会越来越多,导致max_length增加,出现显存爆炸问题。
解决方法:
- 对历史对话做文本摘要,取其精华去其糟粕
- 将历史对话做成embedding
- 如果是任务型对话,可以将用户意图和槽位作为上一轮信息传递给下一轮
📝 通俗解释:就像和人聊天,如果把每句话都记住,越往后记得越多,大脑会炸。所以要学会"记重点,忘细节",或者用笔记下来(embedding)。
17. 微调后的模型出现能力劣化,灾难性遗忘是怎么回事?
灾难性遗忘:学习了新知识之后,几乎彻底遗忘掉之前习得的内容。
原因分析:
- 微调训练参数调整导致的
- 微调初始学习率不要设置太高,lr=2e-5或者更小
- 不要大于预训练时的学习率
📝 通俗解释:就像让学生只学新知识,忘了旧知识。解决方法就是慢慢学(低学习率),不要一下改变太多。
18. 微调模型需要多大显存?
| 训练方法 | 精度 | 7B | 13B | 30B | 65B | 8×7B |
|---|---|---|---|---|---|---|
| 全参数 | 16 | 160GB | 320GB | 600GB | 1200GB | 900GB |
| 部分参数 | 16 | 20GB | 40GB | 120GB | 240GB | 200GB |
| LoRA | 16 | 16GB | 32GB | 80GB | 160GB | 120GB |
| QLoRA | 8 | 10GB | 16GB | 40GB | 80GB | 80GB |
| QLoRA | 4 | 6GB | 12GB | 24GB | 48GB | 32GB |
📝 通俗解释:这个表格就是不同训练方法的"配置要求"。全参数训练就像换整台车,LoRA就像只换发动机,便宜很多但效果也不错。QLoRA是更省资源的版本。
19. 大模型LLM进行SFT操作的时候在学习什么?
- 预训练 → 在大量无监督数据上进行预训练,得到基础模型 → 将预训练模型作为SFT和RLHF的起点
- SFT → 在有监督的数据集上进行SFT训练,利用上下文信息等监督信号进一步优化模型 → 将SFT训练后的模型作为RLHF的起点
- RLHF → 利用人类反馈进行强化学习,优化模型以更好地适应人类意图和偏好
📝 通俗解释:训练流程就像培养一个学生:先让他大量读书(预训练),再教他考试技巧(SFT),最后让他根据老师反馈改进(RLHF)。
20. 预训练和SFT操作有什么不同?
预训练:把一句话连接起来,用前面的词预测后面出现的词。问句中的损失也会被计算进去。
SFT:构建如下训练语料:
输入:描述计算机主板的功能[BOS] 计算机主板是计算机中的主要电路板。它是系统的支撑。[EOS]
标签:[......][BOS] 计算机主板是计算机中的主要电路板。它是系统的支撑。[EOS]计算损失时,只计算答句的损失,问句损失忽略。
📝 通俗解释:预训练是"模仿学习",看多了就会说。SFT是"指导学习",专门教模型怎么回答问题,而且只让它记住答案部分。
21. 样本量规模增大,训练出现OOM错误
问题描述:模型训练的样本数量从10万增大到300万,训练任务直接报OOM了。
解决方案:对数据并行处理
- 均分完整数据集到所有进程(总的GPU卡数)
- 每个epoch训练时整体数据分片shuffle一次,在每个进程同一时间只加载单个分段大小数据集
- 重新训练时可以直接加载向量化后的数据
📝 通俗解释:就像一个人吃300万碗饭会撑死,但分成很多人每人吃一点就没事了。数据并行就是把数据分给多个GPU一起处理。
22. 大模型LLM进行SFT如何对样本进行优化?
- 对输入历史对话数据进行左截断,保留最新的对话记录
- 去掉样本中明显的语气词,如"嗯嗯"、"啊啊"之类的
- 去掉样本中不合适的内容,如AI直卖就不应出现转人工的对话内容
- 样本中扩充用户特征标签,如年龄、性别、地域、人群等
📝 通俗解释:清理训练数据就像洗菜,把不好的部分去掉,留下干净有用的部分,这样模型学的更好。
23. 模型参数迭代实验
验证历史对话轮次是否越长越好,通过训练两个模型,控制变量max_source_length | max_target_length,对训练好之后的模型从Loss、Bleu指标、离线人工评估等角度进行对比分析。
结论:从人工评估少量样本以及loss下降来看,历史对话长度1024比512长度好。
📝 通俗解释:就像测试学生看多长的历史记录能更好地回答问题,实验证明看长一点(1024)比看短一点(512)效果更好。
24. 微调大模型的一些建议
模型结构:
- 模型结构+训练目标:Causal Decoder + LM(有很好的zero-shot和few-shot能力)
- layer normalization:使用Pre RMS Norm
- 激活函数:使用GeGLU或SwiGLU
- embedding层后不添加layer normalization
- 位置编码:使用ROPE或ALiBi
- 去除偏置项:去除dense层和layer norm的偏置项
训练配置:
- batch:选用很大的batch size
- 学习率调度:先warmup再衰减,最大值一般在5e-5到1e-4之间
- 梯度裁剪:通常将梯度裁剪为1.0
- 权重衰减:采用AdamW优化器,权重衰减系数设置为0.1
- 混合精度训练:采用bfloat16
📝 通俗解释:这些都是训练大模型的"最佳实践",就像做饭的火候、调料一样,按这个来一般不会出错。
25. 微调大模型时,如果batch size设置太小会出现什么问题?
当batch size较小时,更新方向(对真实梯度的近似)会具有很高的方差,导致的梯度更新主要是噪声。
经过一些更新后,方差会相互抵消,总体上推动模型朝着正确的方向前进,但个别更新可能不太有用。
📝 通俗解释:就像只看了1道题就去考试,偶然性太大。多看几道题(batch大一点)总结出的规律更准确。
26. 微调大模型时,如果batch size设置太大会出现什么问题?
当batch size非常大时,从训练数据中抽样的任何两组数据会非常相似(因为它们几乎完全匹配真实梯度)。
问题:
- 增加batch size几乎不会改善性能
- 需要在每一步中处理更多的数据,但并不能减少整个训练过程中的步数
- 增加了总体的FLOPS(计算量)
经验:当batch size达到临界值时,模型的性能会随着batch size的增加而降低。
📝 通俗解释:就像让一个人一次性做一万道题,虽然一下做了很多,但可能只是机械重复,效果不一定好,还特别累。
27. 微调大模型时,batch size如何设置问题?
存在一个关于数据并行程度的临界点,通过找到这个临界点,可以有效地平衡训练的效率和模型的最终效果。
OpenAI发现最优步长公式: $$\epsilon_{opt}(B) = \frac{\epsilon_{max}}{1 + B_{noise}/B}$$
其中B为batch size,B_noise为噪声尺度。
📝 通俗解释:batch size太小学不好,太大又浪费资源。需要找到"刚刚好"的点,就像吃饭七八分饱最健康。
28. 微调大模型时,优化器如何?
除了Adam和AdamW,Sophia优化器也值得研究,它使用梯度曲率而非方差进行归一化,可能提高训练效率和模型性能。
📝 通俗解释:优化器就像学习方法的升级版。Adam是经典方法,Sophia是新版方法,可能更快更好,但还在研究中。
29. 哪些因素会影响内存使用?
内存使用受到以下因素影响:
- 模型大小
- 批量大小
- LoRA参数数量
- 数据集特性(如训练序列长度)
技巧:使用较短的训练序列可以节省内存。
📝 通俗解释:内存占用就像房间大小,模型大、batch大、序列长都需要更大的房间。想办法精简就能省空间。
30. 进行领域大模型预训练应用哪些数据集比较好?
通过分析发现现有的开源大模型进行预训练的过程中会加入:
- 书籍
- 论文
- 领域相关网站内容
- 新闻内容
主要是因为这些数据的数据质量较高,领域相关性比较强,知识覆盖率(密度)较大。
📝 通俗解释:训练领域模型就像准备考试资料,权威教材(书籍、论文)比普通网页(新闻、网站)更有用,知识更密集。
31. 用于大模型微调的数据集如何构建?
- 选取的训练数据要干净、并具有代表性
- 构建的prompt尽量多样化,提高模型的鲁棒性
- 进行多任务同时进行训练的时候,要尽量使各个任务的数据量平衡
📝 通俗解释:数据质量比数量更重要。就像教材要好、题目要多样、各科要平衡,这样学生才能全面发展。
32. 大模型训练loss突刺原因和解决办法
32.1 大模型训练loss突刺是什么?
loss spike指的是预训练过程中,尤其容易在大模型(100B以上)预训练过程中出现的loss突然暴涨的情况。
32.2 为什么大模型训练会出现loss突刺?
大模型训练使用的Adam优化器会导致loss突刺。
核心原因:
- 模型浅层(embedding层)梯度长时间小于ε
- 浅层参数长时间不更新
- 突然出现较大梯度变化,导致连锁反应
- 模型进入非稳态,出现loss spike
32.3 大模型训练loss突刺如何解决?
- 更换batch样本:找到loss spike之前最近的checkpoint,更换之后的训练样本
- 减小learning rate:治标不治本
- 减小ε大小:或者把ε设为0
- Embedding Layer Gradient Shrink (EGS):把浅层梯度乘以缩放系数(智谱华章在GLM130B中使用,α=0.1)
📝 通俗解释:loss spike就像跑步时突然摔了一跤。可能是因为太累了(浅层参数不动了),突然绊到了(遇到特殊样本)。解决方法就是慢点跑(降低学习率),或者摔倒了换个姿势重新跑(换样本)。
33. 什么是Cosine优化器?在大模型中应该怎么设置cosine优化器的周期比较好?
Cosine优化器是在lr_min到lr_max之间按π × epoch / T_max周期变化的优化器。
在大模型中,一般把T_max设置为最长epoch可以取得最大收益。
📝 通俗解释:学习率就像车速。Cosine优化器让车速周期性变化:先加速(warmup),然后周期性减速再加速(余弦周期),这样既能快速学习又能稳定下来。
34. 在预训练阶段,若模型训练文本时不包含标记,而在后续预测阶段却添加了标记;或者相反,这两种情况下benchmark预测可能会遇到哪些问题呢?
情况一:训练时不使用标记,预测阶段加入
- 模型可能并未学习到如何利用标记整合整个句子信息
- 可能导致模型对整体句义理解不足
情况二:训练时使用标记,预测时忽略
- 模型将无法有效提取和利用预训练阶段所学到的全局上下文信息
- 可能降低预测效果
📝 通俗解释:就像考试时突然改变了答题格式,平时训练用标记,考试不用标记,或者反过来,都会影响发挥。
35. SFT packing是什么?
SFT packing指的是在训练SFT的过程中,将多个SFT数据pack到一个样本内进行训练的方式。
优点:这种方式会加快模型训练速度,因为如果不进行SFT packing,那么对于短文本SFT,需要padding到一个batch的最长长度,会浪费很多计算token。
实现方式:一般业务中会直接将其相连接,然后进行预测。
📝 通俗解释:就像把多个短文章拼成一个长文章来训练,比每篇单独训练要快。虽然会有一点噪音,但整体效果差不多。
36. SFT packing对SFT训练的影响是什么?
负面影响:SFT packing以后其实是削弱了模型对难的短query和短答案的拟合。
在无SFT packing的情况下,假设batch_size=1,那么如果有个短query和短答案在这个batch里,其余补充padding,那么这个batch的gradient全是这个短文本的gradient,模型对这个query的拟合能力会变强。
但是如果SFT packing以后,多个短文本在一个样本中,这个batch的gradient会被稀释,短文本的拟合就不会特别强。
结论:
- 数据量小或特定困难数据上,SFT packing有损泛化效果
- 大批量数据上,SFT packing无损泛化效果
📝 通俗解释:就像一个老师同时教很多学生,每个学生分到的精力就少了。短文本就像需要特别关注的学生,packing后容易被忽略。
37. SFT阶段模型可以学习新知识么?
虽然理论上可以,但很少,且不推荐SFT阶段去学习知识。
Superficial Alignment Hypothesis(浅层对齐假设):
A model's knowledge and capabilities are learnt almost entirely during pretraining, while alignment teaches it which subdistribution of formats should be used when interacting with users.
原因:
- SFT相对于pretrain过的数据量实在太小,模型的知识学习的概率就很低
- 如果加大SFT的数据量和pretrain数据相当,重复的context会影响模型原始的attention模式
建议:如果希望SFT学习新知识,不如把这部分新知识组织好放入pre-train或post-train阶段更为合适。
📝 通俗解释:SFT更像是教模型"怎么说话",而不是教它"新知识"。新知识应该在预训练阶段学,SFT阶段主要是调教表达方式。
38. 建立SFT数据主要需要关注什么方面?
Prompt的diversity:丰富多样的prompt数据,可以让模型更多地了解人类的指令。Prompt的丰富程度决定了模型指令遵循的能力。
Answer的质量:Answer的质量包括内容和格式两方面:
- 内容正确性需要得到保证
- 细节丰富、逻辑缜密的answer可以激发模型更多的回答能力
注意:SFT阶段不能太多的知识注入,过多的知识注入会导致"对齐税",影响模型学习指令遵循的能力。
📝 通俗解释:好的SFT数据就像好的老师:会提各种问题(prompt多样性),回答问题又准确又详细(answer质量高)。但别指望通过SFT教太多新知识。
39. 大模型SFT过程中,为什么会出现第二个epoch的时候loss会突然下降问题?
现象:train loss每一个epoch结束后都出现了阶梯式突然下降,但是eval loss没有这种问题,相反却出现了上升问题。
问题原因:由于大模型参数量较为庞大,所以在SFT过程中,第一个epoch后就基本能学习到整个训练集信息,所以第二个epoch容易出现下降问题。
本质:这是过拟合问题。
解决方法:
- 采用全参数微调方式,同时调低学习率和epoch数
- 换成LoRA微调方式(注:最好只对qkv进行lora,过多的层进行LoRA容易出现过拟合问题)
📝 通俗解释:就像学生把课本背下来了,做题越来越快(train loss下降),但考试却不会了(eval loss上升)。这是"死记硬背"了。解决方法就是别让模型学太久,或者用LoRA限制一下。
40. 解决显存不够的方法?
- 模型剪枝:移除不重要的参数或层以减少模型大小
- 混合精度训练:使用FP16而不是FP32进行训练,减少内存使用
- 梯度累积:分批处理较大的批量,累积梯度后再更新
- 模型并行和数据并行:在多个设备上分布模型的不同部分或数据
📝 通俗解释:内存不够就像钱包不够买所有东西。可以:只买必需的(剪枝)、用优惠券(混合精度)、分期付款(梯度累积)、找人合伙买(并行)。
41. 指令策略的选择及其影响
在指令微调中,选择最佳的指令策略意味着找到最有效地向模型传递任务需求和上下文信息的方式。
指令策略包括:指令的编写风格、结构和内容的丰富度等。
影响:优质的指令可以显著提高模型的理解能力和任务性能,而不恰当的指令可能会导致模型混淆或性能下降。
建议:多实验和多迭代才能找到最优的指令策略。
📝 通俗解释:就像问问题的方式很重要。问"今天天气怎么样?"比问"今天那个东西怎么样?"更容易得到准确回答。
42. 如何解决prompt泛化性?
提高prompt泛化性,让预训练的语言模型在面对各种不同的prompt时都能产生准确和有用的输出。
策略:
- 设计更加通用的Prompt模板:使语言模型去回答类似完形填空的问题,适用于多个任务和数据集
- 引入多样性的Prompt:通过在训练数据中引入不同的Prompt变体,让模型学习更多的语言模式和任务特征
- 多任务学习:在一个模型中同时学习多个相关任务,提高模型对不同任务的泛化能力
- 数据增强:对Prompt数据进行变换和扩充,如添加噪声、替换词语、改变句子结构等
📝 通俗解释:让模型"举一反三"。通过多样化的训练,让它学会理解各种问法,而不是只认识某一种特定的问法。
43. 大模型SFT最重要的是什么,分次SFT会发生什么?
SFT最重要的方面:
- 高质量的训练数据:拥有高质量、代表性强的训练数据至关重要
- 任务相关的微调:微调应该针对特定任务进行
- 避免过拟合:采用正则化技术、数据增强或使用早停策略
- 资源和计算效率:优化微调过程以提高资源利用效率
- 模型的泛化能力:保持良好的泛化能力
分次SFT的影响:
- 逐步改进:分次微调允许模型逐步学习,每一步都在前一步的基础上进行改进
- 灵活性和控制:提供更多的灵活性,允许根据中间结果调整策略
- 风险降低:与一次性微调整个模型相比,分次微调可以降低失败的风险
- 资源管理:可以根据可用资源进行计划和调度
- 细粒度的优化:允许对模型的不同部分进行细粒度的优化
📝 通俗解释:SFT最重要的是用好数据、避免过拟合、别浪费资源。分次SFT就像分阶段学习,先学基础再学进阶,更稳但更慢。
44. 大模型supervised fine-tuning(SFT)的方法主要分为哪些?
- 全参数微调:使用特定任务的标注数据集对预训练模型的所有参数进行微调
- 迁移学习:固定预训练模型的一部分参数,只对模型的最后几层进行微调
- 层次微调:只更新模型的一部分参数,可以选择性地微调模型的某些层
- 多任务学习:模型会在多个相关任务上同时进行训练
- 知识蒸馏:大型教师模型的知识被转移到小型学生模型中
- 强化学习微调(RLHF):结合了强化学习和人类反馈
📝 通俗解释:SFT方法就像不同的培训方式:全参数培训(全部重学)、迁移学习(只学最后几章)、多任务学习(同时学多门课)、知识蒸馏(老师教学生)。各有优缺点,看情况选择。
附录:常见术语表
| 术语 | 含义 |
|---|---|
| SFT | 监督微调(Supervised Fine-Tuning) |
| LoRA | 低秩适配器,一种高效的微调方法 |
| RLHF | 基于人类反馈的强化学习 |
| PreTrain | 预训练 |
| Continue PreTrain | 持续预训练 |
| Batch Size | 批量大小 |
| Learning Rate | 学习率 |
| Loss | 损失/代价 |
| OOM | 内存溢出 |
| Embedding | 嵌入向量 |
| Attention | 注意力机制 |
| Gradient | 梯度 |
| Epoch | 轮次 |
整理完成