大模型微调方法汇总

ops/2024/9/20 13:36:45/ 标签: 深度学习, 人工智能, 机器学习

微调方法

  • Freeze方法
  • P-tuning方法
    • prefix-tuning
    • Prompt Tuning
    • P-tuning v1
    • P-tuning v2
  • Lora方法
    • 重要相关参数
    • LoRA 的优势
  • Qlora方法
    • 相关参数
  • 微调经验
    • 模型选择
    • 模型大小选择
    • 数据处理
    • 微调方案
    • 英文模型需要做词表扩充吗?
    • 如何避免灾难遗忘
    • 大模型的幻觉问题
    • 微调后的输出有重复问题的原因和解决方法?

参考:https://blog.csdn.net/dzysunshine/article/details/131590701


*P-tuning 微调方法是一种基于随机梯度下降(SGD)的方法,它通过动态地调整学习率,使其随着时间的推移逐渐降低,从而使得模型能够更好地收敛
P-Tuning v2的**原理是通过对已训练好的大型语言模型进行参数剪枝,得到一个更加小巧、效率更高的轻量级模型**。具体地,P-Tuning v2首先使用一种自适应的剪枝策略,对大型语言模型中的参数进行裁剪,去除其中不必要的冗余参数。然后,对于被剪枝的参数,P-Tuning v2使用了一种特殊的压缩方法,能够更加有效地压缩参数大小,并显著减少模型微调的总参数量。https://zhuanlan.zhihu.com/p/629327372*

以下是三种微调技术的简要介绍和原理说明:

1. **LoRA (Low-Rank Adaptation)**:
   - **原理**:LoRA 是基于矩阵分解的思想,将模型的参数分解为两个低秩矩阵的乘积。具体来说,它将模型的权重 \( W \) 表示为一个低秩矩阵 \( L =B*A\) 和一个剩余矩阵 \( W \) 的乘积,即 \( W ' = B*A + W \)。其中,\( L \) 是一个可训练的低秩矩阵,而 \( R \) 是原始的预训练权重矩阵。通过这种方式,LoRA 能够以较少的参数改变原始模型的权重,从而实现对模型的微调。
  
2. LoRA执行步骤是什么?LoRA的实现流程概况如下:
    -  在原始预训练语言模型(PLM)旁增加一个旁路,做一个先降维再升维的操作,以此来模拟所谓的内在秩;
    -  训练的时候固定PLM的参数不变,只训练降维矩阵A和升维矩阵B,即优化器只优化右路的参数;
    -  模型的输入、输出维度不变,左右两边共用模型的输入,输出时将 PLM 与 A-B的输出叠加;
    -  用随机高斯分布初始化A,用全零矩阵初始化B。矩阵B的全零初始化,使得在训练最开始的一段时间,右路的结果会接近于0,这样模块的输出就基本上来自于左路,也就是大模型原有参数的计算结果,这使得模型优化的初始点就和原始的大模型保持一致。
    - 该方法通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练。

2. **P-tuning v2**:
   - **原理**:P-tuning v2 是一种基于prompt的微调方法,它通过在模型的输入中添加一个可训练的prompt向量来调整模型的行为。在这种方法中,模型的权重在微调过程中保持不变,而是通过改变输入的prompt来适应新的任务。Prompt 通常是一个学习到的向量,它可以被看作是一个任务特定的偏置项,它引导模型朝着特定任务的方向进行预测。
   - 在使用P-tuning v2或类似的基于prompt的微调方法时,通常会根据问题的类型或内容为每个不同的问题设计不同的prompt向量。Prompt在这里作为一个条件或引导,帮助模型更好地理解和适应特定的任务。

3. **QLoRA**:
   - **原理**:QLoRA 是 LoRA 的一个变种,它结合了量化和低秩适应的概念。在QLoRA 中,模型的权重不仅通过低秩矩阵进行调整,而且还通过量化技术进一步减少参数的数量。**量化是一种减少模型精度要求的技术,它将权重的值从浮点数转换为更低位的表示,从而减少模型的存储和计算需求**。通过结合低秩适应和量化,QLoRA 能够在保持模型性能的同时,显著降低模型的参数量和计算成本。QLoRA的量化过程可能仅针对这些新增的、可训练的低秩矩阵参数,而不是原始的预训练模型参数。

        LoRA和QLoRA适合于需要在资源受限的设备上部署大型模型的情况,而P-tuning v2和Prompt Tuning则适合于快速适应新任务而不需要显著增加计算负担的情况。

这三种技术都是为了在保持模型性能的同时减少微调过程中的参数更新数量,从而减少计算资源的消耗。LoRA 通过低秩矩阵调整权重,P-tuning v2 通过改变输入prompt来引导模型,而QLoRA 结合了这两种技术并通过量化进一步压缩模型。每种技术都有其特定的应用场景,研究者可以根据任务的具体需求和资源限制来选择最合适的微调策略。

https://cloud.tencent.com/developer/article/2302701
人工智能大语言模型SFT 监督微调:、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法原创


http://www.ppmy.cn/ops/40760.html

相关文章

一起了解开源自定义表单的优势表现

随着社会的进步和科技的发展,越来越多的中小企业希望采用更为先进的软件平台,助力企业实现高效率的流程化管理。低代码技术平台、开源自定义表单已经慢慢走入大众视野,成为一款灵活、高效的数字化转型工具。流辰信息专注于低代码技术平台的研…

【论文阅读】<YOLOP: You Only Look Once for PanopticDriving Perception>

Abstract 全视驾驶感知系统是自动驾驶的重要组成部分。一个高精度的实时感知系统可以帮助车辆在驾驶时做出合理的决策。我们提出了一个全视驾驶感知网络(您只需寻找一次全视驾驶感知网络(YOLOP)),以同时执行交通目标检…

【退役之重学Java】关于 Redis

一、Redis 都有哪些数据类型 String 最基本的类型,普通的set和get,做简单的kv缓存hash 这是一个类似map 的一种结构,这个一般可以将结构化的数据,比如一个对象(前提是这个对象没有嵌套其他的对象)给缓存在…

es6语法总结

【1】语法 (1)声明变量(let-var-const) 变量提升: 是JavaScript引擎在代码执行前将变量的声明部分提升到作用域顶部的行为。尽管变量的声明被提升了,变量的赋值(即初始化)仍然保留在原来的位置。因此&…

1-3 如何学习,才能让这门课真正发挥价值

如何学习,才能让这门课真正发挥价值 在正式踏上产品经理学习之路前。我希望以一名课程产品经理的身份,来向你解释下这门课的设计理念和学习方法,以便让它真正对你有所帮助。 为什么这么说呢?是因为我发现,大都具备非常…

13.跳跃游戏

文章目录 题目简介题目解答解法一:贪心算法+动态规划代码:复杂度分析: 题目链接 大家好,我是晓星航。今天为大家带来的是 跳跃游戏面试题 相关的讲解!😀 题目简介 题目解答 思路:这…

BUG:PyAutoGUI pyautogui.ImageNotFoundException

BUG:PyAutoGUI pyautogui.ImageNotFoundException 环境 python 3.10 PyAutoGUI0.9.54 PyScreeze0.1.30BUG详情 在确定屏幕存在指定图片的情况下,使用PyAutoGUI中的locateCenterOnScreen()函数识别图片失败弹出这个bug。 注意: 1 如果屏幕不存在指定图…

电影网站|基于SSM+vue的电影网站系统(源码+数据库+文档)

电影网站 目录 基于SSMvue的电影网站系统 一、前言 二、系统设计 三、系统功能设计 1 系统功能模块 2 管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道…

IT行业现状与未来趋势

你眼中的IT行业现状与未来趋势 IT行业当前处于高速发展阶段,涵盖了各种技术领域,如人工智能、大数据、云计算、物联网、区块链等。以下是我眼中的一些现状和未来趋势: 1. 人工智能(AI)的普及和应用广泛化&#xff1a…

一次pytorch分布式训练精度调试过程

现象: loss不下降 过程如下: 1.减少层数,准备最小复现环境 2.dropout设置为0,重复运行二次,对比loss是否一致 3.第二次迭代开始loss不一致 4.对比backward之后的梯度,发现某一个梯度不一致 5.dump得到所有算子的规模,单算子测试…

Cocos Creator 3.8.x报错:5302

在小游戏加载某个bundle后,如果报以下错误: 5302:Can not find class %s 说明bundle中某个预制件*.prefab引用了未加载的bundle的资源。 解决方法有两个: 1、将引用的资源移到预制件*.prefab相同的bundle下; 2、将…

三极管 导通条件

一、三极管理解 三极管是电子行业常用的元器件之一,他是一种电流型控制的器件,他有三种工作状态:截止区,放大区、饱和区。当三极管当做开关使用时,他工作在饱和区。下面简短讲解三极管作为开关使用的方法,只…

OpenMVS学习笔记(一):WSL编译安装测试

1.CUDA和CUDNN安装 [1] WSL版本cuda安装: >> wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin >> sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 >> wg…

Redis 基础之Redis 配置

Redis 配置 Redis CONFIG GET 命令语法格式编辑配置Redis 配置参数说明 Redis 提供了很多配置选项来优化 Redis 服务 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf 可以通过 Redis CONFIG 命令查看或设置配置项 Redis CONFIG GET 命令语法格式 Re…

【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析

作为一个程序员宝爸,每天的时间很宝贵,工作之余除了辅导孩子作业,就是补充睡眠。 怎么快速高效的进行当天A股涨停板的复盘,便于第二天的跟踪。这里简单写个示例, 获取当天连涨数排序,以及所属行业排序。 …

深入解析MySQL中的事务(上)

MySQL事务管理 一、事务的基本概念为什么需要事务?1. 数据完整性2. 并发控制3. 错误恢复4. 复杂业务逻辑的支持5. 安全性 为什么会出现事务查看引擎是否支持事务事务提交方式自动提交(Automatic Commit)手动提交(Manual Commit&am…

Go语言中context原理及使用

Golang中,context为我们提供了在跨API边界和进程之间传递请求作用域的deadline,取消信号,和其他请求响应的值的能力。 context包定义了Context类型,它在API边界和进程之间提供了一种传递传递请求作用域的deadline,取消…

【Linux】yum与vim

文章目录 软件包管理器:yumLinux安装和卸载软件包Linux中的编辑器:vimvim下的底行模式vim下的正常模式vim下的替换模式vim下的视图模式vim下的多线程 软件包管理器:yum yum其实就是一个软件,也可以叫商店 和你手机上的应用商店或app store一…

特殊类的设计与单例模式

1、特殊类的设计 如何设计出一个创建出的对象只能在堆上的类?将类的默认构造函数设置为私有,再将类的拷贝构造函数设置为delete,设置静态函数GetObj,内部调用new HeapOnly,这样就只能在堆上开辟空间。 class HeapOnly…

算法训练Day28 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II class Solution { public:int maxProfit(vector<int>& prices) {vector<int> dp(2,0);dp[0] -prices[0];for(int i1; i<prices.size(); i){dp[0] max(dp[0], dp[1]-prices[i]);dp[1] max(dp[1], prices[i]dp[0]);}return dp[1]…