问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

自然语言处理中的微调技术:从基本概念到具体实现

创作时间:
作者:
@小白创作中心

自然语言处理中的微调技术:从基本概念到具体实现

引用
CSDN
1.
https://blog.csdn.net/weixin_45775438/article/details/136055943

自然语言处理(NLP)中的微调(Fine-Tuning)是将预训练模型适应特定任务或领域的重要技术。本文详细介绍了各种经典的微调方法,包括监督微调(SFT)、提示微调(Prompt Tuning)、指令微调(Instruction Tuning)、低秩自适应(LoRA)、适配器学习(Adapter)等。通过本文,读者可以全面了解微调技术的基本概念、应用场景和具体实现方法。

微调 Fine-Tuning

微调是指在已经经过预训练的模型基础上,通过使用任务特定的数据集进行额外的训练,以使模型适应特定的任务或领域。通常情况下,微调是在一个相对较小的数据集上进行的,该数据集与模型最初预训练的数据集可能有所不同。

迁移学习是一种机器学习范畴,旨在将从一个任务(源任务)中学到的知识应用到另一个任务(目标任务)上。我们发现,微调的概念和机器学习中的迁移学习概念比较类似。

微调的优势

  1. 站在巨人的肩膀上:前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要强悍,没有必要重复造轮子。
  2. 训练成本可以很低,任务特定的数据集可以几千或者几万条,这远远低于预训练的数据集大小。
  3. 适用于小数据集:对于数据集本身很小的情况,从头开始训练具有几千万参数的大型神经网络是不现实的,因为越大的模型对数据量的要求越大,过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力,只能靠迁移学习。(减少过拟合现象)

SFT 监督微调(Supervised Fine-Tuning)

监督微调是一种利用带有标签的数据对预训练模型进行进一步训练的方法。其实就是监督学习在微调阶段的应用。

监督学习与其他学习方式的区别

  • 强化学习涉及一个智能体(agent)与环境的交互。智能体通过在环境中采取动作来达到某个目标,通过环境的反馈(奖励或惩罚)来调整其行为。
  • 区分其他几个学习方式,可以按照训练阶段和标签进行区分分类:
  • 无监督学习:预训练阶段,大规模无标签语料
  • 监督学习:微调阶段,小规模有标签语料
  • 自监督学习:预训练或微调阶段都可,语料本身没有标签,但可以通过算法/神经网络/模型等,去计算出标签
  • 半监督学习:在预训练阶段使用大规模无标签语料,在微调阶段使用小规模有标签语料。是横跨两个阶段的

下游任务

下游任务是指在迁移学习或微调中,模型在预训练之后,通过额外的训练适应于特定任务或领域的任务。下游任务的选择取决于应用的需求和目标。

常见的下游任务

  1. 文本分类:对文本进行分类,如情感分析、主题分类、垃圾邮件过滤等。
  2. 命名实体识别 (NER):从文本中标注和提取特定实体的信息,如人名、地名、组织名等。
  3. 文本生成:生成自然语言文本,包括文章摘要、对话生成、文章创作等。
  4. 目标检测:在图像中检测和标注出现的对象,并用边界框表示。
  5. 语义分割:将图像中的每个像素分配给特定的语义类别,以实现像素级的语义分割。
  6. 图像分类:将图像分为不同的类别,通常通过预测图像中出现的主要对象或场景。
  7. 机器翻译:将源语言的文本翻译成目标语言的文本。
  8. 问答系统:回答用户提出的自然语言问题,通常在给定的上下文中查找答案。
  9. 语音识别:将音频信号转换为文本,通常用于语音助手和语音命令的应用。
  10. 图像生成:生成新的图像,如图像合成、风格迁移等。
  11. 推荐系统:为用户推荐特定的商品、内容或服务,基于用户行为和兴趣。

再利用(Repurposing)、全参微调(Full Fine-Tuning)和部分参数微调(Partial Fine-tuning)

在迁移学习中,按照微调模型的全部参数,还是部分参数,我们分为如下两类。

全参微调(Full Fine-Tuning)

指在预训练模型的基础上,对整个模型的所有参数进行微调。在这个过程中,模型权重会根据目标任务的数据进行全面调整,而不仅仅是最后几层或最后一层的权重。这意味着预训练模型的所有层都能够适应新任务,但可能需要较大的目标任务数据集来防止过拟合。

部分参数微调(Partial Fine-tuning)

只对模型的部分参数进行微调,通常是最后几层或最后一层的参数。这种方式在目标任务数据较少的情况下更常见,以防止过拟合并提高模型的泛化能力。

重新利用(Repurposing)或者叫再利用

