当前位置: 首页 > news >正文

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

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/

相关文章:

大语言模型LLM

目录 一、语言模型的发展 语言模型(Language Model,LM)目标是建模自然语言的概率分布,具体目标是构建词序列w1,w2,...,wm的概率分布,即计算给定的词序列作为一个句子出现可能的大小P(w1w2...wm)。但联合概率P的参数量…...

自学网络安全(黑客)的误区

前言 网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。 一、网络安全学习的误区 1.不要…...

@Conditional

Conditional Conditional 是 spring framework 中提供的一个条件注解,,满足条件就注入,不满足就不注入ioc Condtional 需要和 Condition接口 一起用: 返回true注入,返回false不注入,, 里面有一…...

【Linux】网络基础之TCP协议

目录 🌈前言🌸1、基本概念🌺2、TCP协议报文结构🍨2.1、源端口号和目的端口号🍩2.2、4位首部长度🍪2.3、32位序号和确认序号(重点)🍫2.4、16位窗口大小🍬2.5、…...

Java设计模式之装饰器(Decorator)模式

装饰器(Decorator)设计模式允许动态地将新功能添加到对象中,同时又不改变其结构。 什么是装饰器模式 装饰器(Decorator)模式通过将对象进行包装,以扩展其功能,而不需要修改其原始类。装饰器模…...

element ui树组件render-content 树节点的内容区的渲染另一种方式

直接上代码吧,不用h的写法。 <el-tree :data"data" node-key"id" default-expand-all :expand-on-click-node"false" :props"defaultProps":render-content"renderContentTree" node-click"handleNodeClick"&g…...

html a标签换行显示

文章目录 用css display属性不用css&#xff0c;可以用<br>标签换行示例 用css display属性 可以使用CSS的display属性来实现多个a标签每行显示一个。 HTML代码&#xff1a; <div class"link-container"><a href"#">Link 1</a>…...

关于Redis-存Long取Integer类型转换错误的问题

背景 最近遇到了两个Redis相关的问题&#xff0c;趁着清明假期&#xff0c;梳理整理。 1.存入Long类型对象&#xff0c;在代码中使用Long类型接收&#xff0c;结果报类型转换错误。 2.String对象的反序列化问题&#xff0c;直接在Redis服务器上新增一个key-value&#xff0c…...

设计模式一:简单工厂模式(Simple Factory Pattern)

简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一个通用的接口来创建各种不同类型的对象&#xff0c;而无需直接暴露对象的创建逻辑给客户端。 简单工厂的三个重要角色&#xff1a; 工厂类&#xff08;Factory Class&…...

如何利用plotly和geopandas根据美国邮政编码(Zip-Code)绘制美国地图

对于我自己来说&#xff0c;该需求源自于分析Movielens-1m数据集的用户数据&#xff1a; UserID::Gender::Age::Occupation::Zip-code 1::F::1::10::48067 2::M::56::16::70072 3::M::25::15::55117 4::M::45::7::02460 5::M::25::20::55455 6::F::50::9::55117我希望根据Zip-…...

ceph集群搭建

文章目录 理论知识具体操作搭建ceph本地源yum源及ceph的安装配置NTP&#xff08;解决时间同步问题&#xff09;部署ceph自定义crush 理论知识 Ceph是一个分布式存储系统&#xff0c;并且提供了文件、对象、块存储功能。 Ceph集群中重要的守护进程有&#xff1a;Ceph OSD、Cep…...

前端密码加密 —— bcrypt、MD5、SHA-256、盐

&#x1f414; 前期回顾悄悄告诉你&#xff1a;前端如何获取本机IP&#xff0c;轻松一步开启网络探秘之旅_彩色之外的博客-CSDN博客前端获取 本机 IP 教程https://blog.csdn.net/m0_57904695/article/details/131855907?spm1001.2014.3001.5501 在前端密码加密方案中&#xff…...

汽车UDS诊断深度学习专栏

1.英文术语 英文术语翻译Diagnostic诊断Onboard Diagnostic 在线诊断 Offboard Diagnostic离线诊断Unified diagnostic service简称 UDS 2.缩写表 缩写解释ISO国际标准化组织UDSUnified diagnostic service&#xff0c;统一的诊断服务ECU电控单元DTC 诊断故障码 ISO14229UD…...

macOS 下安装brew、nvm

1、brew&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" brew -v 查看版本 示例&#xff1a; 安装jdk brew search jdk 查询可用的jdk版本 brew install openjdk11 安装制定版本jdk 更换源&#xff1…...

【云原生】Kubernetes工作负载-StatefulSet

StatefulSet StatefulSet 是用来管理有状态应用的工作负载 API 对象 StatefulSet 用来管理某 Pod 集合的部署和扩缩&#xff0c; 并为这些 Pod 提供持久存储和持久标识符 和 Deployment 类似&#xff0c; StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同…...

Java:方法的重载

方法重载 为什么需要方法重载 在使用方法的过程中我们可能会遇到以下如同例子的情形&#xff1a; ​ ​ public class method1 {public static void main(String[] args) {int a1 10;int b1 20;double ret1 add(a1, b1);System.out.println("ret1 " ret1);do…...

7.react useCallback与useMemo函数使用与常见问题

