摘要:Prompt-tuning给每个任务定义了自己的Prompt,拼接到数据上作为输入 可以简单理解为Prompt Plus 版,额外增加的引导以及预设。Prompt Tuning是一种参数高效的微调技术,特别适用于大型预训练语言模型(如BERT、T5等)。与传统
Day19 微调的常用方法
1. prompt tuning
2. LSTM/MLP
3. Prefix tuning
4. LoRA
prompt tuning
Prompt-tuning给每个任务定义了自己的Prompt,拼接到数据上作为输入 可以简单理解为Prompt Plus 版,额外增加的引导以及预设。 Prompt Tuning 是一种参数高效的微调技术,特别适用于大型预训练语言模型(如BERT、T5等)。与传统的全模型微调不同,Prompt Tuning 不直接调整模型的权重,而是通过设计特定的任务提示(prompts)来引导模型生成或预测期望的答案。这种方法基于这样的理念:预训练的语言模型已经学到了大量的世界知识和语言结构,通过适当的提示可以激活这些知识以完成特定任务,而无需对整个模型进行重新训练。
Prompt Tuning 的工作原理
在Prompt Tuning中,输入数据被格式化为一个包含“提示”的形式,这个提示是专门为触发模型执行特定任务而设计的。例如,在文本分类任务中,不是直接给模型输入原始文本并要求其分类,而是构造一个带有上下文的提示,让模型根据提示推断出正确的类别。
示例:
假设我们有一个任务是情感分析,目的是判断一段电影评论是正面还是负面的。传统的方法可能是将评论直接输入到一个经过微调的模型中,并输出分类结果。但在Prompt Tuning中,我们会这样做:
原评论: "I really enjoyed this movie. The acting was superb."转换为带提示的形式:
正面提示: "I really enjoyed this movie. The acting was superb. This is a [MASK] review."负面提示: "I really enjoyed this movie. The acting was superb. This is a [negative] review."这里的[MASK]是一个占位符,表示模型需要填充的部分。在实际应用中,可能会使用更复杂的模板,且不仅仅是二选一的情况。模型的任务是基于前面的内容猜测最合适的词汇填入[MASK]位置,比如“positive”或者“great”。
应用实例
考虑一个具体的例子,如果我们使用的是一个像BERT这样的掩码语言模型,我们可以这样构造提示:
输入: "The food at this restaurant was absolutely delicious. It's one of the best places I've ever eaten at. Overall, it was a [MASK] experience."目标: 模型应该学会根据上下文填写类似于“wonderful”、“fantastic”这样的正面形容词,表明这是一个积极的体验评价。通过这种方式,Prompt Tuning 利用了预训练模型对语言的理解能力,而不是依赖于大量标注数据来进行监督学习。这对于那些缺乏足够标记数据的任务尤其有用。
优势
减少数据需求:由于它利用了模型已有的知识,因此可能不需要大量的标记数据。提高灵活性:可以通过简单地改变提示来适应不同的任务或领域,而不需要重新训练模型。参数高效:相比全模型微调,只需要调整少量参数(即提示),这使得计算成本更低且更容易实现。局限性
模型依赖性:由于它依赖于预训练模型,因此在模型架构或训练数据发生变化时,可能需要重新调整提示。任务特定性:由于提示是为特定任务设计的,因此在不同的任务之间可能需要重新设计提示。泛化能力:虽然Prompt Tuning在某些任务上表现良好,但在某些任务上可能表现不佳,因为它没有利用模型的泛化能力。LSTM/MLP
如果能自动生成一些辅助的prompt,也就是“Prompt tuning”中长长的提示,能够AI自动生成岂不美哉。那就是“LSTM/MLP”。 好的!让我们用通俗易懂的方式来解释 LSTM(长短期记忆网络) 和 MLP(多层感知机),并通过生活中的例子来帮助理解它们的工作原理。
1. MLP(多层感知机)
什么是MLP?
MLP 是一种简单的神经网络结构,由多个全连接层(Fully Connected Layers)组成。它的特点是每一层的每个神经元都与下一层的所有神经元相连。MLP 适合处理静态数据,比如一张图片、一组特征向量等。通俗例子:判断水果的好坏
假设你是一家水果店的老板,想通过水果的一些特征(如颜色、大小、重量)来判断它是否新鲜。
输入特征:水果的颜色(红/绿)、大小(大/小)、重量(重/轻)。目标:判断水果是否新鲜(新鲜/不新鲜)。MLP 的工作方式: 1. 你把水果的特征(颜色、大小、重量)输入到模型中。 2. 模型通过几层计算,逐步提取这些特征之间的关系。 3. 最后输出一个结果:新鲜还是不新鲜。
类比:MLP 就像是一个“固定规则的分类器”。它会根据你提供的特征(颜色、大小、重量),按照固定的逻辑一步步推导出答案。但它只能处理当前输入的信息,无法记住之前的上下文或历史信息。
2. LSTM(长短期记忆网络)
什么是LSTM?
LSTM 是一种特殊的循环神经网络(RNN),专门设计用来处理序列数据(如时间序列、文本、语音等)。它的核心特点是能够“记住”之前的信息,并结合当前的输入做出决策。LSTM 通过三个门(遗忘门、输入门、输出门)控制信息的流动,避免了传统 RNN 中常见的梯度消失问题。通俗例子:预测电视剧剧情
假设你正在看一部连续剧,每集的剧情都和前面几集密切相关。你想预测下一集会发生什么。
输入数据:前几集的剧情发展(如角色A做了什么、角色B说了什么)。目标:预测下一集的重要事件。LSTM 的工作方式: 1. 当你看第一集时,LSTM 会记住一些关键信息(比如角色A和角色B是朋友)。 2. 当你看到第二集时,LSTM 会结合第一集的记忆和第二集的新信息,更新它的理解(比如角色A和角色B开始闹矛盾)。 3. 到第三集时,LSTM 会利用前两集的记忆和当前的内容,推测接下来可能发生的事情(比如角色A可能会离开团队)。
类比:LSTM 就像是一个“有记忆的故事讲述者”。它不仅能理解当前的情节,还能记住之前发生的事情,并根据上下文做出合理的推断。
MLP 和 LSTM 的对比
特性MLPLSTM适用场景静态数据(图片、表格数据)序列数据(时间序列、文本、语音)是否具有记忆没有记忆,只处理当前输入有记忆,能结合过去的信息复杂度简单,容易实现复杂,需要更多的计算资源例子判断水果好坏(基于当前特征)预测电视剧剧情(基于前后关联)总结
如果任务只需要分析当前的数据(比如判断水果是否新鲜),那么 MLP 是一个简单有效的选择。如果任务需要考虑上下文或历史信息(比如预测电视剧剧情、生成文字),那么 LSTM 更加适合,因为它可以记住之前的信息并结合当前输入做出决策。Prefix tuning
既然输入prompt的时候可以增加一些复制信息,但是只在输入层增加增加了一个固定的咒语,那能不能让这个咒语在每一层处理的时候都动态更新下。 答案是可以的,这就是Prefix tuning。 prompt plus max
Prefix Tuning 简介
Prefix Tuning 是一种参数高效的微调方法,特别适用于大型预训练语言模型。与传统的全模型微调不同,它不需要对整个模型的权重进行调整,而是通过学习一个固定的“前缀”(prefix),即在输入序列前面添加一段可学习的向量序列,来引导模型完成特定任务。这种方法显著减少了需要调整的参数数量,同时保持了良好的性能。
原理
前缀嵌入:在输入序列之前插入一组特殊的可学习嵌入(embeddings),这些嵌入作为额外的上下文信息供模型使用。固定模型权重:除了新增的前缀部分外,原始模型的权重保持不变,这意味着只需要训练这一小部分新引入的参数。任务特定化:通过优化这些前缀嵌入,可以使模型更好地适应特定的任务需求,如文本分类、问答系统等。应用实例
为了更好地理解 Prefix Tuning 的应用和原理,我们来看一个通俗的例子:
例子:电影评论情感分析
假设你正在开发一个系统,用于自动分析电影评论的情感倾向(正面或负面)。你决定使用一个已经预训练好的大型语言模型来进行这项工作,但直接将其应用于你的特定数据集可能效果不佳。此时,你可以采用 Prefix Tuning 来优化模型的表现。
准备阶段:你有一组标注好的电影评论数据集,每条评论都有相应的标签(正面/负面)。 使用一个强大的预训练语言模型(例如BERT)作为基础模型。应用 Prefix Tuning:
在每条评论前添加一个固定的前缀(比如[POS] 或 [NEG]),这个前缀是由一组可学习的向量表示的。 训练过程中,只更新这些前缀向量以及最终输出层的相关参数,而保持预训练模型其他部分的权重不变。
训练过程:
输入形式变为:“[POS] 这部电影真的很好看,我强烈推荐!” 或 “[NEG] 故事情节非常拖沓,浪费时间。” 模型根据这些带有前缀的输入学习如何区分正面和负面评论,并且由于仅需调整少量参数,因此训练效率较高。
实际部署:
经过训练后,你的系统能够更准确地识别新的未见过的评论是正面还是负面的。由于主要依赖于少量可学习参数而非大规模重新训练整个模型,该系统更容易部署到资源有限的环境中。
这个可学习的向量是如何增加的呢?又是如何学习的呢?是又有一个模型生成么? 在 Prefix Tuning 中,可学习的向量(即前缀向量)并不是由另一个模型生成的,而是直接作为模型输入的一部分被引入,并通过优化算法(如梯度下降)与任务相关的损失函数来更新这些向量。下面是关于如何增加和学习这些可学习向量的详细解释:
如何增加可学习向量
初始化阶段:在 Prefix Tuning 方法中,首先需要为每个输入序列在其前面添加一个固定长度的前缀。这个前缀是由一组可学习的嵌入组成的。 这些嵌入通常初始化为随机值或使用某种预训练的初始化策略(例如从标准正态分布中抽取)。重要的是,这些嵌入是独立于原始输入文本的嵌入矩阵的。插入到模型中:
当将输入传递给模型时,除了原本的输入token外,还会将这些前缀嵌入一并送入模型的第一层(通常是embedding层之后)。这意味着对于每一个输入序列,都会有一个对应的前缀向量序列被附加在前面,共同构成新的输入表示。
如何学习这些向量
定义目标函数:一旦前缀嵌入被加入到输入中,整个系统就按照常规的方式进行前向传播,即通过所有的Transformer层或其他类型的神经网络层。 根据具体的下游任务(比如分类、生成等),定义相应的损失函数(如交叉熵损失用于分类任务)。反向传播与参数更新:
在计算完损失后,利用反向传播算法计算损失相对于所有可学习参数(包括前缀嵌入)的梯度。 使用优化器(如Adam, SGD等)根据计算出的梯度来更新前缀嵌入以及任何其他需要调整的参数(例如分类头中的权重)。
迭代训练过程:
整个过程会重复多次(多个epoch),每次都会基于当前批次的数据调整前缀嵌入和其他相关参数,以期最小化损失函数并提高模型在目标任务上的性能。
实际操作示例
假设我们正在做一个文本分类任务,想要使用 Prefix Tuning 来微调一个预训练的语言模型:
对于每条输入文本 X,我们在其前面添加一个长度为 k 的前缀向量序列 P = [p_1, p_2, ..., p_k]。这些前缀向量 P 被初始化为随机值,并且它们会被馈送到模型中,连同实际的输入文本一起经过模型的所有层。在训练过程中,我们会根据特定任务(如情感分析)的标签来计算损失,并据此更新前缀向量 P 以改善模型的表现。总之,在 Prefix Tuning 中,没有额外的模型用来生成这些可学习的向量;相反,这些向量是直接作为模型的一部分被初始化,并通过标准的机器学习流程(包括前向传播、计算损失、反向传播和参数更新)来进行学习和优化。这种方法允许在不对整个模型进行大规模重新训练的情况下,有效地调整模型的行为以适应特定的任务需求。
LoRA
就是引入了一个小的线性层,来学习少量的参数,来进行微调。(增加了一层,不过是青春版的) LoRA(Low-Rank Adaptation) 是一种用于高效微调大型预训练模型的技术。它旨在解决传统微调方法中遇到的一些挑战,如计算成本高、内存占用大以及对大规模数据集的依赖等问题。LoRA 的核心思想是通过低秩矩阵来捕捉模型参数的变化,从而实现更轻量级和高效的微调。
LoRA 的工作原理
低秩分解:在传统的微调过程中,通常需要更新整个模型的所有权重。然而,这种方法不仅计算代价高昂,而且需要大量的训练样本以避免过拟合。 LoRA 提出了一种替代方案:假设原始模型的权重变化可以被表示为一个低秩矩阵的形式。这意味着不是直接调整模型的每个权重,而是通过添加或修改一些低维子空间中的参数来近似这些变化。引入适配器(Adapters):
具体来说,在 LoRA 中,对于每一层的权重矩阵 W,我们可以将其视为基础权重加上一个低秩修正项 \Delta W = BA ,其中 B 和 A 分别是两个较小的矩阵(即低秩因子),它们的乘积构成了对原权重矩阵的修正。 这样做的好处在于只需要学习少量额外的参数 (B 和 A) 而非整个 W,大大减少了需要调整的参数数量。
固定主干模型权重:
在应用 LoRA 时,通常保持预训练模型的主干权重不变,仅优化这些新增加的低秩修正项。这有助于维持模型在广泛领域内的通用能力,同时允许其针对特定任务做出适当调整。
应用场景与优势
资源节约:由于只需训练较少的新参数,LoRA 显著降低了计算资源的需求,并且使得即使是资源有限的环境也能执行有效的模型微调。防止过拟合:通过限制可学习参数的数量,LoRA 可以帮助减少过拟合的风险,特别是在标注数据稀缺的情况下。灵活性:LoRA 不仅适用于文本处理任务,还可以应用于其他类型的序列数据,如时间序列分析或音频信号处理等。实际例子
假设你有一个已经预训练好的语言模型,想要让它更好地适应特定领域的文本分类任务(例如医疗文献分类)。使用 LoRA 技术,你可以:
将该模型加载到你的环境中。对于模型中的每一层,引入一对低秩矩阵 B 和 A 来表示该层权重的潜在变化。使用特定领域的少量标注数据来微调这些低秩矩阵,而不是重新训练整个模型。经过适当的训练后,模型就能够在这个新领域内提供更加准确的预测结果。总之,LoRA 提供了一种既经济又有效的方法来进行模型微调,特别适合那些希望在不牺牲太多性能的前提下快速适应新任务或新领域的用户。
来源:小冰课堂