指的是将预训练模型应用于一个新的任务,而这个过程可能包括对模型的一部分参数进行微调。再利用可以分为全参微调和部分参数微调。

线性探测(Linear Probing)微调策略

在线性探测(Linear Probing)中,通过添加一个简单的线性层(线性分类器)来微调模型,以适应特定的任务。这个线性层是一个全连接层,它的输出维度等于目标任务的类别数(对于分类任务)或任务特定的输出维度。它冻结之前的所有参数,只训练该线性分类器层的参数。所以是部分参数微调。

其他一些简单的微调策略

  1. Prompt Tuning
  2. Partial-k:只微调模型的最后k层,冻结其他层
  3. MLP-k:增加一个k层的MLP(多层感知机)作为分类器
  4. Side-Tuning:训练一个 side 网络,添加和调整辅助任务(side tasks)来提高模型性能。
  5. Bias:只微调网络的 bias 参数

提示(Prompt)和指令(Instruction)

Prompt 和 Instruction 的区别

  • 提示(Prompt)和指令(Instruction)都是用户对LLM的输入的详细上下文的描述。
  • 提示:类似于MLM技术,构造好提示后,把用户希望获得的内容变成MLM中[MASK]的token或留白,让模型去回答补全。类似于完型填空。
  • 指令:即通过指令或命令, 告诉模型需要做什么,我需要得到什么。

如何构建好的 prompt 或 instruct

  1. 清晰和简洁:Prompt 应该明确和简洁,避免模糊或复杂的语言。清晰的 prompt 有助于模型正确理解任务。
  2. 任务导向:prompt 应该明确指导模型执行特定的任务,避免过于开放式的描述。任务导向的 prompt 有助于模型集中精力解决特定问题。
  3. 关键词和实体:使用关键词和实体有助于引导模型关注任务的核心内容。这可以通过在 prompt 中强调关键词或提到实体来实现。
  4. 多样性和变化性:为了提高模型的鲁棒性,可以设计多样性的 prompt,涵盖任务的不同方面,以及各种可能的输入方式。
  5. 验证和调整:在应用 prompt 前,可以通过试验和验证来不断调整。观察模型对不同 prompt 的表现,以确保 prompt 对任务的影响是积极的。

提示微调(Prompt Tuning)微调技术

由于BERT的预训练使用了MLM,所以这类模型对于提示微调训练来说比较合适。我们发现,比如BERT它本来就是做完形填空比较合适的,预训练中也没有做比如情感分析之类的任务。但是当我们构建出“今天天气真好。这句句子的情感是 __ 的。”的 prompt 之后,BERT 根据完形填空的方法,自然倾向于填入“积极的/正面的”,就可以迁移到情感分析的下游任务去了!

如何构建好的 prompt 或 instruct

  1. 清晰和简洁:Prompt 应该明确和简洁,避免模糊或复杂的语言。清晰的 prompt 有助于模型正确理解任务。
  2. 任务导向:prompt 应该明确指导模型执行特定的任务,避免过于开放式的描述。任务导向的 prompt 有助于模型集中精力解决特定问题。
  3. 关键词和实体:使用关键词和实体有助于引导模型关注任务的核心内容。这可以通过在 prompt 中强调关键词或提到实体来实现。
  4. 多样性和变化性:为了提高模型的鲁棒性,可以设计多样性的 prompt,涵盖任务的不同方面,以及各种可能的输入方式。
  5. 验证和调整:在应用 prompt 前,可以通过试验和验证来不断调整。观察模型对不同 prompt 的表现,以确保 prompt 对任务的影响是积极的。

指令微调(Instruction Tuning)微调技术

对于指令微调,就感觉是提示微调的一个进一步的版本。从简单的完形填空上升到了基于单个或多个指令,让模型进行复杂操作。即,指令微调可以应对多个下游任务,而不是单单的一个简单任务。

对于训练集,我们可以这样构建:

  1. 准备一组指令集,比如 “该文本的情感是正面的还是负面的?”
  2. 准备带标签数据集,比如 情感分类任务的标签可以是“正面”或“负面”
  3. 把指令集和数据集的提问进行拼合,比如 “该文本的情感是正面的还是负面的?这家餐厅的食物很好吃。”
  4. 若回答效果比较差,则对指令进行微调。之后进行模型训练即可。

LoRA 低秩自适应(Low-Rank Adaptation)训练技术

LoRA认为,随着LLM参数不断增多,全参微调的消耗时间和资源较多,而其他一些微调效果不佳。LoRA还认为,LLM过度参数化了,可以通过其内在的低纬度参数进行任务适配。LoRA允许我们通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的一些密集层,同时保持预先训练的权重不变。

