大模型全量微调和 LoRA 微调:一看就懂_lora微调

news2024/11/15 10:43:55

在模型微调领域,全量微调和LoRA微调是我们经常听到的技术术语。

首先,我们需要了解什么是模型微调。模型微调本质上是因为有时我们发现模型在某个方面的性能不足。因此,我们希望通过一些训练方法来更新模型,使更新后的模型在某些方面具有更强的能力。本质上,这是对模型的一种修改。在这里,我们通过数据和基于训练的方法,将现有的模型改造为新模型。

微调的本质

那么模型的修改本质上是对模型参数的修改。因此,模型背后实际上是一堆参数。也就是说,原来的参数已经变成了新的参数。一个大型模型可能有十个亿的参数,或者一千个亿的参数,所以参数的数量是非常巨大的。这里的参数我们可以理解为许多数字的集合。而这些参数我们通常可以将其排列成几行几列的形式。

比如这是三行三列的参数,所以我们总共有九个数字。但实际的大模型本身可能有千亿的参数。这里为了讲解,我们用一个较小的例子。这些参数对应的是原始的大模型,即微调之前的模型。

微调之后,这个数字会有一些相应的改变。通过微调的方法训练好之后,这个数字就变成了这种形态。训练本质上就是把这个参数从原有的状态改造成另外一个状态。比如第一个参数这里的0.1被改造成0.2,这个过程也可以看作是0.1加上一个偏移量0.1,得到0.2。

全量微调

这个改变可以写成另一种形式,即对于原有参数,我们增加了一个改动的量。这样我们可以得到新的参数,因此可以说我们要学习的本质上是这个改动的量。得到它后,我们实际上可以加上原有的参数,从而得到新的模型。归根结底,我们如何学习这些参数,也就是如何获得这个改动的量。尽管这里只列出了九个参数,但实际上在学习时,大型模型通常包含可能几百亿甚至上千亿的参数。

学习这个参数有不同方式。第一种方法是通过学习方法得出每个参数。这称为全量微调。如果模型原本包含一百亿个参数,全量微调意味着我们需要找到一百亿个这样的数字,因此其复杂度非常高。

LoRA背景-信息有限性

有没有办法我们可以用更少的资源进行调整呢?这种方法也被称为高效的调整方法,英文称为PT。其中最常见的技术叫做LoRA。在介绍LoRA之前,我先向大家普及一下其核心背景。举个例子,如果我们给张三分配一个任务,让他写一篇文章,这篇文章可能包含两千字。

我们知道张三本身是比较啰嗦的人,所以在写文章时,通常会包含很多重复性内容,不够简洁。两千字虽然看起来很多,但实际上传达的内容有限。原本他可能只用一百字或两百字就能表达整个思想,但他却用了两千多字来写这篇文章。接下来,基于这个思想,我们可以怀疑学到的这些数字是否也有一些冗余信息?

虽然我们在这里学习可能有千亿的参数,但他传递的信息却极其有限。如果我们所承载的信息非常有限,那么实际上我们投入大量资源进行训练,可能涉及数百亿个参数,本质上是在浪费资源。从微调的本质角度来看,我们真正希望的是它所承载的信息相对有限。

实际上我们还是回归到微调的本质其实通过微调我们是希望把模型的部分能力把它放大,但是同时想保留我们大模型的其他的能力。这里改动的量也可以认为就是针对于我们想去提升的不同的能力,所以这里有一个很重要的点就是我们不希望把原来的模型改动太多。如果改动太多,就意味着许多模型原来具备的较强能力消失了,这也被称为模型能力的遗忘。因此,我们实际追求的结果是:尽管看似改动了许多变量,但它们的改动带来的价值相对有限。总的来说,在微调过程中,我们希望模型具备以下特性:在这一假设条件下,是否有更高效的方法来学习这些参数。

在详细介绍LoRA之前,我们先来了解一下。经过之前的分析,我们现在假设要学习的参数具有某种特征。接下来,我们简单看一下具有这种特征的数字有哪些规律。比如说,我们有这样一个参数,第一个参数总共包含九个参数。

