LoRA(Low-Rank Adaptation)是一项流行的技术,旨在微调大语言模型(LLM)。这项技术最初由微软的研究人员提出,并收录在《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》的论文中。 LoRA与其他技术不同之处在于,并非调整神经网络的所有参数,而是专注于更新少量低秩矩阵,从而显着减少了训练模型所需的计算量。
由于 LoRA 的微调质量与全模型微调相当,很多人将这种方法称为微调神器。自发布以来,很多人对这项技术感到好奇,希望通过编写代码来更好地理解这一研究。以往,缺乏适当的文档说明一直是一个困扰,但现在,我们有了教程的帮助。
这篇教程的作者是知名机器学习与 AI 研究者 Sebastian Raschka,他表示在各种有效的 LLM 微调方法中,LoRA 仍然是自己的首选。为此,Sebastian 专门写了一篇博客《Code LoRA From Scratch》,从头开始构建 LoRA,在他看来,这是一种很好的学习方法。
本文通过从头编写代码的方式介绍低秩自适应(LoRA),Sebastian在实验中对DistilBERT模型进行微调,并将其应用于分类任务。
LoRA方法与传统微调方法的比较结果表明,LoRA方法在测试准确率方面达到了92.39%,这比仅对模型最后几层进行微调(86.22%的测试准确率)表现出更优异的性能。这表明LoRA方法在优化模型性能方面具有明显优势,能够更好地提升模型的泛化能力和预测准确性。这个结果强调了在模型训练和调优过程中采用先进的技术和方法的重要性,以获得更好的性能表现和结果。通过比
Sebastian 是如何实现的,我们接着往下看。
从头开始编写LoRA
用代码的方式表述一个LoRA 层是这样的:
其中,in_dim 是想要使用LoRA 修改的层的输入维度,与此对应的out_dim 是层的输出维度。代码中还添加了一个超参数即缩放因子 alpha,alpha 值越高意味着对模型行为的调整越大,值越低则相反。此外,本文使用随机分布中的较小值来初始化矩阵 A,并用零初始化矩阵 B。
值得一提的是,LoRA 发挥作用的地方通常是神经网络的线性(前馈)层。举例来说,对于一个简单的PyTorch 模型或具有两个线性层的模块(例如,这可能是Transformer 块的前馈模块),其前馈(forward)方法可以表述为:
在使用LoRA 时,通常会将LoRA 更新添加到这些线性层的输出中,又得到代码如下:
如果你想通过修改现有PyTorch 模型来实现LoRA ,一种简单方法是将每个线性层替换为LinearWithLoRA 层:
以上这些概念总结如下图所示:
为了应用LoRA,本文将神经网络中现有的线性层替换为结合了原始线性层和LoRALayer 的LinearWithLoRA 层。
如何上手使用 LoRA 进行微调
LoRA 可用于 GPT 或图像生成等模型。为了简单说明,本文采用一个用于文本分类的小型 BERT(DistilBERT) 模型来说明。
由于本文只训练新的 LoRA 权重,因而需要将所有可训练参数的 requires_grad 设置为 False 来冻结所有模型参数:
接下来,使用 print (model) 检查一下模型的结构:
由输出可知,该模型由 6 个 transformer 层组成,其中包含线性层:
此外,该模型有两个线性输出层:
通过定义以下赋值函数和循环,可以选择性地为这些线性层启用 LoRA:
使用 print (model) 再次检查模型,以检查其更新的结构:
正如上面看到的,线性层已成功地被 LinearWithLoRA 层取代。
如果使用上面显示的默认超参数来训练模型,则会在 IMDb 电影评论分类数据集上产生以下性能:
- 训练准确率:92.15%
- 验证准确率:89.98%
- 测试准确率:89.44%
在下一节中,本文将这些 LoRA 微调结果与传统微调结果进行了比较。
与传统微调方法的比较
在上一节中,LoRA 在默认设置下获得了 89.44% 的测试准确率,这与传统的微调方法相比如何?
为了进行比较,本文又进行了一项实验,以训练 DistilBERT 模型为例,但在训练期间仅更新最后 2 层。研究者通过冻结所有模型权重,然后解冻两个线性输出层来实现这一点:
只训练最后两层得到的分类性能如下:
- 训练准确率:86.68%
- 验证准确率:87.26%
- 测试准确率:86.22%
结果显示,LoRA 的表现优于传统微调最后两层的方法,但它使用的参数却少了 4 倍。微调所有层需要更新的参数比 LoRA 设置多 450 倍,但测试准确率只提高了 2%。
优化 LoRA 配置
前面讲到的结果都是 LoRA 在默认设置下进行的,超参数如下:
假如用户想要尝试不同的超参数配置,可以使用如下命令:
不过,最佳超参数配置如下:
在这种配置下,得到结果:
- 验证准确率:92.96%
- 测试准确率:92.39%
值得注意的是,即使 LoRA 设置中只有一小部分可训练参数(500k VS 66M),但准确率还是略高于通过完全微调获得的准确率。
原文链接:https://lightning.ai/lightning-ai/studios/code-lora-from-scratch?cnotallow=f5fc72b1f6eeeaf74b648b2aa8aaf8b6
以上是如何从头开始编写LoRA代码,这有一份教程的详细内容。更多信息请关注PHP中文网其他相关文章!

软AI(被定义为AI系统,旨在使用近似推理,模式识别和灵活的决策执行特定的狭窄任务 - 试图通过拥抱歧义来模仿类似人类的思维。 但是这对业务意味着什么

答案很明确 - 只是云计算需要向云本地安全工具转变,AI需要专门为AI独特需求而设计的新型安全解决方案。 云计算和安全课程的兴起 在

企业家,并使用AI和Generative AI来改善其业务。同时,重要的是要记住生成的AI,就像所有技术一样,都是一个放大器 - 使得伟大和平庸,更糟。严格的2024研究O

解锁嵌入模型的力量:深入研究安德鲁·NG的新课程 想象一个未来,机器可以完全准确地理解和回答您的问题。 这不是科幻小说;多亏了AI的进步,它已成为R

大型语言模型(LLM)和不可避免的幻觉问题 您可能使用了诸如Chatgpt,Claude和Gemini之类的AI模型。 这些都是大型语言模型(LLM)的示例,在大规模文本数据集上训练的功能强大的AI系统

最近的研究表明,根据行业和搜索类型,AI概述可能导致有机交通下降15-64%。这种根本性的变化导致营销人员重新考虑其在数字可见性方面的整个策略。 新的

埃隆大学(Elon University)想象的数字未来中心的最新报告对近300名全球技术专家进行了调查。由此产生的报告“ 2035年成为人类”,得出的结论是,大多数人担心AI系统加深的采用


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3汉化版
中文版,非常好用

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),