Advertisement

2024山东大学软件学院创新实训——智慧医疗问答系统(四)

阅读量:

大模型微调方法

目录

大模型微调方法

一. Freeze

二. P-Tuning系列

(1) Prefix-Tuning

(2) Prompt-Tuning

(3) P-Tuning v1

(4) P-Tuning v2

三. LoRA

四. Q-LoRA

本文将概述几种常用的微调方法:Freeze、P-Tuning系列(前缀调参法、提示调参法、P-Tuning v1、P-Tuning v2)、LoRA、QLoRA

一. Freeze

Freeze(即参数冻结):固定原始模型中的某些参数,并在训练过程中仅使用这些被固定的参数。

该方法是一种独特的微调策略,在该方法中对预训练模型的部分层进行了冻结处理。通过这种策略,预训练模型能够保持其泛化能力的同时实现更好的任务适应性。

只需要设置微调层的参数,其余均冻结

复制代码
 # 遍历模型的所有参数和名称

    
 for name, param in model.named_parameters():
    
     # 指定冻结层(layers.27, layers.26, layers.25, layers.24, layers.23)之外的所有参数
    
     if not any(nd in name for nd in ["layers.27", "layers.26", "layers.25", "layers.24", "layers.23"]):
    
     # 将参数的 requires_grad 属性设置为False,即冻结该参数
    
     param.requires_grad = False

基于Transformer模型在医疗问答任务中的应用而言,在训练过程中对比前面的层与后面的层,在功能上呈现出显著差异

微调前面的层

复制代码
1. 

低级特征提取 :较近的层级更加注重输入的基本属性,并通过分析词干形态及周边联系来获取关键信息。针对医疗咨询问题,在这一过程中提取的信息能够帮助系统准确把握病人的病史信息、症状描述以及相关联的基础数据。

复制代码
2. 

通用特征学习 :早期神经网络架构通过大规模数据集获得了基础语言模式,在此过程中生成器部分捕获了语言的基本结构与语法关系。这些基础语言模式或许能在医疗领域发挥辅助作用。经过对生成器部分的微调优化,在特定的医疗场景下将其应用起来可能会显著提升模型处理相关问题的能力。

微调后面的层

复制代码
1. 

高级语义捕捉:后续的层级结构能够有效识别并整合跨层级的信息关联,在医疗问答系统中这一特性被充分运用。通过构建对复杂医学概念的理解以及精准识别治疗方案与病理机制之间的深层联系等高级认知能力的形成

复制代码
2. 

在特定医疗领域中进行微调后,后续层级能够更好地适应专业知识与术语体系.例如,模型能够学习并理解胰岛素及其相关糖尿病并发症的专业术语,从而实现更为精准且专业的解答过程.

总体而言,在微调前面的层次时可借助浅层特征与通用语义信息来深入理解基本数据与普遍性问题;另一方面,在后部层次中能更精准地捕获高级语义与特定领域知识以提供更为专业的解答。具体任务决定需选择哪些层进行微调。

The parameter-efficient fine-tuning technique typically focuses on adjusting only the fully connected layer parameters of the upper layers in the Transformer model, while keeping the rest of the model parameters fixed.

由于大模型已具备对语言丰富性的学习能力,并且其预训练阶段已积累了广泛的语义知识储备。因此,在微调过程中仅需调整顶层全连接层的一些参数即可保留预训练模型的主要知识内容,并在此基础上实现对具体任务需求的有效适应。

优点:

大量减少了大模型的微调参数,是一种参数高效的微调方法

减少微调过程中计算资源的消耗,提高训练效率

确保模型学习到的知识能够充分利用,保留预训练模型泛化能力

二. P-Tuning系列

该方法(P-Tuning)是一种专为特定任务设计的技术方案,在预训练模型中识别并标记关键参数,并通过调整或优化这些参数来更好地完成相应的任务。

(1) Prefix-Tuning

论文地址:https://arxiv.org/abs/2101.00190

代码地址:https://github.com/XiangLi1999/PrefixTuning

Prefix Tuning 是一种旨在支持生成式任务的参数微调方法(P-Tuning),它通过在输入序列前端附加特定标记或提示信息(pre-labels)来引导生成模型的输出行为(output behavior)。这种技术结合了预训练优化器(pre-trained optimizer)和提示信息的作用机制(function of prompt information),从而实现对生成模型性能的有效提升(performance enhancement)。

如下所示,在输入序列前增添一个特定的Prefix Token(例如单词、短语或标记)从而为模型提供额外的信息向量。该方法适用于翻译、摘要以及表格转文本的任务。

在编码器Encoder之前引入Prefix token:以便模型能够更准确地处理输入的内容

在解码器Decoder的前端插入Prefix token:这样可以以限定输出的方向和范围,并使生成结果更加合理

Parameter-efficient fine-tuning methods in the model incorporate a prefix, which refers to a sequence of task-specific vectors. During fine-tuning, this small segment of parameters is primarily optimized (the default prefix length is 10 tokens).

优点:

准确的生成满足特定要求的文本

快速适应下游任务

(2) Prompt-Tuning

论文地址:https://arxiv.org/pdf/2104.08691.pdf

Prompt-Tuning是一种用于在输入文本中提供与任务相关的提示的方法,并且它是Prefix-Tuning的一种简化形式。

左图所示为基于PreTrain+Fine-Tuning模式构建的典型训练架构(传统模式)。在这一架构下,在实现过程中需要建立并维护一组完整的独立模型架构,并赋予其独自一套完整的参数配置。对于任何一个下游任务而言,在实现过程中需要建立并维护一组完整的独立模型架构,并赋予其独自一套完整的参数配置。在这一过程中,在预训练与微调阶段占据了大量时间和计算资源

