为什么微调后会有灾难性遗忘?

想不起来了!!!!

现在只是新增了一类指令数据,相对大模型而已,微调数据量少和微调任务类型单一,不会对其原有的能力造成大的影响,所以我认为是不会导致灾难性遗忘问题,应该是微调训练参数调整导致的,微调初始学习率不要设置太高,lr=2e-5或者更小,可以避免此问题。

好的,我们来分析和评价这个回答。

对原回答的评价

该回答部分正确,但核心观点存在根本性误解,并且提供了一个不全面的解决方案。

  1. 正确部分

    • 对“灾难性遗忘”的定义是准确的。
    • 建议“降低学习率”是一个非常重要且有效的实践方法,这是正确的。使用较小的学习率(如2e-5)可以使参数更新更加精细,避免新任务的数据对原有模型权重造成过于剧烈和破坏性的覆盖。
  2. 错误和片面的部分

    • 核心误解: 回答者认为“微调数据量少和微调任务类型单一,不会对其原有的能力造成大的影响…所以我认为是不会导致灾难性遗忘问题”。这个观点是完全错误的,它误解了灾难性遗忘的根本原因。
    • 灾难性遗忘的本质:遗忘的发生不是因为新数据“量太大”或“太复杂”,而是因为训练目标的转变。在微调过程中,模型的所有参数都会被更新,以最小化新任务(如CSC)上的损失。模型会非常“功利”地调整其参数来适应新任务,这个过程会不可避免地覆盖和破坏之前为完成其他任务(如知识问答、逻辑推理等)而学到的特征表示。即使新数据量很小,优化过程也会坚定地将参数推向对新任务更优、但可能对旧任务更差的位置。
    • “预训练-SFT-RLHF”模型的特性:你微调的起点是一个已经过大量指令微调的模型(ChatGLM-6B)。这个模型本身就是一个“多任务”模型,其参数是成千上万种任务的一个“平衡点”。当你用单一任务(CSC)的数据去微调它时,你正是在打破这种平衡,强行将参数偏向于拼写纠错这一个任务,从而导致其他任务能力的退化。这恰恰是灾难性遗忘的典型表现。
    • 个人经验不具普适性:“我自己微调模型也没出现此问题”不能作为论据。是否出现遗忘严重取决于微调任务与模型原有任务分布之间的差异、数据量、学习率、训练轮数等多种因素。

正确的答案

灾难性遗忘(Catastrophic Forgetting)是机器学习,特别是持续学习(Continual Learning)中的一个经典问题。它在大型语言模型(LLM)的微调中同样非常常见。

1. 根本原因:
灾难性遗忘的本质是参数共享与任务冲突。神经网络使用同一套参数来存储所有学到的知识。当模型使用新任务的数据进行微调时,通过反向传播算法更新参数,其唯一目标是降低新任务上的损失。这个优化过程会无情地改变参数,而这些被改变的参数可能对旧任务至关重要,从而导致模型性能在旧任务上急剧下降。

2. 为什么在LLM微调中会发生?

  • 任务特定性微调:如你所说,在仅使用“拼写纠错(CSC)”数据微调一个多任务模型(如ChatGLM-6B)时,模型会过度适应CSC任务的模式(例如,更关注字符级别的细节和语法),而削弱了其进行开放域知识问答所需的高层语义理解和知识检索能力。
  • 参数更新:全参数微调(Full Fine-tuning)会更新模型的所有层(包括可能存储了大量通用知识的底层参数),这极大地加剧了遗忘的风险。

3. 如何避免和缓解灾难性遗忘?
降低学习率只是一个基础手段,更全面和有效的方法包括:

  • 更低的学习率(Learning Rate):正如原回答所说,使用较小的学习率(例如 1e-5 到 5e-5)是非常重要的。这相当于给模型一个“慢速学习”的指令,让参数更新更加谨慎,减少对原有知识结构的破坏。
  • 更少的训练轮数(Epochs):避免过拟合新任务。通常微调1-3个epoch就足够了。
  • 使用参数高效微调方法(PEFT):这是目前最主要和推荐的解决方案。PEFT方法(如 LoRA, Adapter, Prefix-Tuning)冻结预训练模型的原有权重,只引入一小部分额外的可训练参数(适配器)来学习新任务。
    • 优点:最大程度地保留了原始模型的能力,几乎从根本上避免了灾难性遗忘。同时大大降低了计算和存储成本。
  • 多任务混合训练:在微调数据中,混合一部分原始模型训练时使用的指令数据或多任务数据(例如,在CSC数据中混入10%-20%的通用问答、推理等数据)。这样在训练时,优化器需要同时考虑新旧任务的目标,从而被迫找到能兼顾所有任务的参数更新方向。这是非常有效但数据准备成本较高的方法。
  • 评估与监控:在微调过程中,不仅在新任务验证集上评估性能,也要在旧任务验证集(例如,保留一个通用的问答测试集)上监控性能变化。一旦发现旧任务性能显著下降,就要停止训练或调整超参数。

总结:

原回答提出的“降低学习率”是正确的操作建议,但其认为“小规模单一任务微调不会导致遗忘”的核心观点是错误的。灾难性遗忘是微调中的固有风险,源于优化过程中的任务冲突。

正确的解决方案是:优先采用参数高效微调(PEFT)技术(如LoRA),并结合较低的学习率、较少的训练轮数。如果条件允许,混合多任务数据一起训练是效果最好的保障方法。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