LLM模型微调方法及经验总结

文章目录

  • 微调方法
    • Freeze方法
    • P-tuning方法
      • prefix-tuning
      • Prompt Tuning
      • P-tuning v1
      • P-tuning v2
    • Lora方法
    • Qlora方法
  • 微调经验
    • 模型选择
    • 模型大小选择
    • 数据处理
    • 微调方案
      • 英文模型需要做词表扩充吗?
      • 如何避免灾难遗忘
  • 参考:

在现在这大规模语言模型(LLM)盛行的时代,由于模型参数和显卡配置的因素,预训练基本是大公司或者高校可以完成的事情,而对于小公司或个人,则只能对LLM进行微调,也就是说微调少量或额外的模型参数,固定大部分预训练模型(LLM)参数,从而大大降低了计算和存储成本,同时,也尽可能实现与全量参数微调相当的性能。

本文总结几种主流的微调方法,主要包括Freeze方法、P-tuning方法、Lora方法和Qlora方法。

微调方法

Freeze方法

Freeze是冻结的意思,Freeze方法指的是参数冻结,对原始模型的大部分参数进行冻结,仅训练少部分的参数,这样就可以大大减少显存的占用,从而完成对大模型的微调。

P-tuning方法

P-tuning目前有两个版本。
P-Tuning v1 论文: https://arxiv.org/pdf/2103.10385.pdf
P-Tuning v2论文: https://arxiv.org/abs/2110.07602

P-tuning v1 github代码:https://github.com/THUDM/P-tuning
P-Tuning v2 github代码:https://github.com/THUDM/P-tuning-v2

prefix-tuning

prefix-tuning:Optimizing Continuous Prompts for Generation
论文地址:https://arxiv.org/abs/2101.00190
代码地址:https://github.com/XiangLi1999/PrefixTuning

在学习P-tuning之前,需要先了解下prefix-tuning,它指的是在微调模型的过程中只优化加入的一小段可学习的向量(virtual tokens)作为Prefix,而不需要优化整个模型的参数(训练的时候只更新Prefix部分的参数,而PLM中的其他部分参数固定)。
对于不同的任务和模型结构需要不同的prefix:

在autoregressive LM 前添加prefix:
z = [ P R E F I X ; x ; y ] z=[P R E F I X ; x ; y] z=[PREFIX;x;y]
在encoder和decoder之前添加prefixs:
z = [ PREFIX;  x ; PREFIX  ; y ] z=[\text { PREFIX; } x ; \text { PREFIX } ; y] z=[ PREFIX; x; PREFIX ;y]
在这里插入图片描述
对于prefix tuning可能还需要一些前置知识,soft prompt和hard prompt的概念。
prompt综述参考:
https://arxiv.org/pdf/2107.13586.pdf
https://zhuanlan.zhihu.com/p/524383554

hard prompt等同于discrete prompt;soft prompt等同于continuous prompt。
离散prompt是一个实际的文本字符串(自然语言,人工可读),通常由中文或英文词汇组成;
连续prompt通常是在向量空间优化出来的提示,通过梯度搜索之类的方式进行优化。
离散的prompts中,提示语的变化对模型最终的性能特别敏感,加一个词、少一个词或者变动位置都会造成比较大的变化。成本比较高,并且效果不太好。
显然:Prefix Tuning属于Soft prompt。

Prompt Tuning

论文:The Power of Scale for Parameter-Efficient Prompt Tuning
论文地址:https://arxiv.org/pdf/2104.08691.pdf

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

通过实验发现,随着预训练模型参数量的增加,Prompt Tuning的方法会逼近全参数微调的结果。

P-tuning v1

论文:GPT Understands, Too
论文地址:https://arxiv.org/abs/2103.10385
该方法的核心是使用可微的virtual token替换了原来的discrete tokens,且仅加入到输入层,并使用prompt encoder(BiLSTM+MLP)对virtual token进行编码学习。
在这里插入图片描述

