LLM大模型微调(lora原理)

一、微调方法介绍

1.1 Lora原理

通过低秩矩阵来降低模型训练的参数量,有点‘给我一个支点,就可以撬动地球’的感觉,其中矩阵的秩(rank)就有点像这个‘支点’的意思,大致原理如下:
在这里插入图片描述
LoRA 的核心思想是:在不改变原始模型权重的情况下,通过引入低秩矩阵的增量来进行微调。也就是说,LoRA 不直接更新原模型的参数,而是为其特定的层添加额外的可训练参数,从而实现对模型的适应调整。一方面知识对部分层进行微调,另一方面还对需要更新的矩阵层ΔW进行了分解,进一步减少了参数量和计算量。
原文链接:https://blog.csdn.net/qq_42755230/article/details/142853955
(1)原论文中的lora原理图,左边蓝色部分是你使用的LLM,模型中的参数是不同的矩阵,比如Qwen2.5-1.5B的模型,就是所有参数量(所有矩阵大小相加)为15亿。
(2)上图中我们简化为一个矩阵W,大小为in_shape,out_shape,可想而知,in_shapeout_shape是巨大的,如果像以往正常的微调,需要付出巨大的算力资源,以及大量的数据,如果数据量小的话,不足以微调其中的模型具体参数。
(3)lora引入低秩矩阵的想法和矩阵的积:
在这里插入图片描述
(4)lora引入两个低秩矩阵A和B,A
B的大小为LLM参数矩阵W的大小即可实现“撬动地球”的想法,矩阵的秩为rank,如下如
在这里插入图片描述
(5)所以使用lora方法对大模型进行微调时,训练过程中冻结原LLM模型权重,只对外部的AB两个权重进行学习微调,这样的话训练的参数量只有A和B两个矩阵,即:

in_shape * rank + rank * out_shape

秩rank越大,就越接近LLM原本的大小,训练起来算力越大;rank越小时,训练的参数量就越小,但是rank过于小的时候,则无法更好的学习到微调的数据。
(6)现在让我们直观地感受一下lora微调减少的训练参数量,比如一个12B的大模型:

LLM 12B W(30000 * 40000)

我们设置rank为8,则A和B的大小为:

A(30000 * 8)
A(8 * 40000)

我们需要训练的参数量只有:

A+B = 30000 * 8 + 8 * 40000

只有原LLM 12B的 0.047 %,只需要训练56万的参数。

(30000 * 8 + 8 * 40000) / 30000 * 40000 = (8 * 7) / 120000 = 0.047 %

1.2 Lora与Adapter对比

特性LoRA (低秩适应)Adapter (适配器)
定义通过添加低秩矩阵来修改预训练模型的权重,以实现特定任务的微调。在预训练模型的基础上插入小型的、可训练的网络模块(即Adapters),这些模块用于学习特定任务的知识。
参数量较少,因为只引入了低秩矩阵。也较少,但通常比LoRA多,因为Adapters可能包含多个层。
计算成本相对较低,由于更新的参数较少。中等,取决于Adapter的设计复杂度。
微调速度快,因为需要优化的参数较少。较快,但由于可能有更多层,所以比LoRA慢一些。
模型性能可能会有所下降,尤其是在资源非常有限的情况下。通常能保持较好的性能,因为Adapter有能力捕捉更复杂的模式。
泛化能力由于参数量少,可能会有较好的泛化能力,尤其是在小数据集上。泛化能力较好,因为它能够学习到更丰富的特征表示。
迁移学习易于迁移,因为主要调整的是少量的参数。也易于迁移,但可能需要根据新任务调整Adapter的设计。
模型大小微调后的模型大小增加不大。模型大小增加相对较大,取决于Adapter的复杂度。
适应场景非常适合资源受限的环境或快速原型设计。适用于需要较高准确性的场景,尤其是当有足够的计算资源时。

Adapter
插入位置:LoRA 是以残差连接的形式 “并联” 在 Transformer 的 W​ 矩阵上,而 Adapter 是插入在 Feed-forward Layer 后面。
推理延迟:LoRA 在训练完后其参数可以与原有预训练模型直接合并,变回单分支结构,不会引入额外的延迟;而 Adapter 由于引入了额外的串联网络层,因此会带来额外的延迟。
参数存储:使用 LoRA 进行微调,在训练完毕后只需要保存 LoRA 本身的参数;而使用 Adapter 则要保存整个原有模型的参数。

下一章讲解使用llama-factory来进行lora微调
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

协议(OSI-tcp-udp)

