NLP大模型微调原理

news2024/11/16 15:37:06

1. 背景

LLM (Large Language Model) 大型语言模型,旨在理解和生成人类语言,需要在大量的文本数据上进行训练。一般基于Transformer结构,拥有Billion以上级别的参数量。比如GPT-3(175B),PaLM(560B)。

NLP界发生三件大事:

  1. ChatGPT:2022年11月OpenAI发布的AI聊天机器人程序,基于GPT-3.5

  2. LLaMA:2023年2月Meta发布的预训练模型,重新定义了大模型的“大”

  3. Alpaca:2023年3月斯坦福发布的微调模型,证明Instruction Fine-Tuning的可行性

ChatGPT背后的技术:

  • GPT models:基座模型(base model), GPT-3, GPT-3.5-Turbo and GPT4, 较大的模型容量,需要在大量数据上进行预训练。

  • IFT(Instruction Fine-Tuning):指令微调,指令是指用户传入的目的明确的输入文本,指令微调用以让模型学会遵循用户的指令。OpenAI叫做SFT(Supervised Fine-Tuning),是一样的意思。

  • CoT(Chain-of-Thought):在数据层面上,表示指令形式的一种特殊情况,包含step-by-step的推理过程(如下图所示)。在模型层面上,指模型具有逐步推理的reasoning能力。

  • RLHF(Reinforcement Learning from Human Feedback):以强化学习方式依据人类反馈优化语言模型。

2. 大模型训练方法

2.1 FLAN

论文《Finetuned Language Models Are Zero-Shot Learners》FLAN 明确提出了指令微调,本质目的是将NLP任务转换成自然语言指令后再喂给模型训练,使其提升zero-shot任务的性能表现。

paper:https://arxiv.org/abs/2109.01652

2.2 T0

论文《Multitask Prompted Training Enables Zero-shot Task Generalization》T0探究了大模型zero-shot的泛化能力是怎么实现的,并证明了通过显式多任务prompt训练可以实现语言模型的zero-shot泛化能力。

paper:https://arxiv.org/abs/2110.08207

1. 多任务 prompted training 比同参数模型zero-shot能力更强。

2. 论文比较了 T0 与 GPT-3 模型的 zero-shot 性能:

a. 发现 T0 在 11 个数据集中有9个超过 GPT-3;

b. T0 和 GPT-3 都没有接受自然语言推理方面的训练,但 T0 在所有NLI数据集上的表现都优于GPT-3。

2.3 Flan-T5

论文《Scaling Instruction-Finetuned Language Models》Flan-T5提出了一套多任务的微调方案(Flan),通过在超大规模的任务上进行微调,让语言模型具备了极强的泛化性能,做到单个模型就可以在1800多个NLP任务上都能有很好的表现。这意味着模型可以直接在几乎全部的NLP任务上直接使用,实现「One model for ALL tasks」,这就非常有诱惑力!

paper:https://arxiv.org/abs/2210.11416

Flan-T5表明了以下实验结论:

  1. scaling the number of tasks (Finetune任务越多效果越好)

  2. scaling the model size (模型参数越多效果越好)

  3. finetuning on chain-of-thought(CoT) data (思维链数据可以提升推理能力)

2.4 Chain-of-Thought(CoT)

● Few-shot CoT

论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》提出了Chain-of-Thought(CoT)思维链的方法来改善大模型在数学计算、常识、符号推理等任务上的推理能力。

paper:https://arxiv.org/abs/2201.11903

COT 思维链的灵感来源于人做推理的过程,作者借鉴了这个过程,通过设计思维链来激发大模型使之拥有推理能力,并且由于这个有逻辑性的思维链存在,多步的中间推理就可以得到最终的正确答案。

● Zero-shot CoT

论文《Large Language Models are Zero-Shot Reasoners》探究了大模型的推理能力,作者发现,对拥有175B参数的GPT3,通过简单的添加`Let's think step by step`,可以提升模型数学推理(arithmetics reasoning)和符号推理(symbolic reasoning)的zero-shot能力。

paper:https://arxiv.org/abs/2205.11916

作者提出了Zero-shot-CoT分为两个阶段:

1. 对原问题添加文字提示,使用LLM生成推理过程。(上图左侧)

2. 将LLM生成的推理过程加入到原问题中,并且添加生成答案的提示,使用LLM生成问题的最终答案。(上图右侧)

效果:哄一哄能让GPT-3准确率暴涨61%!