效果:相同参数规模,如果进行全参数微调,Bert的在NLU任务上的效果,超过GPT很多;但是在P-Tuning下,GPT可以取得超越Bert的效果。
在这里插入图片描述
之前的Prompt Tuning和P-Tuning等方法存在两个主要的问题:
第一,缺乏模型参数规模和任务通用性。

  • 缺乏规模通用性:Prompt Tuning论文中表明当模型规模超过100亿个参数时,提示优化可以与全量微调相媲美。但是对于那些较小的模型(从100M到1B),提示优化和全量微调的表现有很大差异,这大大限制了提示优化的适用性。
  • 缺乏任务普遍性:尽管Prompt Tuning和P-tuning在一些 NLU 基准测试中表现出优势,但提示调优对硬序列标记任务(即序列标注)的有效性尚未得到验证。

第二,缺少深度提示优化,在Prompt Tuning和P-tuning中,连续提示只被插入transformer第一层的输入embedding序列中,在接下来的transformer层中,插入连续提示的位置的embedding是由之前的transformer层计算出来的,这可能导致两个可能的优化挑战。

由于序列长度的限制,可调参数的数量是有限的。
输入embedding对模型预测只有相对间接的影响。

这些问题在P-tuning v2得到了改进。

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。

Lora方法

论文:LoRA: Low-Rank Adaptation of Large Language Models
论文地址:https://arxiv.org/abs/2106.09685
官方代码github:https://github.com/microsoft/LoRA
HuggingFace封装的peft库:https://github.com/huggingface/peft

LoRA的本质是在原模型的基础上插入若干新的参数,称之为adapter。在训练时,冻结原始模型的参数,只更新adapter的参数。对于不同的基座模型,adapter的参数量一般为几百万~几千万

具体来讲,Lora方法指的是在大型语言模型上对指定参数增加额外的低秩矩阵,也就是在原始PLM旁边增加一个旁路,做一个降维再升维的操作。并在模型训练过程中,固定PLM的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与PLM的参数叠加。用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵。
在这里插入图片描述
具体来看,假设预训练的矩阵为 W 0 ∈ R d × k W_0 \in \mathbb{R}^{d \times k} W0Rd×k ,它的更新可表示为:
W 0 + Δ W = W 0 + B A , B ∈ R d × r , A ∈ R r × k W_0+\Delta W=W_0+B A, B \in \mathbb{R}^{d \times r}, A \in \mathbb{R}^{r \times k} W0+ΔW=W0+BA,BRd×r,ARr×k其中秩 r < < min ⁡ ( d , k ) r<<\min (d, k) r<<min(d,k)
对于 h = W 0 x h=W_0 x h=W0x ,它的前向计算变为:
h = W 0 x + Δ W x = W 0 x + B A x = ( W 0 + B A ) x h=W_0 x+\Delta W x=W_0 x+B A x=\left(W_0+B A\right) x h=W0x+ΔWx=W0x+BAx=(W0+BA)xLora的这种思想有点类似于残差连接,同时使用这个旁路的更新来模拟full finetuning的过程。

LoRA 的最大优势是速度更快,使用的内存更少,因此可以在消费级硬件上运行。

在多卡训练时,Lora也是效率很高的,在多卡训练中,LoRA的速度优势主要体现在两个方面: 1. 计算效率:由于LoRA只需要计算和优化注入的低秩矩阵,因此它的计算效率比完全微调更高。在多卡训练中,LoRA可以将注入矩阵的计算和优化分配到多个GPU上,从而加速训练过程。 2. 通信效率:在多卡训练中,通信效率通常是一个瓶颈。由于LoRA只需要通信注入矩阵的参数,因此它的通信效率比完全微调更高。在多卡训练中,LoRA可以将注入矩阵的参数分配到多个GPU上,从而减少通信量和通信时间。 因此,LoRA在多卡训练中通常比完全微调更快。具体来说,LoRA可以将硬件门槛降低多达3倍,从而提高训练的效率。

Qlora方法

论文:QLORA: Efficient Finetuning of Quantized LLMs
论文地址:https://arxiv.org/abs/2305.14314

QLoRA是华盛顿大学提出的一种高效微调大模型的方法,可以在不降低任何性能的情况下微调量化为 4 bit模型的方法。

