7 天 AI 大模型学习 Day 3
今天,我们要一起学习大模型微调了 ~ 包括:大模型微调领域概览、Lora微调 等 ~
文章目录
- 7 天 AI 大模型学习 Day 3
- 大模型微调概览
- 大模型项目 pipeline
- 提示词工程 Prompt Engineering
- In-context Learning
- Fine-tune
- 数据构造
- 训练 验证 测试集
- Fine-tune 导致的问题
- 解决遗忘的思路
- PEFT
- Lora 微调
- Adaptor Tuning
- Prefix Tuning
- Lora 核心思想
- 从0实现Lora
- RoBERTa
- 如何应用 Lora 做 Fine-tune
- Brute-force 方法
大模型微调概览
大模型项目 pipeline
- 定义问题 提前准备一些测试集(benchwork) 看那个模型效果好
- 选择模型底座
- 提示词工程 、 微调 、 对齐
- 评估
- 上线
- 推理(模型压缩,降低成本)
- RAG
提示词工程 Prompt Engineering
In-context Learning
- Zero-shot
- Few-shot
持续的加入 Example ,看模型的效果
问题: - 成本提高(input token 变长)
- 泛化性不好
- Example 占用空间过多
Fine-tune
Few-shot 不行,考虑 Fine-tune
理解:Fine-tune 把知识嵌入在模型内部,Fine-tune 可以实现多任务 Multi-tasking
数据构造
原始的监督数据 Instruction Data (Diversity) —— 改造
- Human-Generated => (问题,答案) 成本高
- Existing Supervised Train Data
- AI-generated(with human)人工过滤
- Human-Generate Instruction Data - AI Generate Instruction Data - Human Evaluate
训练 验证 测试集
Fine-tune 导致的问题
Fine-tune 之后,模型之前的能力消失了 —— 遗忘
—— Trade-off 减少遗忘
解决遗忘的思路
- 加入通用数据
- 其他类型 哪些我们所需要的能力下降了
- 减少对模型的改动
- regularization 正则化
- 改动部分参数 Lora 的核心思想
- 新加入模块
- 训练时调learn rate
- 使用更大的模型 - 模型越小,forgetting越大
- 多任务学习 - 数据合并在一起做 Fine-tune
- 什么都不需要做 - 只需要某个能力
- 识别诊断模型的哪些参数导致模型能力降低
PEFT
—— 推荐阅读
- 论文1
- 论文2
Lora 微调
- 全参 fine-tune ,和 pre-train 没有区别
Adaptor Tuning
在原有模型上加入 插件 。
推理时增加了时间成本 。
Prefix Tuning
难优化,随着 token 增加,性能不会持续提高,占用窗口
Lora 核心思想
前提,不改变模型结构,推理不改变 。将原有参数,通过一种方式,变为其他参数。
原则:改变不要太大,从而避免遗忘,提高泛化能力。
—— low rank
rank 参数可以表示矩阵所含的信息量
解决思路 ——
- B 和 A 是 Lora 的参数
- B 初始化为0, A 初始化为 normalization
矩阵W 作用:做线性转换
- Full / Lora Fine 区别
lora 中冻结某些参数
- 只需要 A * B 就行,不需要再加入更多的矩阵
占用空间 ——
全量微调 : - model weight N
- gradient N
- optimizer 2N
Lora:
N + …
- 只改变 Q V 效果好
- rank = 8 效果好
放大模型的一些能力
从0实现Lora
RoBERTa
如何应用 Lora 做 Fine-tune
- 哪些矩阵参与 Lora 的 Fine-tune
- 哪些函数会受到影响
Brute-force 方法
- 将所有的与 query value 相关的(调用的位置) ,修改为 lora_query , lora_value
缺点: - 定制化的,对每个模型都需要重新做 dirty work
- 考虑一种其他方法,无论什么模型,只要是 transformer 结构的,都可以通过这个方法改为 lora 模型
如何从根源进行改造,从而不需要修改 self-attention,self-attention 还是比较高层的
—— 最小单元
核心思想:继承 Liner 函数,重写,然后做替换
Lora 微调代码 ——
参数解释
- r _ rank
- alpha
- modules _ 那个矩阵需要学习
- bias _ 是否训练 bias