react useCallback与useMemo函数使用与常见问题 useCallback返回一个可记忆的函数&#xff0c;useMemo返回一个可记忆的值&#xff0c;useCallback只是useMemo的一种特殊形式。 那么这到底是什么意思呢&#xff1f;实际上我们在父子通信的时候&#xff0c;有可能传递的值是一…...

Sentinel限流中间件

目录 介绍 Sentinel 的特征 Sentinel 的组成 实战使用 简单实例 配置本地控制台 使用可视化ui配置简单流控 配置异步任务限流 使用注解定义限流资源 SpringCloud整合Sentinel 简单整合 并发线程流控 关联模式 整合openFeign使用 介绍 随着微服务的流行&#xff0…...

使用ajax进行前后端交互的方法

使用ajax进行前后端交互的方法&#xff1a;&#xff08;我只测试通了json对象作为参数的方式&#xff0c;其他方式我没有测试通过&#xff09; 1、前端方法&#xff1a; 传参方式&#xff1a;POST 请求类型&#xff1a;json对象 响应类型&#xff1a;json对象 function test() …...

动手学深度学习——线性回归从零开始

生成数据集synthetic_data()读取数据集data_iter()初始化模型参数w, b定义模型&#xff1a;线性回归模型linreg()定义损失函数&#xff1a;均方损失squared_loss()定义优化算法&#xff1a;梯度下降sgd()进行训练&#xff1a;输出损失loss和估计误差 %matplotlib inline impor…...

假芯片识别与防范:工程师实战指南

1. 假芯片泛滥&#xff1a;半导体行业的隐秘危机最近在调试一块电路板时&#xff0c;我发现一个奇怪的现象&#xff1a;明明使用的是同型号的MCU&#xff0c;但部分板子的功耗异常偏高。经过一周的排查&#xff0c;最终发现问题出在芯片上——我们采购到了一批"套牌"…...

GLM-4v-9b多图对比分析:上传两张产品图→自动识别差异点→生成结构化对比报告

GLM-4v-9b多图对比分析&#xff1a;上传两张产品图→自动识别差异点→生成结构化对比报告 1. 产品对比分析的新选择 在日常工作中&#xff0c;我们经常需要对比两个相似的产品图片——可能是不同版本的设计稿、竞品分析、或者产品质量检查。传统方法需要人工逐像素比对&#…...

【C++27范围库前瞻实战指南】:20年标准库专家亲授5大扩展接口的工业级应用模式

第一章&#xff1a;C27范围库扩展全景概览C27 将对标准范围库&#xff08;Ranges&#xff09;进行实质性增强&#xff0c;聚焦于提升表达力、运行时效率与编译期元编程能力。核心演进方向包括惰性求值语义强化、范围适配器的定制化组合机制、对异步与并行范围操作的原生支持&am…...

5个专业级步骤:DriverStore Explorer驱动管理工具解决Windows系统稳定性难题

5个专业级步骤&#xff1a;DriverStore Explorer驱动管理工具解决Windows系统稳定性难题 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 问题剖析&#xff1a;为什么常规方法无法解决驱…...

嵌入式开发中GNU C扩展特性解析与应用

1. 嵌入式开发中的C语言选择困境作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我深刻理解C语言在这个领域无可替代的地位。但很多刚入行的朋友可能不知道&#xff0c;我们日常使用的"Linux C"和教科书上的"标准C"其实存在不少差异。第一次看到GNU…...

实战踩坑:antv G6与vite集成时的兼容性难题与解决方案

1. 当antv G6遇上vite&#xff1a;开发环境与生产环境的"薛定谔式报错" 最近接手一个数据可视化项目&#xff0c;需要用到antv G6这个流程图工具库。开发阶段一切顺利&#xff0c;页面渲染流畅得像德芙巧克力。但当我用vite打包准备上线时&#xff0c;控制台突然抛出…...

拯救受损二维码:用QRazyBox实现高效恢复的4个实战策略

拯救受损二维码&#xff1a;用QRazyBox实现高效恢复的4个实战策略 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox QRazyBox是一款专业的二维码分析与恢复工具包&#xff08;QR Code Analysis …...

Halcon轮廓拟合与排序:从基础算子到工业检测实战

1. Halcon轮廓处理技术概览 在工业视觉检测领域&#xff0c;轮廓处理技术扮演着至关重要的角色。想象一下&#xff0c;你站在一条自动化产线旁&#xff0c;传送带上快速移动着各种形状的金属零件。这些零件可能摆放得杂乱无章&#xff0c;表面可能有划痕或油污&#xff0c;但生…...

STM32F407 ADC实战:从CubeMX配置到高精度电压采集

1. STM32F407 ADC基础与核心概念 ADC&#xff08;模数转换器&#xff09;是嵌入式开发中最常用的外设之一&#xff0c;它就像电子系统的"味蕾"&#xff0c;负责将现实世界的模拟信号&#xff08;如温度、压力、光照&#xff09;转换为单片机能够理解的数字信号。STM3…...

3步解锁加密音乐:ncmdumpGUI技术解析与实战指南

3步解锁加密音乐&#xff1a;ncmdumpGUI技术解析与实战指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI ncmdumpGUI是一款专为网易云音乐用户设计的NCM文件…...