【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.rhkb.cn/news/7902.html

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

相关文章

动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践

利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实…

云原生:构建现代化应用的基石

一、什么是云原生? 云原生是一种构建和运行应用程序的方法,旨在充分利用云计算的分布式系统优势,例如弹性伸缩、微服务架构、容器化技术等。云原生应用程序从设计之初就考虑到了云环境的特点,能够更好地适应云平台的动态变化&…

springboot3 集成 knife4j(接口文档)

提示:文章是集成 knife4j,而非 swagger2 或者 swagger3,效果如图 文章目录 前言一、添加依赖二、如何集成1.配置文件2.注解部分1.Tag2.Operation3.Parameter4.Schema 3.使用 总结 前言 提示::大家在开发阶段&#xff…

基于单片机的智能小区门禁系统设计(论文+源码)

1总体架构 智能小区门禁系统以STM32单片机和WiFi技术为核心,STM32单片机作为主控单元,通过WiFi模块实现与手机APP的连接,构建整个门禁系统。系统硬件包括RFID模块、指纹识别模块、显示屏、按键以及继电器。通过RFID绑定IC卡、APP面部识别、指…

后盾人JS--闭包明明白白

延伸函数环境生命周期 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> <…

The just sharing principle: advice for advice givers

原文 A while ago I wrote about how Only you know what’s best for your application. That’s because only you fully understand the context within which you are making technical decisions. Any advice need to filtered through that context in order to determi…

Charles 4.6.7 浏览器网络调试指南:HTTPS抓包(三)

概述 在现代互联网应用中&#xff0c;网络请求和响应是服务交互的核心。对于开发者和测试人员来说&#xff0c;能够准确捕获并分析这些请求&#xff0c;是保证系统稳定性和性能的关键。Charles作为一个强大的网络调试工具&#xff0c;不仅可以捕获普通的HTTP请求&#xff0c;还…

安装Office自定义项,安装期间出错

个人博客地址&#xff1a;安装Office自定义项&#xff0c;安装期间出错 | 一张假钞的真实世界 卸载PowerDesigner后&#xff0c;打开“WPS文字”时出现下图错误&#xff1a; 解决方法&#xff1a; 按“WinR”快捷键&#xff0c;打开【运行】框&#xff0c;在对话框中输入“re…

图漾相机搭配VisionPro使用简易教程

1.下载并安装VisionPro软件 请自行下载VisonPro软件。 VisionPro 9.0 /9.5/9.6版本经测试&#xff0c;可正常打开图漾相机&#xff0c;建议使用图漾测试过的版本。 2.下载PercipioCameraForVisionPro软件包 使用浏览器下载&#xff1a;https://gitee.com/percipioxyz/camport…

信息系统管理工程师第6-8章精讲视频及配套千题通关双双发布,附第14章思维导图

这一周发文少&#xff0c;不是我在偷懒&#xff0c;而是在和信管的视频及千题通关“”浴血奋战 &#xff0c;特别是第8章卡了我很久&#xff0c;因为内容实在太多&#xff0c;精讲视频估计都差不多4个小时了&#xff0c;还好终于在春节前拿下&#xff0c;提供给小分队的同学&am…

RNN实现阿尔茨海默症的诊断识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 导入数据 import torch.nn as nn import torch.nn.functional as F import torchvision,torch from sklearn.preprocessing import StandardScaler from torch.utils.data import TensorDatase…

ui-automator定位官网文档下载及使用

一、ui-automator定位官网文档简介及下载 AndroidUiAutomator&#xff1a;移动端特有的定位方式&#xff0c;uiautomator是java实现的&#xff0c;定位类型必须写成java类型 官方地址&#xff1a;https://developer.android.com/training/testing/ui-automator.html#ui-autom…

算法每日双题精讲 —— 二分查找(寻找旋转排序数组中的最小值,点名)

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 别再犹豫了&#xff01;快来订阅我们的算法每日双题精讲专栏&#xff0c;一起踏上算法学习的精彩之旅吧&#x1f4aa; 在算法的…

macOS使用LLVM官方发布的tar.xz来安装Clang编译器

之前笔者写过一篇博文ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器介绍了Ubuntu下使用官方发布的tar.xz包来安装Clang编译。官方发布的版本中也有MacOS版本的tar.xz&#xff0c;那MacOS应该也是可以安装的。 笔者2015款MBP笔记本&#xff0c;CPU是intel的&#xff0c;出厂…

机器学习周报-文献阅读

文章目录 摘要Abstract 1 相关知识1.1 WDN建模1.2 掩码操作&#xff08;Masking Operation&#xff09; 2 论文内容2.1 WDN信息的数据处理2.2 使用所收集的数据构造模型2.2.1 Gated graph neural network2.2.2 Masking operation2.2.3 Training loss2.2.4 Evaluation metrics 2…

Doris Schema Change 常见问题分析

1. 什么是 Schema Change Schema Change 是在数据库中修改表结构的一种操作&#xff0c;例如添加列、删除列、更改列类型等。 ⚠️Schema Change 限制⚠️ 一张表在同一时间只能有一个 Schema Change 作业在运行。分区列和分桶列不能修改。如果聚合表中有 REPLACE 方式聚合的…

我的2024年年度总结

序言 在前不久&#xff08;应该是上周&#xff09;的博客之星入围赛中铩羽而归了。虽然心中颇为不甘&#xff0c;觉得这一年兢兢业业&#xff0c;每天都在发文章&#xff0c;不应该是这样的结果&#xff08;连前300名都进不了&#xff09;。但人不能总抱怨&#xff0c;总要向前…

C++ DLL注入原理以及示例

0、 前言 0.1 什么是DLL注入 DLL&#xff08;动态链接库&#xff09;注入是一种技术&#xff0c;通过将外部的 DLL 文件强行加载到目标进程的地址空间中&#xff0c;使得外部代码可以执行。这种技术常用于修改或扩展应用程序的行为&#xff0c;甚至用于恶意攻击。 0.2 DLL注入…

MATLAB绘图:随机彩色圆点图

这段代码在MATLAB中生成并绘制了500个随机位置和颜色的散点图。通过随机生成的x和y坐标以及颜色&#xff0c;用户可以直观地观察到随机点的分布。这种可视化方式在数据分析、统计学和随机过程的演示中具有广泛的应用。 文章目录 运行结果代码代码讲解 运行结果 代码 clc; clea…

关于使用PHP时WordPress排错——“这意味着您在wp-config.php文件中指定的用户名和密码信息不正确”的解决办法

本来是看到一位好友的自己建站&#xff0c;所以突发奇想&#xff0c;在本地装个WordPress玩玩吧&#xff0c;就尝试着装了一下&#xff0c;因为之前电脑上就有MySQL&#xff0c;所以在自己使用PHP建立MySQL时报错了。 最开始是我的php启动mysql时有问题&#xff0c;也就是启动过…