大模型能力技术培训_第1页
大模型能力技术培训_第2页
大模型能力技术培训_第3页
大模型能力技术培训_第4页
大模型能力技术培训_第5页
已阅读5页,还剩398页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大模型能力技术培训让数据智能像水电样简单•上世纪90年代:语言模型出现,统计学方法,使用前面的词预测下一个词•2018年:Google提出Transformer神经网络架构,并通过大量文本训练理解语言规则和模式•大语言模型和小语言模型(如GPT2)采用相似的架构和预训练任务,但是能力截然不同(涌现能力)•涌现能力使得大语言模型只使用很少的样本就可以处理全新的任务•信息检索:智能检索,改进搜索引擎•计算机视觉:文生图、多模态交互•通用人工智能AGI:大语言模型是AGI的早期形式,引发了对未来人工智能发展的思考和规划•上下文学习的能力:GPT3首次引入,instruction+fewshotlearning,无需额外训练和参数更新•指令遵循:可以使用指令进行微调,在同样使用指令形式化描述的未见过的任务上表现良好•逐步推理:“思维链”推理策略,可以利用包含中间推理步骤的提示机制来解决复杂推理任务•全新的AI范式,借助于海量无标注数据的训练,获得可以适用于大量下游任务的统一大模型•可以缩短每个具体应用的开发周期,人力投入,也可以基于大模型的推理、常识和写作能力,获得更好•ConversationasaPlatform(陆奇,2016),以对话形态完成各种各样的任务•巨大的规模:十亿到万亿,能够捕捉更多的语言知识和复杂的语法结构•预训练和微调:先用无标签数据在大规模文本上预训练,再用有标签数据微调特殊任务•上下文感知:能够理解和生成依赖于前文的文本内容。在对话、文章生成和情境理解方面表现出色•多语言支持:可以构建跨文言和跨文化的应用•涌现能力:能用更少的数据处理更复杂的任务•伦理和风险问题:生成有害内容、隐私问题、认知偏差等,这是需要重点解决的问题一化条件:作一个变量,那么它具有|V|m种可按照《现代汉语词典(第七版)》包含7万词条,句子长度按照20个词计算,模型参数量达到7.9792*1096为了减少P(w1w2...wm)模型参数量,可以利用句子序列通常情况下从左至右的生成过程进行分解,使用由此,w1w2...wm的生成过程可以看作单词逐个生成的过程。首先生成w1,之后根据w1生成w2,再根据w1和w2生成w3,以此类推,根据前m-1个单词生成最后一个单词wm语言模型通常用于反映一个句子出现的可能性,给定由单词序列w1w2...wn组成的句子S,可以利用语言的的历史。如果历史单词有i−1个,那么可能的单词组合就有|V|i−1种。最简单的根据语料库对P(wi|w1w2...wi−1)进行估计的方法是基于词序列在语料中出现次数(也称为频次)的方法:随着历史单词数量增多,绝大多数的历史并不会在训练数据中出现,这也意味着P(wi|w1w2...wi−1)就很可能为0,使得概率估计失去了意义。为了解决上述问题,可以进一步假设任意单满足上述条件的模型被称为n元语法或n元文法(n-gram)模型。其中n-gram表示n个连续单词构成的单元,也被称为n元语法单元。以二元语法为例,一个词的概率只依赖于前一个词,则句子S的出现概率可以表示为:n元语言模型从整体上来看与训练语料规模和模型的阶数有较大的关系,不同的平滑算法在不同情况下的表现有较大的差距。平滑算法虽然较好解决了零概率问题,但是基于稀疏表示的n元语言模型仍然有三个较为明显的缺点:(3)当n增大时,数据的稀疏性随之增大,模型的参数量更是指数级增加,并且模型受影响,其参数难以被准确学习。此外,n元文法中单词的离散表示也忽略了单词之间的相似性Bengio等人在2000年提出了使用前馈神经网络对进行估计的语言模型。词的独热编码被映射为一个低维稠密的实数向量,称为词向量(WordEmbedding)。循环神经网络、卷积神经网络、端到端记忆网络等神经网络方法都成功应用于语言模型建模。相较于n元语言模型,神经网络方法可以在一定程度上避免数据稀疏问题,有些模型还可以避免对历史长度的限制,从而更好建模长距离依赖关系。这类方法通常称为神经语言模型(NeuralLanguageModels,输出层输入层WNTransformer架构的大规模预训练语言模型的出现,使自然语言处理全面进入预训练微调范式新时代。这2020年,OpenAI发布了由包含1750亿参数的神经网络构成的生成式大规模预训练语言模型GPT-3(GenerativePre-trainedTransformer3)。开启了大语言模型的新时代。在不同任务上都进行微调需要消耗大量的计算资源,因此预训练微调范式不再适用于大语言模型。通过语境学习(In-ContextLearning,ICL)等方法,直接使用大语言模型就可以在很多任务的少样本场景下取得很好的效果。此后,研究人员提出了面向大语言模型的提示词(Prompt)学习方法、模型即服务Kaplan等人在中提出了缩放法则(ScalingLaws),指出模型的性能依赖于模型的规模,包括参数数据集大小和计算量,模型的效果会随着三者的指数增加而线性提高。按照时间线给出了2019年至2023年6月比较有影响力并且模型参数量超过100亿的大语言模型大语言模型的发展可以粗略地分为如下三个阶段:基础模型阶段、能力探索阶段和突破发展阶段基础模型阶段主要集中于2018年至2021年:•2017年,Vaswani等人提出了Transformer架构,在机器翻译任务上取得了突破性进展。•2018年,Google和OpenAI分别提出了BERT和GPT-1模型,开启了预训练语言模型时代。•2019年,OpenAI发布了GPT-2,参数量15亿。Google发布了参数规模为110亿的T5•2020年,OpenAI进一步将语言模型参数量扩展到1750亿,发布了GPT-3。此阶段的研究主要集中在语言模型本身,包括对仅编码器(EncoderOnly)、编码器-解码器型大小与BERT相类似的算法,通常采用预训练微调范式,针对不同下游任务进行微调。但是模型参数量在10亿以上时,由于微调的计算量很高,这类模型的影响力在当时相较BERT类模型有不小的差距。能力探索阶段集中于2019年至2022年由于大语言模型很难针对特定任务进行微调,研究人员开始探索在不针对单一任务进行微调的情况下如何发挥大语言模型的能力•2019年,Radford等人使用GPT-2模型研究了大语言模型在零样本情况下的任务处理能力•Brown等人在GPT-3模型上研究了通过语境学习进行少样本学习的方法•指令微调将大量各类型任务,统一为生成式自然语言理解框架,并构造训练语料进行微调•2022年,Ouyang等人提出了使用“有监督微调+强化学习”的InstructGPT算法这些方法在直接利用大语言模型进行零样本和少样本学习的基础上,逐渐扩展到利用生成式框架针对大量任务进行有监督微调的方法,有效提升了模型的性能。突破发展阶段以2022年11月ChatGPT的发布为起点•ChatGPT通过一个简单的对话框,利用一个大语言模型就可以实现问题回答、文稿撰写、代码生成、数学解题等过去自然语言处理系统需要大量定制开发才能分别实现的能力•2023年3月GPT-4发布,相较于ChatGPT又有了非常明显的进步,并具备了多模态理解能力。GPT-4在多种基准考试测试上的得分高于88%的应试者各大公司和研究机构相继发布了此类系统,包括Google推出的Bard、百度的文心一言、科大讯飞的星火大模型、智谱ChatGLM、复旦大学MOSS等体验地址:/•OpenAI在2018年提出GPT,通过语言建模将世界知识压缩到仅解码器的Transformer模型中•ChatGPT本质上是基于GPT-3.5/GPT-4的会话应用,是人工智能史上最强大的聊天机器人•GPT-4扩展到支持多模态输入,安全性更好,并应用了一些干预策略来缓解LLM可能出现的问题,如幻觉、隐私和过度依赖[2],模型参数猜测是1.8万亿,最新发布的GPT-4turbo有128ktoken体验地址:https://claude.ai/chats由OpenAI离职人员创建的Anthropic公司开发的闭源语言大模型,有以下特点:•致力于提高Claude作为编码助理的能力,Claude2在编码基准和人类反馈评估方面性能显著提升•可以进行连贯长输出,可以生成最多4000个token的连贯文档,相当于大约3000个单词•Claude通常用于将长而复杂的自然语言文档转换为结构化数据格式,可以更好地生成JSON、XML、YAML、代码和Markdown格式的正确输出•Claude2的训练数据包括2022年和2023年初更新的数据,这意味着它知道最近发生的事件体验地址:https://ai.google/discover/palm2/2023.5:发布PaLM2,是PaLM540B的升级版,系列模型,最小模型可以部署在移动端,已部署在Google25个产品和功能中,同时也有专有模型版本,如Med-PaLM2•最优的缩放比例(训练数据大小/模型参数量),数据和模型大小大致按照1:1的比例缩放,可以达到最佳性能•训练数据集非纯英文语料,混合了百种语言,包括了网络文档、书籍、代码、数学和对话数据,比用于训练PaLM的语料库大得多Bard是基于PaLM2的会话类应用体验地址:/文心一言是基于百度文心大模型的知识增强语言大模型模型主要为ERNIE系列模型,是打造文心一言的关键。文心大模型参数量达到了2600亿2023.8.31:率先向全社会开放•人类反馈强化学习体验地址:/讯飞和华为还联合重磅发布了国内首款支持大模型训练私有化的产品“星火一体机”体验地址:/facebookresearch/llamaMeta开源的一组参数规模从7B到70B的大语言模型,展示了如何仅使用公开可用的数据集来训练最先进的模型,而不需要依赖专有或不可访问的数据集。•大规模的数据过滤和清洗技术,以提高数据质量和多样性,减少噪声和偏见•使用了高效的数据并行和流水线并行技术,以加速模型的训练和扩展模型结构上,和chatGPT一样,也适用decoder-only的结构,但是做了一些改进•Pre-normalization:对每个Transformer子层的输入进行了RMSNorm归一化•SwiGLU激活函数:增加网络的表达能力和非线性,同时减少参数量和计算量•RoPE位置编码:模型的输入不再使用位置编码,而是在网络的每一层添加了位置编码体验地址:/,开源地址:/THUDMGLM系列模型是清华大学和智谱AI等合作研发的开源语言大模型,6月发布glm2,10月27日发布glm3GLM2使用了包含1.4万亿字符的中英预料进行预训练,并使用人类偏好的数据对模型进行对齐训练•通过FlashAttention技术,支持的长下文长度达到了3.2万字符•通过Multi-QueryAttention技术,能够进一步地提升推理速度,减小对显卡的显存占用GLM3引入更多特性:•更强大的基础模型:ChatGLM3-6B的基础模型具有在10B以下的基础模型中最强的性能•更完整的功能支持:采用了全新设计的Prompt格式,支持functioncall,代码执行和Agent等复杂功能•更全面的开源序列:ChatGLM3-6B,ChatGLM3-6B-Base,ChatGLM3-6B-32K,免费商业使用体验地址:/,开源地址:/THUDM体验地址:/,开源地址:/QwenLM/Qwen/tree/main通义千问由阿里巴巴基于“通义”大模型研发,于2023年4月正式发布。2023年8月,阿里云开源了它能够以自然语言方式响应人类的各种指令,拥有强大的能力,如回答问题、创作文字、编写代码、提供各类语言的翻译服务、文本润色、文本摘要以及角色扮演对话等。开源地址:/baichuan-incBaichuan是由百川智能开发的开源可商用的语言大模型,分为7B和13B。Baichuan-7B是在大约1.2万亿字符上训练Baichuan-7B的基础上进一步扩大参数量到130亿,并且在高质量的语料上训练了1.4万亿字符。Baichuan2是百川智能推出的新一代开源大语言模型,Baichuan2-7B和Tokens的高质量语料训练Baichuan2-192K大模型预训练阶段指令微调奖励函数预训练阶段指令微调奖励函数强化学习原始数据原始数据标注用户指令标注对比对标注对比对语言模型预训练语言模型预训练语言模型预训练基础模型语言模型预训练基础模型二分类模型强化学习方法StateStateofGPT,MicrosoftBuild2023,AndrejKarpathy论文、问答网站等,构建包含数千亿甚至数万亿单词的具有多样性的内容。利用由数千块高性能GPU和高速网络组成超级计算机,花费数十天完成深度神经网络参数训练,构建基础 在预训练语料集方面,GPT-3中通过主要包含经过过滤的CommonCrawl数据集、WebText2、Books1、Books2以及英文Wikipedia等数据集合。其中CommonCrawl的原始数据有45TB,进行过滤后仅保留了570GB的数据。通过子词方式对上述语料进行切分,大约一共包含5000亿子词。为了保证模型使用更多高质量数据进行训练,在GPT-3训练时,根据语料来源的不同,设置不同的采样权重。在完成3000亿子词训练时,英文Wikipedia的语料平均训练轮数为3.4次,而CommonCrawl和Books2仅有0.44次和0.43次。由于CommonCrawl数据集合的过滤过程繁琐复杂,OPT则采用了混合RoBERTa、Pile和PushShift.ioRedit数据的方法。由于这些数据集合中包含的绝大部分都是英文数据,因此OPT也从CommonCrawl数据集中抽取了部分非英文数据加入训练语料。由于模型参数量和所使用的数据量都非常巨大,普通的服务器单机无法完成训练过程,因此通常采用分布式架构完成训练。GPT-3和OPT中没有对这个部分给出详细的描述。•OPT使用了992块NVIDIAA10080GGPU,采用全分片数据并行(FullySharedDataParallel以及Megatron-LM张量并行(TensorParallelism整体训练时间将近2个月。•BLOOM则公开了更多在硬件和所采用的系统架构方面的细节。该模型的训练一共花费3.5个月,使用48个计算节点。每个节点包含8块NVIDIAA10080GGPU(总计384GPU),并且使用4NVLink用于节点内部GPU之间通信。节点之间采用四个Omni-Path100Gbps网卡构建的增强8维超立方体全局拓扑网络通信。BLOOM使用Megatron-DeepSpeed框架进行训练,主要包含两个部分:Megatron-LM提供张量并行能力和数据加载原语;DeepSpeed提供ZeRO优化器、模型流水线以及常规的分布式训练组件。通过这种方式可以实现数据、张量和流水线三维并行。有监督微调(SupervisedFinetuning也称为指令微调,利用少量高质量数据集合,包含用户输入的提示词和对应的理想输出结果。用户输入包括问题、闲聊对话、任务指令等多种形式和任务。):中国电信主要提供以下业务:1.移动通信服务:包括4G和5G网络服务,提供语音、短信、数据传输等服务。2.固定通信服务:提供固定电话、宽带互联网接入和相关服务。3.企业信息化服务:为企业客户提供包括云计算、大数据、物联网、信息安全等在内的综合信息化解决方案。中国电信还不断开发新的业务和技术,以适应市场的变化和客户的需求。利用这些有监督数据,使用与预训练阶段相同的语言模型训练算法,在基础语言模型的基础上进行训练,得到有监督微调模型(SFT模型)。•经过训练的SFT模型具备初步的指令理解能力和上下文理解能力,能够完成开放领域问答、阅读理解、翻译、生成代码等任务,也具备了一定的对未知任务的泛化能力。•很多类ChatGPT的模型都属于该类型,包括Alpaca、Vicuna、MOSS、ChatGLM-6B等。很多这类模型的效果非常好,甚至在一些评测中达到了ChatGPT的90%的效果奖励建模(RewardModeling)阶段的目标是构建一个文本质量对比模型,对于同一个提示词,SFT模型给出的多个不同输出结果的质量进行排序。奖励模型(RM模型)可以通过二分类模型,对输入的两个结果之间的优劣进行判断。RM模型与基础语言模型和SFT模型不同,RM模型本身并不能单独提供给用奖励模型的训练通常和SFT模型一样,使用数十块GPU,通过几天时间完成训练。由于RM模型的准确率对强化学习阶段的效果有至关重要的影响,因此通常需要大规模的训练数据对该模型进行训练给出SFT模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。使用强化学习,在SFT模型基础上调整参数,使得最终生成的文本可以获得更高的奖励(Reward)。该阶段需要的计算量相较预训练阶段也少很多,通常仅需要数十块GPU,数天即可完成训练。AndrejKarpathy也指出,强化学习并不是没有问题的,它会使基础模型的熵降低,从而减少了模型输出经过强化学习方法训练后的RL模型,就是最终提供给用户使用、具有理解用户指令和上下文的类ChatGPT由于强化学习方法稳定性不高,并且超参数众多,使得模型收敛难度大,再叠加RM模型的准确率问题,使得在大语言模型上有效应用强化学习非常困难。HuggingFace是一个开源自然语言处理软件库,其目标是通过提供一套全面的工具、库和模型,使得自然语言处理技术对开发人员和研究人员更易于使用。HuggingFace最著名的贡献之一是Transformer库,基于此,研究人员可以快速部署训练好的模型,以及实现新的网络结构。HuggingFace还提供了Dataset库,可以非常方便地下载自然语言处理研究中经常使用的基准数据集。常见的用于预训练语言模型的大规模数据集都可以在Dataset库中直接下载并加载。例如,如果使用维基百科的英文语料集,可以直接通过如下代码完成数据获取:2.训练词元分析器BERT采用WordPiece分词,根据训练语料中的词频决定是否将一个完整的词切分为多个词元。因此,需成任务,代码如下所示:2.训练词元分析器3.预处理语料集合在启动整个模型训练之前,还需要将预训练语料根据训练好的Tokenizer进行处理。如果文档长度超过512个词元(Token就直接截断。数据处理代码如下所示:3.预处理语料集合在启动整个模型训练之前,还需要将预处理。如果文档长度超过512个词元(Token就直接截断。数据处理代码如下所示:4.模型训练基于训练好的模型,可以针对不同应用需求使用,以句子补全为例的代码如下所示:分布式训练(DistributedTraining)是指将机器学习或深度学习模型训练任务分解成多个子任务,并在多个计算设备上并行地进行训练。上图给出了单个计算设备和多个计算设备的示例,这里计算设备可以是中央处理器(CentralProcessing促使人们设计分布式训练系统的一个最重要的原因就是单个计算设备的算力已经不足以支撑模型训练。机器学习模型快速发展,从2013年AlexNet开始,到2022年拥有5400亿参数的PalM模型,机器学习模型以每18个月增长56倍的速度发展。模型参数规模增大的同时,对训练数据量的要求也指数级增长,这更加剧了对算力的需求。),TPU等)为机器学习模型提供了大量的算力,但是其增长速度仍然没有突破每18个月翻倍的摩尔定律。为了能够满足机器学习模型的发展,只有通过分布式训练系统才可以匹配模型不断增长的算力需求。分布式训练的总体目标就是提升总的训练速度,减少模型训练的总体时间。总训练速度可以用如下公式简总训练速度∝单设备计算速度X计算设备总量X多设备加速比•单设备计算速度主要由单块计算加速芯片的运算速度和数据I/O能力来决定,对单设备训练效率进行优化,主要的技术手段有混合精度训练、算子融合、梯度累加等;•分布式训练系统中计算设备数量越多,其理论峰值计算速度就会越高,但是受到通信效率的影响,计算设备数量增大则会造成加速比急速降低;•多设备加速比则是由计算和通讯效率决定,需要结合算法和网络拓扑结构进行优化,分布式训练并行策略主要目标就是提升分布式训练系统中的多设备加速比。大语言模型参数量和所使用的数据量都非常巨大,因此都采用了分布式训练架构完成训练。•OPT模型训练使用了992块NVIDIAA10080GGPU,采用全分片数据并行(FullyShardedDataParallel)以及Megatron-LM张量并行(TensorParallelism整体训练时间将近2个月。•BLOOM模型的研究人员则公开了更多在硬件和所采用的系统架构方面的细节。该模型的训练一共花费3.5个月,使用48个计算节点。每个节点包含8块NVIDIAA10080GGPU(总计384个GPU并且使用4*NVLink用于节点内部GPU之间通信。节点之间采用四个Omni-Path100Gbps网卡构建的增强8维超立方体全局拓扑网络进行通信。•LLaMA模型训练采用A100-80GBGPU,LLaMA-7B模型训练需要82432GPU小时,LLaMA-13B65B模型训练花费则高达1022362GPU小时。分布式训练系统目标就是将单节点模型训练转换成等价的分布式并行模型训练。对于大语言模型来说,训练过程就是根据数据和损失函数,利用优化算法对神经网络模型参数进行更新的过程。单节点模型训练系统结构如上图所示,主要由数据和模型两个部分组成。数据进行切分(Partition并将同一个模型复制到多个设备上,并行执行不同的数据分片,这种方式通数据并行训练系统可以通过增加计算设备,有效提升整体训练吞吐量,每秒全局批次数(GlobalBatchSizePerSecond)。与单个计算设备训练相比,其最主要的区别在于反向计算中的梯度需要在所有计算设备中进行同步,以保证每个计算设备上最终得到的是所有进程上梯度的平均值。常见的神经网络框架中都有数据并行方式的具体实现,包括TensorFlowDistributedStrategy、PyTorch由于基于Transformer架构的大语言模型中每个算子都是依赖单个数据而非批次数据,因此数据并行并不会影响其计算逻辑,一般情况下,各训练设备中前向计算是独立的,不涉及同步问题。数据并行训练加速比最高,但要求每个设备上都备份一份模型,显存占用比较高。模型并行往往用于解决单节点内存不足的问题。以包含1750亿参数的GPT-3模型为例,如果模型中每一个参数都使用32位浮点数表示,那么模型需要占用700GB(即175G×4Bytes)内存。如果使用16位浮点数表示,每个模型副本也需要占用350GB内存。H100加速卡也仅支持80GB显存,无法将整个模型完整放入其中。模型并行可以从计算图角度,用以下两种形式进行切分:1.按模型的层切分到不同设备,即层间并行或算子间并行(Inter-operatorParallelism也称之2.将计算图层内的参数切分到不同设备,即层内并行或算子内并行(Intra-operatorParallelism流水线并行是一种并行计算策略,将模型的各个层分段处理,并将每个段分布在不同的计算设备上,使得前后阶段能够流水式、分批进行工作。流水线并行通常应用于大语言模型的并行系统中,以有效解决单个计算设备内存不足的问题。GPipe方法,将小批次(Mini-batch)进一步划分成更小的微批次(Micro-batch),利用流水线并行方案,每次处理一个微批次的数据。在当前阶段计算完成得到结果后,将该微批次的结果发送给下游设备,同时开始处理后一个微批次的数据,这样可以在一定程度上减少并行气泡。Megatron-LM提出了1F1B流水线策略,即一个前向通道和一个后向通道。1F1B流水线策略引入了任务调度机制,使得下游设备能够在等待上游计算的同时执行其他可并行的任务,从而提高设备的利用率。张量并行需要根据模型的具体结构和算子类型,解决如何将参数切分到不同设备,以及如何保证切分后数学一致性这两个问题。大语言模型都是以Transformer结构为基础,Transformer结构主要由嵌入式表示(Embedding)、矩这三种类型的算子有较大的差异,都需要设计对应的张量并行策略才可以实现将参数切分到不同的设备。混合并行将多种并行策略如数据并行、流水线并行和张量并行等混合使用。通过结合不同的并行策略,混合并行可以充分发挥各种并行策略的优点,最大程度地提高计算性能和效率。•针对千亿规模的大语言模型,通常,在每个服务器内部使用张量并行策略,由于该策略涉及的网络通信量较大,需要利用服务器内部的不同计算设备之间的高速通信带宽。•通过流水线并行,将模型的不同层划分为多个阶段,每个阶段由不同的机器负责计算。这样可以充分利用多台机器的计算能力,并通过机器之间的高速通信传递计算结果和中间数据,以提高整体的计算速度和效率。•最后,在外层叠加数据并行策略,以增加并发数量,加快整体训练速度。通过数据并行,将训练数据分发到多组服务器上进行并行处理,每组服务器处理不同的数据批次。这样可以充分利用多台服务器的计算资源,并增加训练的并发度,从而加快整体训练速度。能力和数据加载原语;DeepSpeed提供ZeRO优化器、模型流水线及常规的分布式训练组件。通过这种方式可以实现数据、张量和流水线三维并行。当前,大语言模型训练通常采用Adam优化算法,除了需要每个参数梯度,还需要一阶动量(Momentum)和二阶动量(Variance)。虽然Adam优化算法相较SGD算法效果更好也更稳定,但是对计算设备内存的占用显著增大。为了降低内存占用,大多数系统采用了混合精度训练(MixedPrecisionTraining)方混合精度优化的过程如图所示。Adam优化器状态包括模型参数备份、一阶动量和二阶动量都采用FP32保存式存储。字节存储75亿参数模型,如果用FP16格式,只需要15GB计算设备内存,但是在训练阶段,模型状态实际上需要耗费120GB。计算卡内存占用中除了模型状态,还有剩余状态(ResidualStates),包括激活值(Activation)、各种Checkpointing)方式使激活值内存占用大幅度减少,因此如何减少模型状态尤其是Adam优化器状态是解决内存占用问题的关键。余的优化。ZeRO使用分区的方法,即将模型状态量分割成多个分区,每个计算设备只保存其中的一部分。这样整个训练系统内只需要维护一份模型状态,减少了内存消耗和通信开销。具体来说,如图所示,ZeRO包含以下三种方法。在DeepSpeed框架中,Pos对应Zero-1,Pos+g对应Zero-2,Pos+g+p对应Zero-3。Zero-1和Zero-2对整体通信量没有影响,虽然对通信有一定延迟影响,但是整体性能受到的影响很小。Zero-3所需的通信量则是正常通信量的1.5倍。分布式训练需要使用由多台服务器组成的计算集群(ComputingCluster)完成。而集群的架构也需要根据分布式系统、大语言模型结构、优化算法等综合因素进行设计。分布式训练集群属于高性能计算集群(HighPerformanceComputingCluster,HPC其目标是提供海量的计算能力。在由高速网络组成的高性能计算上构建分布式训练系统,主要有两种常见架构:•参数服务器架构典型的用于分布式训练的高性能计算集群的硬件组成如图4.18所示。整个计算集群包含大量带有计算加速设备的服务器。•每个服务器中往往有多个计算加速设备(通常为2~16个)•多个服务器会被放置在一个机柜(Rack)中•通过在架顶交换机间增加骨干交换机(SpineSwitch)接入新的机柜•这种连接服务器的拓扑结构往往是一个多层树(Multi-LevelTree)参数服务器(ParameterServer,PS)架构的分布式训练系统中有两种服务器角色:训练服务器和参数•参数服务器需要提供充足内存资源和通信资源•训练服务器需要提供大量的计算资源该集群包括两个训练服务器和两个参数服务器。假设有一个可分为两个参数分区的模型,每个分区由一个参数服务器负责进行参数同步。在训练过程中,每个训练服务器都拥有完整的模型,并将分配到此服务器的训练数据集切片(DatasetShard)进行计算,将得的梯度推送到相应的参数服务器。参数服务器会等待两个训练服务器都完成梯度推送,然后开始计算平均梯度,并更新参数。之后,参数服务器会通知训练服务器拉取最新的参数,并开始下一轮训练迭代。参数服务器架构的分布式训练过程可以细分为同步训练和异步训练两种模式。•同步训练:训练服务器在完成一个小批次的训练后,将梯度推送给参数服务器。参数服务器在接收到所有训练服务器的梯度后,进行梯度聚合和参数更新。有诸多的等待或同步机制,导致整个训练速度较慢•异步训练:训练服务器在完成一个小批次的训练后,将梯度推送给参数服务器。参数服务器不再等待接收所有训练服务器的梯度,而是直接基于已接收到的梯度进行参数更新。训练速度得到了极大的提升,但是会导致训练效果有所波动。选择适合的训练模式应根据具体情况和需求进行权衡。去中心化(DecentralizedNetwork)架构则采用集合通信实现分布式训练系统。在去中心化架构中,没有中央服务器或控制节点,而是由节点之间进行直接通信和协调。这种架构的好处是可以减少通信瓶颈,提高系统的可扩展性。大语言模型训练所使用的分布式训练并行策略,大都是使用去中心化架构,并利用集合通信进行实现。在分布式训练过程中,节点之间需要周期性地交换参数更新和梯度信息。可以通过集合通信(Collective分布式集群中网络硬件多种多样,包括以太网、InfiniBand网络等。PyTorch等深度学习框架通常不直接操作硬件,而是使用通信库。常用的通信库包括MPI、GLOO、NCCL等,可以根据具体情况进行选择和在指令微调大模型的方法之前,如何高效地使用预训练好的基座语言模型是学术界和工业界关注的热点。提示学习逐渐成为大语言模式使用的新范式。与传统的微调方法不同,提示学习基于语言模型方法来适应下游各种任务,通常不需要参数更新。然而,由于所涉及的检索和推断方法多种多样,不同模型、数据集和任务都有不同的预处理要求,提示学习的实施十分复杂。提示学习(Prompt-basedLearning)不同于传统的监督学习,它直接利用了在大量原始文本上进行预训练的语言模型,并通过定义一个新的提示函数,使该模型能够执行小样本甚至零样本学习,以适应仅有少量标注或没有标注数据的新场景。使用提示学习完成预测的整个过程可以描述为三个阶段:此外,由于提示构建的目的是找到一种方法,使语言模型有效地执行任务,并不需要将提示限制为人类可解释的自然语言。因此,也有人研究连续提示的方法,即软提示(SoftPrompt),其直接在模型的嵌入空间中执行提示。具体来说,连续提示删除了两个约束:(2)模板不再受语言模型自身参数的限制。相反,模板有自己的参数,可以根据下游任务的训练数据进提示学习方法易于理解且效果显著,提示工程、答案工程、多提示学习方法、基于提示的训练策略等已经成为从提示学习衍生出的新的研究方向),习是指模型可以从上下文中的几个例子中学习:向模型输入特定任务的一些具体例子(也称示例〔Demonstration〕)以及要测试的样例,模型可以根据给定的示例续写测试样例的答案。每条句子相应的标签、以及待测试的句子,模型可以自然地续写出它的情感极语境学习可以看作是提示学习的一个子类,其中示例是提示的一部分。语境学习的关键思想是从类比中学习,整个过程并不需要对模型进行参数更新,仅执行前向的推理。大语言模型可以通过语境学习执行许多复杂的推理任务。语境学习作为大语言模型时代的一种新的范式,具有许多独特的优势。•首先,其示例是用自然语言编写的,这提供了一个可解释的界面来与大语言模型进行交互。•其次,不同于以往的监督训练,语境学习本身无须参数更新,这可以大大降低使大语言模型适应新任务的计算成本。语境学习作为一种新兴的方法,其作用机制仍有待深入研究。语境学习中示例的标签正确性(即输入和输出的具体对应关系)并不是使其行之有效的关键因素,并认为起到更重要作用的是输入和样本配对的格式、输入和输出分布等。此外,语境学习的性能对特定设置很敏感,包括提示模板、上下文内示例的选择及示例的顺序。如何通过语境学习方法更好地激活大语言模型已有的知识成为一个新的研究方向。由于大语言模型的参数量十分庞大,当将其应用到下游任务时,微调全部参数需要相当高的算力。为了节省成本,研究人员提出了多种参数高效(ParameterEfficient)的微调方法,旨在仅训练少量参数使模型适应到下游任务。方法可以在缩减训练参数量和GPU显存占用的同时,使训练后的模型具有与全量微调相当的性能。固定预训练模型参数不变,在原本权重矩阵旁路添加低秩矩阵的乘积作为可训练参数,A和B是低秩矩阵随着更多长文本建模需求的出现,多轮对话、长文档摘要等任务在实际应用中越来越多,这些任务需要模型能够更好地处理超出常规上下文窗口大小的文本内容。尽管当前的大语言模型在处理短文本方面表现出色,但在支持长文本建模方面仍存在一些挑战,这些挑战包括预定义的上下文窗口大小限制等。以MetaAI在2023年2月开源的LLaMA模型为例,其规定输入文本的词元数量不得超过2048个。这会限制模型对长文本的理解和表达能力。当涉及长时间对话或长文档摘要时,传统的上下文窗口大小可能无法捕捉到全局语境,从而导致信息丢失或模糊的建模结果。常用的方法有:•增加上下文窗口的微调:采用直接的方式,即通过使用一个更大的上下文窗口来微调现有的预训练Transformer,以适应长文本建模需求。•位置编码:改进的位置编码,如ALiBi、LeX等能够实现一定程度上的长度外推。这意味着它们可以在小的上下文窗口上进行训练,在大的上下文窗口上进行推理。•插值法:将超出上下文窗口的位置编码通过插值法压缩到预训练的上下文窗口中。手动构建指令的方法比较直观,可以在网上收集大量的问答数据再人为加以筛选过滤,或者通过标注者直接手动编写提示与相应的回答。虽然这是一个比较耗费人力的过程,但其优势在于可以很好地把控指令数据的标注过程,并对整体质量进行很好的控制。指令数据的质量和多样性通常被认为是衡量指令数据的两个最重要的维度。LIMA做了大量的工作来保证指令数据的质量。首先,指令数据来源的可靠已经在一定程度上保证了它的质量。其次,LIMA额外制定了一些规则进一步提高其质量。•例如,对社区指令数据采样时选择排名靠前的优质回答,将所有的回答统一成AI助手的风格,删除过长或过短的回答,删除以第一人称开头的回答,删除包含链接的回答,标注者精心手动编写回LIMA的实验结果说明指令数据的质量和多样性是影响有监督微调过程的关键因素。LIMA仅使用1000条手动构建指令数据代价高昂,需要大量的人力投入。因此,一些研究尝试寻找更高效的替代方法。1.生成指令任务:从种子指令集出发,拼接上下文示例,让GPT-3生成更多新任务的指令2.确定指令是否代表分类任务3.生成任务输入与输出:非分类任务使用输入优先,分类任务使用输出优先4.过滤低质量数据:考虑多样性,以及指令质量的启发式规则通过有监督微调,大语言模型已经初步具备了遵循人类指令,并完成各类型任务的能力。然而有监督微调需要大量指令和所对应的标准回复,获取大量高质量的回复需要耗费大量的人力和时间成本。由于有监督微调通常采用交叉熵损失做为损失函数,目标是调整参数使得模型输出与标准答案完全相同,不能从整体上对模型输出质量进行判断。因此,模型不能适应自然语言多样性,也不能解决微小变化的敏感性问题。强化学习则将模型输出文本作为一个整体进行考虑,其优化目标是使得模型生成高质量回复。此外,强化学习方法还不依赖于人工编写的高质量回复。模型根据指令生成回复,奖励模型针对所生成的回复给出质量判断。模型也可以生成多个答案,奖励模型对输出文本质量进行排序。模型通过生成回复并接收反馈进行学习。强化学习方法更适合生成式任务,也是大语言模型构建中必不可少的关键步骤。的问题,其目标是使智能体在复杂且不确定的环境中最大化奖励。强化学习主要由两部分组成:智能体和环境。在强化学习过程中,智能体与环境不断交互。智能体在环境中获取某个状态后,会根据该状态输出一个动作,也称为决策(Decision)。动作会在环境中执行,环境会根据智能体采取的动作,给出下一个状态及当前动作带来的奖励。随着ChatGPT、Claude等通用对话模型的成功,强化学习在自然语言处理领域获得了越来越多的注意力。在深度学习中,有监督学习和强化学习不同,可以用旅行方式进行更直观的对比,有监督学习和强化学习可以看作两种不同的旅行方式,每种旅行都有自己独特的风景、规则和探索方式。•旅行前的准备:数据来源监督学习:这如同旅行者拿着一本旅行指南书,其中明确标注了各个景点、餐厅和交通方式。在这里,数据来源就好比这本书,提供了清晰的问题和答案对。强化学习:旅行者进入了一个陌生的城市,手上没有地图,没有指南。所知道的只是他们的初衷,例如找到城市中的一家餐厅或博物馆。这座未知的城市,正是强化学习中的数据来源,充满了探索的机会。可以用旅行方式进行更直观的对比:•路途中的指引:反馈机制监督学习:在这座城市里,每当旅行者迷路或犹豫时,都会有人告诉他们是否走对了路。这就好比每次旅行者提供一个答案,监督学习都会告诉他们是否正确。强化学习:在另一座城市,没有人会直接告诉旅行者如何走。只会告诉他们结果是好还是坏。例如,走进了一家餐厅,吃完饭后才知道这家餐厅是否合适。需要通过多次尝试,逐渐学习和调整策略。监督学习:在这座城市旅行的目的非常明确,掌握所有的答案,就像参观完旅行指南上提及的所有景点。强化学习:在未知的城市,目标是学习如何在其中有效地行动,寻找最佳的路径,无论是寻找食物、住宿还是娱乐。有监督学习针对单个词元进行反馈,其目标是要求模型针对给定的输入给出确切的答案。而强化学习是针对整个输出文本进行反馈,并不针对特定的词元。反馈粒度的不同,使强化学习更适合大语言模型,既可以兼顾表达多样性,又可以增强对微小变化的敏感性。自然语言十分灵活,可以用多种不同的方式表达相同的语义。而有监督学习很难支持上述学习方式。强化学习则可以允许模型给出不同的多样性表达。另外,有监督微调通常采用交叉熵损失作为损失函数,由于总和规则,造成这种损失对个别词元变化不敏感。如果改变个别的词元,只会对整体损失产生小的影响。但是,一个否定词可以完全改变文本的整体含义。强化学习则可以通过奖励函数同时兼顾多样性和微小变化敏感性两个方面。用户在大语言模型上主要有三类输入:),(b)求知型(Knowledge-Seeking用户仅提出问题,模型根据内在知识提供真实回答(例如,“流感的常见原因是什么”有监督学习算法非常容易使得求知型查询产生幻觉。在模型并不包含或者知道答案的情况下,有监督训练仍然会促使模型给出答案。而使用强化学习方法,则可以通过定制奖励函数,将正确答案赋予非常高的分数,将放弃回答的答案赋予中低分数,将不正确的答案赋予非常高的负分,使得模型学会依赖内部知识选择放弃回答,从而在一定程度上缓解模型的幻觉问题。多轮对话能力是大语言模型重要的基础能力之一。多轮对话是否达成最终目标,需要考虑多次交互过程的整体情况,因此很难使用有监督学习的方法构建。而使用强化学习方法,可以通过构建奖励函数,根据整个对话的背景及连贯性对当前模型输出的优劣进行判断。基于人类反馈训练的奖励模型可以很好地学习人类的偏好。从理论上来说,可以通过强化学习使用人类标注的反馈数据直接对模型进行微调建模。然而,由于工作量和时间的限制,针对每次优化迭代,人类很难提供足够的反馈。更为有效的方法是构建奖励模型,模拟人类的评估过程。奖励模型在强化学习中起着至关重要的作用,它决定了智能体如何从与环境的交互中学习并优化策略,以实现预定的任务目标。(1)有用性:有用性意味着模型应当遵循指令;它不仅要遵循指令,还要能够从少量的示例提示或其他可解释的模式中推断出意图。然而,给定提示背后的意图经常不够清晰或存在歧义,这就是需要依赖标注者的判断的原因,他们的偏好评分构成了主要的衡量标准。在数据收集过程中,让标注者使用模型,期望模型帮助用户完成纯粹基于文本的任务(如回答问题、撰写编辑文档、讨论计划和决策)。(2)无害性:无害性的衡量也具有挑战性。语言模型造成的实际损害程度通常取决于它们的输出在现实世界中的使用方式。例如,一个生成有毒输出的模型在部署为聊天机器人时可能会有害,但如果被用于数据增强,以训练更精确的毒性检测模型,则可能是有益的。在数据收集过程中,让标注者通过一些敌对性的询问,比如计划抢银行等,引诱模型给出一些违背规则的有害性回答。有用性和无害性往往是对立的。过度追求无害性可以得到更安全的回复(如回答不知道),却无法满足提问者的需求。相反,过度强调有用性可能导致模型产生有害/有毒的输出。将两个数据集(有用性和无害性训练集)混合在一起训练奖励模型时,模型既可以表现出有用性,又可以礼貌地拒绝有害请求。随着语言模型规模的不断扩大,其也具备了丰富的知识和强大的语境学习能力。然而,仅仅通过扩大语言模型的规模,并不能显著提升推理(Reasoning)能力,如常识推理、逻辑推理、数学推理等。通过示例(Demonstrations)或者明确指导模型在面对问题时如何逐步思考,促使模型在得出最终答案之前生成中间的推理步骤,可以显著提升其在推理任务上的表现。这种方法被称为思维链提示(Chain-of-Thought同样地,面对复杂任务或问题时,大语言模型可以展现出良好的规划(Planning)能力。通过引导模型首先将复杂的问题分解为多个较为简单的子问题,然后逐一解决这些子问题,可使模型得出最终解答,这种思维链提示(Chain-of-ThoughtPrompting)方式如图所示,标准少样本提示(StandardFew-shotPrompting)技术在给模型的输入里面提供了k个[问题,答案]对,以及当前问题,由模型输出答案。当面对复杂任务或问题时,人类通常倾向于将其转化为多个更容易解决的子任务/子问题,并逐一解决它们,得到最终想要的答案或者结果。这种能题解决思路,研究人员们提出了由少Prompting)方法。这种方法试图利用大语言模型的规划能力,将复杂问题分解为一系列的子问题并依次解决ChatGPT所取得的巨大成功,使得越来越多的开发者希望利用OpenAI提供的API或私有化模型开发基于大语言模型的应用程序。然而,即使大语言模型的调用相对简单,仍需要完成大量的定制开发工作,包括为了解决这个问题,从2022年开始,多家机构和个人陆续推出了大量开源项目,帮助大家快速创建基于大语言模型的端到端应用程序或流程,其中较为著名的是LangChain框架。LangChain框架是一种利用大语言模型的能力开发各种下游应用的开源框架,旨在为各种大语言模型应用提供通用接口,简化大语言模型应用的开发难度。它可以实现数据感知和环境交互,即能够使语言模型与其他数据源连接起来,并允许语言模型与其环境进行交互。LangChain提供了以下6种标准化、可扩展的接口,并且可以外部集成:•数据连接(Dataconnection与特定应用程序的数据进行交互的接口;•记忆(Memory),用于在链的多次运行之间持久化应用程序状态;•智能体(Agent),语言模型作为推理器决定要执行的动作序列;•回调(Callback),用于记录和流式传输任何链式组装的中间步骤。LangChain中的模型输入/输出(ModelI/O)模块是与各种大语言模型进行交互的基本组件,是大语言模型应用的核心元素。该模块的基本流程如图所示,主要包含以下部分:Prompts、LanguageModels及OutputParsers。用户原始输入与模型和示例进行组合,然后输入大语言模型,再根据大语言模型的返回结果进行输出或者结构化处理。Prompts部分的主要功能是提示词模板、提示词动态选择和输入管理。提示词是指输入模型的内容。该输入通常由模板、示例和用户输入组成。LangChain提供了几个类和函数,使得构建和处理提示词更加容易。LangChain中的PromptTemplate类可以根据模板生成提示词,它包含了一个文本字符串(模板),可以根据从用户处获取的一组参数生成提示词。以下是一个简单的示例:通过上述代码,可以获取最终的提示词“Youareanamingconsultantfornewcompanies.Whatisagoodnameforacompanythatmakescolorfulsocks?”如果有大量的示例,可能需要选择将哪些示例包含在提示词中。LangChain中提供了ExampleSelector以提供各种类型的选择,包括比如基于句子长度的筛选器的功能是这样的:当用户输入较长时,该筛选器可以选择简洁的模板,而面对较短的输入则选择详细的模板。这样做可以避免输入总长度超过模型的限制。LanguageModels部分提供了与大语言模型的接口,LangChain提供了两种类型的模型接口和集成:•LLM,接收文本字符串作为输入并返回文本字符串;在LangChain中,LLM指纯文本补全模型,接收字符串提示词作为输入,并输出字符串。OpenAI的GPT-3是LLM实现的一个实例。ChatModel专为会话交互设计,与传统的纯文本补全模型相比,这一模型的API采用了不同的接口方式:它需要一个标有说话者身份的聊天消息列表作为输入,如“系统”、“AI”或“人类”。作为输出,ChatModel会返回一个标为“AI”的聊天消息。GPT-4和Anthropic的Claude都可以通过ChatModel调用。SystemMessage表示设置的AI应该遵循的目标。程序中还会有ChatMessage,表示任务角色的消息。上例调用了OpenAI提供的gpt-3.5-turbo模型接口,可能返回的结果如下:OutputParsers部分的目标是辅助开发者从大语言模型输出中获取比纯文本更结构化的信息。OutputParsers包含很多具体的实现,但是必须包含如下两个方法。带提示解析(Parsewithprompt),接收字符串(假设为语言模型的响应)和提示(假设为生成此响应的提示)并将其解析为某种结构的方法。比如PydanticOutput-Parser允许用户指定任意的JSON模式,并通过构建指令的方式与用户输入结合,使得大语言模型输出符合指定模式的JSON结果。许多大语言模型应用需要使用用户特定的数据,这些数据不是模型训练集的一部分。为了支持上述应用的构建,LangChain数据连接(Dataconnection)模块通过以下方式提供组件来加载、转换、存储和查询Retrievers。LangChain数据连接模块的基本框架如图所示。Documentloaders(文档加载)旨在从数据源中加载数据构建Document。LangChain中的Document包含文本和与其关联的元数据。LangChain中包含加载简单txt文件的文档加载器,用于加载任何网页文本内容的加载器。以下是一个最简单的从文件中读取文本来加载数据的Document的示例:Documenttransformers(文档转换)旨在处理文档,以完成各种转换任务,如将文档格式转化为Q&A形式、去除文档中的冗余内容等,从而更好地满足不同应用程序的需求。一个简单的文档转换示例是将长文档分割成较短的部分,以适应不同模型的上下文窗口大小。LangChain中有许多内置的文档转换器,使拆分、合并、过滤文档及其他文档操作都变得很容易。以下是对长文档进行拆分的代码示例:Textembeddingmodels(文本嵌入模型)旨在将非结构化文本转换为嵌入表示。基于文本的嵌入表示可以进行语义搜索,查找最相似的文本片段。Embeddings类则用于与文本嵌入模型进行交互,并为不同的嵌入模型提供统一的标准接口,包括OpenAI、Cohere等。LangChain中的Embeddings类公开了两个方法:一个用于文档嵌入表示,另一个用于查询嵌入表示。前者输入多个文本,后者输入单个文本。之所以将它们作为两个单独的方法,是因为某些嵌入模型为文档和查询采用了不同的嵌入策略。以下是使用OpenAI的API接口完成文本嵌入的代码示例:VectorStores(向量存储)是存储和检索非结构化数据的主要方式之一。它首先将数据转化为嵌入表示,然后存储生成的嵌入向量。在查询阶段,系统会利用这些嵌入向量来检索与查询内容“最相似”的文档。向量存储的主要任务是保存这些嵌入向量并执行基于向量的搜索。LangChain能够与多种向量数据库集成,如Chroma、FAISS和Lance等。以下为使用FAISS向量数据库的代码示例:Retrievers(检索器)是一个接口,其功能是基于非结构化查询返回相应的文档。检索器不需要存储文档,只需要能根据查询要求返回结果即可。检索器可以使用向量存储的方式执行操作,也可以使用其他方式执行操作。LangChain中的BaseRetriever类定义如下:aget_relevant_documents方法获得与查询文档最相关的文档。基于向量存储的检索器(Vectorstore-backedretriever)是使用向量存储检索文档的检索器。它是向量存储类的轻量级包装器,与Retriever接口契合,使用向量存储实现的搜索方法(如相似性搜索和MMR)来查询使用向量存储的文本。以下是一个基于向量存储的检索器的代码示例:虽然独立使用大语言模型能够应对一些简单任务,但对于更加复杂的需求,可能需要将多个大语言模型进行链式(Chain)组合,或与其他组件进行链式调用。LangChain并将该接口定义得非常通用。作为一个调用组件的序列,其中还可以包含其他链。基本接口实现非常简单,链允许将多个组件组合在一起,创建一个单一的、连贯的应用程序。例如,可以创建一个链,接收用户输入,使用PromptTemplate对其进行格式化,然后将格式化后的提示词传递给大语言模型。也可以通过将多个链组合在一起或将链与其他组件组合来构建更复杂的链,代码示例如下:•RouterChain可以根据输入数据的某些属性/特征值,选择调用哪个子链(Subchain)。•SimpleSequentialChain是最简单的序列链形式,其中的每个步骤具有单一的输入/输出,上一个步骤的输出是下一个步骤的输入。•SequentialChain是连续链的更一般的形式,允许多个输入/输出。•TransformChain可以引入自定义转换函数,对输入进行处理后再输出。大多数大语言模型应用都使用对话方式与用户交互。对话中的一个关键环节是能够引用和参考之前对话中的信息。对于对话系统来说,最基础的要求是能够直接访问一些过去的消息。在更复杂的系统中还需要一个能够不断更新的事件模型,其能够维护有关实体及其关系的信息。在LangChain中,这种能存储过去交互信息的能力被称为“记忆”(Memory)。LangChain中提供了许多用于向系统添加记忆的方法,可以单独使用,也可以无缝整合到链中使用。LangChain记忆模块的基本框架如图所示。记忆系统需要支持两个基本操作:读取和写入。每个链都根据输入定义了核心执行逻辑,其中一些输入直接来自用户,但有些输入可以来源于记忆。在接收到初始用户输入,但执行核心逻辑之前,链将从记忆系统中读取内容并增强用户输入。在核心逻辑执行完毕并返回答复之前,链会将这一轮的输入和输出都保存到记忆系统中,以便在将来使用它们。LangChain中提供了多种对记忆方式的支持,ConversationBufferMemory是记忆中一种非常简单的形式,它将聊天消息列表保存到缓冲区中,并将其传递到提示模板中,代码示例如下:这种记忆系统非常简单,因为它只记住了先前的对话,并没有建立更高级的事件模型,也没有在多个对话之间共享信息,其可用于简单的对话系统,例如问答系统或聊天机器人。对于更复杂的对话系统,需要更高级的记忆系统来支持更复杂的对话和任务。将ConversationBufferMemory与ChatModel结合到链中的代码示例如下:可以得到如下输出结果:智能体(Agent)的核心思想是使用大语言模型来选择要执行的一系列动作。在链中,操作序列是硬编码在代码中的。在智能体中,需要将大语言模型用作推理引擎,以确定要采取哪些动作,以及以何种顺序采取这些动作。智能体通过将大语言模型与动作列表结合,自动选择最佳的动作序列,从而实现自动化决策和行动。智能体可以用于许多不同类型的应用程序,例如自动化客户服务、智能家居等。LangChain中的智能体由如下几个核心组件构成:•Agent:决定下一步该采取什么操作的类,由大语言模型和提示词驱动。提示词可以包括智能体的个性(有助于使其以某种方式做出回应)、智能体的背景上下文(有助于提供所要求完成的任务类型的更多上下文信息)、激发更好的推理的提示策略(如ReAct)。•Tools:智能体调用的函数。这里有两个重要的考虑因素,一是为智能体提供正确的工具访问权限;二是用对智能体最有帮助的方式描述工具。•Toolkits:一组旨在一起使用以完成特定任务的工具集合,具有方便的加载方法。通常一个工具集合中AgentExecutor类,LangChain还支持其他智能体运行空间,包括Plan-and-executeAgent、Baby参考文献:https://python.langh将使用ReAct逻辑生成。根据上面定义的智能体,使用如下调用方式:但是,如果换一种需要利用当前知识的用户输入,并给出如下调用方式:LangChain提供了回调(Callback)系统,允许连接到大语言模型应用程序的各个阶段。这对于日志记录、监控、流式处理和其他任务处理非常有用。可以通过使用API中提供的callbacks参数订阅这些事件。CallbackHandlers是实现CallbackHandler接口的对象,每个事件都可以通过一个方法订阅。当事件被触发时,CallbackManager会调用相应事件所对应的处理程序,代码示例如下:参考文献:/docs/get_started/introduction,/datawhalechi一些内置的处理程序,其中最基本的处理程序是一直以来,实现通用类人智能都是人类不懈追求的目标,智能代理也称为智能体,也是在该背景下被提出的。早期的智能代理主要是基于强化学习实现的,不仅计算成本高,需要用大量的数据训练,而且难以实现知识迁移。随着大语言模型的发展,智能代理结合大语言模型实现了巨大突破,基于大语言模型的智能代理开始占据主导地位,也逐渐引起了众多研究人员的关注。为方便起见,本节将基于大语言模型的智能代理(以下简称“智能代理”重点介绍其组成及应用实例。智能代理可以被视为独立的个体,能够接收并处理外部信息,进而给出响应。大语言模型可以充当智能代理的大脑,单个智能代理的组成如图所示。智能代理主要由以下几个核心模块组成:思考模块、记忆模块、工具调用模块。对于外界输入,智能代理借助多模态能力将文字、音频、图像等多种形式的信息转换为机器能够理解的表现形式;进而由思考模块对这些信息进行处理,结合记忆模块完成推理、规划等复杂任务;最后,智能代理可能会利用工具调用模块执行相应的动作,对外部输入做出响应。思考模块主要用于处理输入信息、完成分析与推理,进而得到输出。它不仅能够明确与分解任务,还能进行自我反思与改进。具体来看,智能代理的思考模块具有以下基本能力。言背后可能还隐藏着说话者的意图、情感等信息。借助大语言模型强大的语言理解与生成能力,智能代理能够解析输入的自然语言,理解对方的言外之意,进而明确任务指令。(2)推理与规划能力:随着思维链等方式的出现,推理与规划能力的概念逐渐开始交叉,并越来越紧密地融合起来。在规划时需要进行推理,在推理过程中也需要一定的规划。智能代理能够根据提示或指令逐步生成思考的过程,利用大语言模型的推理与规划能力实现任务的分解。(3)反思与学习能力:与人类一样,智能代理需要具备强大的自我反思与学习新知识的能力,不仅能够根据外界的反馈进行反思,纠正历史错误与完善行动决策;同时,对于未出现过的知识,智能代理也要能在没有提示或仅有少量提示的情况下按照指令完成任务。正如人类大脑依赖记忆系统以回溯和利用既有经验来制定策略一样,智能代理同样需要依赖特定的记忆机制,实现对世界知识、社会认知、历史交互等的记忆。与人类不同的是,大语言模型具有非特异性与参数不变性,其内部记忆可以简单地理解为一个知识库,既没有对自我的独立认知,也无法记录过去的交互经历。因此,智能代理的记忆模块还需要额外的外置记忆,用于存放自己的身份信息与过去经历的状态信息,这使智能代理可以作为一个独立的个体存在。(1)世界知识的记忆:大语言模型经过大量数据的训练,已经具备了较为完备的世界知识,并通过编码等方式将知识隐式存储在模型的参数中,此处可以近似理解为一个知识库。利用强大的世界知识,智能代理能够高质量地完成多领域的任务。(2)社会属性的记忆:社会认知主要包括对自我社会身份的认知、过去的社会交互经历等。除了静态的知识记忆,智能代理还拥有动态的社会记忆,主要依靠外置记忆来实现。这种与人类相似的社会记忆允许智能代理结合自己的社会身份,有效地利用过去的经验与外界完成交互。与人类使用工具一样,智能代理也可能需要借助外部工具的帮助来完成某项任务。工具调用模块进一步提升了智能代理的能力,一方面可以缓解智能代理的记忆负担,提高专业能力,另一方面还能够增强智能代理的可解释性与鲁棒性,提高决策的可信度,也能更好地应对对抗攻击。由于大语言模型已经在预训练过程中积累了丰富的世界知识,能够合理地分解、处理用户指令,因此可以降低工具的使用门槛,充分释放智能代理的潜力。与人类查看工具说明书和观察他人使用工具的方式类似,智能代理能够通过零样本或少样本提示,或者通过人类的反馈来学习如何选择及调用工具。工具并不局限于特定的环境,而是侧重于能够扩展语言模型功能的接口。得益于工具的使用,模型的输出不再局限于纯文本,智能代理的行动空间也随之扩展到多模态。然而,现有的工具多是为人类而设计的,对智能代理来说可能不是最优的选择。因此,未来可能需要专门为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论