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

【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM

参考:

   https://www.youtube.com/watch?v=eC6Hd1hFvos


目录:

  1.     什么是 Fine-tune
  2.    为什么需要Fine-tuning
  3.    如何进行Fine-tune
  4.   Fine-tuning- Supervised Fine-tuning 流程
  5.    Fine-tuning参数训练的常用方案
  6.   LORA 简介
  7.    示例代码

一  什么是 Fine-tune

       Fine-tune 常用于小样本学习,适用于特定的任务,比如原始的GPT-3跟矿石一样,通过

Fine-tuning 技术可以加工成钻石。

     1.1   Fine-tuning的概念

               Fine-tuning,或称微调,是现代机器学习,尤其是深度学习领域中的一个重要且有用的技术方法。它涉及在一个已经预训练的模型基础上进行进一步的训练,使得这个模型更好地适应特定的任务需求。预训练模型通常是在大规模数据集上经过长时间训练的,这使得它学会了丰富的特征表示。通过Fine-tuning,研究者可以在预训练模型的基础上使用一个较小的数据集进行短时间训练,从而适应特定任务。这样做的主要好处是,可以利用预训练模型已经学到的知识,加快新任务的训练速度并提高模型的性能。

    1.2 、Fine-tuning的核心思想

               Fine-tuning的基本思想是分阶段训练神经网络。第一阶段,模型在一个大型通用数据集上进行训练,比如图像识别模型可以在ImageNet数据集上训练,而自然语言处理模型(如GPT)可以在海量文本上进行训练。在第二阶段,该模型被重新利用,并在更小的特定数据集上继续训练。通常来说,这样的特定数据集与目标任务更为相关,因此模型需要对其进行微调,以在特定任务上实现最佳性能。

             具体来说,对于深度学习中的大多数任务,Fine-tuning通常会冻结某些早期层的权重,以保持它们学到的底层特征表示,然后只对后续几层进行更新,以让模型对特定任务更为适应。这种方法不仅减少了需要训练的参数数量,也降低了训练的计算资源需求。

   1.3、Fine-tuning的应用

         Fine-tuning之所以有效,是因为现代深度学习模型,尤其是卷积神经网络(CNN)和变换器(Transformer)等结构,通常在底层层次上学习到的特征具有很高的通用性。在NLP任务中,比如GPT模型,底层层次学到的词汇表示和基本语法往往可以广泛应用于各种下游任务。因此,通过Fine-tuning,可以将这些知识快速适应于如情感分析、机器翻译等具体任务。

        Fine-tuning技术广泛应用于自然语言处理、计算机视觉等领域。以自然语言处理为例,预训练的语言模型(如BERT、GPT等)可以通过微调适应不同的下游任务,如文本分类、命名实体识别、情感分析等。通过微调,这些模型可以学习到特定任务的语言模式和特征,从而提升在任务上的性能。


二  为什么需要Fine-tuning

     需要Fine-tuning的原因主要基于以下几个方面

      2.1  提高模型性能
Fine-tuning允许模型在特定任务或数据集上进行进一步训练,从而优化其性能。通过微调,模型可以更好地适应目标任务的特性,提高准确性、泛化能力等关键指标

      2.2  利用预训练模型的知识
预训练模型通常在大规模数据集上进行了长时间的训练,积累了丰富的知识和特征表示。Fine-tuning使得我们可以在这些预训练模型的基础上进行进一步的训练,从而充分利用这些已经学到的知识,避免从头开始训练模型所需的大量时间和计算资源。

     2.3  适应特定任务
不同的任务可能需要模型具备不同的特征提取和决策能力。Fine-tuning允许我们根据特定任务的需求对模型进行调整,使其更加专注于与任务相关的特征和信息,从而提高在特定任务上的表现。   

     2.4 减少训练数据需求
       对于某些任务,可能没有足够的标记数据来从头开始训练一个深度学习模型。然而,通过Fine-tuning,我们可以利用预训练模型的知识,在较小的数据集上实现较好的性能,从而降低了对大量标记数据的依赖。

     2.5   加速模型开发
