6. 模型微调

这里我们看下微调的原理,以及微调的过程。

首先是微调的原理,什么是模型微调

在一个初始的模型当中,我们可以假设模型主要是根据公式和输入得到输出

Y = W * X

那么我们想要得到合适的Y,就需要确定合适的W

比如我们希望,当输入X为2的时候,输出为1,那么W就应该为0.5

那么我们就需要对W进行初始化,

而模型在训练的时候,会不断的测试W的设置,比如从0.1开始,一直实验到0.5

反之如果有一个预训练的模型,一开始W就设置在了0.47的附近,那么训练到0.5就会很快了。

因此模型微调相较于从头开始训练,微调可以省去大量计算资源和时间,提高精准度。

那么现在主流的大模型微调是基于GPT-3之后进行的指令微调

Supervised fine-tuning 简称SFT模型。

那么各个云厂商都提供了自己的LLM 微调训练工具

除此外还有HuggingFace提供的Transformers训练工具

https://huggingface.co/docs/transformers/main/zh/tr aining#%E8%AE%AD%E7%BB%83

那么SFT训练过程为

  1. 准备训练数据和评测数据

并组装为合适的数据结构,同时要求数据具有上一节说的高质量,真实性,针对性,多样性。

同时确保数据量足够多。

  1. 选择合适的基础模型

根据目标选择合适的基础模型

同时确认模型训练中使用的参数多少

  1. Loss 曲线分析

根据Loss曲线来评测训练结果。

除此外还有LoRA方式进行微调

LoRA的核心思想是在原本训练好的模型中,冻结预训练好的模型权重参数,在冻结原模型参数情况下,通过模型中增加额外的网络层,并训练这些网络层参数。

比如原本的模型参数W

为d * k

如果我们引入一层,进行解耦

变为 d * r + r * k

通过这种方式,LoRA的训练量将会小于全量参数微调

通过显存占用将小于全量参数微调

对应的工具也是可以使用HuggingFace提供的基于PERT进行训练

https://huggingface.co/docs/peft/main/en/task_guides/semantic_segme ntation_lora#wrap-the-base-model-as-a-peftmodel-for-lora-training

在微调的过程中,比较重要的参数即r

LoRA中r的大小,可以根据应用场景调整,一般越大,微调数据对模型起到的作用更大,一般取 8/32/128等

而且相较于全量参数微调

LoRA表现不好,所以初次实验考虑使用全量微调,后续可以用LoRA迭代

且LoRA记忆能力不如全量参数微调。

最后是模型训练中的Post-Pretrain

这里指的Post-Pretrain,主要是用于针对特定领域,进行专业的训练。

比如一个在中文金融方向进行过Post-Pretrain调整后的大模型在特定领域的效果是优于其他的模型的。

这里举一个例子

比如Code-LLAMA代码大模型

在代码领域,CODE-LLAMA-7B的效果优于LLAMA2-70B的

对于CODE-LLAMA的代码大模型,其训练过程中就使用了Post-Pretrain来进行了增强训练。

那么对于这样的一个训练模式,该如何操作呢?

一般来说,这样Post-Pretrain的模式是和SFT模式相结合的

先进行Post-Pretrain之后进行通用SFT进行训练,最后进行对齐

之后是Post-Pretrain和SFT的对比

Post-Pretrain 的数据集更加贴合原生的文档内容

而SFT的语料格式更加贴近问答对的形式

而Post-Pretrain的语料,则也需要经过,

文本抽取 数据清洗 去重和校验的过程去获取到语料

从而进行输入。

而且为了保证模型的通用能力,我们还需要确保中文语料和英文语料的合理配比

以及专业领域语料和通用领域语料的合理配比。

发表评论

邮箱地址不会被公开。 必填项已用*标注