大模型微调方法总结

news2024/12/23 13:44:43

一 LoRA:

1 低(秩)rank 自适应微调方法
2 背景及本质
  大模型的参数更新耗费大量现存为此, 微软的研究者们于2021年通过论文《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》提出了低秩适应LoRA

它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到 Transformer 架构的每一层中,大大减少了下游任务的可训练参数的数量

We propose Low-Rank Adaptation, or LoRA, which freezes the pre-trained model weights and injects trainable rank decomposition matrices into each layer of the Transformer architecture, greatly reducing the number of trainable parameters for downstream tasks.

与使用 Adam 微调的 GPT-3 175B 相比,LoRA 可以将可训练参数数量减少 10,000 倍,GPU 内存需求减少 3 倍

Compared to GPT-3 175B fine-tuned with Adam, LoRA can reduce the number of trainable parameters by 10,000 times and the GPU memory requirement by 3 times.

在这里插入图片描述

3 大致操作总览
  1 正向推理 的所有参数 结果

2 反向梯度的所有结果

3 反向梯度更新的计算, sGD不带状态的会相对省内存,但是adam 就会记录过往若干梯度参数。

  ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2a52475aca554b9e8fbc1af51eb43e50.png)

训练:

图 W0+Lora层结果

lora=w1 正态分布+w2 全0

   推理:lora层需要merge会W0,即w1*w2+w0即可。

4 实际操作
  4.1 微软DeepSpeed-Chat中对LoRA微调的实现
  # TODO 待补充—>>>>>>

代码中体现

1
F.linear(input, self.weight, self.bias) + (self.lora_dropout(input)
@ self.lora_right_weight @ self.lora_left_weight) * self.lora_scaling
 加号左侧为原结构支路,加号右侧为新增支路,self.lora_right_weight 和self.lora_left_weight 分别为两个新引入线性层的参数.

4.2 Huggingface上PEFT库对LoRA
  更详细使用方法

# TODO 待补充—>>>>>>

5 另外应用
lora层可针对某一层参数,可插拔

对stable diffusion 也可用。

二 QLora微调方法

2.1 前言
QLoRA于今23年5月份通过此篇论文《QLORA: Efficient Finetuning of Quantized LLMs》被提出,本质是对LoRA的改进,相比LoRA进一步降低显存消耗。

因为LoRa为LLM的每一层添加了少量的可训练参数(适配器),并冻结了所有原始参数。这样对于微调,只需要更新适配器权重,这可以显著减少内存占用
而QLoRa更进一步,引入了4位量化、双量化和利用nVidia统一内存进行分页。
  所有这些对比Lora,进一步降低了显存消耗。

下图总结了不同的微调方法及其内存需求,其中的QLoRA通过将模型量化到4位精度并使用分页优化器管理内存峰值来改进LoRA.

在这里插入图片描述

2.2 模型量化
  原理:将浮点数值转化为定点数值,同时尽可能减少计算精度损失的方法。

这样就减小了模型, 在计算时,最后再将定点数据反量化为浮点数据得到最终的结果。

  ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/82e0488e755b44209d11a33e75bb8545.png)

综合而言,我们可以对模型参数(weight)、激活值(activation)或者梯度(gradient)做量化。通常而言,模型的参数分布较为稳定,因此对参数 weight 做量化较为容易(比如,QLoRA便是对weight做量化)
至于模型的激活值往往存在异常值,直接对其做量化,会降低有效的量化格点数,导致精度损失严重,因此,激活值的量化需要更复杂的处理方法(如SmoothQuant)

更多内容详见: 《zhouyi量化白皮书》

三 P-tuning V1/V2

在学习P-tuning之前,需要先了解下prefix-tuning。

它指的是在微调模型的过程中只优化加入的一小段可学习的向量(virtual tokens)作为Prefix,而不需要优化整个模型的 参数(训练的时候只更新Prefix部分的参数,而PLM中的其他部分参数固定)。原理如图。

对于不同的任务和模型结构需要不同的prefix, 微调时只更新prefix。

   ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/98891fe177024cc0abeb3d018b91da83.png)

1)在autoregressive LM 前添加prefix:
在这里插入图片描述

2)在encoder和decoder之前添加prefixs:

在这里插入图片描述

Encoder端增加前缀是为了引导输入部分的编码,Decoder 端增加前缀是为了引导后续token的生成。

3.0 prefix前置知识 加前缀tuning
  hard prompt等同于discrete prompt;

离散prompt是一个实际的文本字符串(自然语言,人工可读),通常由中文或英文词汇组成;

soft prompt等同于continuous prompt。

连续prompt通常是在向量空间优化出来的提示,通过梯度搜索之类的方式进行优化。

所以离散的prompts中,提示语的变化对模型最终的性能特别敏感,加一个词、少一个词或者变动位置都会造成比较大的变化。成本比较高,并且效果不太好。

显然,Prefix Tuning属于Soft prompt。

个人理解:instruction 用于训练的一种技术,推理阶段,可以叫其prompt。hard-prompt在训练阶段之所以有效果,相当于约束了模型的某一部分分布,训练阶段也就主要更新这块的分布情况,所以微调或再次训练效果就会显现。

类似 luotuo的prompts。

1
2
3
4
5
def generate_prompt(instruction, input):
    if len(input) > 0:
        return f"Below is an instruction that describes a task,<br> paired with an input that provides further context.<br> Write a response that appropriately completes the request.<br>\n\n### Instruction:\n{instruction}\n\n### Input:\n{input}\n\n### Response:\n"
    else:
        return f"Below is an instruction that describes a task.<br> Write a response that appropriately completes the request.<br>\n\n### Instruction:\n{instruction}\n\n### Response:\n"
  

讨论一下Prompt Tuning : 提示词tuning
  论文:The Power of Scale for Parameter-Efficient Prompt Tuning

论文地址:https://arxiv.org/pdf/2104.08691.pdf

该方法可以看做是Prefix Tuning的简化版本,它给每个任务都定义了自己的Prompt,拼接到数据上作为输出,但只在输入层加入prompt tokens。

举一个例子:

3.1 P-Tuning V1:将自然语言的离散模版转化为可训练的隐式prompt (连续参数优化问题)
 论文:GPT Understands, Too 论文地址:https://arxiv.org/abs/2103.10385

该方法的核心是使用可微的virtual token替换了原来的discrete tokens,

blog.csdnimg.cn/direct/691f8ee11eff438582b746692f4c4ada.png)

再使用prompt encoder(BiLSTM+MLP)对virtual token进行编码学习。

缺点

之前的Prompt Tuning和P-Tuning等方法存在两个主要的问题: 第一,缺乏模型参数规模和任务通用性。 缺乏规模通用性:Prompt Tuning论文中表明当模型规模超过100亿个参数时,提示优化可以与全量微调相媲美。但是对于那些较小的模型(从100M到1B),提示优化 和全量微调的表现有很大差异,这大大限制了提示优化的适用性。 缺乏任务普遍性:尽管Prompt Tuning和P-tuning在一些 NLU 基准测试中表现出优势,但提示调优对硬序列标记任务(即序列标注)的有效性尚未得到验证。 第二,缺少深度提示优化,在Prompt Tuning和P-tuning中,连续提示只被插入transformer第一层的输入embedding序列中,在接下来的transformer层中,插入连续提示的 位置的embedding是由之前的transformer层计算出来的,这可能导致两个可能的优化挑战。 由于序列长度的限制,可调参数的数量是有限的。 输入embedding对模型预测只有相对间接的影响。

3.2 P-Tuning V2:在输入前面的每层加入可微调的参数
  P1 问题在P-tuning v2得到了改进。

论文:P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks 论文地址:https://arxiv.org/abs/2110.07602

P-Tuning v2主要是基于P-tuning和prefix-tuning技术,引入Deep Prompt Encoding和Multi-task Learning等策略进行优化的

deep Prompt Encoding

P-Tuning v2在每一层都加入了Prompts tokens作为输入,而不是仅仅加在输入层,这带来两个方面的好处: 更多可学习的参数(从P-tuning和Prompt Tuning的0.01%增加到0.1%-3%),同时也足够参数高效。 加入到更深层结构中的Prompt能给模型预测带来更直接的影响。

Multi-task learning

基于多任务数据集的Prompt进行预训练,然后再适配到下游任务。对于pseudo token的continous prompt,随机初始化比较难以优化,因此采用multi-task方法同时训 练多个数据集,共享continuous prompts去进行多任务预训练,可以让prompt有比较好的初始化。