Fine-tuning可以显著缩短模型开发的时间。由于预训练模型已经具备了一定的知识和特征表示能力,因此我们可以直接在预训练模型的基础上进行微调,而无需从头开始设计和训练模型。

   2.6  提高模型的泛化能力
         虽然预训练模型已经在大规模数据集上进行了训练,但它们可能仍然需要针对特定任务进行微调以提高泛化能力。通过Fine-tuning,我们可以使模型更好地适应目标任务的特性,从而提高其在未见过的数据上的表现。

综上所述,Fine-tuning是一种有效的深度学习技术,它允许我们利用预训练模型的知识,在特定任务或数据集上进行进一步的训练和优化,从而提高模型的性能、适应性和泛化能力。


三  Fine-tune 常用的三种方案

       Fine-tuning(微调)是深度学习中提升模型性能的关键技术,它允许模型在预训练的基础上针对特定任务进行进一步优化。以下是三种主要的Fine-tuning方案:

  self-supervised(自监督)

  supervised(监督)

  Reinforcement-tuning(强化学习微调)

3.1、Self-Supervised Fine-Tuning(自监督微调)

概述

自监督微调是一种利用未标注数据进行模型训练的方法。它通过设计一些预训练任务,使模型在不需要人工标注的情况下学习数据的内在结构和特征。这些预训练任务通常与下游任务相关,从而帮助模型在下游任务上取得更好的性能。

特点

  • 利用未标注数据进行训练,降低了对标注数据的依赖。
  • 通过设计预训练任务来挖掘数据的内在特征,提高模型的泛化能力。
  • 适用于各种下游任务,如图像分类、语音识别等。

应用实例

  • 在语言识别任务中,可以使用自监督微调对预训练的XLS-R模型进行进一步优化。通过添加后端分类器和统计池化层,并使用较小的参数后端(如factorized Time Delay Neural Network,TDNN-F),可以在保持模型性能的同时减少参数数量。

3.2、Supervised Fine-Tuning(监督微调)

概述

监督微调是在有标注数据的指导下对模型进行训练的方法。它使用标注过的数据集对预训练模型进行进一步的调整和优化,使模型能够更好地适应特定任务的需求。

特点

  • 需要标注数据进行训练,但标注数据的质量对模型性能有显著影响。
  • 适用于各种有监督学习任务,如情感分析、机器翻译等。
  • 通过微调,模型可以在少量标注数据上达到较高的性能。

应用实例

  • 在情感分析任务中,可以使用监督微调将预训练的语言模型(如GPT)调整为情感分类模型。通过提供标注好的情感数据集,模型可以学习到情感相关的特征,并在情感分类任务上取得更好的性能。

3.3、Reinforcement-Tuning(强化学习微调)

概述

强化学习微调是一种基于强化学习框架对模型进行训练的方法。它通过设计奖励函数来引导模型的行为,使其在特定任务上取得更好的性能。强化学习微调通常与预训练模型相结合,以利用预训练模型的知识和特征表示。

    训练了一个奖赏模型,通过强化学习来进行Fine-tuning

特点

  • 需要设计奖励函数来评估模型的行为。
  • 适用于需要序列决策的任务,如机器人控制、游戏AI等。
  • 通过强化学习微调,模型可以学习到更加复杂和灵活的行为策略。

应用实例

  • 在机器人控制任务中,可以使用强化学习微调对预训练的策略进行进一步优化。通过设计合适的奖励函数和仿真环境,模型可以学习到更加高效和稳定的控制策略。例如,FLaRe方法通过大规模仿真和强化学习微调,实现了对机器人策略的显著优化。

       综上所述,self-supervised、supervised和Reinforcement-tuning是三种主要的Fine-tuning方案。它们各有特点,适用于不同的任务和场景。在实际应用中,可以根据具体需求和数据情况选择合适的微调方案来提升模型的性能。


