一、Fine-tuning
Fine-tuning,微调。在大模型中,微调通常指在一个已预训练完成的大语言模型基础上,引入特定领域或特定任务的数据,对模型的部分或全部参数进行进一步训练的过程。其目的在于让大模型的适应特定的应用场景并完成特定领域的相关任务。
微调中,最重要的一环当然是参数的调整,毕竟所谓的大模型就是以海量参数体现出其具体的优势的。当然,微调必须在支持可微调的大模型上才可以。也就是说,不是所有的大模型都支持微调的。这个是否支持微调,不仅仅包含大模型自身也包括相关服务(比如许可证或应用开发条款等等)的提供。即开源的本地微调或服务API的微调。
微调大模型的整体流程中一般处于后期阶段,即在训练集数据、预训练、监督和强化训练之后。基本可以划到具体业务领域处理相关中去。
二、为什么要微调
在现实世界中,有时候买到的通用工具,比如扳手,不太好使。可能老师傅就会自己手动的简单处理一下,让其它更适合当前生产环境的应用。这就可以理解成为一种微调。当然,买回来电视,自己重新命名一下频道的顺序,调整一下色彩的变化,这也算微调。大概明白什么意思了吧,大模型中的微调也是因为这种情况,使用通用数据训练出来的大模型在某些场合不合适或有问题,就需要使用这些场景中的数据再重新训练一下。
比如一个客服系统大模型,可能在电商场景下与市政系统下差别很大。这就需要在这些特定的场景中使用相关的专业领域的数据进行大模型的微调。
所谓"微",就是很小。大家都知道,从头训练一个大模型的成本(算力、数据和时间)是惊人的,而且其对人力和硬件的要求也相当高。但如果只是对参数进行少量的调整,则可以以相当低的成本获取当前环境更适合的大模型的特定版本,同时对人力和硬件等的要求也可能会成量级的下降。这就是微调的目的。站在巨人的肩膀上看远方,而不必把自己锻炼成巨人。
微调其实是对中小公司或后发公司的一种"超车"的一种方式,它可以极大的降低相关的成本、提高训练的效率并从而可以让适合自己应用场景的大模型快速的实现。
也可以这样理解,微调是一种将通用大模型转化为专业场景大模型(垂直领域大模型)的一种有效的机制。
三、微调的形式和分类
微调根据不同角度也可以划分为几种形式:
- 按照参数范围划分
也就是说,微调的参数是全部(Full Fine Tuning,FFT)还是部分(Parameter-Efficient Fine-Tuning,PEFT)。前者成本高,后者成本低很多。而且后者可能的效果差得并不多 - 按照流程划分
即是从SFT(监督微调,指令微调-Instruction Fine-Tuning,IFT)到RLHF(人类反馈强化学习)还是直接使用Prompt Tuning(提示词调整) - 按照训练的方式
即采用指令微调来训练或者使用有监督学习(标注数据)的训练过程
不要僵硬的划分上面的类别,它只是为了让开发者能够更好的理解微调而进行的一种说明。实际上很多微调的技术、方法和工具往往是跨这些分类的。
微调一般有以下几类:
- 指令微调
IST,它主要针对预训练,它属于基座大模型训练的范围。它适合于提示词或指令跟随等场景 - 全量参数微调
FFT,会对全部的大模型参数进行微调。一般用在预算比较充足并对相关要求较高场景下 - 参数高效微调
PEFT,只对最小化参数数量进行微调,降低计算的复杂度,提高训练的效率。它特别适合于成本和资源都不足的场景下。PEFT是微调的主流,方法有很多如LoRA、QLoRA、适配器调整(Adapter Tuning)、前缀调整(Prefix Tuning)、提示调整(Prompt Tuning)、P-Tuning及P-Tuning v2等 - 监督微调
SFT,它大模型的相关通信模板进行微调,形成一个完整的闭环。它一般应用于通用大模型的微调 - 人类反馈强化学习
RLHF,其实就是让大模型可以与人按照人类可理解的方式进行交互。它主要是用来提高友好度。通常应用在交互内容丰富的场景中
一般来说,把Prompt Tuning并不划分到微调的分类中去,虽然它也叫"微调"。
四、方法和工具
对于经典的大模型应用中,微调的方法主要包括:
- LoRA
Low-Rank Adaptation,在关键层中引入小型化的低秩矩阵来实现大模型的微调。可参看前面的相关分析 - QLoRA
Quantized Low-Rank Adaptation,将LoRA方法与深度量化技术进行整合,实现高效模型微调。可参看前面的相关分析 - 适配器调整
Adapter Tuning,在大模型的每层或特定层中添加小的可训练的神经网络模块,从而保证原模型原始参数不变的情况下可以适配更多的场景 - 前缀调整
Prefix Tuning,采用在输入序列前添加可训练任务的特定的前缀,达到对不同任务的微调 - 提示调整
Prompt Tuning,在输入中引入可学习嵌入向量作为提示。它让可训练的提示向量在训练过程中更新,从而让模型输出更适合特定任务的响应 - P-Tuning
基于提示的微调,采用LSTM(长短期记忆网络)作为生成虚拟标记嵌入的工具,更好的适应特定的任务 - P-Tuning v2
P-Tuning v2是P-Tuning的升级版。通过采用多层提示来增强可训练参数 - PILL
Pluggable Instruction Language Learning,它是PEFT的特定实现,采用模块化设计解决复杂模态中的耦合问题。 - SSF
Scaling & Shifting Your Features,即调整特征的比例和偏移量来优化模型的性能。
微调常见的工具包括ColossalAI、Hugging Face Transformers、Unsloth和LLaMA-Factory等。这里就不再一一介绍,有兴趣的可以去查找相关的资料。
五、发展和趋势
正如前面分析,大模型的发展目前看来是非常迅速,新技术和新名词可能会不断涌现。微调当然也是如此。未来,微调也会进化。从有人参与到自动微调;从划时期微调到持续微调;从单个目标微调到多目标微调以及更多的情况,这都有可能。但总归目的只有一个,就是让微调变得更方便、快捷和高效,而且更接近设计的目标。
六、总结
不是每个场景都需要很完美的情况,但大多数情况下,对效率的要求和成本的要求都是很高的。这就是微调出现的原因。人类总想一件事,花更好的钱,办更多的事。至于这种情况会怎么样,那是后话。