大语言模型LLM

news2025/4/7 9:20:06

目录

一、语言模型的发展

语言模型(Language Model,LM)目标是建模自然语言的概率分布,具体目标是构建词序列w1,w2,...,wm的概率分布,即计算给定的词序列作为一个句子出现可能的大小P(w1w2...wm)。但联合概率P的参数量十分巨大N^m(m代表句子的长度,N代表可能单词的数量),一种简化思路是,利用句子序列从左至右的生成过程来分解联合概率:

也就是说,将词序列w1w2...wm的生成过程看成单词的逐个生成,假设第i个单词的概率取决于前i-1个单词。需要指出的是,这种分解本身并未降低模型所需的参数量,但是这种转换为接下来的简化提供了一种途径。

  • 统计语言模型:N-gram模型,即元文法模型。根据上述假设,词的概率受前面i-1个词的影响,称为历史影响,而估算这种概率最简单的方法是根据语料库,计算词序列在语料库中出现的频次。
  • 神经语言模型(Neural Network Language Models,NNLM):克服了n元语言模型的维度灾难,出现了以词向量(Word Embedding)为代表的分布式表示的语言模型FFN, RNN, LSTM
  • 预训练语言模型(Pre-trained Model,PLM):ELMo首先预训练双向LSTM网络,Transformer基于注意力机制,BERT利用掩码机制构造了基于上下文预测中间词的预训练任务
编码预训练语言模型(Encoder-only Pre-trained Models):如BERT模型解码预训练语言模型(Decoder-only Pre-trained Models):如GPT模型基于编解码架构的预训练语言模型(Encoder-decoder Pre-trained Models):Seq2Seq模型如BART模型,采用的预训练方式为输入含有各种噪声的文本,再由模型进行去噪重构

  • 大语言模型(Large Language Model,LLM)

2019年Google发布了T5。2020年1月,OpenAI发表了论文《Scaling Laws for Neural Language Models》,研究了基于交叉熵损失的语言模型性能的经验尺度法则,并且发现:大模型使用样本的效率显著更高,因此最优的高效训练方式是在中等数据集上训练超大模型,并在显著收敛前提前停止。

LLM成功的一些关键技术:

  • 模型缩放(Scaling):模型规模的扩大,训练数据的质量对实现良好性能起着关键作用
  • 模型训练(Training):使用各种优化框架来部署并行算法,比如DeepSpeed和Megatron-LM
  • 能力诱导(Ability Eliciting):用合适的任务步骤和Prompt来引导大语言模型解决复杂任务
  • 对齐调优(Alignment Tuning): 大语言模型进行了大量数据量的训练,因此有可能因为低质量数据产生错误甚至有害的内容。GPT采取了人类反馈强化学习(RLHF)的策略,通过精心设计的标签将人类融入训练循环中,来避免这种问题的出现。
  • 工具利用(Tools Manipulation):外置工具如插件,可以拓展大语言模型的能力

LLM 大致可以分为两种类型,即基础LLM和指令微调LLM。基础LLM是基于文本训练数据,训练出预测下一个单词能力的模型,其通常是在互联网和其他来源的大量数据上训练的。指令调整的 LLMs 的训练通常是从已经训练好的基本 LLMs 开始,该模型已经在大量文本数据上进行了训练。然后,使用输入是指令、输出是其应该返回的结果的数据集来对其进行微调,要求它遵循这些指令。然后通常使用一种称为 RLHF(reinforcement learning from human feedback,人类反馈强化学习)的技术进行进一步改进,使系统更能够有帮助地遵循指令

1. LLM训练技术

基本流程:

预训练语料的来源大致可以分为两类:通用语料和专业语料。

  • 通用语料:如网页、书籍和会话文本等,其庞大、多样化和可访问的特性,可以增强大语言模型的语言建模和泛化能力。
  • 专业语料:鉴于大语言模型出色的泛化能力,也有研究将预训练语料库扩展到更专业的数据集,如多语言数据、科学数据和代码,赋予大语言模型特定的任务解决能力。