核心点如下:

  • 4bit NormalFloat(NF4):对于正态分布权重而言,一种信息理论上最优的新数据类型,该数据类型对正态分布数据产生比 4 bit整数和 4bit 浮点数更好的实证结果。
  • 双量化(Double Quantization):对第一次量化后的那些常量再进行一次量化,减少存储空间。
  • 分页优化器(Paged Optimizers):使用NVIDIA统一内存特性,该特性可以在在GPU偶尔OOM的情况下,进行CPU和GPU之间自动分页到分页的传输,以实现无错误的 GPU 处理。该功能的工作方式类似于 CPU 内存和磁盘之间的常规内存分页。使用此功能为优化器状态(Optimizer)分配分页内存,然后在 GPU 内存不足时将其自动卸载到 CPU 内存,并在优化器更新步骤需要时将其加载回 GPU 内存。
  • 增加Adapter:4-bit的NormalFloat与Double Quantization,节省了很多空间,但带来了性能损失,作者通过插入更多adapter来弥补这种性能损失。在LoRA中,一般会选择在query和value的全连接层处插入adapter。而QLoRA则在所有全连接层处都插入了adapter,增加了训练参数,弥补精度带来的性能损失。
    在这里插入图片描述
    实验证明,无论是使用16bit、8bit还是4bit的适配器方法,都能够复制16bit全参数微调的基准性能。这说明,尽管量化过程中会存在性能损失,但通过适配器微调,完全可以恢复这些性能。
    在这里插入图片描述
    实验还比较了不同的4bit数据类型对效果(zero-shot均值)的影响,其中,NFloat 显著优于Float,而NFloat + DQ略微优于NFloat,虽然DQ对精度提升不大,但是对于内存控制效果更好。

微调经验

模型选择

目前主流的可微调的模型有ChatGLM,Baichuan,LLAMA,RWKV等。
中文较好的为ChatGLM和Baichuan;
潜力较好的为LLAMA;
RWKV有较好的推理效率(RNN架构决定的,随输入长度内存占比线性增加,而transformer是指数增长)和长度外推性。

模型大小选择

  • 一般情况下,参数越大效果越好,资源允许推荐选择30B以上模型;
  • 参数多量化低的模型要优于参数低量化高的模型,举例 :33B-fb4 模型要优于 13b-fb16 模型。

数据处理

  • 在数据处理过程中,可能面临各种类型的数据,PDF,Word,HTML,代码文件等等,对于这种不同类型的数据需要都处理成文本,同时还过滤掉一些干扰项或乱码的数据。
  • 对于空的文档或文档长度低于100进行过滤,进一步减少噪音。

微调方案

前面已经介绍了几种常见的微调方法,比较推荐采用 Lora 或 QLora两种方法。

英文模型需要做词表扩充吗?

对于像LLaMA模型的词表大小是32K,其主要针对英语进行训练(具体详见LLaMA论文),对多语种支持不是特别理想(可以对比一下多语言经典模型XLM-R的词表大小为250K)。通过初步统计发现,LLaMA词表中仅包含很少的中文字符,所以在切词时会把中文切地更碎,需要多个byte token才能拼成一个完整的汉字,进而导致信息密度降低。比如,在扩展词表后的模型中,单个汉字倾向于被切成1个token,而在LLaMA中可能就需要2-3个才能组合成一个汉字,显著降低模型的推理效率。

如何避免灾难遗忘

通常我们有以下方式,可以减少或避免灾难性遗忘问题

  • 如果采用LoRA训练出现遗忘时,可以将 lora_rank调大,如从8调到64 ( 原因是与原模型数据领域相差较大的话,需要更大的秩,原论文有说明)。
  • 复习 - 跟人一样,在预训练或微调时,回看之前训练的数据。还可以专门把特征图存起来,量化以后放在一个类似于记忆库的地方,之后在新任务上训练的时候从这个记忆库里重构出记忆和新数据一起训练。参考这篇论文。
  • MoE - 稀疏门控制的专家混合层,最近爆出 GPT4 是由8个220B 的模型组合。 关于 Moe 相关资料大家自行了解。
  • 尝试调小学习率,如chatglm学习率改到2e-4,但训练速度会慢很多。

参考:

https://finisky.github.io/lora/
大模型参数高效微调技术原理综述(二)-BitFit、Prefix Tuning、Prompt Tuning
大模型参数高效微调技术原理综述(三)-P-Tuning、P-Tuning v2
大模型参数高效微调技术原理综述(五)-LoRA、AdaLoRA、QLoRA
QLoRA实战
LLM - finetuning - 踩坑经验之谈

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MiniGPT-4引领潮流,GPT-4提前发布图片阅读功能

