大语言模型LLM

目录

一、语言模型的发展

语言模型(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)。

  • 无监督预训练 Unsupervised Pre-training
  • 监督微调(Supervised Fine-Tuning,SFT)

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.mzph.cn/news/15430.shtml

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

相关文章

【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

目录 一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 🔴静态数据成员: 🔴静态函数成员: ⭕使用静态成员的优点 ⭕使用静态成员的注意事项 三、友…

go 中的代码漏洞检查

前言 不知道大家在开发 go 项目中有没有遇到过一些第三方包或者官方包中出现漏洞的问题,这些漏洞可能会影响到代码的功能、性能或者安全性。 现在针对这一问题,go 团队提供了 govulncheck 工具,帮助开发者快速地发现和修复这些漏洞。 什么…

C/C++开发,opencv与qt结合播放视频

目录 一、qt_ui创建 1.1 ui设置 1.2 ui及代码输出保存 二、创建工程 2.1 工程目录及编译设置 2.2 源码设计 三、编译及测试 3.1 程序编译 3.2 程序运行 首先声明,这是一个OpenCV 3学习文档的案例,但是说明有些过于省略,只有一些简短的代码…

计算机毕设 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

文章目录 0 前言1.前言2.实现效果3.相关技术原理3.1卷积神经网络3.1YOLOV5简介3.2 YOLOv5s 模型算法流程和原理4.数据集处理3.1 数据标注简介3.2 数据保存 5.模型训练 6 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题…

Clion开发Stm32之温湿度传感器(DS18B20)驱动编写和测试

前言 涵盖之前文章: Clion开发STM32之HAL库GPIO宏定义封装(最新版)Clion开发stm32之微妙延迟(采用nop指令实现)Clion开发STM32之日志模块(参考RT-Thread) DSP18B20驱动文件 头文件 /*******************************************************************************Copy…

OAuth机制_web站点接入微软azure账号进行三方登录

文章目录 ⭐前言⭐微软三方登录流程💖 web站点获取微软账号流程💖 node封装微软登录接口💖 webapp 自定义code换token💖 调用 Microsoft Graph API💖 前端唤醒authlink进行登录回调逻辑 ⭐结束 ⭐前言 大家好&#xf…

sublime配置less的一些坑(1)

仅在sublime的Install Package安装保存less报错 在sublime的Install Package安装less 打开sublime软件,按住CtrlShiftP组合键,弹出的界面中选择Install Package 选中后enter或者回车。等会弹出一个弹窗,大致意思是说你已经成功安装了package control。如果你在此之前已经安装了…

【论文精读】MemSum: 基于历史决策的多步长文本抽取式摘要方法

前言 论文分享 来自2022ACL的长文本抽取式摘要方法论文 MemSum: Extractive Summarization of Long Documents Using Multi-Step Episodic Markov Decision Processes 自动文本摘要抽取可以分为抽取式(extractive)和抽象性式(abstractive),抽取式方法将摘要抽取任…

【Uniapp】支付链转二维码

前言 提示:这个是一个很小的项目,大概30分钟就能搞定 实现方式:输入支付代码,存储到对应的数据库表中,二维码访问一个PHP文件通过id来进行重定向,这样就可以使每张二维码都是固定的,替换二维码…

11-矩阵的运算_加减法_数乘_转置

矩阵的运算 加法,数乘,减法,转置 矩阵的加减 矩阵的加法就是矩阵的对应位置相加,减法也是一样就是对应位置相减 数乘 转置 转置的操作和向量是一样的,就是把 aij 变成 aji,把行和列互换一下 对于矩阵而…

【Android常见问题(五)】- Flutter项目性能优化

文章目录 知识回顾前言源码分析1. 渲染过程2. 分析工具3. 优化方法合理使用const关键词合理使用组件管理着色器编译垃圾 知识回顾 前言 项目迭代开发一定程度后,性能优化是重中之重,其中包括了包体积,UI 渲染、交互等多个方面。 通过 Flutt…

Zotero ubuntu2023安装 关联 ubuntu文献翻译

一、准备下载的软件: Zotero | Downloads 1. Zotero-6.0.26_linux-x86_64.tar.bz2 下面是插件 zotfile-5.1.2-fx.xpi zotero-pdf-translate.xpi jasminum-v0.2.6.xpi 2.2.5 Tampermonkey 4.11.crx 所准备的文件,都已经在这个链接的压缩包下面 …

动态内存管理学习分享

动态内存管理学习分享 1. 为什么存在动态内存分配2. 动态内存函数的介绍2.1 [malloc](https://legacy.cplusplus.com/reference/cstdlib/malloc/?kwmalloc)和[free](https://legacy.cplusplus.com/reference/cstdlib/free/?kwfree)2.1.1 实例 2.2 [calloc](https://legacy.cp…

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

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

持续贡献开源力量,棱镜七彩加入openKylin

近日,棱镜七彩签署 openKylin 社区 CLA(Contributor License Agreement 贡献者许可协议),正式加入openKylin 开源社区。 棱镜七彩成立于2016年,是一家专注于开源安全、软件供应链安全的创新型科技企业。自成立以来&…

【消息中间件】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务

文章目录 视频演示效果前言一、分析二、全局注入MQTT连接1.引入库2.写入全局连接代码 二、PHP环境建立总结 视频演示效果 【uniapp】实现买定离手小游戏 前言 Mqtt不同环境问题太多,新手可以看下 《【MQTT】Esp32数据上传采集:最新mqtt插件(支…

使用3ds Max粒子系统创建飞天箭雨特效场景

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 设置箭头 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 我使用多边形建模技术制作了一个简单的箭头,我将 在教程中使用。.max您可以从 下载部分。 箭头.max 步骤 3 将此箭头重命名为静态…

【计算复杂性理论】证明复杂性(八):命题鸽巢原理(Propositional Pigeonhole Principle)的指数级归结下界

往期文章: 【计算复杂性理论】证明复杂性(Proof Complexity)(一):简介 【计算复杂性理论】证明复杂性(二):归结(Resolution)与扩展归结&#xff…

CentOS 7.6使用yum安装stress,源码安装stree-ng 0.15.06,源码安装sysstat 12.7.2

cat /etc/redhat-release看到操作系统的版本是CentOS Linux release 7.6.1810 (Core),uname -r可以看到内核版本是3.10.0-957.21.3.el7.x86_64 yum install stress sysstat -y安装stress和sysstat。 使用pidstat -u 5 1没有%wait项: 原因是CentOS 7仓…

13.7 CentOS 7 环境下大量创建帐号的方法

13.7.1 一些帐号相关的检查工具 pwck pwck 这个指令在检查 /etc/passwd 这个帐号配置文件内的信息,与实际的主文件夹是否存在等信息, 还可以比对 /etc/passwd /etc/shadow 的信息是否一致,另外,如果 /etc/passwd 内的数据字段错…