以 BERT 为代表的预训练语言模型需要根据任务数据进行微调(Fine-tuning),这种范式可以应用于参数量在几百万到几亿规模的预训练模型。但是针对数十亿甚至是数百亿规模的大模型,针对每个任务都进行微调的计算开销和时间成本几乎都是不可接受的。

因此,指令微调(Instruction Finetuning)方法被创造出来,将大量各类型任务,统一为生成式自然语言理解框架,并构造训练语料进行微调。

通过指令微调,大模型学习到了如何响应人类指令,可以根据指令直接能够生成合理的答案。由于指令微调阶段训练了非常多的任务,大模型任务能力可以泛化到之前没有见过的任务上,这使得模型初步具备了回答人们提出的任何指令的可能。这种能力对于大模型来说至关重要,使其可以在开放领域有很好的表现。

尽管指令微调后的模型,在开放领域任务能力表现优异,但是模型输出的结果通常与人类的回答相差很大,简而言之就是“没有人性”。因此需要进一步优化模型,使得模型的输出与人类的习惯对齐。其中最具有代表性且已取得巨大成功的方法,就是OpenAI开发的、塑造了ChatGPT的人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF)。

2. LLM省内存方法

  • fp16
  • int8
  • LoRA:Low-Rank Adaptation of Large Language Models 处理大模型微调。 LoRA 建议冻结预训练模型的权重并在每个 Transformer 块中注入可训练层(_秩-分解矩阵_)。因为不需要为大多数模型权重计算梯度,所以大大减少了需要训练参数的数量并且降低了 GPU 的内存要求。
  • Textual Inversion:通过几张概念图片,通过学习文图生成模型Text Embedding空间中的伪词(pseudo-word)来表示这些概念。然后把这些伪词组合成自然语言的句子,指导个性化生成。即图片prompt
  • Gradient checkpointing
  • Torch FSDP
  • CPU offloading

2.1 LoRA 低秩自适应微调

LoRA主要用于处理大模型微调的问题。目前超过数十亿以上参数的具有强能力的大模型(例如 GPT-3)通常在为了适应其下游任务的微调中会呈现出巨大开销。 LoRA 建议冻结预训练模型的权重并在每个 Transformer 块中注入可训练层(_秩-分解矩阵_)。因为不需要为大多数模型权重计算梯度,所以大大减少了需要训练参数的数量并且降低了 GPU 的内存要求。研究人员发现,通过聚焦大模型的 Transformer 注意力块,使用 LoRA 进行的微调质量与全模型微调相当,同时速度更快且需要更少的计算。

重新参数化,只训练A和B

 LoRA优势:

  • 预训练的模型可以共享,并用于为不同的任务构建许多小型LoRA模块。通过替换图1中的矩阵A和B,可以冻结共享模型参数并高效地切换任务,从而显著降低存储需求和任务切换开销。
  • 当使用自适应优化器时,LoRA使训练更有效,并将硬件进入障碍降低3倍,因为不需要计算梯度或维护大多数参数的优化器状态。相反,只优化注入的小得多的低秩矩阵
  • 简单的线性设计允许在部署时将可训练矩阵与冻结权重合并,与完全微调的模型相比,通过构造,不会引入推理延迟。

例如,假设ΔW是权重矩阵 W∈R^A×B 的权重更新。然后,可以将权重更新矩阵分解为两个较小的矩阵: ΔW=WA·WB ,其中 WA∈R^A×r ,并且 WB∈R^r×B 。在这里,保留原始重量W冻结并且仅训练新矩阵 WA 和 WB 。

重新参数化时,对 A 使用随机高斯初始化,对 B 使用零初始化,因此 ΔW=BA 在训练开始时为零。然后,用 α/r 缩放 ΔWx ,其中α是r中的常数。当使用Adam进行优化时,如果适当缩放初始化,则调整α与调整学习率大致相同。

2.2 模型量化

在这里插入图片描述
FP32压缩FP16

2.3 Textual Inversion