AI中文站翻译自medium.com 让我们来看看如何玩Minigpt-4并将其应用到日常生活中。 今年三月&#xff0c;OpenAI 宣布了 GPT-4 的图像识别功能&#xff0c;这意味着 GPT 技术又被提升一个维度。-4 尚未发布给大众使用很长时间&#xff0c;所以终于有人忍不住了&#xff01;来自阿…

MiniGPT-4 模型学习与实战

1 前言 MiniGPT-4 是一个冻结的视觉编码器(Q-Former&ViT)与一个冻结的 文本生成大模型&#xff08;Vicuna&#xff0c;江湖人称&#xff1a;小羊驼&#xff09; 进行对齐造出来的。 MiniGPT-4 具有许多类似于 GPT-4 的能力, 图像描述生成、从手写草稿创建网站等MiniGPT-4…

QLoRA:一种高效LLMs微调方法,48G内存可调65B 模型,调优模型Guanaco 堪比Chatgpt的99.3%!

引言 本文是华盛顿大学刚刚发布的一篇文章。作者提出了QLoRA,它是一种「高效的微调方法」,可以在保持完整的16位微调任务性能的情况下,将内存使用降低到足以「在单个48GB GPU上微调650亿参数模型」。QLORA通过冻结的4位量化预训练语言模型向低秩适配器(LoRA)反向传播梯度。…

Prompt Learning: ChatGPT 也在用的 NLP 新范式

编者按&#xff1a;自GPT-3以来&#xff0c;大语言模型进入了新的训练范式&#xff0c;即“预训练模型Promp learning”。在这一新的范式下&#xff0c;大语言模型呈现出惊人的zero-shot和few-shot能力&#xff0c;使用较少的训练数据来适应新的任务形式。最近火爆出圈的ChatGP…

《花雕学AI》新版必应 Bing 登场:轻松注册,一站式搜索、聊天与绘画应有尽有

引言&#xff1a; 你是否曾经在网上搜索信息时感到困惑或沮丧&#xff1f;你是否曾经想要在网上创造一些有趣或有用的内容&#xff0c;却不知道从何开始&#xff1f;你是否曾经想要用文字描述一个图像&#xff0c;却无法找到合适的图片&#xff1f;如果你的答案是肯定的&#x…

如何利用ChatPDF快速阅读英文论文,帮你写作业

英语渣狂喜&#xff5e;确实惊艳到我了&#xff01; 大家好&#xff0c;我是老表 使用平台&#xff1a;https://www.chatpdf.com/ 1、上传PDF 访问官网&#xff1a;https://www.chatpdf.com/&#xff0c;界面很美&#xff0c;点击直接上传 PDF&#xff0c; 需要注意免费版本PDF…

GPT4All: 一个基于大规模数据训练的聊天机器人模型

微信改版&#xff0c;求求大家星标下公众号&#xff0c; 不然后面推送大家可能会看不到 大家好&#xff0c;我是老表&#xff0c;今天给大家分享的是一个开源项目&#xff1a;GPT4All 随着人工智能技术的不断发展&#xff0c;聊天机器人已经成为了一个备受关注的研究领域。在这…

ChatGPT提问的万能公式,强烈建议收藏!泰裤辣!

在实际使用GPT的时候&#xff0c;并不是GPT不够强大&#xff0c;而是我们需要很多时间去调教AI&#xff0c;以便输出我们期望的答案&#xff0c;为了让输出无限的靠近你的期望&#xff0c;就需要下面这个万能的框架&#xff0c;如果大家记不住这个框架或者没有形成习惯&#xf…

老黄因ChatGPT大赚311亿/ 中国移动公布实名NFT交易专利/C919首航航班确定...今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大噶好~今天是兔年首个要上班的周一。 不知各位打工人从假期中缓过来了嘛&#xff1f;&#xff08;虽然可能已经上了两天班&#xff09; 日报君在此祝大家新的一年里工作顺利&#xff0c;并在此奉上今日份科技趣闻&#xff08;为您精…

