LLM

微调

Posted by 令德湖周杰伦 on 04-22,2024

1. 为什么要进行微调

大模型的使用阶段:

  • Prompt提示工程:根据自然语言提示词,让大模型帮你干活,完成任务目标
  • Agent开发:借助大模型的能力,开发应用成语,例如知识库等项目
  • 微调:用有监督的方式,根据输入的数据进行训练,然后去预测答案
  • 预训练:用无监督的方式对大量的知识对模型进行训练,然后用来预测下一个单词

虽然大模型的推理能力很强,但是它信息滞后,最重要的是没有学习到【我们的特点知识。例如企业的一些知识库积累的信息】。

综上所述原因为:

  • 本质:没有我们的知识
  • 其他:
    • 预训练成本昂贵
    • prompt提示工程 推理成本贵
    • 企业级数据安全问题

2. 微调的方式

全量微调:FFT (Full Fine-tuning)
部分参数微调:PFFT (parameter - efficient Full Fine-tuning)

在线大模型:

  • OpenAI fine-tuning(主要是数据安全问题)
    离线大模型:
  • LoRA, QLoRA, Prefix-tuning, Prompt-tuning, P-tuning V2

3. 微调技术

主要分为3类:

  • 增加额外参数:这种是在模型原有的训练基础上增加一些额外关联的参数
  • 选取一部分参数进行更新:这种方法是在微调的过程中只更新模型模型的一部分参数,而不是所有参数,这样可以减少计算量,提高微调的效率。
  • 引入重参数变化:在模型的参数空间中引入一些新的变化,通常是一些线性变换或者非线形变换,以改变模型的行为,这种方法可以使模型在新任务上有更好的表现。

3.1 LoRA

LoRa(low-rank Adapter 低秩的适配器):

  • 一般是通过增加旁路的方式
  • 基于Transformer的架构,一般是增加Wq 和 Wv之间效果比较好
  • 通常有A 和 B 2个矩阵构成:
    • A: 采用高斯初始化
    • B: 采用0初始化, 刚开始为0,不会给模型带来额外的噪音
  • 增加旁路不会增加推理时间
  • R值一般推荐为8效果比较好

3.2 Prompt Tuning

核心思想为:

  • 冻结模型全部参数
  • 在训练数据前增加一小段Prompt
  • 只训练Prompt的表示层,即一个Embedding的模块
  • 其中pormpt有2种形式:
    • soft:模型学习后自己加入的
    • hard:人为的提示
  • prompt越长效果越好,但是相应的参数量也会变大,资源消耗也会增加

3.3 Prefix Tuning

在原始模型的基础上增加一个可被训练Embedding层,用于给提示词增加前缀,从而让模型更好的理解意图,然后不断去优化参数。

特点:
没有改变原来模型的参数量

3.4 P-Tuning V2

预训练的每一层增加一个一个可被训练Embedding层,用于给提示词增加前缀,增加修改提示词的可能,连续的prompts增加了prompts的容量,从而让模型更好的理解意图