【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM
参考:
https://www.youtube.com/watch?v=eC6Hd1hFvos
目录:
- 什么是 Fine-tune
- 为什么需要Fine-tuning
- 如何进行Fine-tune
- Fine-tuning- Supervised Fine-tuning 流程
- Fine-tuning参数训练的常用方案
- LORA 简介
- 示例代码
一 什么是 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等),并在这些新添加的参数或模块上进行训练,以实现目标任务的性能提升。
特点:
- 能够显著减少需要训练的参数数量,降低计算资源和时间的消耗。
- 通过添加新的参数或模块,可以灵活地适应不同的目标任务。
- 需要仔细设计新添加的参数或模块,以确保它们能够有效地提升模型性能。
常用方法:
- Adapter Tuning:在预训练模型的每一层或特定层之间添加小的神经网络(称为adapter),并仅对这些adapter进行训练。
- Prompt Tuning:通过修改输入文本的提示(prompt)来引导模型生成符合特定任务或情境的输出,而无需对模型的全量参数进行微调。
- Prefix Tuning:在输入文本前添加一段可学习的“前缀”,这个前缀与输入序列一起作为注意力机制的输入,从而影响模型对输入序列的理解和表示。
- LoRA Tuning:通过分解预训练模型中的部分权重矩阵为低秩矩阵,并仅微调这些低秩矩阵的少量参数来适应新任务。
应用场景:
- 当需要在多个任务之间共享预训练模型时。
- 当计算资源有限,无法支持对所有参数进行重新训练时。
- 当需要快速适应新的任务或领域时。
综上所述,Retrain all parameters、Transfer Learning和Parameter Efficient Fine-tuning是Fine-tune过程中常用的三种参数训练方案。它们各有特点,适用于不同的场景和任务需求。在实际应用中,可以根据具体任务和数据情况选择合适的方案进行微调。
六 LORA 简介
LORA 是LLM 里面Fine-tuning 里面一种非常流行的方案

我们假设有个Base模型,参数量为d*k = 100W个
LORA 通过增加一些参数,其由两个低秩向量组成
假设秩为2 , 其参数量只增加了4000.
LORA(Low-Rank Adaptation)是一种在大语言模型(LLMs)微调中使用的技术,旨在通过仅调整模型的一小部分参数来提高模型在特定任务上的性能,同时保持计算效率和存储需求相对较低。以下是对LORA技术的详细介绍:
一、LORA技术的背景
随着大语言模型的规模不断扩大,训练这些模型所需的计算资源和时间也在不断增加。因此,如何在保持模型性能的同时,降低微调的计算成本和存储需求成为了一个重要的研究方向。LORA技术正是在这个背景下应运而生的。
二、LORA技术的核心原理
LORA技术的核心原理是通过对权重矩阵进行低秩分解,仅调整少量的参数来实现模型的微调。具体来说,LORA在模型的某些特定层中添加了两个低秩矩阵A和B,这些低秩矩阵包含了可训练的参数。在微调过程中,只更新这两个低秩矩阵的参数,而保持原始模型的大部分参数冻结不变。
数学上,LORA通过修改线性层中的权重矩阵ΔW来实现微调,其中ΔW被分解为两个低秩矩阵A和B的乘积。由于矩阵A和B的维度远小于ΔW,因此显著减少了可训练参数的数量。
三、LORA技术的优势
- 高效性:由于LORA只调整模型中的一小部分参数,因此训练过程更加高效,大大缩短了训练时间和计算资源的需求。
- 抗过拟合:由于调整的参数量较少,LORA可以降低过拟合的风险,特别是在小型数据集上训练大型模型时。
- 灵活性:LORA可以在模型的特定层或部分中进行微调,使得它能够在保持模型大部分结构的同时,对模型进行有效的优化。
- 无推理延迟:LORA微调后的模型不会引入推理延迟,因为其简单的线性设计使得部署时可以将新添加的矩阵(A和B)与冻结权重(W)合并。
四、LORA技术的应用
LORA技术特别适用于大型语言模型的微调,如GPT-3、BERT等。这些模型可能有上亿甚至数百亿的参数,使用传统的微调方法需要巨大的计算资源和时间。而LORA技术则可以在保持模型性能的同时,显著降低微调的计算成本和存储需求。
此外,LORA技术还可以与其他微调技术相结合,如适配器(Adapters)、软提示(Soft Prompts)等,以进一步提高微调的效果和效率。
五、LORA技术的变体
随着LORA技术的不断发展,出现了许多LORA的变体,每种变体都针对特定的挑战进行了改进与优化。例如:
- LoRA-FA:通过优化内存使用来解决LORA在微调时的内存开销问题,同时不牺牲微调性能。
- VeRA:进一步减少LORA中可训练参数的数量,同时能够匹配或接近LORA的精度。
综上所述,LORA技术是一种高效、灵活且适用于大型语言模型微调的技术。它通过仅调整模型的一小部分参数来提高模型在特定任务上的性能,同时保持了计算效率和存储需求的相对较低。随着技术的不断发展,LORA及其变体将在人工智能领域发挥越来越重要的作用。
七 LORA 代码