Text embedding

  • 输入字符串中的每个词(word)或子词(sub-word)都被转换为一个标记(Token),它是预定义词典中的索引(参见BPE算法);
  • 然后将每个Token对应到一个唯一的嵌入向量(embedding),这些嵌入向量通常作为文本编码器的一部分进行学习;
  • 选择这个嵌入向量空间作为反演(Inversion)的目标,指定一个占位符字符串 S* 来表示希望学习的新概念;
  • 用新学习的嵌入向量 v* 替换与新概念关联的嵌入向量,即将概念注入(inject)到词汇表中;
  • 跟处理其它单词一样,用该概念字符组成新句子,例如: A photo of S*, A painting in the style of S*.

Text inversion 最小化图像重建损失(LDM)进行优化

【AIGC第三篇】Textual Inversion:基于Prompt tuning方式的图像生成技术

 

 

训练垂直领域问题+知识文档的对话式大语言模型的几种方式,(按照资源由小到大的排序方式)

  1. p-tuning v2:Deep Prompt Encoding和Multi-task Learning。(Prefix-tuning的拓展版本)
  2. lora
  3. finetune

大语言模型项目

  • ChatGLM:6B开源,具有问答、多轮对话和代码生成功能的中英双语模型
  1. SwissArmyTransformer:一个Transformer统一编程框架,ChatGLM-6B已经在SAT中进行实现并可以进行P-tuning微调。
  2. ChatGLM-MNN:一个基于 MNN 的 ChatGLM-6B C++ 推理实现,支持根据显存大小自动分配计算任务给 GPU 和 CPU
  3. JittorLLMs:最低3G显存或者没有显卡都可运行 ChatGLM-6B FP16, 支持Linux、windows、Mac部署
  • Colossal AI:SFT监督微调 -> 奖励模型(RM)训练 -> 强化学习(RLHF)
  • LLaMA: stanford-alpaca
  • alpaca-lora:使用LoRA技术,调用哪个PEFT库实现低价高效微调
  • Dolly:使用Alpaca数据集在GPT-J-6B上微调
  • PaLM-rlhf-pytorch:基于谷歌大模型PaLM架构
  • Vicuna:对LLaMA微调
  • LMFlow:低成本训练,开放了网页体验
  • ChatRWKV
  • 复旦MOSS
  • GPTrillion
  • Koala
  • StackLLaMA

Chinese-LangChain 拆解 讲解 - 知乎

大语言模型数据集Dataset

  • RefGPT:基于RefGPT生成大量真实和定制的对话数据集,中文
  • Alpaca-CoT:统一了丰富的IFT数据(如CoT数据,目前仍不断扩充)、多种训练效率方法(如lora,p-tuning)以及多种LLMs,三个层面上的接口,打造方便研究人员上手的LLM-IFT研究平台

大语言模型评估 Evaluation

  • FlagEval (天秤)大模型评测体系及开放平台:构建了“能力-任务-指标”三维评测框架,细粒度刻画基础模型的认知能力边界,可视化呈现评测结果
  • C-Eval: 构造中文大模型的知识评估基准
  • AGIEval:微软发布的一项新型基准测试,这项基准选取20种面向普通人类考生的官方、公开、高标准往常和资格考试

应用集成LLM

  • koishi:创建跨平台、可扩展、高性能的机器人

GitHub上资料Repository

  • FindTheChatGPTer:ChatGPT的开源平替们,包括文本大模型、多模态大模型
  • LLM_reviewer:开源、规模较小、可私有化部署、训练成本较低的‘小羊驼类’模型
  • Awesome-AITools:整理了AI相关的实用工具、评测和相关文章
  • DecryptPrompt:Prompt&LLM论文,开源数据&模型
  • Awesome Pretrained Chinese NLP Models:高质量中文预训练模型
  • Awesome-LLM

