大模型微调

132 阅读4分钟

1 为什么需要大模型微调?

通用的大模型可能在一般场景上能对问题进行很好的回答,但是对于特定领域专业知识的回答,效果可能就不是那么好了。例如,最近我一直咳嗽,有药物推荐吗?通用大模型回答:我建议您先去看医生,以便得到更准确的诊断和治疗建议。该回答类似于通用的废话,没有实际的内容。

通过微调大模型后,可以使得模型具有专业知识,回复更专业,比如回复上面的问题,根据您的描述,如果干咳,可以尝试XXX药物,如果有痰,可以XXXXXX。

微调简介

目的:使大模型具能够理解并遵循人类的指令,并具备对话的能力。

数据格式:

{
    "instruction": "根据给定的描述。XXXXXXXXXXXXX""input": "",
    "output": "xxxxxxxxxxxxxxxxxxxxxxxx",
}

input 是可选项, 因为instruction 可能就涵盖了input的内容。

2 模型微调流程

模型微调流程主要包括4步:

  • 数据收集
  • 模型选择
  • 模型微调
  • 模型评估

2.1 数据收集

通用微调数据:提供基础的问答能力。 领域微调数据:帮助模型更精确理解 特定比例下的微调效果 :

通用领域微调效果
10具备通用问答能力,无法处理领域任务
11模型在保持一定的通用能力的同时,能够完成领域相关任务
01模型发生灾难性遗忘,仅能完成领域能力,丧失通用能力

PS:

  1. 英文数据是需要的:保持模型原始训练数据的分布
  2. 代码数据也是需要的:增强

通用数据的收集

主要通过开放的公共数据源获取

领域数据的收集

  1. 网页爬取
  2. 大模型蒸馏
  3. 基于下游任务数据集构建

微调的数据量,领域数据至少要1W个问答对 加上通用的 至少2W

2.2 模型选择

基于能力的选择

根据各榜单进行选择

基于领域选择

  • 确定应用场景
  • 确定备选模型
  • 测试题收集
  • 模型评估

2.3 模型微调

常规微调方法:全参数微调和高效参数微调

2.3.1 全参数微调

更新全部模型的参数

缺点:

  • 成本较高
  • 效率较低:训练时间长
  • 过拟合:在数据量相对较少时容易过拟合

2.3.2 参数高效微调PEFT

PEFT是一种在保持预训练模型大部分参数不变的情况下,通过仅调整少量额外参数来适应新任务的技术。这些额外参数可以是新添加的嵌入层、低秩矩阵或其他类型的参数,它们被用来“引导”或“调整”预训练模型的输出,以使其更适合新任务。

方法分类:

  • Additive:Adapter, soft prompts
  • Selective: freeze
  • Reparameterization: Lora

1) Additive

Adapters

在常规Transformer块中插入小型、可训练的模块(即Adapter层),而不改变原模型的大部分参数。

代表性方法:BN Adapter

  • 插入位置:两个FFN后
  • Adapter架构:通过down-project进行降维,应用激活函数,up-Project进行投影回原始维度,保证不改动原有的代码结构

image.png

soft prompts

在模型输入embedding中添加可训练的张量(软提示),改变输入数据的表示方式,从而实现特定任务微调

代表性方法: Prefix-Tuning

在输入embedding 的前缀加上几个特定的提示单词的embedding,如translation, summarization... 或者说在输入的一句话前加几个特殊的单词。

eg: 我 在 上海 添加 prefix --- > u1 u2 u3 我 在 上海

Prefix-Tuning

2) Selective

Freeze

冻结部分模型参数,冻结的参数部分不参与梯度计算,只训练模型的其他部分。

代表性方法:Freeze

  • 做法:模型通常由多个Transformer层组成,冻结前几层Transformer层,仅训练最后几层
  • 科学依据:实验表明,Transformer 的浅层倾向于提取出通用特征,深层倾向于提取语义特征

image.png

3) Reparameterization

低秩适配微调

对模型参数进行特定的变换或替换,将原始的模型参数以某种形式重新表示或调整,以减少训练成本、提高训练效率

代表性方法:LoRA

对指定参数增加额外的低秩矩阵,也就是在原始PLM旁边增加一个旁路,做一个降维再升维的操作

image.png

LORA训练参数优化效果

  • 数学表达:h=W0x+ΔWx=W0x+BAxh=W_0x+ΔW_x=W_0x+BAx
  • 设置值:设原始模型参数矩阵大小d=768,降维的大小r=16
  • 参数规模:全参数=dd=589824,Lora=76816(降维)+16*768(升维)=24576
  • 优化效果:训练参数降低为原始的4.2%

LoRA优势:

  • 更长输入:不用在输入上加额外的prompts,能支持更长的输入(vs Soft prompts)
  • 无延迟:增加的参数和基座模型计算是并行的,推理时没有增加额外的延迟(vsAdapters)
  • 高适用性:训练完成后,可以与模型原始参数合并,合并后模型使用代码与原始模型相同