但我们可以清楚地看到有价值的是其中一行是123。如果我们知道这一行,那么实际上没有必要学习第二行和第三行。对于第二个来说也是如此。这里的246实际上可以通过123得出。例如,每个数字乘以2就可以得到246。

因此,这些信息我们可以称之为冗余信息。对于这个3X3的参数矩阵来说,真正有价值可能是第一行和第三行。很明显,为了学习九个参数,我们没有必要单独学习每个参数。

LORA的优势及其应用前景

这就是LoRA的核心思想。那么,我们面临的问题是什么呢?我们需要学习的参数可能符合这种形式。

我们有没有一种方式可以更加高效的去进行学习。那这时候我们可以引入劳拉的概念。然后首先我们定义一个名词叫做矩阵。我们就简单的认为矩阵就是类似于长成这个样子。比如说包含几行几列在这里,我们把要学习的这个矩阵,把它假设设置为w而且我们知道w它本身是一个包含很多参数的矩阵,但是呢它具备这种性质,就是虽然参数很多,但实际上它所包含的信息量是比较有限的。

在这里我们需要借助于线性代数的一个简单性质。对于符合特定条件的矩阵,我们可以通过两个矩阵的乘积来近似表示它。例如,我们可以考虑一个100*100的矩阵,并利用线性代数的性质将其分解为两个矩阵的乘积。

那么这里它的大小分别会变成什么呢?是100乘以k,这是它的一个性质。所以这里的实际上是可变的一个参数。那么这里的k我可以选择,比如说1、2或者10,这些都可以。

这里的k与我们刚才提到的价值相关。如果我们认为这个矩阵的价值不大,即它所承载的信息不多,那我们可以用更小的k来代替。这里的k越大,意味着矩阵所承载的信息量越大。因为我们已经假设这个参数具有一定的特征,所以我们可以选择更小的k来逼近w。举个例子,如果k=3,那么A就包含了100*3,总共300个参数。而B则包含了三行一百列,总共300个参数。加在一起,总共有600个参数。

但这里的w可以看一下,它是100*100的,所以总共包含一万个参数。很明显,600是一万的6%。这意味着如果我们的目标是学习w,而w包含一万个参数,但我们把它写成A和B的乘积形式,那么学习它实际上等价于学习参数A和B。这里的A和B总共只有六百个参数。这大大减少了我们需要学习的参数数量。

因为它被近似成A乘以B两个新矩阵,它们加在一起只包含六百个参数。总的来说,我们只需学习六百个参数就能实现学习w的目标。如果k=1,那么A包含100个,B也包含100个参数,总共200个参数。这样我们就只需要学习原来2%的参数,大大减少了学习成本。这就是LoRA的核心思想。这里的k被称为秩(rank)。如果我们认为这个矩阵包含的信息量很小,可以选择较小的k;如果认为信息量较大,可以选择较大的k。k越小,所需学习的参数就越少。在LoRA微调中,通常不会选择太大的k,因为在大模型中,参数非常多,所以参数越多,k越小,节省的比例就越大。这样可以大幅减少显存空间和学习成本。

总结

最后我们做一个总结,首先全量微调就是针对于这些每个参数的学习,就是我要通过学习的方法,把这里的每个参数都要一个一个的要把它算出来。那相反,在LoRA的模式下,我们实际上要得出来的是这个矩阵,但是我们学习的方法是用于学习这两个矩阵来替代它。然后这两个矩阵所占用的参数的数量要比它要小很多,所以就会节省非常多的资源。

零基础如何学习大模型 AI

领取方式在文末

为什么要学习大模型?

学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程,可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术,从而提升自己在数据处理、分析和决策制定方面的能力。此外,大模型技术在多个行业中的应用日益增加,掌握这一技术将有助于提高就业竞争力,并为未来的创新创业提供坚实的基础。

大模型典型应用场景

AI+教育:智能教学助手和自动评分系统使个性化教育成为可能。通过AI分析学生的学习数据,提供量身定制的学习方案,提高学习效果。
AI+医疗:智能诊断系统和个性化医疗方案让医疗服务更加精准高效。AI可以分析医学影像,辅助医生进行早期诊断,同时根据患者数据制定个性化治疗方案。
AI+金融:智能投顾和风险管理系统帮助投资者做出更明智的决策,并实时监控金融市场,识别潜在风险。
AI+制造:智能制造和自动化工厂提高了生产效率和质量。通过AI技术,工厂可以实现设备预测性维护,减少停机时间。