目录 OSI七层协议模型 TCP/IP协议 3次握手 4次挥手 TCP VS UDP TCP和UDP分别对应的常见应用层协议 Tcp 状态机 TCP/ UDP /socket /http /webSocket 区别 RPC 和 RMI RPC与RMI的区别 Web Service SOAP(Simple Object Access Protocol:简单对…

源代码防泄密管理分享

随着信息技术的快速发展,软件已成为现代企业不可或缺的核心资产之一。然而,源代码作为软件的心脏,其安全性直接关系到企业的核心竞争力。为了有效防止源代码泄露,构建一套全面且高效的源代码安全管理体系显得尤为重要。以下是六个…

2024/11/3 随笔笔记

[NOIP2001 提高组] Car 的旅行路线 题目描述 又到暑假了,住在城市 A 的 Car 想和朋友一起去城市旅游。 她知道每个城市都有 4 4 4 个飞机场,分别位于一个矩形的 4 4 4 个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路&#xff0c…

【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】

【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】 1、前言2、前置学习(1)window和Linux中python寻找目录的方式。&#x…

Shortcut Learning in In-Context Learning: A Survey

为我们的综述打一打广告,目前是初级版本,欢迎各位批评指正!后续的论文列表、测评基准会在Github更新[/(ㄒoㄒ)/~~最近比较忙容许我拖一拖] 这里是arxiv链接:Linking!!! Abstract:捷径学习是指模型在实际任务中使用简单…

ZDS 数字股票 布局全球视野,开启智能金融新篇章

在全球金融市场蓬勃发展的背景下,Zeal Digital Shares(ZDS)正迈向一个全新的发展阶段。通过采用先进技术与深度融合人工智能(AI),ZDS 吸引了各类顶尖人才,不仅推动了创新金融服务的建设&#xf…

Linux常用命令

常用命令: pwd、ls、cd mkdir,rmdir touch、cp rm、mv cat、more、less echo head tail history ln date cal find locate grep tar -zxvf -c 产生.tar打包文件 -v 显示详细信息 -f 指定压缩后的文件名 -z 打包同时压缩 -x 解包.tar文件打包&#xff1a…

Chromium Mojo(IPC)进程通信演示 c++(1)

网上搜索关于mojo教程 多数都是理论 加上翻译谷歌mojo文档的,但是如何自定义两个进程使用mojo通信呢?看下面的完整例子介绍:(本人也是参考谷歌代码例子改编而成) 本文演示了client.exe和service.exe 通过mojo::Incomin…

Late Chunking×Milvus:如何提高RAG准确率

01. 背景 在RAG应用开发中,第一步就是对于文档进行chunking(分块),高效的文档分块,可以有效的提高后续的召回内容的准确性。而对于如何高效的分块是个讨论的热点,有诸如固定大小分块,随机大小分…

收藏!python初学者必会,面向对象编程中的对象概念

在Python的编程世界中,“对象”这一概念是面向对象编程(OOP)的核心组成部分.理解对象的特性和使用方式,对于写出优雅以及可维护的代码至关重要.在本篇教程中,我们将探讨对象的基本概念,通过案例让你更好地掌握如何在实际代码中应用这些知识. 什么是对象…

《TCP/IP网络编程》学习笔记 | Chapter 6:基于UDP的服务器端/客户端

《TCP/IP网络编程》学习笔记 | Chapter 6:基于UDP的服务器端/客户端 《TCP/IP网络编程》学习笔记 | Chapter 6:基于UDP的服务器端/客户端理解UDPUDP套接字的特点UDP内部工作原理UDP的高效使用 《TCP/IP网络编程》学习笔记 | Chapter 6:基于UD…

前段(vue)

目录 跨域是什么? SprinBoot跨域的三种解决方法 JavaScript 有 8 种数据类型, 金额的用什么类型。 前段 区别 JQuery使用$.ajax()实现异步请求 Vue 父子组件间的三种通信方式 Vue2 和 Vue3 存在多方面的区别。 跨域是什么? 跨域是指…

mysql-B+Treel(一)

介绍 MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系…

HarmonyOS NEXT 应用开发实战(十、从零设计一款个人中心页面详细示例)

随着HarmonyOS的不断发展,越来越多的开发者开始关注这个平台上的应用开发。本篇文章将详细讲解如何从零开始设计一款个人中心页,并在代码中实现其相关功能。 1. 项目结构设计 首先,我们需要设计一个合理的项目结构。我们将个人中心页面分为几…

网购选择困难症怎么破?别忘了你的这位“帮手”

每年双十一对不少人来说,既是购物剁手狂欢节,也是货比三家纠结得不行的选择困难症复发期。而现在,Pura 70 能够帮助我们解决不够了解商品、选择困难症等问题啦。 小艺圈选,圈出你感兴趣的商品,快速货比三家 利用指关…

bug日常记录responded with a status of 413 (Request Entity Too Large)

在本地开发没有出现这个问题,后面部署到服务器上时,开始报错,在网上查找资料发现是nginx的配置大小不够,在nginx的配置条件加上了: client_max_body_size 10m 然后重启nginx,发现这个还是不行&#xff0c…

SAP Business One:中小企业数字化转型的加速器

在竞争日益激烈的市场环境中,中小企业要实现稳健发展,就必须注重提升自身的管理效能与运营效率。SAP Business One(简称SAP B1)作为一款专为中小企业量身定制的企业资源规划(ERP)解决方案,凭借其…

从 PyQt5 窗口闪退问题看 Python 垃圾回收与消息机制

前言 此篇文章源于知乎上的一个问题,使用 PyQt5 编写 GUI 程序时,新创建的界面会闪退,本篇文章仅作记录以防以后忘记。 问题代码 import sysfrom PyQt5.QtWidgets import QApplication, QMainWindow, QPushButtonclass Main(QMainWindow):d…

java两个线程的通信/指令重排

目录 1.线程通信 2.指令重排 1.线程通信 前段时间面试笔试题,手写两个线程之间的通信。 问题回顾: 一个生产者,一个消费者,一个桌子媒介。两个线程分别是消费者和生产者。流程是生产者生产一个件商品,通知消费者消…

建立用邻接矩阵表示的无向图

建立用邻接矩阵表示的无向图 #include<stdio.h> #define NUM 100 typedef struct {char vexs[NUM];int edges[NUM][NUM];int n,e; }MGraph; void CreateMGraph(MGraph *G) {int i,j,k;printf("请输入顶点数和边数:");scanf("%d,%d",&G->n,&a…