右图所示的是Prompt-Tuning训练模式(高效策略) ,针对不同任务只需引入相应的Prompt参数即可引导模型输出相关结果

随着模型参数量的增加,Prompt Tuning 的方法会逼近全参数微调的结果。

通过施加任务相关的特定提示(prompt),不仅能够帮助模型适应不同的任务需求,并且能够有效缓解零样本和少样本问题带来的挑战,在无标签数据的帮助下实现精准预测。

同时,在下游任务中插入提示后,则能够缓解预训练模型的重复问题,并使模型更加倾向于按照任务要求生成正确的输出

(3) P-Tuning v1

论文地址:P-Tuning v1

GitHub - THUDM/P-tuning: 一种创新的方法用于调节语言模型的性能. 代码与数据集来源用于研究论文《GPT理解了, too》.

该微调策略通过引入Prompt至微调流程中,并对该Prompt相关的参数进行优化 ,同时保持语言模型自身参数不变 。如图所示 :

(a)图:离散式的Prompt Tuning

(b)图:隐式的P-Tuning

P-tuning v1 是一种自动化机制开发方案用于生成一系列连续提示以提高模型微调性能。根据上图所述信息可知,其模版形式如下所示: \text{P-TUNING-V1}(\mathbf{x}) = \{\mathbf{p}_i\}_{i=1}^{n}

其中h、e分别表示P-tuning v1的持续性prompt表示和一个预训练语言模型,在处理下游任务时通过对其参数进行优化来进行模型微调

存在的不足:

缺乏普遍性使得当模型规模较小时与全参数微调方法在性能上表现存在显著差异 并且整体效果欠佳

缺少跨任务的通用性,在序列标注任务中的有效性没有得到验证

当模型层数很深时,微调时模型的稳定性难以保证

(4) P-Tuning v2

P-tuning v2 是 P-tuning v1 的升级版本,并且参考了 prefix-tuning 的微调策略。如下图所示:

(a)图:只在第一层进行微调

(b)图:每一层都进行微调

相较于 P-tuning v1 微调方案而言,P-tuning v2 采用了前缀调整技术,在所有输入层次都引入可调节参数。在前缀部分中每个层次中的 transformer 的 embedding 输入都需要进行微调,在此过程中仅针对第一层进行调整以实现优化

总体而言,在改进的基础上推出的P-tuning v2微调方法成功克服了P-tuning v1方法存在的局限性,并在保持原有优势的同时实现了更大的优化空间。这种改进型的大语言模型微调方法在参数规模与计算效率方面均表现优异,并且能够灵活适应不同应用场景的需求

优点:

P-Tuning v2 将参数量降低至原来的 0.1%,通过模型量化及 Gradient Checkpoint 等方法实现最低所需仅需 7GB 显存即可运行。

每一层前面插入一段prompt,模型微调参数降低到原来的0.1%

冻结模型参数,只训练每层的prompt

为了节省存储空间,在训练前只需保留和加载模型本身以及预处理编码器的参数,并通过减少内存占用的方法降低了训练所需的空间需求。

三. LoRA

论文地址:https://arxiv.org/abs/2106.09685

项目代码:https://github.com/microsoft/LoRA

Lora方法:插入少量参数,只在新插入的参数上进行微调,达到加速效果。

神经网络的每个部分都由矩阵乘法构成。其权重矩阵通常为满秩矩阵。针对特定任务时,预训练语言模型具有低的"内在维度",通过将其随机地映射到更低维的空间中进行处理后仍能有效学习。

当处理大语言模型微调时,在这一过程中通过 LoRA 方法固定了已经经过广泛训练的权重参数,并将其可学习低秩分解矩阵整合进每个 Transformer 层。

相当于增加了一个分路。

线性层 A:将数据从 d 维降到 r 维

线性层 B:将数据从 r 维升到 d 维

在模型微调过程中,在W0上进行固定处理,并未进行梯度更新;仅调整参数A和B。相较于所有参数参与的情况而言,在此过程中涉及的可训练参数数量从d \times k减少到d \times r + r \times k(其中r \ll \min(d, k)),因此可训练的参数数量大幅下降。

根据图中所示,在LoRA微调过程中对变量A实施随机高斯初始化的同时变量B采用零初始化策略;由此可得,在微调初期阶段BA的值为零。

每个LoRA微调策略将被应用于Transformer的各层结构中,从而显著降低模型的微调参数量。

优点:

预训练模型参数可以被共享,用于为不同的任务构建许多小的 LoRA 模块

因为LoRA只需完成计算与优化注入的低秩矩阵,所以其计算效率较全参数微调更高

该技术可与多种微调方案协同工作,并支持与其他主流的微调策略结合使用。例如Prefix-Tuning这一策略。

四. Q-LoRA

论文地址:https://arxiv.org/abs/2305.14314

QLoRA 是 LoRA 改进版本。

QLoRA会导致运行时开销增加(相较于LoRA而言耗时更长),然而它是一种高效且经济的内存节省策略或技术手段。

可以在不降低任何性能的情况下,微调量化为 4 bit 模型的方法。

开发出一种新的数据格式:4bit NormalFloat。该4bit NormalFloat格式基于正态分布权重设计,在信息理论层面达到了最优性能。

提出双量化:对第一次量化后的那些常量再进行一次量化,减少存储空间。

开发 Paged Optimizers 分页优化器:减少显存占用,在使用优化后的参数后能够在 GPU 上运行并实现 CPU 和 GPU 之间的数据传输自动分配。该功能与 CPU 内存与磁盘间的常规内存管理机制相仿。

引入适配器组件:在注意力机制的(query, value)线性变换层中添加适配器模块以提升模型的参数规模,并有效降低精度损失。

全部评论 (0)

还没有任何评论哟~