LLM之学习笔记(一)

前言

记录一下自己的学习历程,也怕自己忘掉了某些知识点

Prefix LM 和 Causal LM区别是什么?

Prefix LM (前缀语⾔模型)和 Causal LM(因果语言模型)是两者不同类型的语言模型,它们的区别在于生成文本的方式和训练目标

Prefix LM

        Prefix LM(前缀语⾔模型)其实是Encoder-Decoder模型的变体。①在标准的Encoder-Decoder模型中,Encoder和Decoder各自使用不同的结构 ②在Prefix LM中Encoder和Decoder则共享一个Transformer结构,而Transformer内部通过Attention Mask机制实现Encoder与Decoder。

        与标准的Encoder-Decoder类似,Prefix LM在Encoder部分采用Auto Encoding(自编码)模式,即前缀序列中任意两个Token都相互可见,而Decoder部分采用Auto Regressive(自回归)模式,即待生成的token可以看到Encoder侧所有token和Decoder侧已经生成的token,但不能看到未来尚未产生的token。

应用场景

适合于需要基于已有文本继续生成文本的任务,例如文本补全、续写故事等

优势

能够利用完整的上下文信息来生成文本,有助于生成更加准确和连贯的内容

代表模型

T5、UniLM等,这些模型通过共享编码器(Encoder)和解码器(Decoder)的参数,实现对前缀的理解和文本生成

Causal LM

        Causal LM是因果语言模型,目前流行地大多数模型就是这种结构,因为GPT系列的模型内部结构就是它,还有开源的LLaMa也是。
        Causal LM只涉及到Encoder-Decoder中的Decoder部分,采用Auto Regressive模式,直白地说,就是根据历史的token来预测下一个token,也是在Attention Mask这里做的手脚

应用场景

广泛用于需要生成新文本的任务,例如文本摘要、聊天机器人、语言生成等

优势

由于其自回归的特性,Causal LM在生成文本时可以逐步构建上下文,适用于长文本生成和需要逐步推理的场景

代表模型

GPT系列模型,这些模型通过逐步生成文本的方式,实现了对语言的深入理解和生成

技术细节对比

训练过程:Prefix LM在训练时可能会使用到整个序列的信息来预测下一个词,而Causal LM在训练时只能使用到当前词之前的所有词。

解码方式:Prefix LM可以采用非自回归解码,即并行生成所有词;Causal LM则采用自回归解码,即一个词接一个词地生成。

上下文利用:Prefix LM在生成时可以利用到更全面的上下文信息,而Causal LM则只能利用到已经生成的文本作为上下文。

网上答案:

1. Prefix LM:前缀语⾔模型是⼀种⽣成模型,它在⽣成每个词时都可以考虑之前的上下⽂信
息。在⽣成时,前缀语⾔模型会根据给定的前缀(即部分⽂本序列)预测下⼀个可能的词。这种模型可以⽤于自然语言理解、机器翻译、填空等任务。
2. Causal LM:因果语⾔模型是⼀种⾃回归模型,它只能根据之前的⽂本⽣成后续的⽂本,⽽不
能根据后续的⽂本⽣成之前的⽂本。在训练时,因果语⾔模型的⽬标是预测下⼀个词的概率,给定之前 的所有词作为上下⽂。这种模型可以⽤于⽂本⽣成、语⾔建模等任务。

为什么现在的大模型大多是decoder-only的架构?

1、训练效率

        相比于Encoder-Decoder结构,Decoder-only模型通常需要更少的参数来达到相似的性能。这是因为Encoder-Decoder结构需要同时学习编码输入和生成输出的能力,而Decoder-only模型只需要专注于生成输出

2、性能表现

        尽管Decoder-only模型在理解性任务上可能不如Encoder-Decoder结构,但它们在生成性任务上的表现往往更胜一筹。随着模型规模的增大,Decoder-only模型在理解和生成任务上的差距逐渐缩小,甚至在某些情况下能够超越Encoder-Decoder模型。

3、理论

        理论上是因为Encoder-Decoder的双向注意力会存在低秩问题,这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处。而Encoder-Decoder架构之所以能够在某些场景下表现更好,大概只是因为它多了一倍参数。所以,在同等参数量、同等推理成本下,Decoder-only架构就是最优选择了。

Multi-query Attention与Grouped-query Attention区别是什么?

回答

         Multi-query Attention和Grouped-query Attention是两种改进和扩展传统自注意力机制的变体。   传统的MHA(Multi-head Attention)是将输入划分为多个Head,并为每个Head独立计算注意力。在MHA中的,Q、K、V会根据每个head做不同的转换(可以独立学习输入中的不同特性)。这在Head数量较多时候可能会存在计算密集的问题。

        Grouped-query Attention:这种机制将查询分成多个组,每个组内的查询与相应的键值对进行交互。这样可以减少计算复杂度,提高效率,同时仍能保持良好的性能。

      Multi-query Attention:MQA 让所有的Head之间共享同样的一份 K 和 V 矩阵(意味K和V的计算唯一),只让 Q 保留了原始多头的性质(每个Head存在不同的转换),从而大大减少 K 和 V 矩阵的参数量以及KV Cache的显存占用,以此来达到提升推理速度,但是会带来精度上的损失

LLM中token指的是什么?

省流总结:文本被转换为token。token被赋予token ID。这些token ID 可用于创建embedding,embedding之后输入LLM

关于LLM:揭秘token与embedding的机制

搞懂LLM中的Token,看这一篇就够了

关于LLM:揭秘token与embedding的机制

稀疏向量与稠密向量

        在RAG应用中,经常能听到稀疏向量与稠密向量,在这里简单介绍一下。

在机器学习和数据处理中,向量是基本的数据结构之一。根据向量中非零元素的数量和分布,可以将向量分为稀疏向量(Sparse Vector)和稠密向量(Dense Vector)。

稀疏向量: 稀疏向量是指大部分元素都是零,只有少数几个元素是非零的向量。这种向量在表示上通常会省略掉零元素,只记录非零元素的位置和值,以节省存储空间和提高计算效率。例如,一个长度为1000的向量,如果只有10个元素是非零的,那么这个向量就可以被视为稀疏向量。

举个例子:向量(1.0,0.0,1.0,3.0)

密集格式:表示为[1.0,0.0,1.0,3.0],

稀疏格式表示为(4,[0,2,3],[1.0,1.0,3.0])

第一个4表示向量的长度(元素个数),[0,2,3]是索引数组(即位置);[1.0,1.0,3.0]是values数组(索引对应位置的值),表示向量0的位置的值是1.0,2的位置的值是1.0,而3的位置的值是3.0,其他的位置都是0,

稠密向量: 稠密向量则相反,它包含的元素大部分是非零的,或者非零元素的比例并不低。稠密向量的存储通常会保存所有元素的值,无论它们是否为零

两者的区别

  1. 非零元素的分布

    • 稀疏向量:非零元素很少,大部分元素都是零。
    • 稠密向量:非零元素较多,或者非零元素的比例不低。
  2. 存储方式

    • 稀疏向量:通常只存储非零元素的位置和值,可以节省大量存储空间。
    • 稠密向量:需要存储所有元素的值,即使大部分是零。
  3. 计算效率

    • 稀疏向量:在执行向量运算时,可以只对非零元素进行操作,通常计算效率更高。
    • 稠密向量:需要考虑所有元素,计算可能会更耗时。
  4. 应用场景

    • 稀疏向量:在特征维度非常高,但每个样本的有效特征很少的情况下非常适用,如文本处理中的词袋模型。
    • 稠密向量:在特征维度不高,且大部分特征对结果都有影响的情况下使用,如图像处理中的像素数据。

稀疏向量表示通常适用于以下几种情况:

  1. 高维数据:当数据的维度非常高时,如果每个样本中只有少数几个特征是非零的,使用稀疏向量可以节省大量的存储空间和计算资源。

  2. 特征稀疏:在数据集中,如果大多数特征对于大多数样本都是零值,例如文本数据中的词袋模型,每个文档只包含词汇表中的少数几个词。

  3. 减少计算复杂度:稀疏向量可以在计算过程中跳过零值,从而减少计算量,提高算法的效率。

以下是一些具体的应用场景,其中稀疏向量表示特别有用:

  • 文本处理:在自然语言处理中,文本数据通常转换成词频或TF-IDF向量,这些向量通常是稀疏的,因为一个文档只包含词汇表中的少数几个词。

  • 推荐系统:用户对商品的评分矩阵通常是稀疏的,因为用户只对少数商品进行了评分。

  • 基因数据分析:在基因表达数据中,通常只有少数基因在特定细胞类型中活跃,因此数据是稀疏的。

  • 图像处理:在处理图像数据时,如果图像被转换成某种基于像素的特征表示,且图像中有很多空白或单一颜色区域,则可以使用稀疏向量。

  • 稀疏编码:在稀疏编码算法中,目的是找到一组稀疏的基向量来表示数据,这样可以更好地捕捉数据的结构。

  • 压缩感知:在压缩感知领域,信号的稀疏表示用于从远低于奈奎斯特率的采样率中恢复信号。

  • 图数据:在处理图数据时,如果图是稀疏的(即边的数量远小于可能的最大边数),那么邻接矩阵或特征矩阵可能是稀疏的。

二者的优势:

  • 稠密向量:捕获文本的整体语义信息
  • 稀疏向量:保留关键词的重要性和频率信息

解释下:

稠密向量和稀疏向量在捕获文本信息时的差异,主要源于它们的数据表示方式和适用的算法特性。

稠密向量: 稠密向量通常是固定长度的,并且每个维度都对应一个实际的数值,无论这个数值是否为零。稠密向量常用于深度学习模型,如词嵌入(Word Embeddings)技术,例如Word2Vec或GloVe。以下解释为什么稠密向量能捕获文本的整体语义信息:

  1. 上下文关系:稠密向量通过学习单词在大量文本中的上下文关系,将单词映射到高维空间中的向量。这些向量捕获了单词的语义和语法属性,即使是非常相似的词也能够在向量空间中体现出差异。

  2. 分布式表示:稠密向量采用分布式表示,意味着单词的意义是由其向量中的所有维度共同决定的,而不是由单个维度或几个维度决定。这种表示方式可以捕捉到单词的复杂语义信息。

  3. 连续性:稠密向量在向量空间中的位置是连续的,这意味着相似的词在向量空间中是接近的,这使得稠密向量可以用于捕捉文本中的细微语义差异。

稀疏向量: 稀疏向量则主要记录非零元素的索引和值,而零元素通常不存储。稀疏向量常用于基于计数的模型,如TF-IDF。以下是为什么稀疏向量主要保留关键词的重要性和频率信息:

  1. 关键词重要性:在稀疏向量表示中,非零元素通常对应于文本中的关键词。这些非零元素的值(如词频或TF-IDF权重)反映了关键词在文本中的重要性。

  2. 频率信息:稀疏向量中的非零值可以直接表示单词在文本中出现的频率。这对于某些算法(如基于频率的文本分类器)来说是非常重要的信息。

  3. 可解释性:稀疏向量的每个非零元素都可以直接对应到原始文本中的一个特征(如单词),这使得稀疏向量在模型解释性方面具有优势。

LLM输入句子长度理论上可以无限延长嘛?

        理论上来说,LLMs(⼤型语⾔模型)可以处理任意⻓度的输⼊句⼦,但实际上存在⼀些限制和挑战。下⾯是⼀些相关的考虑因素:

        1. 计算资源:⽣成⻓句⼦需要更多的计算资源,包括内存和计算时间。由于LLMs通常是基于神经⽹络的模型,计算⻓句⼦可能会导致内存不⾜或计算时间过⻓的问题。
        2. 模型训练和推理:训练和推理⻓句⼦可能会⾯临⼀些挑战。在训练阶段,处理⻓句⼦可能会导致梯度消失或梯度爆炸的问题,影响模型的收敛性和训练效果。在推理阶段,⽣成⻓句⼦可能会增加模型的错误率和⽣成时间。
        3. 上下⽂建模:LLMs是基于上下⽂建模的模型,⻓句⼦的上下⽂可能会更加复杂和深层。模型需要能够捕捉⻓句⼦中的语义和语法结构,以⽣成准确和连贯的⽂本。
        
可以通过增加计算资源、优化模型结构和参数设置,以及使用更高效的推理算法来提高LLMS处理长句子的能力

如果想要在某个模型基础上做全参数微调,究竟需要多少显存?

要确定全参数微调所需的显存量,需要考虑以下⼏个因素:
        1. 模型的⼤⼩:模型的⼤⼩是指模型参数的数量。通常,参数越多,模型的⼤⼩就越⼤。⼤型的预训练模型如Bert、GPT等通常有数亿到数⼗亿个参数,⽽较⼩的模型可能只有数百万到数千万个参数。模型的⼤⼩直接影响了所需的显存量。
        2. 批量⼤⼩:批量⼤⼩是指在每次训练迭代中⼀次性输⼊到模型中的样本数量。较⼤的批量⼤⼩可以提⾼训练的效率,但也需要更多的显存。通常,全参数微调时,较⼤的批量⼤⼩可以提供更好的性
能。
        3. 训练数据的维度:训练数据的维度是指输⼊数据的形状。如果输⼊数据具有较⾼的维度,例如图像数据,那么所需的显存量可能会更⼤。对于⽂本数据,通常需要进⾏⼀些编码和嵌⼊操作,这也会增加显存的需求。
        4. 训练设备的显存限制:最后,需要考虑训练设备的显存限制。显卡的显存⼤⼩是⼀个硬性限制,超过显存限制可能导致训练失败或性能下降。确保所选择的模型和批量⼤⼩适应训练设备的显存⼤
⼩。
综上所述,全参数微调所需的显存量取决于模型的⼤⼩、批量⼤⼩、训练数据的维度以及训练设备的显存限制。在进⾏全参数微调之前,建议先评估所需的显存量,并确保训练设备具备⾜够的显存来⽀持训练过程。

SFT(监督微调,Supervised Fine-Tuning)

SFT指的是在一个预训练的模型(如大型语言模型)基础上,利用针对性的数据集实施额外的训练过程,旨在使模型更精准地契合特定任务需求或深入某一专业领域。

当前SFT的几种方式如下:

1、全参数微调(Full Parameter Fine Tuning):全参数微调涉及对模型的所有权重进行调整,以使其完全适应特定领域或任务。这种方法适用于拥有大量与任务高度相关的高质量训练数据的情况,通过更新所有参数来最大程度地优化模型对新任务的理解和表现

2、部分参数微调(Sparse Fine Tuning / Selective Fine Tuning):部分参数微调策略仅选择性地更新模型中的某些权重,尤其是在需要保留大部分预训练知识的情况下。

3、LoRA(Low-Rank Adaptation):通过向模型权重矩阵添加低秩矩阵来进行微调,既允许模型学习新的任务特定模式,又能够保留大部分预训练知识,从而降低过拟合风险并提高训练效率

4、P-tuning v2:这是一种基于prompt tuning的方法,仅微调模型中与[prompt] 相关的部分参数(例如,额外添加的可学习prompt嵌入),而不是直接修改模型主体的权重

5、QLoRA:可能是指Quantized Low-Rank Adaptation或其他类似技术,它可能结合了低秩调整与量化技术,以实现高效且资源友好的微调

特点:

1、SFT能够利用预训练模型的参数和结构,避免从头开始训练模型,从而加速模型的训练过程,并且能够提高模型在目标任务上的表现。

2、缺点:需要大量的标注数据用于目标任务的微调,如果标注数据不足,可能会导致微调后的模型表现不佳。其次,由于预训练模型的参数和结构对微调后的模型性能有很大的影响,因此选择合适的预训练模型也很重要

为什么SFT之后感觉LLM傻了?

在进⾏Supervised Fine-Tuning(SFT)之后,有时可能会观察到基座模型(如语⾔模型)的性能下降或产⽣⼀些“傻”的⾏为。这可能是由于以下原因:
        1. 数据偏移:SFT过程中使⽤的微调数据集可能与基座模型在预训练阶段接触到的数据分布有所不同。如果微调数据集与预训练数据集之间存在显著的差异,模型可能会在新任务上表现较差。这种数据偏移可能导致模型在新任务上出现错误的预测或不准确的输出。
        2. ⾮典型标注:微调数据集的标注可能存在错误或不准确的标签。这些错误的标签可能会对模型的性能产⽣负⾯影响,导致模型产⽣“傻”的⾏为。
        3. 过拟合:如果微调数据集相对较⼩,或者模型的容量(参数数量)较⼤,模型可能会过拟合微调数据,导致在新的输⼊上表现不佳。过拟合可能导致模型过于依赖微调数据的特定样本,⽽⽆法泛化到更⼴泛的输⼊。
        4. 缺乏多样性:微调数据集可能缺乏多样性,未能涵盖模型在新任务上可能遇到的各种输⼊情况。这可能导致模型在⾯对新的、与微调数据集不同的输⼊时出现困惑或错误的预测。
为了解决这些问题,可以尝试以下⽅法:
        1、收集更多的训练数据,以增加数据的多样性和覆盖范围。
        2、仔细检查微调数据集的标注,确保标签的准确性和⼀致性。
        3、使⽤正则化技术(如权重衰减、dropout)来减少过拟合的⻛险。
        4、进⾏数据增强,通过对微调数据进⾏⼀些变换或扩充来增加多样性。
        5、使⽤更复杂的模型架构或调整模型的超参数,以提⾼模型的性能和泛化能⼒。
通过这些⽅法,可以尽量减少Supervised Fine-Tuning之后模型出现“傻”的情况,并提⾼模型在新任务上的表现。

SFT 指令微调数据 如何构建?

 构建Supervised Fine-Tuning(SFT)的微调数据需要以下步骤:

        1. 收集原始数据:⾸先,您需要收集与⽬标任务相关的原始数据。这可以是对话数据、分类数据、⽣成任务数据等,具体取决于您的任务类型。确保数据集具有代表性和多样性,以提⾼模型的泛化能⼒。
        2. 标注数据:对原始数据进⾏标注,为每个样本提供正确的标签或⽬标输出。标签的类型取决于您的任务,可以是分类标签、⽣成⽂本、对话回复等。确保标注的准确性和⼀致性。
        3. 划分数据集:将标注数据划分为训练集、验证集和测试集。通常,⼤部分数据⽤于训练,⼀⼩部分⽤于验证模型的性能和调整超参数,最后⼀部分⽤于最终评估模型的泛化能⼒。
        4. 数据预处理:根据任务的要求,对数据进⾏预处理。这可能包括⽂本清洗、分词、去除停⽤词、词⼲化等处理步骤。确保数据格式和特征表示适合模型的输⼊要求。
        5. 格式转换:将数据转换为适合模型训练的格式。这可能涉及将数据转换为⽂本⽂件、JSON格式或其他适合模型输⼊的格式。
        6. 模型微调:使⽤转换后的数据对基座模型进⾏微调。根据任务的要求,选择适当的微调⽅法和超参数进⾏训练。这可以使⽤常⻅的深度学习框架(如PyTorch、TensorFlow)来实现。
        7. 模型评估:使⽤测试集对微调后的模型进⾏评估,计算模型在任务上的性能指标,如准确率、召回率、⽣成质量等。根据评估结果对模型进⾏进⼀步的优化和调整。
通过以上步骤,您可以构建适合Supervised Fine-Tuning的微调数据集,并使⽤该数据集对基座模型进⾏微调,以适应特定任务的需求

训练中⽂⼤模型有啥经验?

        1. 数据预处理:对于中⽂⽂本,常⻅的预处理步骤包括分词、去除停⽤词、词性标注、拼⾳转换等。 分词是中⽂处理的基本步骤,可以使⽤成熟的中⽂分词⼯具,如jieba、pkuseg等。
        2. 数据增强:中⽂数据集可能相对有限,可以考虑使⽤数据增强技术来扩充数据集。例如,可以使⽤同义词替换、随机插⼊或删除词语、句⼦重组等⽅法来⽣成新的训练样本。
        3. 字词级别的表示:中⽂中既有字级别的表示,也有词级别的表示。对于字级别的表示,可以使⽤字符嵌⼊或者字级别的CNN、RNN等模型。对于词级别的表示,可以使⽤预训练的词向量,如
Word2Vec、GloVe等。
        4. 预训练模型:可以考虑使⽤已经在⼤规模中⽂语料上预训练好的模型作为初始模型,然后在⽬标任务上进⾏微调。例如,可以使⽤BERT、GPT等预训练语⾔模型。这样可以利⽤⼤规模中⽂语料的信息,
提升模型的表达能⼒和泛化能⼒。
        5. 中⽂特定的任务:对于⼀些中⽂特定的任务,例如中⽂分词、命名实体识别、情感分析等,可以使⽤⼀些中⽂特定的⼯具或者模型来辅助训练。例如,可以使⽤THULAC、LTP等中⽂NLP⼯具包。
        6. 计算资源:训练⼤模型需要⼤量的计算资源,包括GPU、内存和存储。可以考虑使⽤云计算平台或者分布式训练来加速训练过程。
        7. 超参数调优:对于⼤模型的训练,超参数的选择和调优⾮常重要。可以使⽤⽹格搜索、随机搜索或者基于优化算法的⾃动调参⽅法来寻找最佳的超参数组合。

预训练和微调哪个阶段注⼊知识的?

在⼤模型训练过程中,知识注⼊通常是在预训练阶段进⾏的。具体来说,⼤模型的训练⼀般包括两个阶段:预训练和微调。
        在预训练阶段,使⽤⼤规模的通⽤数据对模型进⾏训练,以学习语⾔知识和表示能⼒。这⼀阶段的⽬标是通过⾃监督学习或其他⽆监督学习⽅法,让模型尽可能地捕捉到数据中的统计规律和语⾔结构,并⽣成丰富的语⾔表示。
        在预训练阶段,模型并没有针对特定任务进⾏优化,因此预训练模型通常是通⽤的,可以应⽤于多个不 同的任务和领域。
        在微调阶段,使⽤特定任务的数据对预训练模型进⾏进⼀步的训练和调整。微调的⽬标是将预训练模型中学到的通⽤知识和能⼒迁移到特定任务上,提升模型在⽬标任务上的性能。
        在微调阶段,可以根据具体任务的需求,调整模型的参数和结构,以更好地适应⽬标任务的特点。微调通常需要较少的任务数据,因为预训练模型已经具备了⼀定的语⾔理解和泛化能⼒。
因此,知识注⼊是在预训练阶段进⾏的,预训练模型通过⼤规模通⽤数据的训练,学习到了丰富的语⾔知识和表示能⼒,为后续的微调阶段提供了基础。微调阶段则是在预训练模型的基础上,使⽤特定任务的数据进⾏进⼀步训练和调整,以提升性能。

想让模型学习某个领域或⾏业的知识,是应该预训练还是应该微调?

         如果你想让⼤语⾔模型学习某个特定领域或⾏业的知识,通常建议进⾏微调⽽不是预训练。
预训练阶段是在⼤规模通⽤数据上进⾏的,旨在为模型提供通⽤的语⾔理解和表示能⼒。预训练模型通常具有较强的泛化能⼒,可以适⽤于多个不同的任务和领域。然⽽,由于预训练模型是在通⽤数据上进⾏训练的,其对特定领域的知识和术语可能了解有限。
        因此,如果你希望⼤语⾔模型能够学习某个特定领域或⾏业的知识,微调是更合适的选择。在微调阶段,你可以使⽤特定领域的数据对预训练模型进⾏进⼀步训练和调整,以使模型更好地适应⽬标领域的特点和需求。微调可以帮助模型更深⼊地理解特定领域的术语、概念和语境,并提升在该领域任务上的性能。
        微调通常需要较少的任务数据,因为预训练模型已经具备了⼀定的语⾔理解和泛化能⼒。通过微调,你可以在预训练模型的基础上,利⽤特定领域的数据进⾏有针对性的调整,以使模型更好地适应⽬标领域的需求。
总之,如果你希望⼤语⾔模型学习某个特定领域或⾏业的知识,建议进⾏微调⽽不是预训练。微调可以 帮助模型更好地适应⽬标领域的特点和需求,并提升在该领域任务上的性能。

微调后的模型出现能⼒劣化,灾难性遗忘是怎么回事?

灾难性遗忘(Catastrophic Forgetting)是指在模型微调过程中,当模型在新任务上进⾏训练
时,可能会忘记之前学习到的知识,导致在旧任务上的性能下降。这种现象常⻅于神经⽹络模型的迁移学习或连续学习场景中。
在微调⼤语⾔模型时,灾难性遗忘可能出现的原因包括:
1. 数据分布差异:微调过程中使⽤的新任务数据与预训练数据或旧任务数据的分布存在差异。如果新任务的数据分布与预训练数据差异较⼤,模型可能会过度调整以适应新任务,导致旧任务上的性能下降。
2. 参数更新冲突:微调过程中,对新任务进⾏训练时,模型参数可能会被更新,导致之前学习到的知识被覆盖或丢失。新任务的梯度更新可能会与旧任务的梯度更新发⽣冲突,导致旧任务的知识被遗忘。
为了解决灾难性遗忘问题,可以尝试以下⽅法:
        1. 重播缓冲区(Replay Buffer):在微调过程中,使⽤⼀个缓冲区来存储旧任务的样本,然后将旧任务的样本与新任务的样本⼀起⽤于训练。这样可以保留旧任务的知识,减少灾难性遗忘的发⽣。
        2. 弹性权重共享(Elastic Weight Consolidation):通过引⼊正则化项,限制模型参数的变
动范围,以保护之前学习到的知识。这种⽅法可以在微调过程中平衡新任务和旧任务之间的重要性。
        3. 增量学习(Incremental Learning):将微调过程分为多个阶段,每个阶段只微调⼀⼩部分参数。这样可以逐步引⼊新任务,减少参数更新的冲突,降低灾难性遗忘的⻛险。
        4. 多任务学习(Multi-Task Learning):在微调过程中,同时训练多个相关任务,以提⾼模型的 泛化能⼒和抗遗忘能⼒。通过共享模型参数,可以在不同任务之间传递知识,减少灾难性遗忘的影响。
