LoRA微调大模型手把手实用教程!

选自SebastianRaschka博客转载机器之心编译

编辑:佳琪

由于GPU内存的限制,在训练过程中更新模型权重成本高昂。例如,假设我们有一个7B参数的语言模型,用一个权重矩阵W表示。在反向传播期间,模型需要学习一个ΔW矩阵,旨在更新原始权重,让损失函数值最小。权重更新如下:W_updated=W+ΔW。如果权重矩阵W包含7B个参数,则权重更新矩阵ΔW也包含7B个参数,计算矩阵ΔW非常耗费计算和内存。由EdwardHu等人提出的LoRA将权重变化的部分ΔW分解为低秩表示。确切地说,它不需要显示计算ΔW。相反,LoRA在训练期间学习ΔW的分解表示,如下图所示,这就是LoRA节省计算资源的奥秘。

如上所示,ΔW的分解意味着我们需要用两个较小的LoRA矩阵A和B来表示较大的矩阵ΔW。如果A的行数与ΔW相同,B的列数与ΔW相同,我们可以将以上的分解记为ΔW=AB。(AB是矩阵A和B之间的矩阵乘法结果。)这种方法节省了多少内存呢?还需要取决于秩r,秩r是一个超参数。例如,如果ΔW有10,000行和20,000列,则需存储200,000,000个参数。如果我们选择r=8的A和B,则A有10,000行和8列,B有8行和20,000列,即10,000×8+8×20,000=240,000个参数,比200,000,000个参数少约830倍。当然,A和B无法捕捉到ΔW涵盖的所有信息,但这是LoRA的设计所决定的。在使用LoRA时,我们假设模型W是一个具有全秩的大矩阵,以收集预训练数据集中的所有知识。当我们微调LLM时,不需要更新所有权重,只需要更新比ΔW更少的权重来捕捉核心信息,低秩更新就是这么通过AB矩阵实现的。LoRA的一致性

虽然LLM,或者说在GPU上被训练的模型的随机性不可避免,但是采用LoRA进行多次实验,LLM最终的基准结果在不同测试集中都表现出了惊人的一致性。对于进行其他比较研究,这是一个很好的基础。

具有4位正常浮点数的QLoRA

此外,我发现模型的性能几乎不受影响,这说明QLoRA可以作为LoRA训练的替代方案,更进一步解决常见GPU内存瓶颈问题。

学习率调度器

在实验中,我在LoRA微调脚本中添加了一个余弦退火调度器,它显著地提高了SGD的性能。但是它对Adam和AdamW优化器的增益较小,添加之后几乎没有什么变化。

在下一节中,将讨论SGD相对于Adam的潜在优势。AdamvsSGDAdam和AdamW优化器在深度学习中很受欢迎。如果我们正在训练一个7B参数的模型,那使用Adam就能够在训练的过程中跟踪额外的14B参数,相当于在其他条件不变的情况下,模型的参数量翻了一番。SGD不能在训练过程中跟踪附加的参数,所以相比于Adam,SGD在峰值内存方面有什么优势呢?在我的实验中,使用AdamW和LoRA(默认设置r=8)训练一个7B参数的Llama2模型需要14.18GB的GPU内存。用SGD训练同一模型需要14.15GB的GPU内存。相比于AdamW,SGD只节省了0.03GB的内存,作用微乎其微。为什么只节省了这么一点内存呢?这是因为使用LoRA时,LoRA已经大大降低了模型的参数量。例如,如果r=8,在7B的Llama2模型的所有6,738,415,616个参数,只有4,194,304个可训练的LoRA参数。只看数字,4,194,304个参数可能还是很多,但是其实这么多参数仅占用4,194,304×2×16位=134.22兆位=16.78兆字节。(我们观察到了存在0.03Gb=30Mb的差异,这是由于在存储和复制优化器状态时,存在额外的开销。)2代表Adam存储的额外参数的数量,而16位指的是模型权重的默认精度。

如果我们把LoRA矩阵的r从8拓展到256,那么SGD相比AdamW的优势就会显现:

因此,当矩阵规模扩大时,SGD节省出的内存将发挥重要作用。由于SGD不需要存储额外的优化器参数,因此在处理大模型时,SGD相比Adam等其他优化器可以节省更多的内存。这对于内存有限的训练任务来说是非常重要的优势。迭代训练

