微调简介
fine-tune就是在LLM常说的微调的英文。在LLM中要训练一个模型是一个费时、费力、费钱的工作,由于模型规模大、参数多在训练过程中会占用大量的时间和计算资源,尤其是一个复杂任务,想要提升模型的能力,就需要通过大量的数据进行训练这都是需要更多的投入的。那么如果有一个现成的模型,和我们要觉得的问题相似,那么我们就可以通过在这个模型的基础之上通过微调达到我们想要的能力。微调就是在一个预训练的大模型上,使用一些特定领域的数据再次进行训练,从而让预训练模型能够适应特定领域、特定任务。在微调过程中,模型的参数会依据新的数据进行调整,从而可以满足特定领域、特定任务的需求。
那么这个微调也有一些不同的方法,其中全面微调(full fine-tuning)就是在微调过程中全部的模型参数都会有所调整。这也就注定了全面微调对于计算资源的投入、数据规模的要求等都需要更多的支持。全面微调因为调整了全部的参数,很容易引起灾难性遗忘(catastrophic forgetting),灾难性遗忘就是再进行全面的微调以后得到的模型在原始任务上的能力表现非常糟糕,以至于达到了难以接受的下降。
那么参数高效微调(parameter-efficient fine-tuning,简称PEFT)是另外一种微调方法。PEFT在微调过程中只会调整一部分模型参数或者不会修改原来参数而是加上一些新参数,从而降低了对计算投入和数据规模的要求。PEFT 在参数效率、内存效率、训练速度、模型性能和推理成本上都有综合的平衡。PEFT 中分为选择法(selective)、基于重参数法(reparametrization-based)、附加法(additive)。选择法会选择一部分 LLM 的初始参数进行微调,因为再选择的时候,可以选择某些组件、某些参数也可以选择一个参数,因此保持参数效率、内存效率、训练速度、模型性能和推理成本之间的平衡。基于重参数法利用的是低秩矩阵表示来减少可训练参数数量,当前使用较多的是 LoRA(Low-Rank Adaptation),将权重更新做一个低秩矩阵分解,使用大模型适配下游任务时只需要训练少量的参数即可达到一个很好的效果,在 LoRA 中,先冻结预训练模型的权重,然后使用Kronecker乘积重参数化的方法,可以在秩和参数数量间找到更好的平衡。
附加法包含了Adapt 和soft pormpt,其中Adapt在模型中添加新的可训练层,大部分这个适配器实在 encode、decode 里或者实在attention、反馈层后。soft prompts 主要是通过 prompt tuning在每一次的交互中加一些预置的soft prompt 从而实现优秀的微调。