首页 > 其他分享 >LoRA 简介

LoRA 简介

时间:2023-09-06 14:56:20浏览次数:36  
标签:BA 训练 简介 模型 参数 Lora LoRA

LoRA 简介

简介

LoRA,英文全称Low-Rank Adaptation of Large Language Models,直译为大语言模型的低阶适应,这是微软的研究人员为了解决大语言模型微调而开发的一项技术。 如果想让一个预训练大语言模型能够执行特定领域内的任务,一般需要做fine-tuning,但是目前推理效果好的大语言模型参数维度非常非常大,有些甚至是上千亿维,如果直接在大语言模型上做fine-tuning,计算量会非常的大,成本也会非常的高。LoRA的做法是冻结预训练好的模型参数,然后在每个Transformer块里注入可训练的层,由于不需要对模型的参数重新计算梯度,所以,会大大的减少计算量。

Motivation:

目前大模型动辄十亿乃至百亿千亿的参数(例如GPT3,1750亿),如果直接进行微调,不仅训练开销巨大,而且参数的存储也会占据较大空间。因此需要一种针对大模型高效调参的方法,一则减少训练过程中的计算和显存开销,二则减少调参之后的参数存储。

原理

具体如下图所示,核心思想是在原始预训练模型增加一个旁路,做一个降维再升维的操作。训练的时候固定预训练模型的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与预训练语言模型的参数叠加。用随机高斯分布初始化 A,用0矩阵初始化B。这样能保证训练时,新增的旁路BA=0,从而对模型结果没有影响。在推理时,将左右两部分的结果加到一起,即h=Wx+BAx=(W+BA)x,所以,只要将训练完成的矩阵乘积BA跟原本的权重矩阵W加到一起作为新权重参数替换原始预训练语言模型的W即可,不会增加额外的计算资源。LoRA的最大优势是训练速度更快,使用的内存更少。

image

在部署时,A和B可以通过重参数化做到 W里,这样inference和之前是一致的。

应用Lora到Stable Diffusion:

Lora可以应用到任何一个神经网络的子集中。在Transformer架构里Lora经常应用在self-attention模块和MLP模块中。在 Stable Diffusion模型里,Lora被用在condition和图像表示建立关联的Cross-Attention层,即下图的黄色区域中。

image

Diffusers目前已经支持Lora的训练和推理,详见:https://huggingface.co/docs/diffusers/training/lora

civitai到diffuser格式的转换:https://github.com/huggingface/diffusers/blob/main/scripts/convert_lora_safetensor_to_diffusers.py

参考文档:
https://zhuanlan.zhihu.com/p/616198265

标签:BA,训练,简介,模型,参数,Lora,LoRA
From: https://www.cnblogs.com/michaelcjl/p/17682288.html

相关文章

  • Linux htons()和htonl()简介
    htons()#include<arpa/inet.h>uint16_thtons(uint16_thostshort); htons的功能:            将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)参数u_shorthostshort:16位无符号整数返回值:TCP/IP网络字节顺序.TCP/......
  • 算法时间复杂度和空间复杂度简介
    评估算法的核心指标1时间复杂度2空间复杂度 空间复杂度就是算法解决一个问题时额外占用的内存空间是多大时间复杂度就是算法解决一个问题时数据量和运行时间的关系 一般我们评判算法的优劣首先考虑的就是时间复杂度。 时间复杂度什么是常数时间操作?执行时间固定的......
  • vue--day77--路由的简介
    1.vue-router的理解vue的一个插件库专门用来实现SPA应用2.SPA应用的理解单页web应用,(singlepagewebapplication SPA)整个页面只有一个完整的页面点击页面中的导航链接不会刷新页面只会做页面的局部更新数据需要通过ajax请求获取3.路由的理解1.理解:一个路由......
  • 使用 OpenTelemetry 构建 .NET 应用可观测性(2):OpenTelemetry 项目简介
    目录前世今生OpenTracingOpenCensusOpenTelemetryOpenTelemetry项目介绍OpenTelemetrySpecificationSignalsContext&PropagationOpenTelemetryProtocolOpenTelemetrySDKOpenTelemetrySDK架构OpenTelemetryCollector下期预告前世今生OpenTracingOpenTracing项目启动于......
  • 云原生第十周——promethus简介(下)
    Prometheus服务发现简介prometheus采用pull方式拉取指定目标实例的监控数据,也就是间隔固定的周期去目标实例上抓取metrics数据,每一个被抓取的目标实例都需要暴露一个数据指标API接口,prometheus通过这个暴露的接口就可以获取到其指标数据,这种方式需要由目标服务决定采集的指标有......
  • 在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介 [摘]
    作者:车东关键词:Lucenejavafull-textsearchengine Chinese wordsegment内容摘要:Lucene是一个基于Java的全文索引工具包。基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史全文检索的实现:Luene全文索引和数据库索引的比较中文切分词机制简介:基于词库和自动切分......
  • babel 简介
    Babel是什么Babel是一个Javascript编译器Babel是一个工具链,主要用于将采用ECMAScript2015+语法编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧版本的浏览器或其他环境中。下面列出的是Babel能为你做的事情:语法转换通过Polyfill方式在目标环......
  • celery简介与安装
    前言Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具。它是一个任务队列,专注于实时处理,同时还支持任务调度。可以使用的场景如下:异步发邮件,这个时候只需要提交任务给celery就可以了.之后由worker进行发邮件的操作.跑批接口......
  • Tokenization 简介
    Tokenization是将文本分割成更小的单位,称为"token"的过程。在自然语言处理中,token可以是单词、短语、句子或其他更小的文本单位,具体取决于任务和需求。Tokenization的目的是将文本分解成离散的、可处理的单元,以便进行进一步的文本处理和分析。它是自然语言处理任务的重要预处理步......
  • 自然语言工具包(Natural Language Toolkit,简称NLTK) 简介
    自然语言工具包(NaturalLanguageToolkit,简称NLTK)是一个广泛使用的Python库,用于处理和分析自然语言文本。它提供了各种工具和数据集,用于文本预处理、语言模型、词性标注、句法分析、语义分析、情感分析、文本分类等自然语言处理任务。以下是NLTK的一些主要功能和特点:1.丰富的语......