AI+零售:智能推荐系统和库存管理优化了用户体验和运营成本。AI可以分析用户行为,提供个性化商品推荐,同时优化库存,减少浪费。

AI+交通:自动驾驶和智能交通管理提升了交通安全和效率。AI技术可以实现车辆自动驾驶,并优化交通信号控制,减少拥堵。


这些案例表明,学习大模型课程不仅能够提升个人技能,还能为企业带来实际效益,推动行业创新发展。

学习资料领取

如果你对大模型感兴趣,可以看看我整合并且整理成了一份AI大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述

四、LLM面试题

在这里插入图片描述

如果二维码失效,可以点击下方链接,一样的哦
【CSDN大礼包】最新AI大模型资源包,这里全都有!无偿分享!!!

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

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

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

相关文章

达梦到达梦(dm-dm)创建dblink,报错:dblink连接丢失

原因 1:参考如下链接配置完dmmal.ini文件后,需要重启服务。 如果文件配置错误,重启服务会有很明显的报错。 https://eco.dameng.com/document/dm/zh-cn/sql-dev/practice-dblink.html [mal_inst1] mal_inst_name DMSERVER mal_host …

飞翔的马鞍 <收纳 No.2> 菱与欣桐画展8月18~31日在798举办

2024年8月18日下午三点,“菱与欣桐 收纳No.2”双人展开幕式在北京市朝阳区798国际艺术交流中心展厅举行。 艺术是永恒的,艺术家的生命力通过作品得以延续。开幕式上艺术家张菱分享了与女儿李欣桐在创作中的点滴记忆,以及她对艺术的执着与热爱…

Django框架自动化测试

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 本节介绍关…

2024.8.27(Dokerfile的应用、私有仓库)

一、Dockerfile应用 1、通过dockerfile创建⼀个在启动容器时,就可以启动httpd服务的镜像 [rootdocker ~]# mkdir httpd0 [rootdocker ~]# cd httpd0 [rootdocker httpd0]# vim abc.sh [rootdocker httpd0]# ls abc.sh [rootdocker httpd0]# echo " httpd serv…

C语言重难点总结(2)-指针操作与结构体、动态内存

本节学习内容 1.指针操作与结构体 2.函数(递归函数) 3.动态内存 一、指针操作与结构体 指针可以作为结构体的内部成员使用,也可以使用结构体指针操作结构体空间。 二、函数 1.指针函数 (1)什么是指针函数&#x…

企业家必看的十种让利的商业模式解析!

在当今的商业领域,众多创业者正面临前所未有的挑战。市场竞争激烈,价格战频繁,吸引投资者和推广产品都变得异常艰难。然而,问题的关键在于对“人心”的洞察。人们天生追求利益,因此,掌握如何点燃市场需求和…

运维有必要学编程吗?应该学哪种编程语言?

在以往的观念中,运维的工作内容是不涉及编程、开发的,因此以前也没用学编程的需求。然而随着互联网的发展和变化,现如今,运维也需要开始接触开发,接触编程了。 当然有很多运维朋友,本身是不认可的。可&…

IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了)。

文章目录 前言一、链接服务器vscode和pycharm的对比1、pycharm2、vscode3、总结 二、VS Code的安装与下载三、链接远程服务器1、安装远程插件:Remote-SSH2、写ssh配置文件3、链接服务器4、登录成功,打开文件夹 前言 大模型开发肯定要在服务器了&#xff…

使用PyTorch AlexNet预训练模型对新数据集进行训练及预测

在 https://blog.csdn.net/fengbingchun/article/details/112709281 中介绍了AlexNet网络,这里使用PyTorch中提供的AlexNet预训练模型对新数据集进行训练,然后使用生成的模型进行预测。主要包括三部分:新数据集自动拆分、训练、预测 1.新数据…

C++竞赛初阶L1-14-第六单元-数组(31~33课)543: T456473 年龄与疾病

