1
基本概念
1
基本概念
1
微调的定义
首先对模型微调下个非严谨的定义,大模型微调(Fine-tuning)是指在预训练模型基础之上,采用标注的高质量数据集或基于人类反馈机制对基础模型进行训练,最终输出具备或增强特定领域能力模型的技术。
2
微调的必要性
3
微调的价值
2
微调技术
1
微调流程
模型微调是一个循序渐进、不断优化迭代的系统工程,一般需要经过模型选取、任务定义、数据准备、策略选择、模型配置、模型微调、结果评估、优化迭代、模型测试、模型部署等流程,通过系统化、流程化的模型微调,将输出令人满意的结果。具体步骤简述如下:
模型选取
选取一个优秀的基础大模型,比如OpenAI的ChatGPT,Meta的LLaMA2等,成熟的大模型有大厂背书及活跃的社区支持,可以具备高质量的模型能力。
任务定义
定义一个特定领域的任务,比如上文所述的医疗问答任务。
数据准备
收集标签化的专业数据,比如上文的医疗问答数据可分为训练集和测试集,一部分用于训练,一部分用于测试。
策略选择
选择合适的模型微调策略,比如下文将详细描述的PERT或RLHF,选择更适合的微调技术。
模型配置
以第一步选取的基础模型作为起点,完成模型微调前的前置配置。
模型微调
基于选择的微调技术,不同不断的迭代训练模型,期间不断调整参数并监控模型的损失函数即精准度。
结果评估
使用测试数据集验证微调后模型的优劣
优化迭代
基于上一步评估的结果,不断迭代微调过程直到达到满意的预期效果。
模型测试
使用验证模型的性能。
模型部署
将微调后满足预期的模型部署后等待投入推理使用
2
Fine-Tuning
Fine-Tuning指的是全量参数微调,训练时间成本高。一般较少使用,因此本文重点介绍高效参数微调,通过冻结参数,局部微调,显著提供微调效率。
3
PERT
Adapter 在《Parameter-Efficient Transfer Learning for NLP 》论文中提出了Adapter方法,论文指出对预训练模型每层中插入下游任务参数,微调时冻结模型主体参数,仅训练特定任务的参数,最终显著减少训练过程中产生的算力成本。为论证Adapter方法的有效性,论文作者基于BERT Transformer模型,对26种类别的文本任务进行GLUE基准测试,最终Adapter展示了令人满意的效果,在GLUE基准测试中,相比较于100%的全量参数微调,每个任务在仅添加3.6%参数的情况下,仅有0.4% 以内的性能差异。 如下图所示,Adapter结构在Transformer Layer中加入Adapter Layer,位置分别位于多头注意力的投影之后及第二个前馈层之后,训练时固定原始预训练模型参数,仅对新增的Adapter及Layer Norm层进行微调。其中每个Adapter 由2个Feedward前馈层组成,首个前馈层接受Transformer输出作为输入,通过将高维特征d投影至低维特征m以控制模型参数量,低维特征m经过中间非线性层输出,第二个前馈层将低维特征m反向还原为高维度特征d,最后作为Adapter的输出。
Prefix Tuning
基于Prompt的设计灵感斯坦福大学团队在论文中提出的一种通过冻结模型参数,通过连续的特定任务向量而实现的更轻量级模型微调技术。Prefix Tuning属于连续的模板构建,通过把传统人工设计模版中的token替换成可微调的Virtual Token。其中模型输入前添加的连续的针对特定任务的向量序列我们称之为Prefix,通过更新特定任务的Prefix参数大幅提高微调效率。
对于Decoder-only的GPT,prefix只加在句首,模型的输入表示为:
对于Encoder-Decoder的BART,prefix同时加在编码器和解码器的开头:
如下图所示,在下游任务微调时,模型参数被冻结,之后Prefix部分参数被更新,显著提高训练效率。
LoRA
训练难度大 原始论文指出,训练模型的效果并非严格随prefix参数量单调递增 会降低原始文字prompt表达能力 为节省计算量和显存,我们一般会固定数据的输入长度,增加prefix之后,留给原始文本数据的空间会被挤压,因此可能会降低原始文本prompt的表达能力,使得输入层有效信息减少。
Prefix Tuning训练难度大,那是否有其他的微调方法呢?LoRA(Low-Rank Adaptation)是微软研究团队提出的一种通过冻结预训练模型参数,在Transformer每一层中加入2个可供训练的A、B低秩旁路矩阵(其中一个矩阵负责降维、另一个负责升维),可大幅减少微调参数量的方法。LoRA整体架构如下图:
:预训练权重 :微调增量更新权重
全参微调可视为冻结的预训练权重W+微调过程中产生的增量更新权重 ,假设输入为x,输出为y,则有 。
如图右侧表示LoRA微调场景,我们用矩阵A和矩阵B近似表示 :
:低秩矩阵A,其中r被称为“秩”,对A进行高斯初始化。 :低秩矩阵B,对B采用零初始化。
经过拆分,我们将 改写成 的等价形式,微调参数 从降为 ,同时不改变输出数据的维度,即在LoRA下我们可以定义为: 。
其中,论文指出对于AB两个低秩矩阵,会使用超参α(常数)来做调整,以适配更优的微调性能。基于LoRA架构,在原始预训练矩阵的旁路,我们用低秩矩阵A和B来近似代替增量更新权重 ,训练过程中通过固定预训练权重 ,只对低秩矩阵A和B进行微调训练,可大幅提高效率,据论文统计,采用LoRA方法在微调GPT3 175B时,显存消耗从1.2TB降至350GB,极大的降低了训练开销。
4
RLHF
预训练模型 使用标注过的数据来调整预训练模型参数,例如OpenAI在其InstructGPT中采用较小版本的GPT-3,Anthropic使用1000万-52B参数的Transformer进行训练使其更好的适应特定任务领域。
训练奖励模型 RM奖励模型用于评估文本序列质量,它接收一系列文本并返回数值,数值对应人类的偏好程度。训练数据通常由多个语言模型生成的文本序列组成,这些序列经过人工评估或使用其他模型(比如ChatGPT)进行打分。奖励模型不断指导模型生成更符合人类预期的高质量文本。
基于强化学习微调 利用上一步输出的奖励值,采用强化学习进一步微调,在强化学习中需要定义状态空间、动作空间、策略函数及价值函数。其中,状态空间使输入的序列分布,动作空间是全量的token(词汇表中的词),价值函数基于奖励模型的输出和策略约束,用于评估给定状态下采取特定动作的价值,策略函数根据当前状态选择下一个动作(token),最大化奖励。
3
讨论与展望
本文重点介绍了几种常用微调技术,各种技术的特点描述总结如下表所示:
