当前位置: 首页 > news >正文

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. 训练⽅式:预训练阶段通常使⽤⽆监督的⽅式进⾏训练,模型通过最⼤化预训练任务的⽬标函数来学习语⾔模型的表示能⼒。
有监督微调阶段则使⽤有监督的⽅式进⾏训练,模型通过最⼩化损失函数来学习任务相关的特征和
模式。在微调阶段,通常会使⽤预训练模型的参数作为初始参数,并在任务相关的数据上进⾏训练。
总的来说,预训练和有监督微调是⼤语⾔模型训练的两个阶段,⽬标、数据和训练⽅式等⽅⾯存在差异。预训练阶段通过⽆监督学习从⼤规模⽂本数据中学习语⾔模型,⽽有监督微调阶段则在特定任务上使⽤带有标签的数据进⾏有监督学习,以适应任务要求。
欢迎大家点赞或收藏~
大家的点赞或收藏可以鼓励作者加快更新哟~

相关文章:

LLM之学习笔记(一)

前言 记录一下自己的学习历程,也怕自己忘掉了某些知识点 Prefix LM 和 Causal LM区别是什么? Prefix LM (前缀语⾔模型)和 Causal LM(因果语言模型)是两者不同类型的语言模型,它们的区别在于生…...

C# 反射详解

反射是C#中的一个强大特性,允许程序在运行时检查和操作类型和对象的信息。 通过反射,你可以获取类型的属性、方法、构造函数等信息,并可以动态创建对象、调用方法或访问属性,甚至可以实现某些框架或库的核心功能。 反射的基本概念…...

pgadmin安装后运行不能启动界面的问题

在本人机器上安装了pgsql10后,自带的pgadmin安装后运行时能打开edge并显示数据库server和数据库的,后来又安装了pgsql17,结果安装后想打开pgadmin,结果一直在等待最后,爆出类似于下面的错误。 pgAdmin Runtime Enviro…...

跳表(Skip List)

跳表(Skip List) 跳表是一种用于快速查找、插入和删除的概率型数据结构,通常用于替代平衡二叉搜索树(如 AVL 树或红黑树)。跳表通过在有序链表的基础上增加多层索引,使得查找操作的平均时间复杂度降低&…...

前端实现把整个页面转成PDF保存到本地(DOM转PDF)

一、问题 遇到一个需求,就是要把整个看板页面导出成PDF用在汇报,也就是要把整个DOM生成一个PDF保存到本地。 二、解决方法 1、解决思路:使用插件 jspdf 和 html2canvas,我用的版本如下图 2、代码实现 import { jsPDF } from …...

Vue 3 学习文档(一)

最近打算做一个项目,涉及到一些前端的知识,因上一次接触前端已经是三四年前了,所以捡一些简单的功能做一下复习。 响应式函数:reactive 和 ref属性绑定:v-bind 和简写语法事件监听:v-on 和简写语法 双向绑…...

【适配】屏幕拖拽-滑动手感在不同分辨率下的机型适配

接到一个需求是类似下图的3D多房间视角,需要拖拽屏幕 问题 在做这种屏幕拖拽的时候发现,需要拖拽起来有跟手的感觉,会存在不同分辨率机型的适配问题。 即:美术调整好了机型1的手感,能做到手指按下顶层地板上下挪动&…...

牛客周赛 Round 69(A~E)

文章目录 A 构造C的歪思路code B 不要三句号的歪思路code C 仰望水面的歪思路code D 小心火烛的歪思路code E 喜欢切数组的红思路code 牛客周赛 Round 69 A 构造C的歪 思路 签到题,求出公差d,让最大的数加上公差d即可 code int a,b;cin >> a &…...

Spring Boot 实战:分别基于 MyBatis 与 JdbcTemplate 的数据库操作方法实现与差异分析

1. 数据库新建表 CREATE TABLE table_emp(id INT AUTO_INCREMENT,emp_name CHAR(100),age INT,emp_salary DOUBLE(10,5),PRIMARY KEY(id) );INSERT INTO table_emp(emp_name,age,emp_salary) VALUES("tom",18,200.33); INSERT INTO table_emp(emp_name,age,emp_sala…...

【jmeter】服务器使用jmeter压力测试(从安装到简单压测示例)

一、服务器上安装jmeter 1、官方下载地址,https://jmeter.apache.org/download_jmeter.cgi 2、服务器上用wget下载 # 更新系统 sudo yum update -y# 安装 wget 以便下载 JMeter sudo yum install wget -y# 下载 JMeter 压缩包(使用 JMeter 官方网站的最…...

使用Python实现自动化邮件通知:当长时程序运行结束时

使用Python实现自动化邮件通知:当长时程序运行结束时 前提声明 本代码仅供学习和研究使用,不得用于商业用途。请确保在合法合规的前提下使用本代码。 目录 引言项目背景项目设置代码分析 导入所需模块定义邮件发送函数发送邮件 实现步骤结语全部代码…...

框架学习07 - SpringMVC 其他功能实现

一. 拦截器实现HandlerInterceptor 接⼝ SpringMVC 中的 Interceptor 拦截器也是相当重要和相当有⽤的,它的主要作⽤是拦截⽤户的请求并进⾏相应的处理。⽐如通过它来进⾏权限验证,或者是来判断⽤户是否登陆等操作。对于 SpringMVC 拦截器的定义⽅式有两…...

NAT:连接私有与公共网络的关键技术(4/10)

一、NAT 的工作原理 NAT 技术的核心功能是将私有 IP 地址转换为公有 IP 地址,使得内部网络中的设备能够与外部互联网通信。其工作原理主要包括私有 IP 地址到公有 IP 地址的转换、端口号映射以及会话表维护这几个步骤。 私有 IP 地址到公有 IP 地址的转换&#xff1…...

RabbitMQ2:介绍、安装、快速入门、数据隔离

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...

衡山派D133EBS 开发环境安装及SDK编译烧写镜像烧录

1.创建新文件夹,用来存放SDK包(其实本质就是路径要对就ok了),右键鼠标通过Open Git Bash here来打开git 输入命令 git clone --depth1 https://gitee.com/lcsc/luban-lite.git 来拉取,如下所示:&#xff0…...

【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置

前言 🌟🌟本期讲解关于SpringMVC的编程之参数传递~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废…...

C++设计模式行为模式———策略模式

文章目录 一、引言二、策略模式三、总结 一、引言 策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。与模板方法模式类似,都是以扩展的方式来支持未来的变化。…...

Spring Cloud 中 bootstrap.yml 配置文件详解

Spring Cloud 中 bootstrap.yml 配置文件详解 1. 什么是 bootstrap.yml? bootstrap.yml 是 Spring Cloud 提供的一个特殊配置文件,主要用于初始化 Spring Cloud 应用程序的环境。与常见的 application.yml 不同,bootstrap.yml 在 Spring 应用…...

Java项目实战II基于SpringBoot前后端分离的网吧管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网技术的不断发展…...

ASP网络安全讲述

一 前言   Microsoft Active Server Pages(ASP)是服务器端脚本编写环境,使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页 、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序…...

DFS 创建分级菜单

菜单级别不确定&#xff0c;想要自适应&#xff0c;且可以折叠的菜单。 数据是一个数组。 <template><div class"Level" ref"Level"></div> </template>import {ref} from vue export default{data(){Level:ref(null),menuData…...

HDU Go Running(最小点覆盖 + 网络流优化)

题目大意&#xff1a;有一条无限长跑道&#xff0c;每个人可以规定自己跑步的方向&#xff0c;起点&#xff0c;跑步起止时间。每个人跑步的速度都是1m/s。最后从监控人员哪里得到了n个报告&#xff0c;每个报告给出了某人在某一时候所在的位置&#xff0c;问跑步的最少可能人数…...

C++设计模式-中介者模式

动机(Motivation) 多个对象相互关联的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化。在这种情况下&#xff0c;可以使用一种”中介对象“来管理对象间的关联关系&#xff0c;避免…...

文件上传与下载服务 | Flask 实战

之前介绍了 droppy 文件共享服务的搭建。但在一些场景中&#xff0c;我们需要在命令行或在 Python 代码中&#xff0c;临时上传和下载文件。这时可以用一个更简单的策略&#xff1a;使用 flask 编写一个临时的 API。 服务端配置 以下是一个简单的 Flask 应用程序代码示例&…...

MySQL 中的排序:索引排序与文件排序

文章目录 MySQL 中的排序&#xff1a;索引排序与文件排序全解析一、引言二、索引排序&#xff08;一&#xff09;原理&#xff08;二&#xff09;示例 三、文件排序&#xff08;一&#xff09;单路排序&#xff08;二&#xff09;双路排序&#xff08;三&#xff09;归并排序 四…...

深入理解React Hooks:使用useState和useEffect

引言 React Hooks是React 16.8引入的一项强大功能&#xff0c;它使函数组件能够使用状态和其他React特性。本文将深入探讨两个最常用的Hooks&#xff1a;useState和useEffect&#xff0c;并通过实际代码示例展示它们的使用方法。 1. 什么是React Hooks&#xff1f; React Ho…...

AWS codebuild + jenkins + github 实践CI/CD

前文 本文使用 Jenkins 结合 CodeBuild, CodeDeploy 实现 Serverless 的 CI/CD 工作流&#xff0c;用于自动化发布已经部署 lambda 函数。 在 AWS 海外区&#xff0c;CI/CD 工作流可以用 codepipeline 这项产品来方便的实现&#xff0c; CICD 基本概念 持续集成( Continuous…...

Android PMS(Package Manager Service)源码介绍

文章目录 前言一、PMS 启动流程二、APK 安装流程三、APK 卸载流程四、权限管理静态权限动态权限 五、 数据存储与一致性六、 PMS 的安全性策略1、权限检查2、签名认证3、动态权限管理4、应用安装验证5、保护系统目录 七、PMS 调试方法总结 前言 PackageManagerService&#xf…...

运维面试整理总结

面试题可以参考:面试题总结 查看系统相关信息 查看系统登陆成功与失败记录 成功&#xff1a;last失败&#xff1a;lastb 查看二进制文件 hexdump查看进程端口或连接 netstat -nltp ss -nltp补充&#xff1a;pidof与lsof命令 pidof [进程名] #根据 进程名 查询进程id ls…...

图数据库 Cypher语言

图数据库 属性图 属性图&#xff08;Property Graph&#xff09;概述 属性图是一种广泛用于建模关系数据的图数据结构&#xff0c;它将**顶点&#xff08;节点&#xff09;和边&#xff08;关系&#xff09;**进行结构化存储&#xff0c;并为它们附加属性以提供丰富的语义信…...