2.5 Reinforcement Learning Human Feedback (RLHF)

● InstructGPT

论文《Training language models to follow instructions with human feedback》InstructGPT是ChatGPT的前身,主要探究了用RLHF(Reinforcement Learning from Human Feedback)方法使大模型中对齐人类意图。

paper:https://arxiv.org/abs/2203.02155

GPT等大型语言模型基于Prompt的zero shot的学习范式有一个很大的问题是,预训练的模型完成的任务是后继文本的预测,这和具体任务的要求有一些偏离,生成的结果也不一定符合人的意图。因此需要以某种形式fine-tune来对齐这一点。

方法是三步走:

1. 使用人工给出的示范性数据监督训练策略模型

2. 使用人工排序的对比性数据训练奖赏模型

3. 通过强化学习(使用了奖赏模型)训练策略模型

第2、3步可以交替迭代,把人参与到优化过程中。

无论左图右图,使用强化学习的模型(PPO和PPO-ptx)要远好于GPT或监督学习的模型。

这里的“好”是指它的输出更被标注员喜欢(真实、有用、无害)。数据和评价标准都和训练时一致,统统向人类偏好对齐。这正是RLHF的优势所在,自然吊打GPT3。

另外PPO-ptx模型在强化学习时加了pretraining的正则,目的是避免在公开NLP任务上掉点(解决所谓“对齐税”问题),但在这里略微有负面影响。

3. LLaMA

论文《LLaMA: Open and Efficient Foundation Language Models》作者在1T级别的token上训练,证明了仅使用公开数据集也可以训练出来SOTA级别的模型。

与Chinchilla,PaLM 或 GPT-3 不同,LLaMA 只使用公开可用的数据,使本文工作与开源兼容,而大多数现有模型依赖于非公开的数据。

paper:https://research.facebook.com/publications/llama-open-and-efficient-foundation-language-models/

3.1 性能

● LLaMA-13B > GPT-3 (175B):LLaMA-13B 比 GPT3(175B) 在大多数测试表现好

● LLaMA-65B ≈ PaLM-540B:LLaMA-65B 与最好的模型 Chinchilla-70B 和 PaLM-540B 相比也有竞争力

LLaMA重新定义了大模型的“大”

3.2 Motivation

1. 开源的OPT (Zhang et al., 2022), GPT-NeoX (Black et al., 2022), BLOOM (Scao et al., 2022) 和 GLM (Zeng et al., 2022)模型,其效果不能和 PaLM-62B or Chinchilla比,LLaMA更强。

2. 论文《Training Compute-Optimal Large Language Models》研究发现最好的性能不是在最大的模型上,而是在用了更多token的模型上,因此作者认为一个较小的模型训练的时间更长,用的token更多,能达到一样的模型效果,并且在预测时较为便宜(cheaper)。

paper:https://arxiv.org/abs/2203.15556

3.3 Optimizer

LLaMA 还对 transformer 架构做了改进:

●Pre-normalization[GPT3]: RMSNorm normalizing function

● SwiGLU activation function [PaLM].

● Rotary Embeddings [GPTNeo].

3.4 Future Work

1. 继续scale更大的模型

2. 做instruction tuning和RLHF

4. 微调方法

4.1 adapter

2019年,论文《Parameter-Efficient Transfer Learning for NLP》提出了Adapter方案,成为Delta Tuning技术方案的开山之作。

该方案的主要思想是,在参数规模较大的模型中,固定预训练模型的参数,不再进行微调,并在原有的网络结构上增加部分可训练参数。这些可训练参数被添加到每层的attention层和feed-forward层后面。具体来说,Adapter方案会在每层的attention层和feed-forward层之间添加一个新的小型神经网络,称为Adapter。

Adapter的参数可以在微调过程中进行训练,以适应特定的下游任务。这种方法可以大大减少需要微调的参数数量,从而提高模型的参数效率和训练速度。

如下图所示,Adapter方案在每层的attention层和feed-forward层后面添加一个Adapter,使得模型的参数规模得到了有效缩减。这种方法在自然语言处理领域得到了广泛应用,并取得了很好的效果。

4.2 LoRA

2021年,微软在论文《LoRA: Low-Rank Adaptation of Large Language Models》提出了一种名为LORA的方案。该方案分析了Transformer的网络结构,发现权重矩阵的计算占用了大量的计算时间,其中包括Attention层的Q/K/V转换矩阵和Feed-Forward层的MLP矩阵。

paper:https://arxiv.org/abs/2106.09685