在传统的深度学习中,我们经常对训练集进行多次迭代,每次迭代称为一个epoch。例如,在训练卷积神经网络时,通常会运行数百个epoch。那么,多轮迭代训练对于指令微调也有效果吗?答案是否定的,当我将数据量为50k的Alpaca示例指令微调数据集的迭代次数增加一倍,模型的性能下降了。

因此,我得出的结论是,多轮迭代可能不利于指令微调。我在1k的示例LIMA指令微调集中也观察到了同样的状况。模型性能的下降可能是由过拟合造成的,具体原因仍需进一步探索。在更多层中使用LoRA

下表显示了LoRA仅对选定矩阵(即每个Transformer中的Key和Value矩阵)起效的实验。此外,我们还可以在查询权重矩阵、投影层、多头注意力模块之间的其他线性层以及输出层启用LoRA。

如果我们在这些附加层上加入LoRA,那么对于7B的Llama2模型,可训练参数的数量将从4,194,304增加到20,277,248,增加五倍。在更多层应用LoRA,能够显著提高模型性能,但也对内存空间的需求量更高。此外,我只对(1)仅启用查询和权重矩阵的LoRA,(2)启用所有层的LoRA,这两种设置进行了探索,在更多层的组合中使用LoRA会产生何种效果,值得深入研究。如果能知道在投影层使用LoRA对训练结果是否有益,那么我们就可以更好地优化模型,并提高其性能。

平衡LoRA超参数:R和Alpha

正如提出LoRA的论文中所述,LoRA引入了一个额外的扩展系数。这个系数用于在前向传播过程中将LoRA权重应用于预训练之中。扩展涉及之前讨论过的秩参数r,以及另一个超参数α(alpha),其应用如下:

正如上图中的公式所示,LoRA权重的值越大,影响就越大。在之前的实验中,我采用的参数是r=8,alpha=16,这导致了2倍的扩展。在用LoRA为大模型减重时,将alpha设置为r的两倍是一种常见的经验法则。但我很好奇这条规则对于较大的r值是否仍然适用。

我还尝试了r=32,r=64,r=128,andr=512,但为了清晰起见省略了此过程,不过r=256时,的确效果最佳。事实上,选择alpha=2r确实提供了最优结果。在单个GPU上训练7B参数模型

LoRA允许我们在单个GPU上微调7B参数规模的大语言模型。在这个特定情况下,采用最佳设置过的QLoRA(r=256,alpha=512),使用AdamW优化器处理17.86GB(50k训练样例)的数据在A100上大约需要3个小时(此处为Alpaca数据集)。

在本文的其余部分中,我将回答你可能遇到的其他问题。10个问题

Q1:数据集有多重要?

对于这个问题,我目前还没有一个明确的答案。根据经验,知识通常是从预训练数据集中提取的。通常情况下,语言模型通常会从预训练数据集中吸收知识,而指令微调的作用主要是帮助LLM更好地遵循指令。既然算力紧张是限制大语言模型训练的关键因素,LoRA也可以被用于在特定领域的专用数据集,进一步预训练现有的预训练LLM。另外,值得注意的是,我的实验中包括两个算术基准测试。在这两个基准测试中,使用LoRA进行微调的模型表现明显比预训练的基础模型差。我推测这是由于Alpaca数据集没有缺少相应的算术示例,导致模型「忘记了」算术知识。我们还需要进一步的研究来确定模型是「忘记」了算术知识,还是它对相应指令停止了响应。然而,在这里可以得出一条结论:「在微调LLM时,让数据集包含我们所关心的每个任务的示例是一个好主意。」Q3:如何确定最佳r值?

对于这个问题,目前我还没有比较好的解决方法。最佳r值的确定,需要根据每个LLM和每个数据集的具体情况,具体问题具体分析。我推测r值过大将导致过拟和,而r值过小,模型可能无法捕捉数据集中多样化的任务。我怀疑数据集中的任务类型越多,所需r值就越大。例如,如果我仅需要模型执行基本的两位数算术运算,那么一个很小的r值可能就已经满足需要了。然而,这只是我的假设,需要进一步的研究来验证。Q4:LoRA是否需要为所有层启用?

