大家好啊,我是董董灿。
前段时间在星球弄了个"微调"的小专栏。但是因为一些事情耽误了,整体进度已经过半了,最近时间又充裕了,打算把微调的专栏再丰富完善,把这件事情搞完!
本文节选自星球《微调理论与实战》专栏。
微调,英文名叫做 Fine-tuning。
你可能听周围搞过微调的朋友说到过一个现象------微调后模型的能力可能会退化,这种情况听起来很奇怪:我明明是为了让模型变得更好,为什么模型的能力退化了呢?
这其实也算是微调的一个弊端吧,所以,在学习微调技术之前,你要对微调有技术有个感性的认识------
微调并非是万能的,有些时候,它会使模型的原始能力退化。
什么是模型的原始能力?
微调是指在一个已经训练好的大模型基础上,用特定领域的数据再重新进行训练,让它更适应某个具体任务。
所以说,微调本质上也是一种"训练"的过程。
比如,你拿一个已经预训练好的语言模型,喂给它一堆法律文档,想让它变成"法律专家";或者喂给他一些医疗数据,让它学会回答医学问题。
这个过程其实就是在教一个"通用的语言模型"重点强化某一技能。
模型的原始能力呢,其实就是大模型在微调之前具备的通用的知识和技能。
比如,它可能会写诗、翻译、回答历史问题,还能聊点天文地理,这些能力是大模型在海量数据上预训练(Pre-training)时学到的,覆盖面很广。
但问题来了:微调后,模型在特定任务上的技能变强了,却可能在其他任务上变弱了,甚至严重一点,可能会忘了它原来已经学会的东西。
这就是所谓的"原始能力退化"。
为什么会退化?
要搞懂退化原因,我们得从模型的学习过程讲起。
可以这么想象一下:大模型其实就是一个记忆有限的学生,虽然它的参数量很多("脑容量"很大),但也不是无限大。
微调其实是给这个学生开了补习班,逼着它学习一些新东西,结果呢?新东西学会了,旧知识可能就挤掉了。
这里简单提几个具体的原因,仅做了解即可:
1. 灾难性遗忘(Catastrophic Forgetting)
模型的"记忆"是靠参数(也就是模型的权重)存储的。
微调时,我们用新数据调整这些参数,让模型适应新的任务。
但这些参数本来是用来支持原始能力的,改动太多,原来的知识就被覆盖了。
你原来会背唐诗三百首,后来天天背英语单词,时间一长,唐诗可能就忘得差不多了。
这种现象被称为"灾难性遗忘"。
这种情况在微调的过程中会经常出现,在后面我们介绍"全参数微调"的时候,还会再一次提到这个问题。
说白了,模型的参数被篡改了,导致了能力退化。
2. 数据分布不平衡
大模型预训练时用的是海量、多样化的数据,可以覆盖各种场景,而微调时,通常只用一个很窄很专业领域的数据集(比如只有法律文本)。
这就会导致模型过度适应新数据,忘了如何处理其他类型的数据。
比如,当你把一个模型微调成了"法律专家"后,如果你再让它写诗,它可能就只会蹦出"根据《民法典》第XX条"之类的东西,也就诗意全无了。
3. 任务冲突
有时候,新任务和原始任务的目标不一样,甚至互相冲突。
比如,预训练时模型学的是"尽量生成多样化的回答",而微调时你要求它"严格按照格式输出"。
这种目标切换会让模型"迷失方向",丢掉原来的灵活性。
4. 过度微调(Overfitting)
微调如果做得太狠(比如训练轮次太多,或者学习率太高),模型会"死记硬背"训练数据,更极端的时候可能连训练数据中的"噪声"都背下来。
这种情况下,它在新任务上可能表现得很好,但在其他场景下完全不行,因为它失去了泛化能力。
有点类似于模型训练中的"过拟合"现象。
模型原始能力的退化有哪些表现呢?
这个其实很好理解,不再赘述,举几个模型原始能力退化的例子------
- 语言能力变差:一个通用的语言模型微调后,可能忘了怎么生成流畅的对话,只会机械地回答特定问题。
- 知识丢失:微调前它能告诉你很多通用知识,比如"太阳系有八大行星"。微调后如果你再问它同样的问题,模型可能一脸懵,回答的"驴唇不对马嘴"。
- 创造力下降:微调前模型原本可以写故事、编段子,微调后可能只会输出干巴巴的句子。
也就是说,微调后模型变得"专精"了,但"全面"没了,这就是一种"原始能力退化"的表现。
怎么避免模型原始能力的退化?
虽然微调模型会出现能力退化的情况,但是你也不用太过于担心,退化不是不可避免的。
微调是个技术活,只要用对方法,就能让模型既学会新技能,又尽量保住它原有的能力。
下面是一些常见的技术,可以避免模型原始能力的退化:
1. 少调一点(控制微调范围)
微调时,不要把模型的所有参数(比如 7B 的模型中有 70亿的参数)都进行调整,可以只调整其中一部分(比如只调整注意力模块中的参数,或者在 transformer 架构中加个小的适配器模块等等,这就需要你对 transformer 架构有一定的的了解了)。
这样,模型的原始能力受影响就小得多。
这种只调整部分参数的方法叫"参数高效微调"(Parameter-Efficient Fine-Tuning, PEFT),比如 LoRA 和 Adapter。
PEFT 是目前非常流行的微调方法,效果好、算力需求低,也是本专栏会重点介绍的内容。
2. 混着学(多任务学习)
在微调时,不要给模型只投喂新数据,可以把原始数据和新数据混在一起进行训练。
这样模型既能学新东西,也不至于忘了原有的知识。比如,让模型一边学法律的新知识,一边复习一些诗歌和历史。
不过这种方式很少会使用,毕竟我们的目的就是让他更加专业。如果让他在学法律的过程中,还要复习诗歌和历史,那我们需要准备的数据集就会多很多------
徒增不少额外的工作量,不值得。
模型在微调时的原始能力退化,本质上是模型学习新东西时"顾此失彼"的结果,但通过合理的微调方法,我们可以在提升专业能力的同时,尽量保住模型的"全能"属性,这也可以认为是 PEFT 提出的一个背景(原因)吧。
🔥AI视觉入门与调优专栏:AI 视觉入门与调优专栏。
🔥Transformer通关秘籍:Transformer 通关秘籍专栏。
我创建了一个《小而精的AI学习圈子》的知识星球,星球上有很多高质量的技术专栏,你也可以在星球向我咨询和提问。