LORA主要聚焦于Attention的转换矩阵,以提高模型训练速度和效率。LORA方案的核心思想是给转换矩阵并列添加一个矩阵。同时使用低秩矩阵组合来代替添加的矩阵。这种方法可以有效地减少参数数量。

实验结果表明,LORA方案可以在不影响模型性能的情况下,显著提高模型训练速度和效率。该方案已经在自然语言处理领域得到了广泛应用,并在多个任务上取得了优异的效果。

4.3 Prefix-Tuning

2021年Stanford在论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》中提出Prefix-Tuning方法,其主要思想是不改变原有网络层的结构,而是对输入部分增加一个prompt前缀,prompt可以离散的、具体的,比如对于ner任务可以增加"请找出句子中的全部实体"作为prompt。

这种prompt可以人工设计或者自动化搜索,问题在于最终的性能对人工设计的prompt的变化特别敏感,加一个词或者少一个词,或者变动位置啥的都会造成比较大的变化。自动化搜索prompt成本也比较高。

本文的实现方式是采用第二种方案,给每个任务训练一份单独的连续可微调的virual token,相比较离散的token效果更好。同时为了扩大可微调参数量,不仅是添加在第一层而是添加在transformer的每一层。对于T5网络结构,既有encoder部分又有decoder部分,所以需要在encoder的输入和decoder的输入都添加prompt前缀。

总结来看,delta-tuning的思想就是把原有的预训练模型的参数固定住,然后新增一部分网络参数用于下游任务的微调。至于新增的网络参数往哪里放?哪里放都可以,只要有效果即可。

5. 微调实现

5.1 Alpaca

2023年3月15日,斯坦福发布Alpaca模型《Alpaca: A Strong, Replicable Instruction-Following Model》,是在Meta的LLaMA-7B上进行微调而来,仅用了52k数据,其性能约等于GPT-3.5,且训练成本还不到600美元。

paper:Stanford CRFM

训练大模型的挑战主要有两个:

1. 大的优秀底座模型:使用LLaMA-7B;

2. 高质量的指令数据:基于SELF-INSTRUCT论文中的自动指令数据生成方法,用OpenAI的text-davinci-003生成52K指令数据。

Alpaca羊驼模型之后出现大批基于LLaMA的微调模型,包括ChatLLama、FreedomGPT、Vicuna、Koala等,羊驼家族名字都快不够用了。

从本质来讲,ChatGPT这种大语言模型就是通过烧钱烧算力烧数据达到`大力出奇迹`的效果。而这也带来了一个问题,即这样的大语言模型烧钱的程度会让很多小公司望而却步,只能加入霸权垄断的圈子。而对于像小红书/B站这样不上不下的公司,既承担不起自己训练大模型的成本,也不愿意将自己内容池的数据拱手让人,其实是陷入蛮尴尬的境地。

Alpaca、Vicuna展现了另一种可能性,即通过“知识蒸馏”的方式,以极低的价格复刻大语言模型90%甚至99%的能力。而这就意味着小公司也能训练自己的AI模型。

换句话说,ChatGPT拉开了AI落地的序幕,而Vicuna告诉我们,遍地AI的世界也许就在眼前。

5.2 Self-Instruct

2022年,Washington大学在论文《SELF-INSTRUCT: Aligning Language Model with Self Generated Instructions》提出了一种框架:Self-Instruct,该框架可以使用最少的人工标注,生成大量的用于instruct-tuning的数据;还发布了52K的使用上述方法得到的用于instruct-tuning的数据集。

paper:https://arxiv.org/abs/2212.10560

Self-Instruct 数据集构建方法

效果比对:

答复结果评分,A最好,D最差;绿色最好,红色最差

可以看出:

  • 原始的GPT3几乎无法响应用户的指令,所有instruction-tuned微调过的模型效果都有明显的提升

  • 即使Self-Instruct生成的数据有噪音,但是模型GPT3 self-instruct的效果明显优于模型GPT3+T0 Training和GPT3 + SuperNI Training

  • 模型GPT3 self-instruct的效果与模型InstructGPT001的效果已经非常接近了

  • InstructGPT003效果最强

指令数据(Instruction data)收集方法:

  • 参考Alpaca基于GPT3.5得到的self-instruct数据;

  • 参考Alpaca基于GPT4得到的self-instruct数据;

  • 用户使用ChatGPT分享的数据ShareGPT。

6. 未来的方向

1. 进一步扩大模型规模,改善模型架构和训练

