前言
大模型现在已经不是什么新奇玩意了,大家都耳熟能详,我们都知道大模型要从头到尾的训练,需要巨大的人力物力,如此高昂的费用小公司是难以承受的,那么我们是否可以像牛顿一样,站在巨人的肩膀上,利用已经训练好的大模型进行二次训练以适用于我们自己的应用呢?回答当然是肯定的,我们只需要极少量的训练数据和资源,就能将大模型改造以适应我们的应用。
微调的分类
对大模型进行二次训练的操作我们通常称为微调(Fine-Tuning),微调分为两种:
Full-Fine Tuning (FFT)
全参数微调,随着大模型的参数越多,使用FFT进行微调的时候,需要的训练数据和资源就会越多,所以该方法经常用在小尺寸的LLM上面,对于特大尺寸的LLM,如果训练数据过少,直接无法推动模型参数的变更。
Parameter-Efficient Fine-Tuning(PEFT)
参数有效的微调,该微调仅仅微调非常少(额外的)模型参数,而不需要微调模型的所有参数,这将显著的降低计算和存储成本,同时也能产生与完全微调模型相当的性能,这是不是让我们欣喜若狂,实现了我们既要……又要……的夙愿。其实PEFT是一个统称,不同的实现策略让PEFT又有进一步的分类,今天先列出来huggingface的peft包支持的微调方法,后续我再仔细讲解不同的peft方法的异同和相应的微调代码:
- PROMPT_TUNING
- MULTITASK_PROMPT_TUNING
- P_TUNING
- PREFIX_TUNING
- LORA
- ADALORA
- ADAPTION_PROMPT
- IA3
- LOHA
- LOKR
- OFT
- POLY