References

  • 现有开源中文LLM整理 - 知乎
  • 自然语言处理前沿——大语言模型的前世今生
  • 一些LLMs的省内存方法 - 知乎
  • GitHub - km1994/LLMsNineStoryDemonTower: 【LLMs九层妖塔】分享一下打怪(ChatGLM、Chinese-LLaMA-Alpaca、MiniGPT-4、FastChat、LLaMA、gpt4all等)实战与经验,
  • GitHub - datawhalechina/hugging-llm: HuggingLLM, Hugging Future.:适合新手入门科普
  • s
  • s
  • s

http://fleet.sv1.k9s.run:2271/

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

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

相关文章

Consul 容器服务更新与发现

Consul 容器服务更新与发现/docker 安全/ssl证书管理 文章目录 Consul 容器服务更新与发现/docker 安全/ssl证书管理一、consul详解1.consul模式2.consul关键特性 二、consul部署1.实验部署2.实验步骤consul服务器registrator服务器consul-templateconsul 多节点 三、Docker安全…

TDesign 中后台系统搭建

目录 1 模板安装2 启动项目3 添加页面总结 一般如果希望开发小程序,是要给使用的用户提供一套中后台系统来管理数据的。现在中后台系统开源项目也比较多,本篇我们介绍一个腾讯开源的TDesign模板。 1 模板安装 先要在电脑里安装好nodejs,搜索…

Qt 第二讲 登录框完善,登录成功后,进入新的界面;新建工程文件,默认提供的代码注释信息;前两讲思维导图

一&#xff0c;代码完善 头文件 #ifndef ZUOYE_H #define ZUOYE_H#include <QWidget> #include <QDebug> #include <QIcon> #include <QPushButton> #include <QLineEdit> #include <QLabel> //#include <QTextToSpeech>QT_BEGIN_…

idea23.1 翻译配置

目录 一、插件 二、配置 2.1.插件配置 2.2.阿里账号 2.2.1.账号注册 2.2.2.获取权限 2.3.idea配置 一、插件 在idea的【Settings】中&#xff0c;找到插件中心【Plugins】&#xff0c;搜索【Translation】&#xff0c;可以看到这个插件下载量最大且评分最高&#x…

【部署】让你的电脑多出一个磁盘来用!使用SSHFS将远程服务器目录挂载到Windows本地,挂载并共享服务器资源

让你的电脑多出一个磁盘来用&#xff01;---使用SSHFS将远程服务器目录挂载到Windows本地 1. 方法原理介绍2.SSHFS-Win使用教程—实现远程服务器磁盘挂载本地 由于日常主要用 Windows 系统&#xff0c;每次都得 ssh 到服务器上进行取资源&#xff08;本地磁盘不富裕&#xff09…

点赞!远眺售后团队又获客户感谢信!

杭州远眺科技有限公司成立于2013年&#xff0c;是浙江大学软件工程学科成果转化基地&#xff0c;作为国内首家为智慧应用类行业提供软件开发工具、行业应用内容和技术赋能服务的高科技公司。远眺科技始终以客户为核心&#xff0c;不断完善“产品、内容、服务”的客户赋能体系&a…

什么是事件循环Event Loop

一、含义 事件循环是指不断从任务队列中取出任务&#xff0c;并执行其对应的回调函数的过程。 二、事件循环流程 1.主线程执行同步任务&#xff0c;直到遇到异步任务时&#xff0c;将其回调函数他家到任务队列中&#xff0c;然后继续执行同步任务 2.当所有同步任务执行完之后&a…

UART中RTS和CTS流控学习总结

UART中RTS和CTS流控学习总结 目录 UART中RTS和CTS流控学习总结一、流控定义二、硬件流控过程分析 一、流控定义 流控&#xff1a;数据在两个串口之间进行通讯&#xff0c;常常会出现丢失数据的现象&#xff0c;比如当接收端数据缓冲区满了&#xff0c;而发送端还有数据发送过来…

Java读取配置文档cofing