改善模型的架构或者训练过程可能会带来具有涌现能力的高质量模型,并减少计算量。

一种方向是使用稀疏混合专家架构,其在保持恒定输入成本时具有更好的计算效率,使用更加局部的学习策略,而不是在神经网络的所有权重上进行反向传播,以及使用外部存储来增强模型。

2. 扩大数据规模

在一个足够大的数据集上训练足够长的时间被证明是语言模型获得语法、语义和其他世界知识的关键。近期,Hoffmann et al.认为先前的工作低估了训练一个最优模型的训练数据量,低估了训练数据的重要性。收集模型可以在其上训练更长时间的大量数据,允许在一个固定模型尺寸的约束下有更大范围的涌现能力。

3. 更好的prompt

虽然few-shot prompting简单有效,对prompting通用性的改善将进一步扩展语言模型的能力。

例如,用带有中间步骤的few-shot示例增强后,能够使模型执行多步推理任务,这是标准prompting无法实现的。此外,更好的解释为什么prompting有效,可能对在更小模型上引导涌现能力具有帮助。充分的理解模型为什么能够工作通常会滞后于技术的开发和流行,并且随着更加强大的模型被开发出来,prompting的最佳实践也可能改变。

4. 理解涌现能力

理解涌现除了研究如何进一步解锁涌现能力,一个未来研究方向是,涌现能力是如何以及为什么出现在大语言模型。理解涌现是一个非常重要的方向,这有助于我们确定模型可以拥有哪些涌现能力以及如何训练一个更强的语义模型。

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

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

相关文章

ChatGLM-6B模型微调实战(以 ADGEN (广告生成) 数据集为例,序列长度达 2048)

kingglory/ChatGLM-6B 项目地址 1 介绍 对于 ChatGLM-6B 模型基于 P-Tuning v2 的微调。P-Tuning v2 将需要微调的参数量减少到原来的 0.1%,再通过模型量化、Gradient Checkpoint 等方法,差不多需要 7GB或则8GB 显存即可运行。 2 环境 2.1 python …

【软考-中级】系统集成项目管理工程师-计算题

系统集成项目管理工程师 二、计算题题型一:EMV(预期货币价值)题型二:加权系统题型三:自制和外贸决策——采购管理题型四:沟通渠道——沟通管理题型五:投资回收期、回收率题型六:进度…

metinfo_6.0.0 任意文件读取漏洞复现

一.漏洞简介 MetInfo是一套使用PHP和Mysql开发的内容管理系统。 MetInfo 6.0.0~6.1.0版本中的 old_thumb.class.php文件存在任意文件读取漏洞。攻击者可利用漏洞读取网站上的敏感文件。 二.漏洞影响 MetInfo 6.0.0 MetInfo 6.1.0 三.漏洞分析 在\MetInfo6.0.0\app\system\i…

推开“任意门”,华为全屋智能正在实现一代科幻迷的童年梦想

科幻作家亚瑟查理斯克拉克有句名言,“任何足够先进的科技,都和魔法无异”。 提到空间魔法,很多科技爱好者或科幻迷会想到哆啦A梦的“任意门”。通过那扇门,可以进入全新的世界,去任何想去的地方,是不少人在…

最新研究,GPT-4暴露了缺点!无法完全理解语言歧义!

夕小瑶科技说 原创作者 |智商掉了一地、Python自然语言推理(Natural Language Inference,NLI)是自然语言处理中一项重要任务,其目标是根据给定的前提和假设,来判断假设是否可以从前提中推断出来。然而,由于…

远程连接阿里云mysql数据库教程(SSH方式和宝塔面板方式)

一、SSH方式 1.首先登录mysql数据库 mysql -u root -p 输入密码后: 第一次连接的话该密码可以通过宝塔面板来重置: (1)输入 bt: (2)输入 7 即可重置mysql密码 2.查询mysql数据库中的user表 …

如何快速给pdf添加水印?

如何快速给pdf添加水印?在当今数字化时代,任何工作都是在电脑上完成了,PDF文档已成为人们日常工作中必不可少的一部分。虽然pdf文件具有较强的稳定性,不能被别人轻易的编辑修改,有时我们还需要提高pdf文件的安全性&…

AlphaFold的极限:高中生揭示人工智能在生物信息学挑战中的缺陷