总结

P-Tuning v2是一种在不同规模和任务中都可与微调相媲美的提示方法。P-Tuning v2对从330M到10B的模型显示出一致的改进,并在序列标注等困难的序列任务上以很大的 幅度超过了Prompt Tuning和P-Tuning。

四 Freeze方法
Freeze是冻结的意思,Freeze方法指的是参数冻结,对原始模型的大部分参数进行冻结,仅训练少部分的参数,这样就可以大大减少显存的占用,从而完成对大模型的微 调。 这是一种比较简单微调方法,由于冻结的参数是大部分,微调的参数是少部分,因此在代码中只需要设置需要微调的层的参数即可,核心部分如下:

1
2
3
4
for name, param in model.named_parameters():
# 说明准备调整列表中的层,不在列表中的都被冻结。
if not any(nd in name for nd in [“layers.27”, “layers.26”, “layers.25”, “layers.24”, “layers.23”]):
param.requires_grad = False
  缺点只微调接近下游任务的那几层参数,又难以达到较好的效果。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

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

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

相关文章

2005年下半年软件设计师【下午题】试题及答案

文章目录 2005年下半年软件设计师下午题--试题2005年下半年软件设计师下午题--答案 2005年下半年软件设计师下午题–试题 2005年下半年软件设计师下午题–答案

AI绘画Stable Diffusion人物背景替换实操教程,让创意无限延伸

大家好&#xff0c;我是画画的小强 Stable Diffusion以其强大的能力可以实现人物背景的更换。本文将带你深入了解如何利用Stable Diffusion中的Inpaint Anything插件快速且精准地实现人物背景的替换&#xff0c;从而让你的图片焕发新生。 前期准备 本文会使用到Inpaint Anyt…

以敏感数据保护为中心,建立健全高校数据安全治理体系

教育行业数据安全事件频发 2023年8月&#xff0c;南昌某高校3万余条师生个人信息数据在境外互联网上被公开售卖&#xff0c;该校受到责令改正、警告并处80万元人民币罚款的处罚&#xff0c;主要责任人被罚款5万元人民币。2023 年 7月&#xff0c;中国人民大学一名毕业生马某某…

ClickHouse vs. Elasticsearch:十亿行数据的较量

本文字数&#xff1a;15291&#xff1b;估计阅读时间&#xff1a;39 分钟 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse 上海首届 Meetup 讲师招募中&#xff0c;欢迎讲师在文末扫码报名&#xff01; 引言 这…

2024上海初中生古诗文大会倒计时4个月:单选题真题示例和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间&#xff0c;我们继续来看10道选择题真题和详细解析&#xff0c;以下题目截取自我独家制作的在线真题集&#xff0c;都是来自于历届真题&#xff0c;去重、合并后&#xff0c;每道题都有参考答案和解析。 为帮助孩子自测和练习&…

Chromium下载

https://chromium.woolyss.com/download/ https://www.chromium.org/getting-involved/download-chromium/

力扣SQL50 即时食物配送 II min函数 嵌套查询

Problem: 1174. 即时食物配送 II &#x1f468;‍&#x1f3eb; 参考题解 Code -- 计算立即配送的订单百分比 select round (-- 计算订单日期与客户偏好配送日期相同的订单数量sum(case when order_date customer_pref_delivery_date then 1 else 0 end) * 100 /-- 计算总订…

Studying-代码随想录训练营day19| 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

第十九天&#xff0c;二叉树part06&#xff0c;二叉树的道路任重而道远&#x1f4aa; 目录 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236.二叉树的最近公共祖先 总结 530.二叉搜索树的最小绝对差 文档讲解&#xff1a;代码随想录二叉搜索树的最小绝对差 视频…

2024年高性价比蓝牙耳机怎么买?揭秘超高性价比蓝牙耳机推荐

当一打开购物软件想购买一款性价比高的蓝牙耳机&#xff0c;你就会发现&#xff0c;不同的蓝牙耳机的品牌价格差距蛮大的&#xff01;几十块的随处可见&#xff0c;上千块的也琳琅满目&#xff0c;品牌和款式更是繁多&#xff0c;让人看得眼花缭乱&#xff0c;无从下手......其…

浅谈逻辑控制器之ForEach控制器

浅谈逻辑控制器之ForEach控制器 ForEach控制器是一个非常实用的功能&#xff0c;它允许用户遍历某个变量的所有值&#xff0c;并为每个值执行控制器内的子采样器或逻辑。这对于处理从先前请求&#xff08;如CSV Data Set Config、JSON Extractor、Regular Expression Extracto…

银幕光影交织,红酒香醇流淌,一场电影与红酒的绝美浪漫邂逅

在光影交错的世界里&#xff0c;红酒与电影总能在不经意间碰撞出浪漫的火花。当银幕上的角色轻启瓶盖&#xff0c;那迷人的酒香便如诗如画般弥漫开来&#xff0c;与影片的情节交织在一起&#xff0c;构成了一幅幅动人的画面。今天&#xff0c;就让我们一起走进这个充满酒香的银…

9.XSS之过滤

XSS之过滤 通过输入代码发现被过滤掉了 <script>";"666查看页面元素代码&#xff0c;被后台代码过滤了 尝试一下大小写混合使用&#xff0c;攻击代码如下&#xff1a; <sCRipT>alert(你打篮球像oldqu)</sCrIPt>如下图所示&#xff0c;大小写混…

1986-2017年 全国农村固定观察点数据

全国农村固定观察点调查体系是中国一个重要的农村社会经济调查项目&#xff0c;它通过长期跟踪调查固定不变的村庄和农户&#xff0c;收集连续性数据&#xff0c;以获取农村基层的动态信息。这些数据不仅全面反映了农户及其家庭成员在生产、消费、就业、生活等方面的情况&#…

05-java基础——循环习题

循环的选择&#xff1a;知道循环的次数或者知道循环的范围就使用for循环&#xff0c;其次再使用while循环 猜数字 程序自动生成一个1-100之间的随机数&#xff0c;在代码中使用键盘录入去猜出这个数字是多少&#xff1f; 要求&#xff1a;使用循环猜&#xff0c;一直猜中为止…

动态规划数字三角形模型——AcWing 1015. 摘花生

动态规划数字三角形模型 定义 动态规划数字三角形模型是在一个三角形的数阵中&#xff0c;通过一定规则找到从顶部到底部的最优路径或最优值。 运用情况 通常用于解决具有递推关系、需要在不同路径中做出选择以达到最优结果的问题。比如计算最短路径、最大和等 注意事项 …

OCR的有效数据增强

背景 我面临着需要尽可能准确识别手写金额的挑战。难点在于保持误判率低于0.01%。由于数据集中样本数量固定&#xff0c;因此数据增强是合乎逻辑的选择。快速搜索未发现针对光学字符识别&#xff08;OCR&#xff09;的现成方法。因此&#xff0c;我挽起袖子&#xff0c;亲自创建…

数据挖掘案例-商品零售购物篮分析

数据挖掘案例-商品零售购物篮分析 1. 背景与挖掘目标 现代商品种类繁多&#xff0c;顾客往往会由于需要购买的商品众多而变得疲于选择&#xff0c;且顾客并不会因为商品选择丰富而选择购买更多的商品。 例如&#xff0c;货架上有可口可乐和百事可乐&#xff0c;若顾客需要选…

「全新升级,性能更强大——ONLYOFFICE 桌面编辑器 8.1 深度评测」

文章目录 一、背景二、界面设计与用户体验三、主要新功能亮点3.1 高效协作处理3.2 共同编辑&#xff0c;毫无压力3.3 批注与提及3.4 追踪更改3.5 比较与合并3.6 管理版本历史 四、性能表现4.1 集成 AI 工具4.2 插件强化 五、用户反馈与使用案例 一、背景 Ascensio System SIA -…

服务器数据恢复—raid故障导致部分分区无法识别/不可用的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌DL380服务器中3块SAS硬盘组建了一组raid。 服务器故障&#xff1a; RAID中多块磁盘出现故障离线导致RAID瘫痪&#xff0c;其中一块硬盘状态指示灯显示红色。服务器上运行的数据库在D分区&#xff0c;备份文件存放在E分区。由于RAID瘫…

Git之checkout/reset --hard/clean -f区别(四十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…