吴恩达给ChatGPT泼冷水/ 罗永浩谈欠薪/ 谷歌元老离职... 今日更多新鲜事在此

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大噶吼~今天是2月17日星期五。 又到一周工作日的尾巴了&#xff0c;各位想好周末怎么欢度了嘛&#xff1f; 在出去嗨皮/回家睡觉之前&#xff0c;不妨来和日报君看一看科技趣闻——讲真&#xff0c;挺有趣的。 OpenAI计划纠正ChatGPT…

银行数字化转型导师坚鹏:ChatGPT解密与银行应用案例

ChatGPT解密与银行应用案例 ——开启人类AI新纪元 打造数字化转型新利器 课程背景&#xff1a; 很多企业和员工存在以下问题&#xff1a; 不清楚ChatGPT对我们有什么影响&#xff1f; 不知道ChatGPT的发展现状及作用&#xff1f; 不知道ChatGPT的银行业应用案例&#…

关于大模型实践的一些总结

随着ChatGPT的迅速出圈&#xff0c;加速了大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说&#xff0c;传统的单机单卡训练模式肯定不能满足上千&#xff08;万&#xff09;亿级参数的模型训练&#xff0c;这时候我们就需要解决内存墙和通信墙等一系列问题&am…

OpenAI 遭遇离职潮:员工对 ChatGPT 进展缓慢失望,痛批 CEO 不务正业

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年6月份全网热门报告合集 普通人如何利用ChatGPT变现赚钱&#xff1f; 无需翻墙&#xff0c;无需注册&#xff0c;ChatGPT4直接使用 ChatGPT提词手册&#xff0c;学完工…

近期AI成为热点话题, ChatGPT, GPT4, new bing, Bard,AI 绘画, AI 编程工具引发大量讨论。请结合自身学习经历,一起来聊聊你对 AI 技术以及其今后发展的看

1&#xff0c;你人生中第一次接触到“人工智能”的概念和产品是什么&#xff1f;什么让你觉得“人类做的东西的确有智能”&#xff1f; 天猫精灵/小度智能语音音箱。科技越来越发达&#xff0c;一些年龄大的老人并不能够跟上时代的步伐。平时爸妈要上班&#xff0c;我和弟弟要上…

​从底层技术分析如何调教你的ChatGPT?

相信很多人都已经在使用类ChatGPT的工具进行工作或者娱乐了&#xff0c;这里说的类ChatGPT的是指和ChatGPT相同或者相似功能的产品&#xff0c;包括国外的开源平替模型、百度的文心一言等&#xff0c;但是你真的会使用这些工具和应用吗&#xff1f;你使用的方法是正确的吗&…

从ChatGPT的成功看中美创新模式的差异

我在大约三个月前撰写了文章《三分钟读懂新一代人工智能——ChatGPT》,当时ChatGPT的用户刚刚突破一百万,相对来说还较为小众,在资本市场还没有引起关注和追捧。三个月后,这个产品开始进入大众视野,按照瑞银的统计,月活跃用户数已经突破了一亿。如果有投资者在三个月前开…

奥特曼系列ol2020服务器,奥特曼系列ol2020

奥特曼系列ol2020比较好玩的一个系列&#xff0c;游戏玩法里面还原了真实的奥特曼场景带给你回忆感&#xff0c;奥特曼系列ol2020游戏众多人物角色可以选择&#xff0c;跟随着剧情进行体验&#xff0c;奥特曼系列ol2020喜欢的可以下载。 奥特曼系列ol2020游戏特色 1、每一个奥特…

基于Pyramid Vision Transformer(PVT-v2)实现奥特曼识别

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

奥特曼打小怪兽python代码简单版_奥特曼打小怪兽

from random import randint # 导入randint函数 class Monster(object): def __init__(self, name, energy): self.name name self.energy energy if self.energy > 100: print(self.name "满血战斗") else: print(self.name "目前有" str(self.en…

奥特曼html代码,和平精英捏脸代码奥特曼

和平精英自从更新的新的捏脸玩法之外&#xff0c;玩家们就发明出来了各种各样的脸型&#xff0c;除了明星、小丑之外&#xff0c;还有大家喜爱的奥特曼&#xff01;最近万几门被奥特曼的信息疯狂洗脑&#xff0c;还去重新看了一遍奥特曼&#xff0c;回忆自己的童年&#xff0c;…