相关文章:
【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM
参考: https://www.youtube.com/watch?veC6Hd1hFvos 目录: 什么是 Fine-tune 为什么需要Fine-tuning 如何进行Fine-tune Fine-tuning- Supervised Fine-tuning 流程 Fine-tuning参数训练的常用方案 LORA 简介 示例代码 一 什么是 Fine-tune …...
git回退
git回退 1、未使用 git add 缓存代码时 git checkout –- filepathname 放弃单个文件的修改 git checkout . 放弃所有的文件修改 此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不…...
数字图像处理:实验七
uu们!这是我们目前数字图像系列的最后一张,之后有关人工智能结合的数字图像处理咸鱼哥正在学习和创作中,所以还请大家给咸鱼哥点时间,同时也提前预祝大家2025年新春快乐!(咸鱼哥真诚的祝愿每一个人…...
网易前端开发面试题200道及参考答案 (下)
阐述如何实现 img 按照原比例最大化放置在 div 中? 要让 img 按照原比例最大化放置在 div 中,可通过以下几种方式实现: 使用 object - fit 属性 object - fit 是 CSS 中用于规定如何调整替换元素(如 <img>、<video>)的内容以适应其容器的属性。 object - fit…...
通义灵码插件保姆级教学-IDEA(安装及使用)
一、JetBrains IDEA 中安装指南 官方下载指南:通义灵码安装教程-阿里云 步骤 1:准备工作 操作系统:Windows 7 及以上、macOS、Linux; 下载并安装兼容的 JetBrains IDEs 2020.3 及以上版本,通义灵码与以下 IDE 兼容&…...
利用双指针一次遍历实现”找到“并”删除“单链表倒数第K个节点(力扣题目为例)
Problem: 19. 删除链表的倒数第 N 个结点 文章目录 题目描述思路复杂度Code 题目描述 思路 1.欲找到倒数第k个节点,即是找到正数的第n-k1、其中n为单链表中节点的个数个节点。 2.为实现只遍历一次单链表,我们先可以使一个指针p1指向链表头部再让其先走k步…...
2025美赛倒计时,数学建模五类模型40+常用算法及算法手册汇总
数学建模美赛倒计时,对于第一次参加竞赛且没有相关基础知识的同学来讲,掌握数学建模常用经典的模型算法知识,并熟练使用相关软件进行建模是关键。本文将介绍一些常用的模型算法,以及软件操作教程。 数学建模常用模型包括…...
sql中INNER JOIN、LEFT JOIN、RIGHT JOIN
INNER JOIN 的作用 INNER JOIN 只会将相关联表匹配到的数据进行展示 假设我们有两个表:sys_user和 sys_user_role SELECT s1.* from sys_user s1 INNER JOIN sys_user_role s2 on s1.id s2.user_id 这样只会展示s1.id s2.user_id相匹配到的数据,其他数…...
二十三种设计模式-享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享相同对象来减少内存使用,尤其适合在大量重复对象的情况下。 核心概念 享元模式的核心思想是将对象的**可共享部分(内部状态)提取出来进行共…...
前端【10】jQuery DOM 操作
目录 jquery捕获查取 获得内容 - text()、html() 以及 val() 获取属性 - attr() 编辑 jQuery 修改/设置内容和属性 设置内容 - text()、html() 以及 val() 设置属性 - attr() jQuery添加元素 jQuery - 删除元素 前端【9】初识jQuery:让JavaScript变得更简…...
Day34:字符串的替换
在 Python 中,字符串替换是一个非常常见的操作,主要用于修改字符串中的某些部分。字符串的替换操作通常不修改原始字符串,因为字符串在 Python 中是不可变的,而是返回一个新的字符串。 Python 提供了 str.replace() 方法来执行替…...
汇编的使用总结
一、汇编的组成 1、汇编指令(指令集) 数据处理指令: 数据搬移指令 数据移位指令 位运算指令 算术运算指令 比较指令 跳转指令 内存读写指令 状态寄存器传送指令 异常产生指令等 2、伪指令 不是汇编指令,但是可以起到指令的作用,伪…...
力扣【347. 前 K 个高频元素】Java题解(堆)
TopK问题,我们直接上堆。 首先遍历一次然后把各个数字的出现频率存放在哈希表中便于后面堆的操作。 因为是出现频率前 k 高,所以用小顶堆,当我们遍历的频率值大于堆顶值时就可以替换堆顶。 代码: class Solution {public int[] …...
【计算机网络】host文件
host文件的主要功能: 域名解析 本地映射:host文件的主要功能是将**域名映射到相应的 IP 地址**。当计算机需要访问一个网站或服务时,它会首先在 host文件中查找该域名对应的 IP 地址。如果在 host文件中找到了匹配的域名和 IP 地址映射&…...
git如何设置pull的时候有些文件不pull
在 Git 中,没有直接的方法在 git pull 时排除特定文件,但可以通过以下方式实现类似效果: 方法 1: 使用 .gitignore .gitignore 文件可以忽略未跟踪的文件,但对已跟踪的文件无效。如果你希望某些文件不被拉取,可以先将…...
第五节 MATLAB命令
本节的内容将提供常用的一些MATLAB命令。 在之前的篇章中我们已经知道了MATLAB数值计算和数据可视化是一个交互式程序,在它的命令窗口中您可以在MATLAB提示符“>>”下键入命令。 MATLAB管理会话的命令 MATLAB提供管理会话的各种命令。如下表所示:…...
性能测试丨JVM 性能数据采集
什么是JVM性能数据采集? JVM性能数据采集是指通过一些工具和技术采集与Java虚拟机相关的性能数据。这些数据包括但不限于内存使用、CPU使用、垃圾回收(GC)行为、线程活动等。合理地分析这些数据,可以帮助我们找出系统的瓶颈&…...
vue3 vue2区别
Vue 3 和 Vue 2 之间存在多个方面的区别,以下是一些主要的差异点: 1. 性能改进 Vue 3:在性能上有显著提升,包括更小的包体积、更快的渲染速度和更好的内存管理。Vue 2:性能相对较低,尤其是在大型应用中。…...
快速更改WampServer根目录php脚本
快速更改WampServer根目录php脚本 <?php // 配置文件地址 $apacheConfPath C:\Install\CTF\Wampserver\bin\apache\apache2.4.62.1\conf\httpd.conf; $apacheConfPath2 C:\Install\CTF\Wampserver\bin\apache\apache2.4.62.1\conf\extra\httpd-vhosts.conf; // 新根目录…...
金价高企需求疲软,周大福近三个月零售值下降14.2%
1月22日,周大福在港交所发布公告称,截至2024年12月31日止三个月(第三季度),集团零售值下降14.2%。其中,中国内地市场零售值下降13.0%,香港及澳门市场零售值下降20.4%,其他市场零售值…...
想品客老师的第七天:闭包和作用域
闭包之前的内容写在这里 环境、作用域、回收 首先还是数据的回收问题,全局变量一般都是通过关闭页面回收的;而局部变量的值不用了,会被自动回收掉 像这种写在全局里的就不会被主动回收捏: let title 荷叶饭function fn() {ale…...
Web 代理、爬行器和爬虫
目录 Web 在线网页代理服务器的使用方法Web 在线网页代理服务器使用流程详解注意事项 Web 请求和响应中的代理方式Web 开发中的请求方法借助代理进行文件下载的示例 Web 服务器请求代理方式代理、网关和隧道的概念参考文献说明 爬虫的工作原理及案例网络爬虫概述爬虫工作原理 W…...
速通Docker === Docker 镜像分层存储机制
目录 分层存储的概念 分层存储的实现 镜像层 容器层 分层存储的优势 1. 镜像轻量化 2. 快速构建与部署 3. 高效的镜像共享 4. 版本控制 分层存储的示例 容器层的临时性与数据持久化 总结 Docker 的分层存储机制是其核心特性之一,它使得镜像的构建、共享和…...
开源智慧园区管理系统对比五款主流产品探索智能运营新模式
内容概要 在这个数字化迅速发展的时代,园区管理也迎来了全新的机遇和挑战。众所周知,开源智慧园区管理系统作为一种创新解决方案,正逐步打破传统管理的局限性。它的开放性不仅使得系统可以根据具体需求进行灵活调整,也为用户提供…...
用Devc++与easyx一步一步做游戏[启动界面部分]-解决hover闪烁问题及优化
在之前的博文中《用Devc与easyx一步一步做游戏[启动界面部分]-之按钮制作》,我们利用Devc和easyx完成了游戏启动界面按钮的基本制作,实现了按钮的绘制以及鼠标悬停时的信息提示功能。然而,目前还存在一个问题,即鼠标移动时&#x…...
非根目录部署 nextjs 项目,资源文件 请求404 的问题
最近在学习next项目编写的代码放到服务器上静态资源404 先分析问题 到服务器上查看是有资源目录的是不是项目配置有问题是不是nginx配置有问题 经过排查1和2是没有问题的目前来看只有3 检查一下nginx配置 尝试着把静态资源的配置禁用 问题解决 我的next项目用的是pm2管理…...
Kafka常见问题之 `javax.management.InstanceAlreadyExistsException`
文章目录 Kafka常见问题之 javax.management.InstanceAlreadyExistsException1. 概述2. 常见原因3. 具体异常示例4. 解决方案4.1 确保单一 Kafka Producer 实例4.2 配置 Kafka Broker 和 Producer 使用唯一的 JMX 名称(对于Producer重点检查 client.id)4…...
mysql 学习5 mysql图形化界面DataGrip下载 安装 使用
一、下载和安装 下载: 其他版本 - DataGrip PS:安装目录最好不要有中文。 C:\Program Files\JetBrains\DataGrip 2023.3.4 二、 夸克网盘分享 当前电脑是下载到 :D:\Ctool\mysql\datagrip2023_3_4\datagrip2024\jetbra-datagrip\scripts …...
读写和解析简单的 nc 文件
NetCDF 文件格式在气象数据工程领域占据着举足轻重的地位,其结构灵活、强兼容性等优势使其成为该领域的一个标准。无论是从事学术研究还是工程实践,掌握这种数据格式变得越发重要。其次,我注意到目前社区中气象编程大多数课程都聚焦于某个特定…...
LLM:BERT or BART 之BERT
文章目录 前言一、BERT1. Decoder-only2. Encoder-only3. Use of Bidirectional Context4. Masked Language Model (MLM)5. Next Sentence Prediction (NSP)6. Fine-tune1、情感分析2、句对分析3、命名实体识别(NER) 7. BERT总结 总结 前言 NLP选手对这…...