文件结构 代码部分 import java.util.ResourceBundle;/*** Author:romulushe* Date:2022/11/9-11-09-9:18* Description:PACKAGE_NAME* version:1.0*/ public class read_config_test {public static String getConfigFileParamVal(String paramName) {ResourceBundle resourc…

商业密码应用安全性评估量化评估规则2023版更新点

《商用密码应用安全性评估量化评估规则》&#xff08;2023版&#xff09;已于2023年7月发布&#xff0c;将在8月1日正式执行。相比较2021版&#xff0c;新版本有多处内容更新&#xff0c;具体包括5处微调和5处较大更新。 微调部分&#xff08;5处&#xff09; 序号2021版本202…

重生之我要学C++第四天

这篇文章的主要内容是类的默认成员函数。如果对大家有用的话&#xff0c;希望大家三连支持&#xff0c;博主会继续努力&#xff01; 目录 一.类的默认成员函数 二.构造函数 三.析构函数 四.拷贝构造函数 五.运算符重载 一.类的默认成员函数 如果一个类中什么成员都没有&…

论述智慧消防在高层建筑信息化管理中的作用

安科瑞 华楠 【摘要】为了顺应时代的发展&#xff0c;我们做好信息化时代下的“智慧消防”工作&#xff0c;为“智慧城市”的建设奠定良好的基础。本文主要就“智慧消防”的含义、对如高层建筑等单位进行信息化“智慧消防”管理&#xff0c;当前消防管理工作中所存在的问题及如…

VUE使用docxtemplater导出word(带图片) 踩坑 表格循环空格 ,canvas.toDataURL图片失真模糊问题

参考&#xff1a;https://www.codetd.com/article/15219743 安装 // 安装 docxtemplater npm install docxtemplater pizzip --save // 安装 jszip-utils npm install jszip-utils --save // 安装 jszip npm install jszip --save // 安装 FileSaver npm install file-save…

Java集成微信公众号的事件回调, 解密的时候报错java.secwrity.InvalidKeyException: Illegal key size

java.secwrity.InvalidKeyException: Illegal key size 这是因为jar包的原因, 下载下面这个文件 https://download.csdn.net/download/dongyan3595/88103743 找到java的jre安装目录, 将jre/lib/security下的local_policy.jar、US_export_policy.jar 2个文件替换即可。

速度优化:重新认识速度优化

作者&#xff1a;helson赵子健 应用的速度优化是我们使用最频繁&#xff0c;也是应用最重要的优化之一&#xff0c;它包括启动速度优化&#xff0c;页面打开速度优化&#xff0c;功能或业务执行速度优化等等&#xff0c;能够直接提升应用的用户体验。因此&#xff0c;只要是 An…

小程序----配置原生内置编译插件支持sass

修改project.config.json配置文件 在 project.config.json 文件中&#xff0c;修改setting 下的 useCompilerPlugins 字段为 ["sass"]&#xff0c; 即可开启工具内置的 sass 编译插件。 目前支持三个编译插件&#xff1a;typescript、less、sass 修改之后可以将原.w…

Qt Core学习日记——第三天QMetaEnum(上)

QMetaEnum用来代表枚举信息,内部也是访问moc文件。从moc文件中得到对应值 需要在头文件中声明 Q_ENUM,如下红框部分 moc中qt_meta_stringdata_XTest变为&#xff1a; qt_meta_data_XTest变为 static const uint qt_meta_data_XTest[] { // content: 8, // revision 0, // …

继承中的访问级别

值得思考的问题 子类是否可以直接访问父类的私有成员&#xff1f; 思考过程 继承中的访问级别 面向对象中的访问级别不止是 public 和 private 可以定义 protected 访问级别 关键字 protected 的意义 修饰的成员不能被外界直接访问修饰的成员可以被子类直接访问 思考 为什…

【数据库 - 用户权限管理】(简略)

目录 一、概述 二、用户权限类型 1.ALL PRIVILEGES 2.CREATE 3.DROP 4.SELECT 5.INSERT 6.UPDATE 7.DELETE 8.INDEX 9.ALTER 10.CREATE VIEW和CREATE ROUTINE 11.SHUTDOWN 12GRANT OPTION 三、语句格式 1.用户赋权 2.权限删除 3.用户删除 一、概述 数据库用…

Emacs之27.0以上共享鼠标中键复制内容(一百一十七一)

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