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的容量,从而让模型更好的理解意图