AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


什么是大模型微调及各种微调技术介绍
发布日期:2024-08-27 07:38:06 浏览次数: 1651


这两天看大模型微调的材料,发现这个概念是个筐,里面装的东西很多很多。

比如之前认识到的指令遵循数据集,其实它是一种指令微调,是众多微调方式中的一种。也就是说通过指令微调,GPT可以Chat了。所以,微调是微调的GPT,ChatGPT是微调GPT的结果,而不能理解为在ChatGPT基础上进行微调(虽然这种理解在某种层面或某些实际应用上也是对的)。

大模型通过预训练掌握语言结构,学会了说人话,表现形式是文字接龙。

这种接龙是一种“没有感情”、“没有智慧”的机械行为。“微调”是让这种行为,能够符合人类的需求和业务(比如对话需求),让这种机械的接龙游戏变得有“商业”价值。

当然,为了实现价值,也可以不采用微调的方式,而是直接训练可执行相应任务的大模型。但大模型所需的参数量和数据量实在是太巨大了,训练这样一个大模型,只让它执行某项任务(比如对话、翻译、文字摘要等),太浪费。

所以训练一个大模型,再此基础上进行微调,使之可以适应不同的任务,就很有性价比了。

怎么进行微调,看各自本事。微调方式,百花齐放。只要能让大模型机械的接龙行为,按照人类需求去输出下一个字即可。

微调可分为:

  • 全参数微调/全量微调(FFT:Full Fine-Tuning)

  • 参数微调/参数高效微调(PEFT:Parameter-Efficient Fine-Tuning)


全量微调,顾名思义是对大模型预训练阶段的全部参数进行训练,模型的所有层和参数都会被更新和优化,以适应目标任务的需求。

这种方式的优点是直观、简单,能够充分利用任务数据来优化模型。但它的缺点是训练时间长、计算资源消耗大,并且有可能在微调后出现“知识遗忘”问题。就好像老师给学生批改作文,越改越多,把作文内容全改了一遍,虽然结果可能是好的,但老师既花了时间又花了精力,把学生自己偶写的佳句也给改没了,完全没有了学生自己的特色。

参数高效微调,是指在微调过程中保持模型的底层参数不变(参数冻结),只更新模型的顶层或少数几层,以此来适应特定任务。

参数高效微调的方式有很多种,比如网上传播常用的有七种。其发布时间线如下:

模型开源社区Hugging Face,开源的PEFT库目前支持其中5种方法,分别是:

  • LoRA:

  • AdaLoRA

  • Prefix Tuning

  • Prompt Tuning

  • P-Tuning


LoRA
英文全称 Low-Rank Adaptation of Large Language Models,直译为大语言模型的低阶适应。它的做法是冻结预训练好的模型权重参数,然后在每个Transformer块里注入可训练的层,由于不需要对模型的权重参数重新计算梯度,所以,大大减少了需要训练的计算量。

AdaLoRA
AdaLoRA是一种自适应的LoRA方法。基础LoRA没有考虑参数权重,微调时有可能给某些不重要的权重矩阵添加过多参数,导致模型性能下降。AdaLoRA可以根据模块的重要性自适应地分配参数预算,以提高参数高效微调的性能。基础LoRA还有许多变种,比如LoRA+、VeRA、LoRA-fa、LoRA-drop、DoRA、Delta-LoRA等,这些变种都是对基础LoRA的改进。

-

LoRA是对模型的实际参数进行了微调,而Prefix Tuning、Prompt Tuning、P-Tuning这三种方式可理解为是对Prompt的微调。

以下内容也更新下对Prompt的认识(暂时没理解,先记录):

Prompt 的制作分为手工创建Prompt和自动化生成Prompt,自动化生成Prompt又分为Hard Prompt和Soft Prompt。

(1)Hard Prompt 又称为 Discrete Prompt,它是一个实际的文本字符串。

(2)Soft Prompt 又称为 Continuous Prompt,它是直接在底层语言模型的嵌入空间中进行描述。