人工智能程序AlphaFold (AlphaFold2开源了,不是土豪也不会编程的你怎么蹭一波?),通过预测蛋白质结构解决了结构生物信息学的核心问题。部分AlphaFold迷们声称“该程序已经掌握了终极蛋白质物理学,其工作能力已超越了最初的设计”。…

Doc2Bot: 达摩院推出多类型文档对话数据集

一、概述 title:Doc2Bot: Accessing Heterogeneous Documents via Conversational Bots 论文地址:Doc2Bot: Accessing Heterogeneous Documents via Conversational Bots - ACL Anthology 数据地址(大概5千多轮开源数据)&#…

用 Spark 预测回头客

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 至此“淘宝双 11 数据分析与预测课程案例”所需要的环境配置完成。另外实际操作中发现在案例教程中存在一些小问题,比如教程中 Eclipse 版本为 3.8,但是在配置 Tomcat Server 时又要求配置 v8.0 版本&a…

【分布式技术专题】「授权认证体系」OAuth2.0协议的入门到精通系列之授权码模式

这里写目录标题 OAuth2.0是什么OAuth2.0协议体系的Roles角色OAuth定义了四个角色资源所有者资源服务器客户端授权服务器 传统的客户机-服务器身份验证模型的问题 协议流程认证授权授权码 OAuth2.0是什么 OAuth 2.0是用于授权的行业标准协议。OAuth 2.0专注于简化客户端开发人员…

从【连接受限】看Android网络

从连接受限看Android网络 现象摸索从通知开始是Handler发的通知看看NetworkStateTrackerHandler NetworkMonitor做了什么NetworkMonitor是一个状态机CaptivePortalProbeResult从何而来连接受限的直接原因 嗅探是怎样进行的ProbeThread 回过头看看InternalHanderregisterNetwork…

GRE 隧道协议

1.GRE协议简介 GRE(General Routing Encapsulation ,通用路由封装)是对某些网络层协议(如IP和IPX)的数据报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。此外 GRE协议也可以作为VPN的第三层隧道协议连接两个…

ES6之迭代器

文章目录 前言迭代器1.原生具备Iterator接口的数据(可用for...of遍历)2.工作原理3.自定义遍历数据 总结 前言 迭代器(Iterator) for…of遍历 迭代器 迭代器是一种接口,为各种不同数据结构提供统一的访问机制。任何数…

c++ 11标准模板(STL) std::vector (八)

定义于头文件 <vector> template< class T, class Allocator std::allocator<T> > class vector;(1)namespace pmr { template <class T> using vector std::vector<T, std::pmr::polymorphic_allocator<T>>; }(2)(C17…

智慧工地烟火识别算法 opencv

智慧工地烟火识别系统应用pythonopencv深度学习算法模型技术分析前端视频信息&#xff0c;智慧工地烟火识别算法模型主动发现工地或者厂区现场区域内的烟雾和火灾苗头及时进行告警。OpenCV的全称是Open Source Computer Vision Library&#xff0c;是一个跨平台的计算机视觉处理…

前端三剑客 - HTML

前言 前面都是一些基础的铺垫&#xff0c;现在就正式进入到web开发环节了。 我们的目标就是通过学习 JavaEE初阶&#xff0c;搭建出一个网站出来。 一个网站分成两个部分&#xff1a; 前端&#xff08;客户端&#xff09; 后端&#xff08;服务器&#xff09; 通常这里的客户端…

ASP.NET Core Web API用户身份验证

一、JWT介绍 ASP.NET Core Web API用户身份验证的方法有很多&#xff0c;本文只介绍JWT方法。JWT实现了服务端无状态&#xff0c;在分布式服务、会话一致性、单点登录等方面凸显优势&#xff0c;不占用服务端资源。简单来说&#xff0c;JWT的验证过程如下所示&#xff1a; &a…

基于微服务架构的水果销售系统的设计与实现

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 整体上为微服务架构&#xff0c;使用 SpringCloud 技术&#xff0c;每个独立的服务为一个单独的 SpringBoot 工程&#xff1b;数据库使用 MySQL 数据库&#xff1b;分布式缓存使用 Redis&#xff0c;消息队列使用 Kafka。包括…

基于matlab的相控阵系统仿真场景可视化

一、前言 此示例演示如何使用方案查看器可视化系统级仿真。 二、介绍 相控阵系统仿真通常包括许多移动物体。例如&#xff0c;阵列和目标都可以处于运动状态。此外&#xff0c;每个移动物体可能都有自己的方向&#xff0c;因此当模拟中出现更多玩家时&#xff0c;簿记变得越来越…