题目内容 某医院进行一项研究,想知道某项疾病是否与年龄有关。因此对以往的诊断记录进行整理,统计 0-18 、 19-35 、 36-60、 61 及以上这四个年龄段的患者人数占总患者人数的比例。 输入格式 输入共 2 行。 第一行包含一个整数 N(0<n≤100),表示总患者人数。 第二…

OpenCV绘图函数(1)绘制带箭头的直线函数arrowedLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 绘制一个从第一个点指向第二个点的箭头线段。 cv::arrowedLine 函数在图像中绘制一个从 pt1 到 pt2 的箭头。另见 line 函数。 函数原型 void c…

Android Auto推出全新Google助手设计

智能手机与汽车的无缝整合已成为现代驾驶的重要组成部分&#xff0c;而 Android Auto 一直在这一领域处于领先地位。谷歌通过不断推出新功能和更新&#xff0c;体现了其致力于提升 Android Auto 体验的决心。最近&#xff0c;Android Auto 引入了 Google助手的全新设计。 当系…

vue3 使用vue-masonry加载更多,重新渲染

在使用 van-list做上拉加载更多&#xff0c;加载下一页的时候&#xff0c;会出现瀑布图重叠&#xff0c;原因是布局没有重新更新&#xff0c;所以需要 调用 vue-masonry更新布局的方法。 看了源码才知道可以这样用&#xff0c;api都没写&#xff0c;隐藏太深了。。。 vue3中通…

随心笔记--测试报告

项目名称 随心笔记 版本号 / 发布类型 正式发布 测试负责人 ** 测试完成日期 2024.8. 联系方式 130576**** 评审人 批准人 评审日期 批准日期 1.项目背景 设计“随心笔记”这个项目的初衷是为了提供一个便捷、个性化的博客管理平台&#xff0c;满足用户记录生…

yarn vite脚手架 react+ts搭建项目

创建react 1、确保你已经安装了Node.js&#xff08;建议使用最新的LTS版本&#xff09;。 2、安装Yarn&#xff08;如果尚未安装&#xff09;: npm install -g yarn 3、创建新项目: yarn create vite 根据提示安装 vite脚手架&#xff0c;如果已安装无提示信息 直接填写项目名…

人脸表情识别数据集分享(内含处理过的AffectNet等数据集)

前言&#xff1a; 人脸表情识别有三大主流数据集rafdb、affectnet、ferplus&#xff0c;之前跑rafdb精度挺正常的&#xff0c;但是另外两个数据集复现不出来精度&#xff0c;经过几个月的踩坑&#xff0c;我发现其实是数据集的原因。 我在官方找的AffectNet数据集有几十个G&…

SQL 高阶 (sql优化)

批量插入&#xff1a; sql 批量插入&#xff1a; INSERT INTO users(name, age) VALUES (Tom, 20), (Jerry, 22), (Bob, 19); -- 该方式 适合 500条以内。多线程插入批量插入&#xff0c;能够大幅提升插入速度。 经过测试&#xff1a;系统性能&#xff0c;8核16G 插入10w条数…

Leetcode 1108. IP地址无效化 C++实现

Leetcode 1108. IP 地址无效化 问题&#xff1a;给你一个有效的 IPv4 地址address&#xff0c;返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址&#xff0c;其实就是用 "[.]" 代替了每个 "."。 方法1&#xff1a;对字符串挨个进行判断&#xff0c;如…

java程序优化

Java程序的性能优化是一个复杂但非常重要的过程&#xff0c;它涉及多个方面。首先&#xff0c;我们需要识别性能瓶颈的具体位置&#xff0c;这通常可以通过性能分析工具&#xff08;如JProfiler, VisualVM等&#xff09;来完成。以下是一些通用的优化策略&#xff1a; 代码层面…

进程的创建与使用(win32-API)

一、前言 进程可以被视作操作系统中运行程序的一个实例&#xff0c;是系统资源分配和调度的基本单位。每一个进程都拥有自己独立的地址空间、一组状态信息&#xff08;如打开的文件、内存映射等&#xff09;&#xff0c;以及一个或多个线程来执行代码。进程之间的隔离性确保了…