综上所述,灾难性遗忘是在模型微调过程中可能出现的问题。通过合适的⽅法和技术,可以减少灾难性遗忘的发⽣,保留之前学习到的知识,提⾼模型的整体性能。

预训练和SFT操作有什么不同?

⼤语⾔模型的预训练和有监督微调(Supervised Fine-Tuning)是两个不同的操作,它们在⽬标、
数据和训练⽅式等⽅⾯存在⼀些区别。
        1. ⽬标:预训练的⽬标是通过⽆监督学习从⼤规模的⽂本语料库中学习语⾔模型的表示能⼒和语⾔知识。预训练的⽬标通常是通过⾃我预测任务,例如掩码语⾔模型(Masked Language Model, MLM)或下⼀句预测(Next Sentence Prediction,NSP)等,来训练模型。
有监督微调的⽬标是在特定的任务上进⾏训练,例如⽂本分类、命名实体识别等。在有监督微调
中,模型会利⽤预训练阶段学到的语⾔表示和知识,通过有监督的⽅式调整模型参数,以适应特定任务的要求。
        2. 数据:在预训练阶段,⼤语⾔模型通常使⽤⼤规模的⽆标签⽂本数据进⾏训练,例如维基百科、⽹ ⻚⽂本等。这些数据没有特定的标签或任务信息,模型通过⾃我预测任务来学习语⾔模型。
在有监督微调中,模型需要使⽤带有标签的任务相关数据进⾏训练。这些数据通常是⼈⼯标注的,
包含了输⼊⽂本和对应的标签或⽬标。模型通过这些标签来进⾏有监督学习,调整参数以适应特定任务。
3. 训练⽅式:预训练阶段通常使⽤⽆监督的⽅式进⾏训练,模型通过最⼤化预训练任务的⽬标函数来学习语⾔模型的表示能⼒。
有监督微调阶段则使⽤有监督的⽅式进⾏训练,模型通过最⼩化损失函数来学习任务相关的特征和
模式。在微调阶段,通常会使⽤预训练模型的参数作为初始参数,并在任务相关的数据上进⾏训练。
总的来说,预训练和有监督微调是⼤语⾔模型训练的两个阶段,⽬标、数据和训练⽅式等⽅⾯存在差异。预训练阶段通过⽆监督学习从⼤规模⽂本数据中学习语⾔模型,⽽有监督微调阶段则在特定任务上使⽤带有标签的数据进⾏有监督学习,以适应任务要求。
欢迎大家点赞或收藏~
大家的点赞或收藏可以鼓励作者加快更新哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python语法基础(三)

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 我们这篇文章来说一下函数的返回值和匿名函数 函数的返回值 我们先来看下面的这一段函数的定义代码 # 1、返回值的意义 def func1():print(111111111------start)num166print…

用Pycharm安装manim

由于版本和工具的差异,manim的安装方式不尽相同。本文用Pycharm来安装manim. 一、准备工作:安装相应版本的python、pycharm和ffmpeg. 此处提供一种安装ffmpeg的方式 下载地址:FFmpeg 下载后,解压到指定目录。 配置环境变量&am…

【线程】Java多线程代码案例(2)

【线程】Java多线程代码案例(2) 一、定时器的实现1.1Java标准库定时器1.2 定时器的实现 二、线程池的实现2.1 线程池2.2 Java标准库中的线程池2.3 线程池的实现 一、定时器的实现 1.1Java标准库定时器 import java.util.Timer; import java.util.Timer…

云原生时代的轻量级反向代理Traefik

Traefik 是一个用于路由和管理网络流量的反向代理,同时也是一个支持多种协议(HTTP、HTTPS、TCP、UDP)的负载均衡器。它通过自动服务发现和动态配置,帮助开发者和运维团队轻松管理复杂的应用架构。 Traefik 的主要特点如下&#x…

JavaEE---计算机是如何工作的?

