大模型全量微调和 LoRA 微调:一看就懂
最后我们做一个总结,首先全量微调就是针对于这些每个参数的学习,就是我要通过学习的方法,把这里的每个参数都要一个一个的要把它算出来。那相反,在LoRA的模式下,我们实际上要得出来的是这个矩阵,但是我们学习的方法是用于学习这两个矩阵来替代它。然后这两个矩阵所占用的参数的数量要比它要小很多,所以就会节省非常多的资源。
在模型微调领域,全量微调和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的模式下,我们实际上要得出来的是这个矩阵,但是我们学习的方法是用于学习这两个矩阵来替代它。然后这两个矩阵所占用的参数的数量要比它要小很多,所以就会节省非常多的资源。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
更多推荐
所有评论(0)