1、为什么大模型微调
之前在《大模型这块蛋糕,想吃吗》介绍了普通人如何搭上大模型这块列车, 其中有一个就是模型微调,这个也是未来很多IT公司需要发力的方向,以及在《垂直领域大模型的应用更亲民》中论述了为什么微调适合大家,以及微调有什么价值? 作为小程序猿在开始进行微调实操之前,我们先了解一下微调大模型有什么方法和技术吗?
2、大模型微调的方式
(1)全量微调(Full Fine-tuning):这个其实算不上微调,算是全新训练,但是大部分微调框架都支持这种方式需要较大的计算资源和时间,但可以获得更好的性能.
(2)增加额外参数
(3)选取一部分参数调优
(4)引入重参数优化
3、大模型微调的技术
![e180ebaf51c1fd7cb7887d0320ac0522.jpeg](https://i-blog.csdnimg.cn/blog_migrate/0b3cea3ac75a836184d1daf817fb7b0c.jpeg)
由上面微调的方式的道路,引发的微调技术也是很多的
(1)《BitFit: BitFit: Simple Parameter-efficient Fine-tuning or Transformer-based Masked Language-models》训练时只更新bias的参数或者部分bias参数
(2)《Prefix Tuning: Prefix-Tuning: Optimizing Continuous Prompts for Generation》在输入token之前构造一段任务相关的virtual tokens作为Prefix,然后训练的时候只更新Prefix部分的参数,而PLM中的其他部分参数固定。
(3)《Prompt Tuning: The Power of Scale for Parameter-Efficient Prompt Tuning》 该方法可以看作是Prefix Tuning的简化版本,它给每个任务定义了自己的Prompt,然后拼接到数据上作为输入,但只在输入层加入prompt tokens,并且不需要加入 MLP 进行调整来解决难训练的问题。
(4)《P-Tuning: GPT Understands, Too 》该方法将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。相比Prefix Tuning,P-Tuning加入的可微的virtual token,但仅限于输入层,没有在每一层都加;另外,virtual token的位置也不一定是前缀,插入的位置是可选的。这里的出发点实际是把传统人工设计模版中的真实token替换成可微的virtual token
(5)《P-Tuning v2: P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》该方法在每一层都加入了Prompts tokens作为输入,而不是仅仅加在输入层
(6)《Adapter Tuning :Parameter-Efficient Transfer Learning for NLP》,该方法设计了Adapter结构,并将其嵌入Transformer的结构里面,针对每一个Transformer层,增加了两个Adapter结构(分别是多头注意力的投影之后和第二个feed-forward层之后),在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构和 Layer Norm 层进行微调,从而保证了训练的高效性。
(7)《LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》,该方法的核心思想就是通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练.
........
小结:
(1)增加额外参数,如:Prefix Tuning、Prompt Tuning、Adapter Tuning及其变体。
(2)选取一部分参数更新,如:BitFit。
(3)引入重参数化,如:LoRA、AdaLoRA、QLoRA。
(4)混合高效微调,如:MAM Adapter、UniPELT
那怎么选择微调技术呢?
(1)总的来说,像P-Tuning v2、LoRA等都是综合评估很不错的高效微调技术。如果显存资源有限可以考虑QLoRA;如果只是解决一些简单任务场景,可以考虑P-Tuning、Prompt Tuning也行。
(2)Prompt Tuning、Prefix Tuning、LoRA等少部分微调技术针对不同参数规模的模型进行过评估,同时,这几种方式也是目前应用比较多的高效微调方法.
4、微调框架
要参考论文实现那些技术吗?当然不用,现在开源的能力越来越强,所以计算机发展越来越快,根本学不过来:
(1)DeepSpeed Chat : 微软开源,提供了一键式RLHF训练框架,奖励模型微调和基于人类反馈的强化学习(RLHF),此外还实现了DeepSpeed HE,统一的高效混合引擎,达到训练和推理引擎之间的过渡是无缝的。
(2)PEFT:PEFT 是 Huggingface 开源的一个参数高效微调库,它提供了最新的参数高效微调技术,并且可以与 Transformers 和 Accelerate 进行无缝集成。
小结:
一般来说现在大家基本选择peft框架进行微调.
5、PEFT框架支持微调技术
不同任务下支持模型和技术都有所差别:
PERF支持微调技术有:
(1)LoRA
(2)Prefix Tuning
(3)P-Tuning
(4)Prompt Tuning
(5)AdaLoRA:Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning
(6)IA3:Infused Adapter by Inhibiting and Amplifying Inner Activations
..... 还在新增
6、当前高效微调技术存在的一些问题
(1)缺乏模型大小的考虑
(2)缺乏测量基准和评价标准
(3)代码实现可读性差
7、总结
立一下flag,鼓励自己学下去,了解完微调技术和微调框架,接下来就是实践微调