1.了解冯诺依曼体系结构 2.CPU的核心概念,CPU的两个重要指标(核心数和频率) 3.CPU执行指令的流程(指令表,一条一条指令,取指令,解析指令,执行指令) 4.操作系统核心概念(管理硬件,给软件提供稳定的运行环境) 5.进程的概念(运行起来的程序和可执行文件的区别) 6.进程的管理(…

【C++】简单数据类型详解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯字符型(char)1.1 ASCII 码表 💯整型(int)2.1 整型的分类2.2 有符号和无符号整型2.3 跨平台差异2.4 整型数据类型…

Vue构建错误解决:(error TS6133)xxx is declared but its value is never read.

TypeScript会检查代码中未使用的变量,如果vscode安装了Vue的语法检查工具,会看到告警提示,再npm run build的时候,这个警告会变成错误 解决方案1:删除定义了未使用的变量 推荐使用这种方案,能保证代码的质…

泷羽sec---shell作业

作业一 写计算器 使用bc命令 需要进行安装bc 代码如下: #!/bin/bash echo "-----------------------------------" echo "输入 f 退出" echo "可计算小数和整数" echo "用法如:1.12.2" echo "------…

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 (必须要混淆开了之后才才可以设置为true) proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…

DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection

DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection 清华、苹果 个人感觉 Introduction 很自然的让读者理解作者问题的提出,也有例子直接证明了这个问题的存在,值得借鉴!! Related work写的也很不…

第T9周:Tensorflow实现猫狗识别(2)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 具体实现 (一)环境 语言环境:Python 3.10 编 译 器: PyCharm 框 架: Tensorflow 2.10.0 (二)具体…

分布式锁的实现原理

作者:来自 vivo 互联网服务器团队- Xu Yaoming 介绍分布式锁的实现原理。 一、分布式锁概述 分布式锁,顾名思义,就是在分布式环境下使用的锁。众所周知,在并发编程中,我们经常需要借助并发控制工具,如 mu…

搭建帮助中心到底有什么作用?

在当今快节奏的商业环境中,企业面临着日益增长的客户需求和竞争压力。搭建一个有效的帮助中心对于企业来说,不仅是提升客户服务体验的重要途径,也是优化内部知识管理和提升团队效率的关键。以下是帮助中心在企业运营中的几个关键作用&#xf…

深入浅出剖析典型文生图产品Midjourney

2022年7月,一个小团队推出了公测的 Midjourney,打破了 AIGC 领域的大厂垄断。作为一个精调生成模型,以聊天机器人方式部署在 Discord,它创作的《太空歌剧院》作品,甚至获得了美国「数字艺术/数码摄影」竞赛单元一等奖。 这一事件展示了 AI 在绘画领域惊人的创造力,让人们…

python+docx:(二)页眉页脚、表格操作

目录 页眉页脚 表格 表格样式 插入表格 插入行/列 合并单元格 单元格 页眉页脚 页眉页脚操作需要访问文件的section,可通过添加页脚来添加页码。 from docx import Document from docx.enum.text import WD_PARAGRAPH_ALIGNMENT, WD_ALIGN_PARAGRAPH, WD_CO…

Matlab Simulink 电力电子仿真-单相电压型半桥逆变电路分析

目录 一、单相电压型半桥逆变电路仿真模型 1.电路模型 2.电路模型参数 二、仿真分析 三、总结 1.优缺点 2.应用场景 一、单相电压型半桥逆变电路仿真模型 1.电路模型 单相电压型半桥逆变电路是一种常见的逆变电路,主要用于将直流电源转换为交流电源。 &…

C++入门——“C++11-lambda”

引入 C11支持lambda表达式,lambda是一个匿名函数对象,它允许在函数体中直接定义。 一、初识lambda lambda的结构是:[ ] () -> 返回值类型 { }。从左到右依次是:捕捉列表 函数参数 -> 返回值类型 函数体。 以下是一段用lam…

如何保护LabVIEW程序免遭反编译

在正常情况下,LabVIEW程序(即编译后的可执行文件或运行时文件,如 .exe 或 .llb)无法直接被反编译出源码。然而,有一些需要特别注意的点: 1. LabVIEW的编译机制 LabVIEW编译器会将源码(.vi文件&a…

提升76%的关键-在ModelMapper中实现性能提升的几种方法

目录 前言 一、ModelMapper基础知识 1、深入ModelMapper 2、深入Configuration配置 3、深入MappingEngineImpl 二、默认加载模式 1、基础测试代码 三、持续优化,慢慢提升 1、增加忽略字段 2、设置忽略空值模式 3、设置命名模式 4、采用精准匹配模式 四、…

【C语言】结构体、联合体、枚举类型的字节大小详解

在C语言中,结构体(struct)和联合体(union) 是常用的复合数据类型,它们的内存布局和字节大小直接影响程序的性能和内存使用。下面为大家详细解释它们的字节大小计算方法,包括对齐规则、内存分配方…