在原始预训练语言模型PLM(Pertrained Language Model)旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的内在秩。训练的时候固定PLM的参数,只训练降维矩阵A与升维矩阵B。模型的输入输出维度不变,输出时将BA与PLM的参数叠加。用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵。因此,LoRA 的训练成本很低,且比较通用,也有一定的效果(但是想要很好的效果还得全参微调或者其他方法)。

适配器学习(Adapter Learning)微调技术

Adapter引入NLP领域,作为全模型微调的一种替代方案。在预训练模型每一层(或某些层)中添加Adapter模块,微调时冻结预训练模型主体,由Adapter模块学习特定下游任务的知识。

每个Adapter模块由两个前馈子层组成,第一个前馈子层将Transformer块的输出作为输入,将原始输入维度d投影到m,通过控制m的大小来限制Adapter模块的参数量,通常情况下m<<d。在输出阶段,通过第二个前馈子层还原输入维度,将m重新投影到d,作为Adapter模块的输出。通过添加Adapter模块来产生一个易于扩展的下游模型,每当出现新的下游任务,通过添加Adapter模块来避免全模型微调与灾难性遗忘的问题。Adapter方法不需要微调预训练模型的全部参数,通过引入少量针对特定任务的参数,来存储有关该任务的知识,降低对模型微调的算力要求。

前缀微调(Prefix-Tuning)微调技术

相比与离散的prompt,需要人工寻找比较合适的提示。为何不提出连续的prompt?前缀微调在输入token之前构造一段任务相关的virtual tokens作为Prefix。然后,在训练的时候只更新Prefix部分的参数,而 PLM 中的其他部分参数固定。不同任务就对应不同的 Prefix。这样,需要在 transformer 中的每层稍作修改,不同任务就可以获得不同的 Prefix 头了。

P微调(P-Tuning)微调技术

该方法将 Prompt 转换为可以学习的 Embedding 层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。相比Prefix Tuning,P-Tuning加入的可微的virtual token,但仅限于输入层,没有在每一层都加;另外,virtual token的位置也不一定是前缀,插入的位置是可选的。这里的出发点实际是把传统人工设计模版中的真实token替换成可微的virtual token。

PEFT 参数高效微调(Parameter-Efficient Fine-Tuning)开源参数高效微调库

PEFT 是 Huggingface 开源的一个参数高效微调库,它提供了最新的参数高效微调技术,并且可以与 Transformers 和 Accelerate 进行无缝集成。PEFT 目前支持 LoRA、Prefix Tuning & P-Tuning v2、P-Tuning、Prompt Tuning、AdaLoRA、IA3。

RL 强化学习(Reinforcement Learning)

一般强化学习在博弈、游戏、棋类中,比较常见。但是在自然语言处理领域用到语言模型微调中, 使用则不大相同了。在模型微调阶段,一般使用SFT监督微调。但现在有一些人提出了基于强化学习的一些微调方式,且有一些浪潮迹象。目前最火的就是RLHF。

RLHF 基于人类反馈的强化学习(Reinforcement Learning from Human Feedback)

RLHF是为了引入人类反馈,使用人类偏好数据进行训练,让模型产生符合人类喜好的回答。经典RLHF一般就如下图所示三个阶段:

  1. 第一步,收集带标签数据,训练一个SFT模型,这里也被叫做策略(Policy)
  2. 第二步,收集偏好数据,训练一个RM奖励模型(Reward Model)
  3. 第三步,用一个强化学习的算法来微调该SFT模型,比如经典的PPO算法。

在NLP语境下,智能体对应语言模型,环境对应上下文,状态对应语言模型已经输出的前文,动作对应接下来选择输出的内容。总收益对应语言模型输出完后,人们对该文本的偏好程度,即时收益对应语言模型输出下一个token的暂时收益。

在RLHF-PPO中,一共有四个主要模型:

  1. Actor Model:演员模型,这就是我们想要训练的目标语言模型
  2. Critic Model:评论家模型,它的作用是预估总收益
  3. Reward Model:奖励模型,它的作用是计算即时收益
  4. Reference Model:参考模型,它的作用是在RLHF阶段给语言模型增加一些“约束”,防止语言模型训歪(朝不受控制的方向更新,效果可能越来越差)

其中,Actor/Critic Model(在RLHF阶段是需要训练的)在RLHF中,我们不仅要训练模型生成符合人类喜好的内容的能力(Actor),也要提升模型对人类喜好量化判断的能力(Critic)。而Reward/Reference Model是参数冻结的。再次说明下,其中的各种复杂的损失函数可以在上述提到的博文中阅读。现在PPO已经出了很多新的替代方案了(由于RLHF-PPO运用起来比较复杂),比如DPO等。更新的内容需要阅读相关论文。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号