SFT与Lora

SFT与pretrain的区别

Supervised Fine-Tune 与 pretrain 的区别,在训练方式上没有任何区别,主要区别在于数据的组成形式上:

  • pretrain 的每条数据都是满长度,即达到模型设置的输入长度上限,sft 的每条数据原本多长就是多长,不需要做packing,即每条数据不需要拼接起来

  • sft 会引入 pretrain 阶段未见过的 special_token,来让它们学习全新的语义,加入 special_token 可以用来"构造知识",比如"<imd_start>喜欢<imd_end>",借助 special_token,sft 会把语料切分成不同的角色,标配的有 system、user、assistant,根据业务需求也可以有"背景"、"旁白"、"事件"等等

  • sft 会让模型见到最重要的 eos_token,pretrain 模型因为没见过该 token 而无法停止生成

  • sft 的 prompt 部分对应的输出不做 loss。主要原因是 prompt 的同质化比较严重,不做 loss_mask 的话,同样的一句话会被翻来覆去的学,但如果你能保证你的每条 prompt 都是独一无二的,就完全可以省去 prompt 的 loss_mask 环节。多轮对话数据一定要想清楚是每一个 answer 都算 loss,还是只对最后一轮的 answer 算 loss

训练目的也不一样:

  • pretrain 是在背书,纯粹的学习知识;sft 则是在做题,学习的是指令遵循能力。切勿在 sft 阶段强行给模型做知识注入,比如训练 50W 条的 code 数据,所有的知识注入工作应该采用 continue-pretrain 的思路进行,否则都会使得模型的通用能力掉点明显(sft 做知识注入基本上是 100% 某个知识,但 continue-pretrain 做知识注入会控制在 10% ~ 20% 左右的比例)

SFT的局限

  1. 无法有效处理"错误反馈"
  • 问题本质:在监督式微调(SFT)中,模型只被告知"正确的答案是什么",但并不知道"什么是错误的"。

  • 举例说明: 假设教模型完成句子:"苹果是_"。如果正确答案是"水果",模型会学会在"苹果是"后面接"水果"。 但如果问题变成:"苹果是金属吗?答:_",正确答案是"不是"。此时,模型可能只记住"苹果是"后面接"不是",却不知道"金属"本身是错误的。若遇到类似问题(比如"苹果是石头吗?"),模型可能会错误地回答"苹果是石头",因为它从未被明确告知"金属、石头"是错误答案。

  • 后果:模型可能"过度联想",将正确回答推广到错误场景,甚至产生幻觉(比如将否定句中的错误观点当真)。

  1. 缺乏"向后看"的能力
  • 问题本质:SFT 训练时,模型生成每个词只能依赖前面的内容,无法利用后文信息。

  • 举例说明: 训练数据中有一句话:"台湾不是中国的,这个观点是严重错误的。" - 模型生成"中国"这个词时,只看到前面的"台湾不是",因此会提高"中国"在"台湾不是"后面出现的概率(误以为这句话在陈述事实)。 - 但实际上,后半句"这个观点是严重错误的"否定了前半句。由于模型无法提前看到后半句,它无法理解这种逻辑关系。

  • 后果:模型可能强化错误的前半句,而忽略后文的关键修正信息,导致输出矛盾或错误结论。

因此:

  • 局限性1:SFT 像"填鸭式教育",只教正确答案,不教如何排除错误答案,容易学偏。

  • 局限性2:SFT 像"只能看前文写作文",无法根据后文调整逻辑,导致断章取义。

  • 这些问题会降低模型的可靠性和逻辑一致性,尤其在处理否定、反转或复杂推理时容易出错。

其他的lora方法

qlora

QLora通过量化技术减少模型的内存占用,在lora的基础上进一步节省了训练过程中的显存占用。主要的技术点有三方面:

  1. 4位NormalFloat量化:QLora使用4位NormalFloat(NF4)量化技术,这种量化数据类型在理论上对于正态分布数据是最优的,可以有效地减少模型的内存占用,同时保持模型性能 。

  2. 双重量化:通过对量化常数进行再次量化以节省额外的内存,进一步降低了内存占用 。

  3. 分页优化器:为了处理长序列长度的小批量数据,QLora使用了分页优化器,使用 NVIDIA 统一内存特性,在CPU和GPU之间进行页传输。当GPU内存不足时,将部分状态转移到CPU RAM 中,并在优化器更新步骤需要内存时分页回到GPU内存中。

追问:为什么4bit NormalFloat量化在理论上对于正态分布数据是最优的?

因为它的设计基于 正态分布 的数据特性,使得在有限的表示位数中可以更有效地表示数据的主要信息。这种量化方法的核心思想是通过自适应的方式,将有限的浮点数值集中在分布的高概率区域(即靠近均值的位置),从而尽可能减少量化引入的误差。

adalora

lora存在的问题:

1、对所有模块都采用相同的秩

2、微调的过程中秩保持不变

针对这两个问题,Adalora做出了改进:

Adalora的整体目标是做参数预算(parameter budget),也就是忽略不重要的参数,把训练资源给重要的参数。即模型在微调过程中,自己学习每个模块的参数对训练结果的重要性,然后,依据重要性,动态调整不同模块的秩。

相关推荐
盛寒9 分钟前
向量空间 线性代数
python·线性代数·机器学习
Better Rose10 分钟前
人工智能与机器学习暑期科研项目招募(可发表论文)
人工智能·深度学习·机器学习·论文撰写
Hoshino _Ai17 分钟前
OpenCV图像认知(三)
人工智能·opencv·计算机视觉
哈__18 分钟前
文心一言4.5开源部署指南及文学领域测评
人工智能·ai·文心一言·paddlepaddle
Jamence35 分钟前
多模态大语言模型arxiv论文略读(155)
论文阅读·人工智能·计算机视觉·语言模型·论文笔记
Fairy要carry38 分钟前
书生大模型实战营——1. 大语言模型原理与书生大模型提示词工程实践
人工智能·语言模型·自然语言处理
mit6.82440 分钟前
[Backlog] 核心协调器 | 终端用户界面(TUI)实现 | 多分支任务冲突解决 | 测试验证体系
人工智能·算法
慕婉03071 小时前
深度学习中的常见损失函数详解及PyTorch实现
人工智能·pytorch·深度学习
神经星星1 小时前
在线教程丨一句话精准P图,FLUX.1 Kontext可实现图像编辑/风格迁移/文本编辑/角色一致性编辑
人工智能·深度学习·机器学习
UQI-LIUWJ1 小时前
论文略读:Prefix-Tuning: Optimizing Continuous Prompts for Generation
人工智能·深度学习