Prefix Tuning(前缀微调)
Prefix Tuning 是在输入token之前构造一段任务相关的虚拟token(virtual token)作为前缀,这些前缀是可训练(Embedding)的向量。作为模型内部表示的一部分,可以分布在模型的每一层,它与输入序列一起输入到预训练模型中,训练时通过调整前缀向量来适应特定的任务,无需改变模型本身的参数。

Prompt Tuning(提示微调)
这种方式可以看作是Prefix Tuning的简化版本,它给每个任务定义了自己的Prompt,然后拼接到数据上作为输入。它通常只涉及输入层,而没有使用额外的编码层或任务特定的输出层,可以理解为只是模仿自然语言Prompt的形式。

P-Tuning
P-Tuning v1版本
同Prefix Tuning类似,P-Tuning也设计了一种连续可微调的虚拟token(virtual token)。区别是P-Tuning的虚拟token仅限于输入层,而不是每一层,但它的插入位置是可选的,不一定是前缀。

P-Tuning v2版本
P-tuning v2重要的改进之一是将虚拟token应用于预训练模型的每个层,而不仅仅是输入层。相比较来说Prefix Tuning和P-Tuning v2技术本质等同,只是前者更适用于NLG(自然语言生成),后者适用于NLU(自然语言理解)。



Adapter Tuning

除了从参数调整角度理解微调的概念,优化模型的输出,还有另外一种技术,即Adapter Tuning。

这种方式是在模型的每个层或选定层之间插入小型神经网络模块,即“Adapter(适配器)”。这些Adapter是可训练的。Adapter Tuning 的理念是通过这些添加额外的Adapter提高模型的微调效果和效率。

Adapter Tuning 既可以解决全量微调的低效,又解决了部分微调难以达到较好效果的问题。但它的问题是会导致模型整体的层数变深,耗费额外的运算量在这些Adapter上,从而拖慢了训练速度和推理速度。

Adapter Tuning 可以和Prefix Tuning等方式结合,因为Adapter本身就是一种神经网络,参数高效微调的方式自然也可以用于调整Adapter中的参数。

很多方式都可以理解为是一种Adapter,它应用于模型的不同位置,大致可分为5类:

  • Houlsby

  • BitFit

  • AdapterBias

  • Prefix Tuning

  • Lora

Houlsby
Houlsby N等人提出的Adapter方法,常规意义上理解的,在预训练模型每一层(或某些层)中添加Adapter模块,微调时冻结预训练模型主体,通过训练Adapter模块的参数来适应特定下游任务。

BitFit
BitFit是一种基于权重剪枝的微调方法。在训练过程中,BitFit通过对模型参数进行量化,减少模型大小和计算复杂度,从而提高训练速度和模型性能。具体来说,BitFit通过对权重矩阵进行二进制编码,将浮点数权重替换为二进制权重。这种二进制权重能够大大减少模型存储需求和计算量,同时保持模型性能。

AdapterBias
AdapterBias提供了一种参数效率更高的微调方法,AdapterBias通过在模型的每层输出中加入一个小的基于token的调整量(一个向量和一个线性层),以减少训练参数,使模型更好地适应特定的任务。



大模型微调的主要步骤:

1. 数据准备:搜集并整理与目标任务相匹配的训练数据,确保数据质量,进行清洗和预处理。

2. 模型选择:根据任务特性和数据特征,挑选合适的预训练模型。

3. 方案制定:基于任务目标和资源状况,决定微调的深度和广度,选择是进行全面还是局部的参数更新。

4. 超参数配置:设定训练过程中的关键超参数,包括学习率、批量大小和训练周期等。

5. 参数初始化:全量微调时保持预训练模型的参数不变,部分微调时,对新增参数进行随机初始化。

6. 执行微调:运用确定的数据和策略进行模型训练,通过优化算法调整参数,以优化损失函数。

7. 性能评估:定期在验证集上评估模型,并根据反馈调整训练策略,以提升模型的准确性和鲁棒性。

8. 最终测试:微调结束后,在测试集上评估模型,确保其满足实际应用的性能要求。

9. 部署应用:将训练完成的模型集成到应用中,并根据实际运行情况进行必要的调整。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询