【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 代码

   

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python】python基于机器学习与数据分析的二手手机特性关联与分类预测(源码+数据集)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 python基于机器学习与数据分析的二手手机特性关联与…

【机器学习】深入探索SVM:支持向量机的原理与应用

目录 🍔 SVM引入 1.1什么是SVM? 1.2支持向量机分类 1.3 线性可分、线性和非线性的区分 🍔 小结 学习目标 知道SVM的概念 🍔 SVM引入 1.1什么是SVM? 看一个故事,故事是这样子的: 在很久以前的情人节&#xf…

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel 一、前言二、Grid 布局:万能的布局王者2.1 Grid 布局基础:构建网格世界2.2 子元素定位与跨行列:布局的精细操控2.3 自适应布局:灵活应变的秘诀 三、StackPanel…

性能测试网络风险诊断有哪些?

目录 一、网络定位分析手段 二、sar命令 三、netstat命令 以下是几种常见的网络风险诊断方法 网络连通性检查 带宽与延迟测量 丢包率分析 网络拓扑结构审查 安全设备影响评估 协议层面上的优化 负载均衡器效能检验 云化服务架构下的特殊考量 系统应用之间的交换&am…

ios打包:uuid与udid

ios的uuid与udid混乱的网上信息 新人开发ios,发现uuid和udid在网上有很多帖子里是混淆的,比如百度下,就会说: 在iOS中使用UUID(通用唯一识别码)作为永久签名,通常是指生成一个唯一标识&#xf…

微服务学习-服务调用组件 OpenFeign 实战

1. OpenFeign 接口方法编写规范 1.1. 在编写 OpenFeign 接口方法时,需要遵循以下规范 1.1.1.1. 接口中的方法必须使用 RequestMapping、GetMapping、PostMapping 等注解声明 HTTP 请求的类型。 1.1.1.2. 方法的参数可以使用 RequestParam、RequestHeader、PathVa…

开源项目Umami网站统计MySQL8.0版本Docker+Linux安装部署教程

Umami是什么? Umami是一个开源项目,简单、快速、专注用户隐私的网站统计项目。 下面来介绍如何本地安装部署Umami项目,进行你的网站统计接入。特别对于首次使用docker的萌新有非常好的指导、参考和帮助作用。 Umami的github和docker镜像地…

研究 Day.js 及其在 Vue3 和 Vue 框架中的应用详解

前言 在前端开发中,日期和时间处理是一个常见需求。随着技术的发展,我们有了更多高效、灵活的日期库可供选择。Day.js 就是一个轻量级、易于使用的 JavaScript 日期库,其灵感来源于 Moment.js,但体积更小,速度更快。本…

python基础语法(3) -------- 学习笔记分享

目录: 1. 函数 1.1 语法格式 1.2 函数参数 1.3 函数返回值 1.4 变量的作用域 1.5 函数的执行过程 1.6 函数的链式调用 1.7 函数的嵌套调用 1.8 函数递归 1.9 参数默认值 1.10 函数的关键字传参 2. 列表和元组 2.1 列表和元组是啥 2.2 创建列表 2.3 访问下标 2.…

ceph新增节点,OSD设备,标签管理(二)

一、访问客户端集群方式 方式一: 使用cephadm shell交互式配置 [rootceph141 ~]# cephadm shell # 注意,此命令会启动一个新的容器,运行玩后会退出! Inferring fsid c153209c-d8a0-11ef-a0ed-bdb84668ed01 Inferring config /var/lib/ce…

解决查看服务器ESN(许可证管理)

服务器的ESN(许可证管理)和SN码是两个东西。 查看步骤如下: 进入服务器的iBMC管理系统(一般为机房运维人员可以查看) 选择“许可证管理” 红框中即可看到信息。

《深入解析:DOS检测的技术原理与方法》

DDOS入侵检测与防御 一、实现Linux下DDOS的入侵检测与防御 利用Python编程实现对wrk的泛洪攻击检测,并让程序触发调用Linux命令实现防御: 1、泛洪攻击的检测,可以考虑使用的命令,这些命令可以通过Python进行调用和分析 (1) netstat -ant …

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(四)

Understanding Diffusion Models: A Unified Perspective(四) 文章概括学习扩散噪声参数(Learning Diffusion Noise Parameters)三种等效的解释(Three Equivalent Interpretations) 文章概括 引用&#xf…

1.23 补题 寒假训练营

E 一起走很长的路! 输入描述 第一行输入两个整数 n,q(1≤n,q≤210^5),代表多米诺骨牌的个数和询问次数。 第二行输入 n 个整数 a1,a2,…,an​(1≤ai≤10^9),表示多米诺骨牌的重量。 此后输入…

dmfldr实战

dmfldr实战 本文使用达梦的快速装载工具,对测试表进行数据导入导出。 新建测试表 create table “BENCHMARK”.“TEST_FLDR” ( “uid” INTEGER identity(1, 1) not null , “name” VARCHAR(24), “begin_date” TIMESTAMP(0), “amount” DECIMAL(6, 2), prim…

在深度Linux (Deepin) 20中安装Nvidia驱动

文章创作不易,麻烦大家点赞关注收藏一键三连。 在Deepin上面跑Tensorflow, pytorch等人工智能框架不是一件容易的事情。特别是如果你要使用GPU,就得有nvidia的驱动。默认情况下Deepin系统自带的是nouveau开源驱动。这是没办法用tensorflow的。下面内容是…

【Linux】IPC:匿名管道、命名管道、共享内存

⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1、管道2、进程池3、命名管道4、共享内存 1、管道 我们知道进程具有独立性,但是在一些场景中进程间也需要通信&#…

Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用

QTableView 是QT的一个强大的表视图部件,可以与模型结合使用以显示和编辑数据。QSqlQueryModel、QSqlTableModel 都是用于与 SQL 数据库交互的模型,将二者与QTableView结合使用可以轻松地展示和编辑数据库的数据。 QSqlQueryModel的简单应用 import sys from PySid…

DeepSeek学术题目选择效果怎么样?

论文选题 一篇出色的论文背后,必定有一个“智慧的选题”在撑腰。选题足够好文章就能顺利登上高水平期刊;选题不行再精彩的写作也只能“当花瓶”。然而许多宝子们常常忽视这个环节,把大量时间花在写作上,选题时却像抓阄一样随便挑一…

Linux的权限和一些shell原理

目录 shell的原理 Linux权限 sudo命令提权 权限 文件的属性 ⽂件类型: 基本权限: chmod改权限 umask chown 该拥有者 chgrp 改所属组 最后: 目录权限 粘滞位 shell的原理 我们广义上的Linux系统 Linux内核Linux外壳 Linux严格…