四   Supervised Fine-tuning

     如下分为五步


 五   Fine-tuning 参数训练的常用方案

         5.1、Retrain all parameters(重新训练所有参数)

概述

       重新训练所有参数的方法是指在微调过程中,对预训练模型的所有参数都进行更新。这种方法通常适用于目标任务与预训练任务差异较大,或者预训练模型的泛化能力不足以满足目标任务需求的情况。

特点

  • 能够最大程度地利用目标任务的数据进行模型训练。
  • 可能需要更多的计算资源和时间,因为所有参数都需要进行更新。
  • 如果目标任务与预训练任务差异过大,可能导致模型过拟合或泛化能力下降。

应用场景

  • 当预训练模型与目标任务的领域或任务类型差异较大时。
  • 当目标任务的数据量足够大,足以支持对所有参数进行重新训练时。

5.2、Transfer Learning(迁移学习)

概述

       迁移学习是一种将预训练模型的知识迁移到目标任务上的方法。在微调过程中,可以冻结预训练模型的部分或全部参数,仅对部分层或新添加的层进行训练。这种方法能够充分利用预训练模型学到的知识和特征表示,同时减少对新任务数据的依赖。

特点

  • 能够有效地利用预训练模型的知识,提高模型在目标任务上的性能。
  • 通过冻结部分参数,可以减少对新任务数据的依赖,降低过拟合的风险。
  • 需要仔细选择冻结和训练的参数层,以达到最佳的性能提升效果。

应用场景

  • 当预训练模型与目标任务的领域或任务类型相似时。
  • 当目标任务的数据量较少,不足以支持对所有参数进行重新训练时。

5.3、Parameter Efficient Fine-tuning(高效参数微调)

概述

      高效参数微调是一种在保持预训练模型大部分参数不变的情况下,仅对少量参数进行调整的方法。这种方法通过添加新的参数或模块(如adapter、prompt、prefix等),并在这些新添加的参数或模块上进行训练,以实现目标任务的性能提升。

特点

  • 能够显著减少需要训练的参数数量,降低计算资源和时间的消耗。
  • 通过添加新的参数或模块,可以灵活地适应不同的目标任务。
  • 需要仔细设计新添加的参数或模块,以确保它们能够有效地提升模型性能。

常用方法

  1. Adapter Tuning:在预训练模型的每一层或特定层之间添加小的神经网络(称为adapter),并仅对这些adapter进行训练。
  2. Prompt Tuning:通过修改输入文本的提示(prompt)来引导模型生成符合特定任务或情境的输出,而无需对模型的全量参数进行微调。
  3. Prefix Tuning:在输入文本前添加一段可学习的“前缀”,这个前缀与输入序列一起作为注意力机制的输入,从而影响模型对输入序列的理解和表示。
  4. LoRA Tuning:通过分解预训练模型中的部分权重矩阵为低秩矩阵,并仅微调这些低秩矩阵的少量参数来适应新任务。

应用场景

  • 当需要在多个任务之间共享预训练模型时。
  • 当计算资源有限,无法支持对所有参数进行重新训练时。
  • 当需要快速适应新的任务或领域时。

    综上所述,Retrain all parameters、Transfer Learning和Parameter Efficient Fine-tuning是Fine-tune过程中常用的三种参数训练方案。它们各有特点,适用于不同的场景和任务需求。在实际应用中,可以根据具体任务和数据情况选择合适的方案进行微调。


六  LORA 简介

      LORA 是LLM 里面Fine-tuning 里面一种非常流行的方案

 

 我们假设有个Base模型,参数量为d*k = 100W个

LORA 通过增加一些参数\bigtriangleup W,其由两个低秩向量组成

假设秩为2 , 其参数量只增加了4000.

LORA(Low-Rank Adaptation)是一种在大语言模型(LLMs)微调中使用的技术,旨在通过仅调整模型的一小部分参数来提高模型在特定任务上的性能,同时保持计算效率和存储需求相对较低。以下是对LORA技术的详细介绍:

一、LORA技术的背景

随着大语言模型的规模不断扩大,训练这些模型所需的计算资源和时间也在不断增加。因此,如何在保持模型性能的同时,降低微调的计算成本和存储需求成为了一个重要的研究方向。LORA技术正是在这个背景下应运而生的。

二、LORA技术的核心原理

LORA技术的核心原理是通过对权重矩阵进行低秩分解,仅调整少量的参数来实现模型的微调。具体来说,LORA在模型的某些特定层中添加了两个低秩矩阵A和B,这些低秩矩阵包含了可训练的参数。在微调过程中,只更新这两个低秩矩阵的参数,而保持原始模型的大部分参数冻结不变。

数学上,LORA通过修改线性层中的权重矩阵ΔW来实现微调,其中ΔW被分解为两个低秩矩阵A和B的乘积。由于矩阵A和B的维度远小于ΔW,因此显著减少了可训练参数的数量。

三、LORA技术的优势

  1. 高效性:由于LORA只调整模型中的一小部分参数,因此训练过程更加高效,大大缩短了训练时间和计算资源的需求。
  2. 抗过拟合:由于调整的参数量较少,LORA可以降低过拟合的风险,特别是在小型数据集上训练大型模型时。
  3. 灵活性:LORA可以在模型的特定层或部分中进行微调,使得它能够在保持模型大部分结构的同时,对模型进行有效的优化。
  4. 无推理延迟:LORA微调后的模型不会引入推理延迟,因为其简单的线性设计使得部署时可以将新添加的矩阵(A和B)与冻结权重(W)合并。

四、LORA技术的应用

LORA技术特别适用于大型语言模型的微调,如GPT-3、BERT等。这些模型可能有上亿甚至数百亿的参数,使用传统的微调方法需要巨大的计算资源和时间。而LORA技术则可以在保持模型性能的同时,显著降低微调的计算成本和存储需求。

此外,LORA技术还可以与其他微调技术相结合,如适配器(Adapters)、软提示(Soft Prompts)等,以进一步提高微调的效果和效率。

五、LORA技术的变体

随着LORA技术的不断发展,出现了许多LORA的变体,每种变体都针对特定的挑战进行了改进与优化。例如:

  1. LoRA-FA:通过优化内存使用来解决LORA在微调时的内存开销问题,同时不牺牲微调性能。
  2. VeRA:进一步减少LORA中可训练参数的数量,同时能够匹配或接近LORA的精度。

综上所述,LORA技术是一种高效、灵活且适用于大型语言模型微调的技术。它通过仅调整模型的一小部分参数来提高模型在特定任务上的性能,同时保持了计算效率和存储需求的相对较低。随着技术的不断发展,LORA及其变体将在人工智能领域发挥越来越重要的作用。


七 LORA 代码

   


http://www.kler.cn/a/521242.html

相关文章:

  • 【第八天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的回溯算法(持续更新)
  • unity. Capsule Collider(胶囊碰撞体)
  • 什么是反向海淘?如何入局反向海淘?
  • 关于圆周率的新认知
  • 寒假学web--day08
  • 第26章 测试驱动开发(TDD)模式详解与 Python 实践
  • K8s运维管理平台 - xkube体验:功能较多
  • [HOT 100] 0015. 三数之和
  • 代码审查中的自动化与AI应用
  • 2025寒假作业
  • C#,入门教程(09)——运算符的基础知识
  • 参照和谐色调为PPT图形设置统一格式的要点
  • CRMEB部署的一些修改
  • 【QT】 控件 -- 显示类
  • Android-okhttp详解
  • Spark Streaming编程基础
  • 基于Java(SSM)+MySQL实现的客户管理系统
  • 3097. 或值至少为 K 的最短子数组 II
  • Direct Preference Optimization (DPO): 一种无需强化学习的语言模型偏好优化方法
  • FPGA同步复位和异步复位