我只对(1)仅启用查询和权重矩阵的LoRA,(2)启用所有层的LoRA,这两种设置进行了探索。在更多层的组合中使用LoRA会产生何种效果,值得深入研究。如果能知道在投影层使用LoRA对训练结果是否有益,那么我们就可以更好地优化模型,并提高其性能。如果我们考虑各种设置(lora_query,lora_key,lora_value,lora_projection,lora_mlp,lora_head),就有64种组合可供探索。Q5:如何避免过拟和?

一般来说,较大的r更可能导致过拟合,因为r决定着可训练参数的数量。如果模型存在过拟合问题,首先要考虑降低r值或增加数据集大小。此外,可以尝试增加AdamW或SGD优化器的权重衰减率,或者增加LoRA层的dropout值。我在实验中没有探索过LoRA的dropout参数(我使用了0.05的固定dropout率),LoRA的dropout参数也是一个有研究价值的问题。Q6:还有其他优化器作为选择吗?

除了精度和量化设置、模型大小、batchsize和可训练LoRA参数数量之外,数据集也会影响内存使用。Llama2的块大小为4048个token,这代表着Llama可以一次处理包含4048个token的序列。如果对后来的token加上掩码,训练序列就将变短,可以节省大量的内存。例如Alpaca数据集相对较小,最长的序列长度为1304个token。当我尝试使用最长序列长度达2048个token的其他数据集时,内存使用量会从17.86GB飙升至26.96GB。Q8:与全微调、RLHF相比,LoRA有哪些优势?

我没有进行RLHF实验,但我尝试了全微调。全微调至少需要2个GPU,每个GPU占用36.66GB,花费了3.5个小时才完成微调。然而,基线测试结果不好,可能是过拟合或次超优参数导致的。Q9:LoRA的权重可以组合吗?

答案是肯定的。在训练期间,我们将LoRA权重和预训练权重分开,并在每次前向传播时加入。假设在现实世界中,存在一个具有多组LoRA权重的应用程序,每组权重对应着一个应用的用户,那么单独储存这些权重,用来节省磁盘空间是很有意义的。同时,在训练后也可以合并预训练权重与LoRA权重,以创建一个单一模型。这样,我们就不必在每次前向传递中应用LoRA权重。

weight+=(lora_B@lora_A)*scaling我们可以采用如上所示的方法更新权重,并保存合并的权重。同样,我们可以继续添加很多个LoRA权重集:

THE END
1.初学者:神经网络(2)机器学习练习4:神经网络上一篇文章中我们说神经网络的基本结构,神经网络训练的基本原理,这篇文章我们先来说一说神经网络中一个特别重要的东西---激活函数。 还是引用上一篇文章的老图。 如果按照上图的结构来输出最终的结果,那么计算过程如下: hj=i=1nxicijy=j=1mwjhj 现在开始解释这个式子: https://blog.csdn.net/flyless_sparrow/article/details/144398237
2.练习构建和训练神经网络在本单元中,你将使用 Keras 构建和训练分析文本情绪的神经网络。 若要训练神经网络,你需要数据来对其进行训练。 你将使用 Keras 随附的IMDB 电影评论情绪分类数据集,无需下载外部数据集。 IMDB 数据集包含 50,000 条电影评论,并且已分别对这些评论进行正面 (1) 或负面 (0) 的评分。 该数据集中的 25,0https://docs.microsoft.com/zh-cn/learn/modules/analyze-review-sentiment-with-keras/2-build-and-train-a-neural-network/
3.本期课程深入探讨神经网络的核心结构与工作来自与非网本期课程深入探讨神经网络的核心结构与工作原理。从前馈神经网络的构建讲起,介绍反向传播算法和自动梯度计算技术,这些是训练深度学习模型的关键。课程还将讨论神经网络参数优化过程中的主要问题,为理解深度学习模型的高效训练提供必要的知识。 L与非网的微博视频 小窗口 ?收藏 转发 评论 ?1https://weibo.com/1768387552/5112254494933678
4.神经网络基础知识及实用教程.pdf普通高等教育“十一五”规划教材 神经网络实用教程 张良均 曹晶 蒋世忠 编 主审 胡学钢 机械工业出版社 内容简介: 本书基于MATLAB 6.5/7 提供的神经网络工具箱,介绍了神经网络常用算法、优化算法及其混合编程 实现。全书共分为6 章,分别结合实例介绍了人工神经网络概述,实用神经网络模型与学习算法,神经网 络算法优化https://max.book118.com/html/2019/0407/8125143124002015.shtm
5.人工神经网络实用教程人工神经网络实用教程 人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。 经管之家是国内活跃的在线教育咨询平台! 经管之家新媒体交易平台 提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯https://bbs.pinggu.org/jg/kaoyankaobo_kaoyan_3682880_1.html
6.神经网络15本教程part2,PDF格式part3包括:7.人工神经网络与肓信号处理 8.人工神经网络-第六代计算机的实现 part4包括:9.人工神经网络建造 10.二进前项人工神经网络-理论及应用 part5包括:11.人工神经网络理论及应用 12.人工神经网络技术及应用 13.大脑设计 适应性行为的起源 part6包括:14.人工神经网络实用教程 15.基于神经网络的智能诊断 https://www.iteye.com/resource/llq994300-2013654
7.神经网络训练中回调函数的实用教程腾讯云开发者社区神经网络训练中回调函数的实用教程 作者| Andre Ye 编译| VK 来源| Towards Data Science ?回调函数是神经网络训练的重要组成部分 ? 回调操作可以在训练的各个阶段执行,可能是在epoch之间,在处理一个batch之后,甚至在满足某个条件的情况下。回调可以利用许多创造性的方法来改进训练和性能,节省计算资源,并提供有https://cloud.tencent.com/developer/article/1692424
8.hopfeild神经网络hopfield神经网络数学模型【1】《人工神经网络实用教程》 【2】浙江工业大学《人工智能导论》 视频 【3】《人工网络使用教程》 1. 离散Hopfield神经网络模型 1.1 网络拓扑模型 Hopfield属于反馈性神经网络,它作为一个动力系统可以最终到达一个稳态; 在离散Hopfield网络里,稳态是联想记忆的一个目标值; https://blog.51cto.com/u_16213632/8010451
9.B站上有哪些学习资源?2、Python教程_600集Python从入门到精通教程(懂中文就能学会) https://www.bilibili.com/video/BV1ex411x7Em/?p=146 3、千锋python全套视频教程,400全集,史上最经典 https://www.bilibili.com/video/BV15W41147rq/?p=105 4、Tensorflow 搭建自己的神经网络 (莫烦 Python 教程) https://www.douban.com/note/770877638/
10.AI数字人:人工智能虚拟数字人的新趋势与应用云典AI智库模型训练:? 使用深度学习技术和神经网络算法对数据进行训练,提取关键特征。 人机交互设计:设计用户界面和交互方式,使得AI数字人能够自然流畅地与人进行交流。 优化调试:对AI数字人进行优化和调试,不断改进其性能和表现。 通过以上步骤,可以成功制作出具有高度智能化和交互性的AI数字人,为各行各业带来更多便利和创新https://cosoh.com/aishuzirenrengongzhi/
11.山东师范大学信息科学与工程学院研究生招生1.《实用软件设计模式教程》,徐宏喆等编著,清华大学出版社,2009. 2.《大话设计模式》,程杰主编,清华大学出版社,2007. 《网络信息安全技术》课程简介 课程名称:网络信息安全技术 英文名称:Computing Network SecurityInformation 课程类别:专业选修课 总学时:36学时 https://m.okaoyan.com/kaoyanshop/sdsfdx/xxkxygcxy/
12.深度学习教程卷积神经网络解读深度学习教程 | 深度学习的实用层面 深度学习教程 | 神经网络优化算法 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架 深度学习教程 | AI应用实践策略(上) 深度学习教程 | AI应用实践策略(下) 深度学习教程 | 卷积神经网络解读 深度学习教程 | 经典CNN网络实例详解 深度学习教程 | CNN应用:目https://www.showmeai.tech/article-detail/221
13.计算机网络技术实用教程华为云帮助中心为你分享云计算行业信息,包含产品介绍、用户指南、开发指南、最佳实践和常见问题等文档,方便快速查找定位问题与能力成长,并提供相关资料和解决方案。本页面关键词:计算机网络技术实用教程。https://support.huaweicloud.com/topic/197493-3-J
14.主要是matlab的实用教程应用软件相关资料下载几个关于matlab下的bp神经网络的源代码 cell migration resource imaging icsmatlab 基于MATLAB的PLL仿真程序 matlab Simulink的混合动力汽车正向仿真软件的开发 小波边缘检测matlab程序matlabxby.rar matlab 文件 小波与傅里叶分析基础 在matlab中 非常不错的QPSK在matlab中的仿真教程 https://download.eeworld.com.cn/detail/hellopinkgirls/413179
15.深度学习实战教程(四):卷积神经网络在前面的文章中,我们介绍了全连接神经网络,以及它的训练和使用。我们用它来识别了手写数字,然而,这种结构的网络对于图像识别任务来说并不是很合适。本文将要介绍一种更适合图像、语音识别任务的神经网络结构——卷积神经网络(Convolutional Neural Network, CNN)。说卷积神经网络是最重要的一种神经网络也不为过,它在最https://cuijiahua.com/blog/2018/12/dl-10.html
16.实用资料RNN和LSTM资源目录收集大全–爱玩吧长期短期记忆:对LSTM网络教程 http:/ / / / / lstm Juergen people.idsia.ch ~。 严格执行解释 apaszke.github.io lstm-explained.html http:/ / 递归神经网络教程 1部分(介绍RNNs):http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/ https://www.aiwanba.net/post/3216.html
17.AutoCAD二次开发实用教程(普通高等教育“十二五”规划教材)已选AutoCAD二次开发实用教程 33.80 已选AutoCAD二次开发实用教程 C语言程序设计教程 Basic程序设计教程 神经网络设计 AutoCAD二次开发实用教程 (教材)培训课程设计与开发数量: - + 图文详情 更多卖家15个卖家在售 短评(243)98.76%好评 写短评 匿名用户 10分 课本类的书,意义不大,讲的基本上都是基础的基础http://product.m.dangdang.com/23436490.html
18.电子商务实用教程教案(精选8篇)篇1:电子商务实用教程教案 内容提要 本书是从应用的角度介绍电子商务相关知识的实用教材。全书共分9章,分别为:电子商务概述,电子零售:B2C与C2C,B2B电子商务,电子支付,EDI 技术,网络营销,电子商务安全,电子商务物流,移动电子商务。每章都由“学习目标”、“引例”、“理论综述”、“案例分析”和“训练与拓展”五大https://www.360wenmi.com/f/file479vy8af.html
19.深度学习全教程吴恩达教程内容收集整理自网络,如有侵权,请联系删除! 目录 01.神经网络和深度学习 1.第一周 深度学习概论 1.1 欢迎 1.2 什么是神经网络? 1.3 用神经网络进行监督学习 1.4 为什么深度学习会兴起? 1.5 关于这门课 1.6 课程资源 2.第二周 神经网络基础 2.1 二分分类 https://www.flyai.com/article/801
20.[MATLAB语言实用教程]图书价格书籍图片网购评论正版书籍MATLAB智能算法30个案例分析(第2版)matlab宝典matlab语言编程MATLAB实用教程 MATLAB智能算法人工智能神经网络算法 郁磊、史峰、王辉、胡斐 著 / 北京航空航天大学出版社 / 2015-09 / 平装 萌兽书店 上海市徐汇区 萌兽书店 全新 ¥48.02 2024-06-04 上书 加入购物车 收藏 MATLAB语言实用教程 马莉 https://www.kongfz.com/topic/533406/
21.深度学习PyTorch极简入门教程中文PDF高清版电子书下载这是一个深度学习PyTorch极简入门PDF教程,共有18个章节,涵盖深度学习Python必备知识点、框架、神经网络、项目实战、卷积神经网络等内容,是一个不错的深度学习PyTorch教程。 内容 深度学习概述 深度学习Python必备知识点 Anaconda与Jupyter Notebook 深度学习框架PyTorch https://www.jb51.net/books/900836.html