大语言模型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 进行的微调质量与全模型微调相当,同时速度更快且需要更少的计算。

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 模型量化

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)进行优化
训练垂直领域问题+知识文档的对话式大语言模型的几种方式,(按照资源由小到大的排序方式)
- p-tuning v2:Deep Prompt Encoding和Multi-task Learning。(Prefix-tuning的拓展版本)
- lora
- finetune
大语言模型项目
- ChatGLM:6B开源,具有问答、多轮对话和代码生成功能的中英双语模型
- SwissArmyTransformer:一个Transformer统一编程框架,ChatGLM-6B已经在SAT中进行实现并可以进行P-tuning微调。
- ChatGLM-MNN:一个基于 MNN 的 ChatGLM-6B C++ 推理实现,支持根据显存大小自动分配计算任务给 GPU 和 CPU
- 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,可以用<br>标签换行示例 用css display属性 可以使用CSS的display属性来实现多个a标签每行显示一个。 HTML代码: <div class"link-container"><a href"#">Link 1</a>…...
关于Redis-存Long取Integer类型转换错误的问题
背景 最近遇到了两个Redis相关的问题,趁着清明假期,梳理整理。 1.存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误。 2.String对象的反序列化问题,直接在Redis服务器上新增一个key-value,…...
设计模式一:简单工厂模式(Simple Factory Pattern)
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一个通用的接口来创建各种不同类型的对象,而无需直接暴露对象的创建逻辑给客户端。 简单工厂的三个重要角色: 工厂类(Factory Class&…...

如何利用plotly和geopandas根据美国邮政编码(Zip-Code)绘制美国地图
对于我自己来说,该需求源自于分析Movielens-1m数据集的用户数据: 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(解决时间同步问题)部署ceph自定义crush 理论知识 Ceph是一个分布式存储系统,并且提供了文件、对象、块存储功能。 Ceph集群中重要的守护进程有:Ceph OSD、Cep…...

前端密码加密 —— bcrypt、MD5、SHA-256、盐
🐔 前期回顾悄悄告诉你:前端如何获取本机IP,轻松一步开启网络探秘之旅_彩色之外的博客-CSDN博客前端获取 本机 IP 教程https://blog.csdn.net/m0_57904695/article/details/131855907?spm1001.2014.3001.5501 在前端密码加密方案中ÿ…...

汽车UDS诊断深度学习专栏
1.英文术语 英文术语翻译Diagnostic诊断Onboard Diagnostic 在线诊断 Offboard Diagnostic离线诊断Unified diagnostic service简称 UDS 2.缩写表 缩写解释ISO国际标准化组织UDSUnified diagnostic service,统一的诊断服务ECU电控单元DTC 诊断故障码 ISO14229UD…...
macOS 下安装brew、nvm
1、brew: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" brew -v 查看版本 示例: 安装jdk brew search jdk 查询可用的jdk版本 brew install openjdk11 安装制定版本jdk 更换源࿱…...
【云原生】Kubernetes工作负载-StatefulSet
StatefulSet StatefulSet 是用来管理有状态应用的工作负载 API 对象 StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符 和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同…...
Java:方法的重载
方法重载 为什么需要方法重载 在使用方法的过程中我们可能会遇到以下如同例子的情形: 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返回一个可记忆的函数,useMemo返回一个可记忆的值,useCallback只是useMemo的一种特殊形式。 那么这到底是什么意思呢?实际上我们在父子通信的时候,有可能传递的值是一…...

Sentinel限流中间件
目录 介绍 Sentinel 的特征 Sentinel 的组成 实战使用 简单实例 配置本地控制台 使用可视化ui配置简单流控 配置异步任务限流 使用注解定义限流资源 SpringCloud整合Sentinel 简单整合 并发线程流控 关联模式 整合openFeign使用 介绍 随着微服务的流行࿰…...
使用ajax进行前后端交互的方法
使用ajax进行前后端交互的方法:(我只测试通了json对象作为参数的方式,其他方式我没有测试通过) 1、前端方法: 传参方式:POST 请求类型:json对象 响应类型:json对象 function test() …...
动手学深度学习——线性回归从零开始
生成数据集synthetic_data()读取数据集data_iter()初始化模型参数w, b定义模型:线性回归模型linreg()定义损失函数:均方损失squared_loss()定义优化算法:梯度下降sgd()进行训练:输出损失loss和估计误差 %matplotlib inline impor…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...