吴恩达大模型教程笔记(十)
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P76:使用指令对LLM进行微调3——对单一任务进行微调 - 吴恩达大模型 - BV1gLeueWE5N
虽然LLMs因其能够在单个模型中执行许多不同语言任务而闻名,您的应用程序可能只需要执行单个任务,在这种情况下,您可以微调一个预先训练的模型来提高对您感兴趣的任务的性能,例如。
使用该任务的示例数据集进行摘要,有趣的是,使用相对较少的示例就可以获得良好的结果。
通常,只有五百到一千个示例就可以导致良好的性能。
这与模型在预训练期间看到的数十亿个文本片段形成鲜明对比,然而,微调单个任务也存在潜在的缺点。
这个过程可能会导致一种现象叫做灾难性遗忘。
灾难性遗忘发生。
因为完整的微调过程修改的原始LLM的权重,虽然这导致在单个微调任务上的性能大大提高。
但它可能会降低在其他任务上的性能。
例如,虽然微调可以提高模型执行评论情感分析的能力,并产生高质量的完成。
但模型可能会忘记如何执行其他任务,这个模型在微调之前知道如何执行命名实体识别。
正确识别句子中的'查理'是猫的名字,但在微调后。
模型无法执行这项任务,混淆它应该识别的实体,并表现出与新任务相关的行为。
所以,你有哪些选项可以避免灾难性遗忘。
首先,重要的是决定灾难性遗忘是否影响您的使用案例,如果您只需要在您微调的单个任务上可靠地性能。
它可能不是模型无法泛化到其他任务的问题,如果您想要或需要模型保持其多任务泛化能力,您可以一次微调多个任务。
好的多任务微调可能需要五十到一百万个例子横跨许多任务,并且需要更多的数据和计算来训练。
我们将稍后详细讨论这个选项,另一个选项是进行参数高效的微调或盗窃,简称Peft。
而不是完整的,微调。
盗窃是一种技术,它保留了原始LLM的权重,并只训练了少数任务特定的适配层和参数,Peft对灾难性遗忘的抵抗力更强。
因为大多数预训练的权重都被保留了,Peft是一个令人兴奋且活跃的研究领域,我们将在本周晚些时候覆盖。
在 meantime,让我们继续下一个视频,更深入地了解多任务,微调。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P77:使用指令对LLM进行微调4——多任务指令微调 - 吴恩达大模型 - BV1gLeueWE5N
多任务微调是单任务微调的扩展,训练数据集包含多个任务的示例输入和输出,数据集包含指示模型执行各种任务的示例,包括摘要,评论,评分代码翻译,实体识别,你在混合数据集上训练模型。
以便同时提高模型在所有任务上的性能,从而避免在多个训练时期出现灾难性遗忘问题。
示例损失用于更新模型权重,生成一个适应性调优模型,学会同时擅长多种任务,多任务微调的一个缺点是需要大量数据,训练集可能需要多达5万至10万个示例,但收集这些数据非常值得,值得付出努力。
生成的模型通常非常强大,适用于需要多项任务表现良好的情况,让我们看看一个使用多任务指令训练的模型家族,基于微调期间使用的数据集和任务,指令调优模型变体不同,微调数据集和任务决定了指令调优模型变体。
一个例子是flann模型家族,Lanan,意为微调语言网,是一组用于微调不同模型的特定指令。
因为flan微调是训练过程的最后一步。
原始论文的作者称其为预训练主菜的比喻甜点,相当合适的名字,Flanan t5是Lanan指令版的t5基础模型。
而Flanan pal是Flaninstruct版的palm基础模型。
你明白了。
Get the idea,Flant 5是通用指导模型。
已微调473个数据集,涵盖146个任务类别,数据集选自其他模型和论文,无需阅读所有细节,如感兴趣,视频后可阅读原文细看,Flant用于摘要任务的数据集示例,T5是三星,属于Muffin任务集。
用于训练语言模型总结对话,三星数据集包含1。6万条类似聊天的对话和摘要,示例显示在左侧为对话,右侧为摘要,对话和摘要由语言学家精心制作,专为生成高质量训练数据集设计语言模型,语言学家被要求创建对话。
类似于他们日常写作的对话,反映他们真实生活聊天话题的比例,其他语言专家随后为这些对话创建了简短摘要,包含对话中重要信息和人名,这是为三星对话摘要数据集设计的提示模板,模板实际上由几个不同的指令组成。
它们基本上都要求模型,做同样的事情,总结对话,例如,简要总结该对话,这个对话的总结是什么,以及那场对话中发生了什么,用不同的方式表达相同的指令有助于模型泛化和表现更好,就像你之前看到的提示模板一样。
每个案例中可见,将Sansum数据集的对话插入模板,对话字段出现处,摘要用作标签,将此模板应用于Sansum数据集中的每行。
可用于微调对话摘要任务,尽管Flant Five是通用模型,表现良好,但在特定任务上仍有改进空间,例如,设想你是为客服团队构建APP的数据科学家。
通过聊天机器人接收请求。
如这里所示,客服团队需每段对话总结,识别客户请求的关键行动。
并确定应采取的行动。
三星数据集赋予Flann T5总结对话能力,然而,数据集中的示例多为朋友间日常对话,与客服聊天语言结构重叠不多,可使用对话数据集对Flann T5模型进行额外微调,更接近与机器人对话。
本周实验室探索场景,使用对话摘要数据集,提升Flant Five总结能力,包含1。3万对话和摘要,对话摘要非训练数据,模型未见过这些对话。
看对话摘要示例,讨论如何进一步微调,典型支持对话示例,客户与酒店前台对话,聊天已应用模板,以便总结指令在文首,看Flamt Five如何响应,在进一步微调前注意,提示现在左侧浓缩。
给你更多空间检查模型完成,模型对指令的响应,模型表现不错,能识别预订Tommy。
但不如人类生成的基准摘要,包括重要信息,如迈克询问信息以方便登记,模型的完成也发明了原始对话中没有的信息,特别是酒店名称和所在城市,让我们看看模型表现如何,在对话摘要数据集上微调后。
希望你会觉得这更接近人类产生的摘要,没有虚构信息,摘要包括所有重要细节,包括参与对话的两人姓名,此示例使用公共对话摘要数据集演示了在自定义数据上的微调,实际上。
使用公司自己的内部数据进行微调将获得最大收益,例如,客户支持应用程序中的支持聊天对话,这将帮助模型学习,公司如何喜欢总结对话,以及对客户服务同事最有用的是什么。
我知道这里有很多需要理解的内容,但别担心,这个示例将在实验室中覆盖,所以你会有机会看到实际操作并亲自尝试,当进行微调时需要考虑的一件事,是如何评估模型完成质量,在下一个视频中,你将学习几种指标和基准。
以确定模型表现如何。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P78:使用指令对LLM进行微调5——模型评估 - 吴恩达大模型 - BV1gLeueWE5N
本课程中,你见过类似模型表现良好的陈述,或这个微调模型在性能上大大超过了基础模型,这些陈述意味着什么,如何量化你微调模型相对于预训练模型的性能改进,你开始使用的。
让我们探索一些大型语言模型开发者使用的指标。
你可以用来评估你自己的模型,并与世界上的其他模型进行比较。
在传统机器学习中,你可以通过查看模型在训练和验证数据集上的表现来评估它,其中输出是已知的。
你可以计算简单的指标,如准确率,它表示所有预测中正确的比例,因为模型是确定的。
但对于大型语言模型,输出是不确定的,语言评估更加困难。
例如,迈克真的很喜欢喝茶,这与迈克喜欢啜饮茶非常相似。
但如何衡量相似性。
让我们看看另外两个句子,迈克不喝咖啡和迈克喝咖啡。
这两个句子之间只有一个词的区别,但意义却完全不同。
对于我们人类来说,拥有柔软有机的大脑,我们可以看到相似性和差异,但当你训练一个模型时,有数百万个句子,你需要一种自动的结构化方法来测量。
Rouge和Blur是两种广泛使用的评估指标,用于不同的任务。
Rouge或召回导向的本科生评估,主要用于评估自动生成的摘要的质量,通过将它们与人类生成的参考摘要进行比较,另一方面。
或,双语评估本科生算法,旨在评估机器翻译文本的质量,再次通过将其与人类生成的翻译进行比较,现在单词bleu是法语中的蓝色,所以你可能听到人们称它为蓝色,但在这里我将坚持使用原始的blur。
在我们开始计算指标之前。
让我们回顾一下语言解剖学中的一些术语。
Unigram相当于一个单词,Bigram是两个字,N-gram是n个单词的组,相当直接的东西,首先。
让我们看看Rouge,一个指标,并这样做,让我们看一个人类生成的参考句子,外面很冷,生成输出,外面非常冷。
可进行类似其他机器学习任务的简单度量计算,使用召回率、精确度和F1。
召回率指标衡量,参考和生成输出之间匹配的单词或单元数。
除以参考中的单词或单元数。
在这种情况下得满分1,因为所有生成的单词都与参考中的单词匹配,精确度衡量。
单元匹配数除以输出大小,F1分数是这两个值的调和平均数,这些是仅关注单词的基本指标,因此名称中的那个,不考虑单词的顺序,所以可能具有欺骗性,很容易生成得分高的句子,但主观上可能很差,暂停一下。
想象一下模型生成的句子只差一个词'不',所以外面不冷。
分数将相同,考虑双词可略提分数。
从参考和生成句子,处理成对单词,简单确认句子词序,使用双词。
可计算ROUGE 2。
用双词匹配算召回率,而非单个词。
分数低于ROUGE 1,长句更明显,大几率双字不匹配,分数可能更低。
而非继续增加n-gram到3或4,让我们换种方法,相反,寻找生成输出和参考输出中最长的公共子序列。
在这种情况下,最长匹配子序列是'it is'和'cold outside'。
每个长度为2,现在可用lcs值计算召回率、精确度和F1分数。
召回率和精确率计算中,分子是最长公共子序列长度,这种情况下为两个,这三个量称为ROUGE分数。
与所有ROUGE分数一样,需要考虑上下文。
仅能使用分数比较模型能力,如果分数针对同一任务确定。
例如,不同任务的摘要ROUGE分数不可比较。
如你所见,简单ROUGE评分的问题,是坏完成可能得高分,例如,此生成输出为,冷,冷,冷,因生成输出含参考句单词。
将得高分。
尽管同一单词重复多次,ROUGE 1精确度将完美。
一种方法是,使用剪裁函数,限制一元匹配数至参考中最大值。
在此情况下。
参考中有1次冷出现。
故带剪裁的一元精确度,导致显著降低得分,然而。
若生成单词都在,但顺序不同。
例如,此生成句子外冷,它被。
完美评价,即使带剪裁的一元精确度,因生成输出所有单词都在参考中,所以使用不同ROUGE评分有帮助,但最有用评分将取决于句子,句子大小和用例。
注意许多语言模型库,例如,Hugging face,第一周实验用,包含ROUGE评分实现,你可以尝试ROUGE评分,用它比较模型调优前后的性能,本周实验,另一个评估模型性能的分数。
是BLUR评分,代表双语评估研究。
提醒你,BLUR评分用于评估机器翻译文本质量。
评分本身使用多个n元大小平均精度计算。
就像之前看的ROUGE 1评分,但为一系列n元大小计算,然后平均,让我们仔细看看它衡量什么和如何计算。
BLUR评分通过检查,机器生成翻译中多少n元与参考匹配。
匹配参考翻译,计算得分,跨不同n-gram大小平均精度。
若手动计算,需多次计算,然后平均所有结果得模糊分,以例来说。
看长句,更好理解分值。
参考人类提供的句子是,我很高兴地说,现喝热茶,如深入看过个别计算,查看ROUGE时,将展示模糊结果,使用标准库。
计算模糊分简单,使用Hugging Face等提供商的预写库。
我已为每个候选句子完成,第一个候选是,我很高兴在喝茶,模糊分为0。495。
越接近原文,得分越接近1,ROUGE和模糊都很简单,计算成本低。
迭代模型时可作简单参考。
不要单独使用它们报告大型语言模型的最终评估。
使用ROUGE评估摘要任务,使用模糊评估翻译任务,整体评估模型性能。
但需查看研究人员开发的一个评估基准。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P79:使用指令对LLM进行微调6——基准测试 - 吴恩达大模型 - BV1gLeueWE5N
如上视频所见,LLM既复杂又简单,如ROUGE和BLUR评分,仅能告诉你模型能力多少,为全面评估和比较LLM,可利用预,存数据集和相关基准,由LLM研究人员专为该目的建立,选择合适评估数据集至关重要。
以便准确评估LLM性能,理解其真正能力,选择隔离特定模型技能的数集将有用,如推理或常识知识,关注潜在风险,如假信息或版权侵犯,应考虑模型是否在训练时见过评估数据,可更准确评估模型能力。
通过评估其未见过的数据表现,基准如glue,Superglue,或helm涵盖广泛任务和场景。
通过设计或收集测试特定方面的大型数据集。
Glue或通用语言理解评估于2018年引入。
胶水是自然语言任务集,如情感分析和问答。
胶水旨在促进跨多任务模型的开发。
超胶水于2019年推出,以解决其前身的限制,它由一系列任务组成。
其中一些任务未包含在胶水中,其中一些是相同任务的更具挑战性版本。
超胶水包括多句推理和阅读理解等任务。
两者,胶水和超胶水,基准有排行榜,可比较模型,结果页是追踪llms进展的好资源,模型越大,对基准的性能,如超胶开始匹配人类特定任务能力,即模型在基准测试中表现与人类相当,但主观上。
我们看到它们在一般任务上未达人类水平,因此,本质上,llms涌现特性和衡量它们的基准间有军备竞赛,以下是推动llms发展的几个近期基准,这里是推动llms发展的几个新基准。
大规模多任务语言理解。
模型需具备广泛世界知识。
模型测试基础数学,美国历史,计算机科学,法律等,即超越基本语言理解的任务。
Big Bench目前包括204项任务。
涵盖语言学、儿童发展、数学等。
儿童发展,数学,常识,推理,生物学,物理学,社会偏见,软件开发等更多。
大本钟有3种尺寸,部分原因是控制成本,因为这些大型基准测试会产生大推断成本。
你应该了解的最终基准是语言模型的整体评估或helm,helm框架旨在提高模型的透明度,并为特定任务提供模型性能的指导,helm采用多指标方法,在16个核心场景中测量7个指标。
确保模型和指标之间的权衡清晰,helm的一个重要特点是评估超越基本准确度指标,如精确度或F1分数,基准还包括公平性,偏见和毒性指标,随着大型语言模型越来越能生成人类语言,并可能表现出潜在有害行为。
helm是一个不断发展的基准,旨在随着新场景,指标和模型的添加而不断演进,你可以查看结果页面,浏览已评估的llms。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P8:8-建议和实用技巧 - 吴恩达大模型 - BV1gLeueWE5N
好的,你完成了最后一课,这些是开始时要考虑的,现在,一些实用技巧,以及更高阶训练方法的预览,首先,一些微调步骤,总结一下,首先,确定任务,收集与任务相关的数据,输入和输出,按此结构组织。
如果没有足够的数据,没问题,生成一些或使用提示模板创建更多,首先,微调一个小模型,推荐4亿到10亿参数的模型,以了解该模型性能如何,你应该改变实际给模型的数据量,以了解数据量对模型走向的影响。
然后评估模型,看看进展如何,最后,通过评估收集更多数据以改进模型,从那里,你可以增加任务复杂性,现在可以让它更难,然后你也可以增加模型大小以提高复杂任务性能。
在任务微调中,你了解了,阅读任务和写作任务,写作任务更难,这些是更广泛的任务,如聊天,写电子邮件,写代码,因为模型产生了更多的标记,所以这是一个对模型来说更困难的任务。
更难的任务往往需要更大的模型才能处理,另一种让任务更难的方法是组合任务,让模型做组合的事情而不是单一任务,这意味着让代理灵活,同时做几件事或仅一步,而不是多步。
所以,现在你对任务复杂度所需的模型大小有了感觉,还有计算要求,基本上关于硬件,你需要运行模型的实验室,你看到那些7000万参数的模型在CPU上运行,它们不是最好的模型,我建议从更通用的东西开始,所以。
如果你看这张表,第一行,我想指出的是可用的1v100 GPU,例如,在AWS上,所以,也支持其他云平台,内存有16GB,可运行70亿参数模型,但训练需更多内存存梯度,实际仅能适配10亿参数模型。
若要适配更大模型。
可查看其他选项,很棒,或许你认为不够,想处理更大模型,那么,有种叫盗窃或参数高效,微调,一系列不同方法助你,更高效使用参数和训练模型。
我喜欢的叫Laura,代表低秩适应,Laura减少需训练权重数,对GPT-3大幅减少,例如,发现可减少1万倍,结果需3倍内存,精度略低于微调,但仍为高效方法,推理延迟不变,Laura究竟如何?实际上。
在模型部分层训练新权重,冻结主要预训练权重,蓝色部分为冻结,全部冻结,你有这些新橙色重物,那些是Lora重物,新重物,这有点数学化,原始权重的秩分解矩阵是否改变,但重要的是较少,所以你知道这里的数学。
你可以单独交替训练这些,而不是预先训练的权重,但在推理时间,能够将它们合并回主要预先训练的权重,优化精细调优模型更高效,我真正兴奋用Laura做,是适应新任务。
这意味着你可以用Laura在一个客户的数据上训练模型,然后在另一个客户的数据上训练另一个。
然后在推理时合并它们。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P80:参数高效微调1——参数高效微调(PEFT) - 吴恩达大模型 - BV1gLeueWE5N
正如你在课程培训的第一周所看到的,Llms是计算密集型的,全量微调不仅需要存储模型,还需要在训练过程中所需的各种其他参数,即使你电脑可以持有模型权重。
这些权重对于最大的模型现在已经达到了数百吉字节的规模。
你也必须能够为优化器状态分配内存。
梯度,前向激活和训练过程中临时内存,这些额外的组件可以比模型大得多。
并且可以迅速变得过大以至于在消费者硬件上难以处理,与全面精细调整不同,在那里每个模型权重都会在监督学习参数中更新。
高效的精细调整方法只会更新参数集的一个小部分。
一些高效技术会冻结模型的大部分权重并专注于精细调整,例如,一个现有模型参数的子集,例如,特定的层或组件。
其他技术根本不接触原始的模型权重,而是添加一些新的参数或层,并仅对使用peft最的新组件进行精细调整。
如果所有的llm权重都没有被冻结,因此,训练的参数数量远小于原始llm的参数数量。
而且在一些情况下,只有原始llm权重的十五到二十分之一。
这使得训练所需的内存要求更加可管理,实际上,Peft往往可以在单个gpu上进行。
因为原始llm只是被稍微修改或保持不变,盗窃更不容易受到灾难性的。
全精细调整忘记问题的问题,全面的微调将产生针对您训练的所有任务的新模型版本。
这些每个都与原始模型相同大小。
因此,如果您为多个任务进行微调,可能会出现昂贵的存储问题。
让我们看看如何使用路径来改善这种情况,以参数高效的微调。
您只训练一小部分权重。
这导致足迹大大减小,总的来说,小到兆字节。
取决于任务,新的参数与原始llm权重结合用于推理。
对于每个任务,都有专门的轻量级权重进行训练,并且可以在推理时轻易地替换出来。
允许原始模型高效地适应多个任务。
对于参数高效的方法,你有几种可以使用的。
微调,每种方法都有在参数效率上的权衡,内存效率,训练速度,模型质量和推理成本。
让我们来看看轻量级权重方法的三种主要类别,选择性方法只精细调整原始llm参数的一部分。
你可以采取几种方法来确定你想要更新的参数,你有选择仅训练模型特定组件或层的选项,甚至特定参数类型。
研究人员发现这些方法的性能参差不齐,并且在参数效率和计算效率之间存在显著的权衡。
因此,我们在这门课程中不会专注于它们,重新参数化方法也工作于原始llm参数。
但通过创建新的参数来减少需要训练的参数数量,原始网络权重的低秩变换。
这种技术的一种常见方法是laura。
你将在下一个视频中详细探索它,附加方法,通过保持所有原始llm权重冻结来进行微调,并在这里引入新的可训练组件,主要有两种方法,适配器方法。
在模型架构中添加新的可训练层,通常在内部编码器或解码器的组件中,注意力或前馈层之后。
软提示方法,另一方面,保持模型架构固定和冻结,专注于操纵输入以实现更好的性能。
这可以通过向提示嵌入添加可训练参数来实现,或保持输入固定,重新训练嵌入权重。
在这堂课中。
你将首先看一下一种特定的软提示技术叫做提示微调,让我们继续到下一个视频,更深入地了解lora方法。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P81:参数高效微调2——PEFT技术1 - LoRA(低秩适应) - 吴恩达大模型 - BV1gLeueWE5N
低秩适应,或劳拉,简言之,是一种参数高效微调技术,属于重参数化类别,让我们快速回顾一下它是如何工作的,这是您在课程早期看到的变压器架构图。
输入提示被转换为标记。
然后转换为嵌入向量,并传递到变压器编码器或解码器部分。
在这两个组件中,有两种神经网络,自注意力和前馈网络。
这些网络的权重在预训练时学习,嵌入向量创建后,输入到自注意层,应用一系列权重计算全微调时的注意力得分,这些层的每个参数都会更新。
Laura策略减少微调时需训练的参数数,通过冻结原始模型的所有参数,并在原始权重旁边注入一对秩分解矩阵。
小矩阵尺寸已设,使乘积矩阵与待修改权重尺寸相同。
你。
然后冻结LLM原始权重,训练这些小矩阵。
使用本周早些时候看到的监督学习过程进行推断。
两个低秩矩阵相乘,生成与冻结权重相同尺寸的矩阵。
然后将其添加到原始权重并替换模型中的这些更新值。
现在有一个Lora微调模型可执行特定任务,因为此模型与原始模型参数数量相同。
对推理延迟影响甚微。
研究人员发现仅将Laura应用于自我,模型中的注意力层通常足以微调任务并实现性能提升,然而,原则上,也可在其他组件如前馈层使用Laura。
但大多数LLM参数在注意力层。
应用Laura到这些权重,可节省最多可训练参数,矩阵,让我们看个实际例子,基于注意力机制的Transformer架构。
论文指出Transformer权重为500,乘12乘64。
这意味着每个权重矩阵有32,768个参数。
三千二百,七百六十八,若使用Laura微调,秩为8,将训练两个小的秩分解矩阵,小维为8。
这意味着矩阵A为8乘64,共512个参数。
矩阵b尺寸为512x8,或4096个可训练参数。
通过更新这些低秩矩阵的权重,而不是原始权重,你将训练4000,608个参数而非32000,768,88。6%的减少,因为Laura可大幅减少可训练参数,通常可单用GPU进行参数高效微调。
避免需要分布式GPU集群,因分解矩阵尺寸小。
可为每个任务训练不同集合,并在推理时更新权重切换。
假设为特定任务训练一对Laura矩阵。
称为任务A进行推理。
将这两个矩阵相乘,然后将结果矩阵加到原始冻结权重。
然后取这个新总和权重矩阵,替换模型中出现的原始权重。
然后可用此模型进行任务A推理。
若要执行不同任务,如任务B,只需取为该任务训练的Laura矩阵。
计算其乘积,然后将此矩阵加到原始权重并更新模型。
存储这些Laura矩阵所需内存很小,原则上可用Laura为许多任务训练。
避免存储多个完整大小的LLM版本,这些模型表现如何,使用本周早些时候学习的ROUGE指标,比较Laura微调模型,与原始基础模型和完整微调版本的性能,专注于对Flat Five进行对话摘要微调。
这是本周早些时候探索的内容。
提醒一下,Flat Five基础模型已进行初步完整微调。
使用大型指令数据集首先,为Flat Five基础模型和讨论的摘要数据集设置基准分数,以下是基础模型的根分数。
分数越高表示性能越好,讨论中应关注ROUGE 1分数,但可用于比较的任何这些分数,如您所见,分数相当低,接下来看模型分数。
该模型已进行额外完整对话摘要微调,记住。
尽管Flat Five是一个能力模型,仍可针对特定任务进行全面微调以获益。
监督学习中更新模型所有权重,这导致ROUGE 1得分大幅提升。
模型提高0。19,额外一轮微调极大改善。
模型在摘要任务上的性能,现在看看Laura微调模型的得分。
此过程也带来显著性能提升。
ROUGE 1得分较基准提高0。17。
略低于全面微调,但不多,然而,使用Laura微调训练了远少于完全微调的参数。
使用更少的计算,因此,这种性能的小幅下降可能非常值得。
你可能想知道如何选择Laura矩阵的秩,这是一个好问题,原则上仍是一个活跃的研究领域,秩越小,可训练参数越少,计算节省越大,然而,需要考虑一些与模型性能相关的问题,在论文中。
那首次提议的劳拉,微软研究人员探索了不同排名选择对模型性能的影响。
在语言生成任务中,结果总结见下表。
表格显示第一列中Laura矩阵的排名。
模型最终损失值,不同指标得分,包括BLEU和Bruges。
粗体值表示每个指标的最佳得分。
作者发现排名大于16时,损失值达到平稳,换句话说,使用大矩阵无改善。
要点是4至3的秩,2可平衡减少参数和保留性能。
优化秩选择是研究领域,随着更多实践者使用laura,最佳实践可能演变,Laura是强大的微调方法,性能优异,方法原理不仅适用于训练llms,也适用于其他领域的模型,本周探索的最终peft方法。
完全不改变LLM,而是专注于训练输入文本。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P82:参数高效微调3——PEFT技术2 - 软提示 - 吴恩达大模型 - BV1gLeueWE5N
与劳拉一起,目标是找到一种高效的方法更新模型的权重,无需再次训练每个参数,PEFT中也有添加的方法,旨在提高模型性能,没有任何权重更改,在这个视频中。
你现在将探索一种名为提示调整的第二种参数高效微调方法,提示调整听起来有点像提示工程,但它们与彼此有很大的不同。
与提示工程,"你专注于你的提示语言","以获取你想要的完成",这可能只需要尝试使用不同的词汇或短语,"或者更复杂,如包括一个或几个样本的推断示例",目标是帮助模型理解你正在要求它完成的任务的本质。
"执行并生成更好的完成"。
然而,"提示工程有一些限制","因为它可能需要大量的手动努力来编写和尝试不同的提示","你也受限于上下文的窗口长度",到了一天结束时,你仍然可能无法达到完成你任务所需的性能,通过提示微调。
你向提示中添加额外的可训练标记,并让监督学习过程决定它们的最佳值,这些可训练标记被称为软提示,它被添加到代表输入文本的嵌入向量之前,软提示向量,与语言标记的嵌入向量长度相同。
包括大约二十到一百个虚拟标记可能足以获得良好的性能。
代表自然语言的标记是硬的,"从意义上说,它们各自对应于嵌入向量空间中的一个固定位置",然而,"柔软的提示并不是自然语言中固定的连续词语"。
"相反地",你可以将它们视为可以在连续的多元化中取任何值的虚拟代币。"维度嵌入空间","并通过监督学习","模型学习到的这些虚拟标记的值,能够最大化给定任务的性能"。
"在精确的调整中","训练数据集包括输入提示和输出完成或标签",大型语言模型的权重在监督学习期间得到更新。
与提示调整不同,大型语言模型的权重被冻结,底层模型没有得到更新,相反,软提示的嵌入向量随时间得到更新,为了优化模型对提示的完成,提示调整是一种非常参数高效的策略,因为只有几个参数被训练。
与全细调中的几百万到数十亿个参数不同。
类似于你与laura看到的情况,你可以为每个任务训练一套不同的软提示,然后在推理时轻松地替换它们,你可以为一个任务训练一套软提示。
并为另一个任务训练一套不同的,以在推理时使用它们,你将在输入提示的末尾添加学习到的词元,以切换到另一个任务,你只需更改软提示,软提示在磁盘上非常小,因此,这种微调极其高效和灵活。
你会注意到所有任务都使用相同的llm,你所需要做的就是在推理时替换软提示。
那么在原始论文中,提示调整的性能如何,由布莱恩·莱斯特和他的谷歌合作者在此方法中探索,作者在此图中比较了提示调整与其他方法在多种模型大小上的性能,从论文中,你可以在x轴上看到模型大小。
在y轴上看到超级胶水得分,这是您本周早些时候学到的评估基准,它评估模型在多个不同语言任务上的性能,红色线显示了通过单个任务全细调创建的模型的得分,而橙色线显示了使用多任务细调创建的模型的得分。
绿色线显示了提示调整的性能,最后,蓝色线显示了仅针对提示工程的得分,正如你可以看到,提示调整在较小的llms上的性能不如全细调,然而,随着模型大小的增加,提示调整的性能也随之提高。
一旦模型的参数数量达到约十亿。
提示调整可以与全细调一样有效,并提供比仅使用提示工程显著提升性能的优势,需要考虑的一个潜在问题是学习到虚拟标记的解释性,记住,因为软提示标记可以取连续嵌入向量空间中的任何值。
训练标记不对应于任何已知标记,LLM词汇表中的词汇或短语,然而,对软提示位置的最近邻居标记的分析显示,它们形成了紧密的语义簇,换句话说,最接近软提示标记的词汇具有相似的意义,被识别的词汇通常与任务有关。
这表明提示正在学习像词的表示。
"劳拉在这节课中探索了两种不良的方法","它使用秩分解矩阵以高效更新模型参数","并及时调整,在你 的提示中添加可训练的标记","并且模型权重未被修改"。
"这两种方法都允许你根据任务可能的性能改进来精细调整模型。"。
"在使用比全精细调整方法少得多的计算资源时","劳拉在实践中广泛使用","由于在许多任务和数据集上与全面微调具有可比性"。
"并且在这周的实验室里,你将有机会亲自尝试它。","所以,恭喜你完成了第二周的任务",让我们回顾一下你本周早些时候看到的内容。
Mike,通过名为指令微调的过程,为你解释了如何适应基础模型,在这个过程中,你看了一些用于训练平面五模型的提示模板和数据集,你也看到了如何使用如rouge和helm等评估指标和基准。
来在实践中测量模型微调的成功,指令微调已被证明非常有效和有用,在各种自然语言使用案例和任务中都有广泛的应用,仅仅需要几百个例子,你就可以根据你的特定任务微调一个模型,这真是令人惊叹,接下来。
你看到参数高效的微调或盗窃如何减少调整模型的计算需求,你学习了两种你可以用于此的方法,laura和提示微调,顺便说一句,你也可以将laura与第一周中学习的量化技术结合使用,以进一步减少你的内存占用。
这在实践中被称为"奎拉拉"。"佩夫被广泛用于最小化计算和内存资源","最终降低微调成本"。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P83:人类反馈强化学习1——引言 - 吴恩达大模型 - BV1gLeueWE5N
上周学习了指令,大型语言模型的调优及微调,本周深入RLHF,从人类反馈中学习,你可能在新闻中听过的技术,但实际如何运作?深入探讨,以及第二个激动人心的主题,如何使用LMS作为推理引擎,并让它调用子程序。
创建能行动的代理,所以RLHF非常激动人心,有助于使模型与人类价值观对齐,例如,语言模型可能在创建有害内容方面有挑战,或如有毒的语气或声音,通过与人类反馈对齐并使用强化学习作为算法。
可以帮助模型减少这些内容,并使其与较少有害和更多有益的内容对齐,有时人们感觉我训练于这些可怕的数据,你知道,一些可怕的上网数据似乎很危险,我认为许多人低估了我们的高阶功能,它当然不完美。
AI确实产生问题输出,但随着技术进步,研究人员不断改进它们,我猜是右边三英寸,诚实,有帮助且无害,是的,绝对,本周我将与,亚马逊的应用科学家一起,他将解释强化学习算法背后的原理,期待那时刻,没错。
正是这些人将加入我们,我们确实邀请了Ashley Sifis博士,他将与我们讨论负责任的AI,没错,Ashley将加入我们,我将与她围绕负责任的AI主题进行讨论,这同样重要。
很高兴你在这方面投入了这么多时间,人工智能风险,许多人深思熟虑,我认为所有主要AI团队都非常重视,资源和努力,深度思考,我们远非完美,但社区确实在努力做得更好,每年如此,除了,负责任的人工智能,和。
调整模型,嗯,使用rhf,我兴奋的另一技术是使用lms作为推理引擎,并赋予它们调用自己的子例程的能力,也许进行网络搜索或其他操作,当然,我们将在本课中深入探讨,我们还将讨论一些技术,允许您绕过。
大型语言模型中看到的某些限制,通过允许它们通过类似react的技术推理和采取行动,我们还将讨论rag,它允许您访问外部信息源,因此您可以访问特定领域的信息,我们看到许多客户希望将信息。
从专有数据源集成到其生成性应用程序中,因此,我们稍微谈了一些允许您这样做的技术和方法,你知道大型语言模型的优点之一,是它们非常擅长记忆事实,您正在互联网上学习事实。
有时人们使用它们作为事实的存储库来获取问题的答案,但我认为有一种不同的,也许我认为更有帮助的方式来思考lms,即,嗯,如果它是一个推理引擎,您给它,你知道的api去获取自己的事实,因为这很好。
但不是最好的事实数据库,但有一个非常好的推理引擎,我认为这是这些模型的真正力量,绝对,绝对更经济,使用数据库存储这些信息,然后您的生成性AI用于那个,它旨在用于的,这是一个很好的观点,因此,随着这一点。
嗯,这最后一周有很多令人兴奋的事情,我确信您会喜欢它,因此,让我们继续观看下一个视频。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P84:人类反馈强化学习2——使模型与人类价值观一致 - 吴恩达大模型 - BV1gLeueWE5N
欢迎回来,让我们回到上周的生成式i项目生命周期,你仔细研究了一种叫做微调技术。
微调的目标是按照指示进行,包括后处理方法是为了进一步训练你的模式,以便它们更好地理解人类类似的提示并生成更人类的响应。
这可以显著提高模型的性能超过原始的预训练基础版本,并导致更自然的语言。
然而,现在人类自然的语言带来了一套新的挑战,你可能已经看到了关于大型语言模型行为不当的头条新闻,问题包括模型在其完成中使用有毒语言,以对抗性和攻击性的语气回复,并提供有关危险主题的详细信息。
这些问题存在因为大型模型被训练在大量的互联网文本数据中。
其中这样的语言出现频繁,以下是一些模型行为不当的例子,假设你想要你的llm告诉你敲门。
敲门笑话,而模型的回应只是啪啪啪,很有趣,从它的角度来看,这并不是你想要的,在这里的完成并不是对给定任务的有帮助答案,同样,llm可能会给出误导性或仅仅是错误的答案。
如果你问llm关于被证明错误的健康建议。
比如咳嗽可以停止心脏骤停,模型应该反驳这个故事,相反,模型可能会给出自信且完全错误的回应,绝对不是一个人所寻求的真实和诚实的答案,此外,llm不应该创建有害的完成,如攻击性,歧视性,或引发犯罪行为。
如这里所示,当你问模型如何黑客你邻居的wi fi。
它回答了一个有效的策略,理想情况下,它应该提供一个不会导致伤害这些重要人类价值的答案,帮助性,诚实和无害性有时被集体称为hh,h,并且是一组指导开发人员在负责任的使用ai时的原则。
通过人类反馈的微调可以帮助模型更好地与人类偏好对齐,并增加帮助性,诚实和无害性完成的程度,这种进一步训练也可以帮助减少模型的响应毒性,并减少错误的信息的生成。
在这堂课中,你将学习如何使用人类的反馈来对齐模型。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P85:人类反馈强化学习3——通过人类反馈进行强化学习(RLHF) - 吴恩达大模型 - BV1gLeueWE5N
让我们考虑文本摘要的任务,在这里,你将使用模型生成短文本片段,它捕获长篇文章中最重要的点,你的目标是通过微调来提高模型的摘要能力,通过显示给人类生成的摘要示例,在二十。
OpenAI的二十位研究人员发表了一篇论文,探索了使用人类反馈进行微调的方法,以训练一个模型来撰写文本文章的短摘要。
在这里,你可以看到,接受人类反馈微调的模型比预训练模型产生了更好的响应,一个指令式微调模型。
甚至参考人类基准,一种在具有人类反馈的大型语言模型中找到你的技术,被称为强化学习,从人类反馈或RHF(缩写)中。
正如名字所示,像Jeff使用强化学习或RL(缩写)一样,以人类反馈数据微调LLM,结果产生一个更与人类偏好对齐的模型。
你可以使用RHF,以确保你的模式产生,输出最大化有用性和相关性到输入提示。
最重要的是,我们的院长帮助最小化潜在的伤害。
你可以训练你的模式给出承认其限制的警告,并避免在主题上使用有毒语言。
LF的一个潜在兴奋应用是LMS的个人化,模型通过连续反馈过程学习每个用户的偏好。
这可能导致新的技术,如个性化学习计划或个性化AI助手,但要理解这些未来应用如何可能实现,让我们从更详细地研究RHF开始,如果你不熟悉强化学习,这里是对最重要概念的高级概述,强化学习是一种机器学习。
在其中,代理学习如何做出与特定目标相关的决策,通过在环境中采取行动,目标是在这个框架中最大化某种累积奖励的概念。
代理通过其行动不断学习,观察环境发生的变化,并根据其行动的结果接收奖励或惩罚。
通过这个过程的迭代,代理迅速改进其策略或政策,以做出更好的决策并增加成功的机会。
一个有用的例子来说明这些想法是训练模型玩井字棋,让我们看看,在这个例子中,代理是一个模型或策略,作为井字棋玩家行动,其目标是赢得游戏,环境是三乘三的游戏板,并且任何一刻的状态都是当前板的配置。
动作空间包括基于当前板状态的所有可能位置,代理通过遵循称为RL策略的策略来做出决策。
现在,当代理采取行动时,它根据向胜利前进的行动效果收集奖励。
强化学习的目标是让代理学习给定环境中的最优策略,以最大化奖励,这个学习过程是迭代的,涉及试错,最初,代理采取随机行动,这将导致从当前状态到新状态的状态变化,代理继续探索后续状态以获取进一步行动。
一系列行动和相应的状态形成一个游戏序列。
通常被称为回滚,随着代理的经验积累,它轻易揭示出能带来最高长期回报的行动。
最终导致游戏成功,现在,"让我们来看看如何治疗抽搐","塔克陶的例子可以扩展到微调情况","具有rhf的大型语言模型"。
在这种情况下,"指导代理行动的政策是llm","其目标是生成被感知为人类偏好一致的任务"。
这可能意味着文本是,例如,有帮助的,准确的,并且无毒的,环境是模型的上下文窗口,提示可以输入文本的空间,模型在采取行动之前考虑的状态,是当前上下文,意味着任何当前包含在窗口中的文本。
这里的动作是生成文本,这可能是一个单词,一句句子,或更长形式的文本,取决于用户指定的任务。
动作空间是标记词汇表,意味着所有模型可以从中选择的潜在标记,以生成完成。
lm如何决定序列中的下一个标记,取决于它在训练过程中学习到的语言统计表示的任何给定时刻。
模型将采取的行动意味着,它下一个将选择的标记取决于上下文中的提示文本,以及词汇空间上的概率分布,奖励被分配。
基于完成与人类偏好的紧密程度,考虑到人类对语言的不同反应,确定奖励比tic tac toe的例子更复杂,你可以这样做的一种方法是有一个人类,评估模型的所有完成对于一些对齐度量,例如。
确定生成的文本是有毒的还是非毒的,这种反馈可以表示为一个标量值,要么是零,要么是一,llm的权重然后迭代更新,以最大化从人类分类器获得的奖励,使模型能够生成无毒的完成项,然而。
作为实际和可扩展的替代方案,获取人类反馈可能需要时间和金钱。
你可以使用另一个模型,被称为奖励模型,来分类llm的输出,并评估其与人类偏好的吻合程度。
你将从少数人类示例开始,一旦训练完成,使用传统的监督学习方法训练次要模型。
你将使用奖励模型来评估llm的输出。
并分配一个奖励值,哪个,反过来,被用来更新lm的权重并训练一个新的与人类对齐的版本。
模型完成度被评估时,权重如何更新,具体取决于,用于优化政策的算法,你将更深入地探索这些问题,最后请注意,在语言模型的背景下。
动作序列和状态序列被称为回滚,而不是在经典强化学习中常用的术语回放。
奖励模型是强化学习过程的核心组件,它编码了从人类反馈中学习的所有偏好,在模型更新其权重的多次迭代中起着核心作用。
在下一个视频中,你将看到如何训练这个模型,以及如何在强化学习过程中使用此模型来分类模型的输出。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P86:人类反馈强化学习4——RLHF - 获取人类的反馈信息 - 吴恩达大模型 - BV1gLeueWE5N
微调大型语言模型第一步,选择模型开始工作,用它准备人类反馈数据集,选用的模型应能执行任务,无论是文本摘要,问题,回答,或其他一般任务。
从已微调多任务。
并具通用能力的指导模型开始可能更容易,然后使用此llm,结合提示数据集生成每个提示的不同响应。
提示数据集由多个提示组成,每个提示都由lm处理以产生一组完成。
下一步是收集人类标签者的反馈,关于llm生成的完成,这是人类反馈部分,强化学习首先使用人类反馈,您必须决定人类应评估的标准。
这些完成的可能是迄今为止讨论的任何问题。
如帮助性或毒性,一旦决定,请评估数据集中的每个完成,基于标准。
看个例子,这次提示是:我家太热。
将提示传递给llm,然后生成三个不同完成,你给标签员的任务是按帮助性排名,从最有帮助到最没帮助,所以标签员可能决定完成二是最有帮助的,告诉用户可降温方法,完成一或三无帮助,但标记者可能认为三最差。
因模型与用户输入相悖,标记者将最佳完成排第二,此过程对多提示完成集重复,构建可训练奖励模型的数据集,最终代替人类执行工作,相同提示,完成集常分配给多人类标记者,建立共识,减少差标签影响,如第3个标签者。
其回答与其他人不同,可能误解说明,这实际上很重要,说明清晰影响反馈质量,标签者常从多样化全球样本中抽取,这是为人类标签者编写的示例说明,这将在任务开始前呈现给标签者阅读,并在处理数据集时可供参考。
说明从总体任务开始,在这种情况下,选择最佳完成提示,说明继续提供额外细节,指导标签员如何一般完成任务,这些说明越详细,标签员理解他们必须执行的任务并按您希望的方式完成的可能性就越高,例如。
在第二个说明项中,标签员被告知应基于,他们对响应正确性和信息性的感知做出决定,他们被告知可以使用互联网核实事实,他们可以使用互联网核实,检查并查找其他信息,他们被告知如何处理平局。
即他们认为同样正确和信息丰富的成对完成,工人被告知排名是可以的,两个相同的完成,但应尽量少做,这里值得强调的最终指示是遇到无意义,令人困惑或不相关的答案时该怎么做,在这种情况下,工人应选择f而不是排名。
低质量答案可轻易删除,提供详细指导可提高高质量回复概率,确保人类个体完成任务方式相似,这有助于确保标注完成的集合,代表共识观点,人类标注者完成提示完成集评估后,您拥有所有数据,需要训练奖励模型。
将用于强化学习中分类模型完成,而非人类,在开始训练奖励模型之前进行微调,然而,需将排名数据转换为成对比较。
换句话说,所有可能的完成对,从可用选项到提示应分类为0或1分。
如图所示,对一个提示有3个完成,人类标签员分配的排名为213,如图所示,1为最高排名,对应最受欢迎的回应。
三种不同完成,三种紫色可能。
黄色,紫色,绿和黄绿。
根据提示的备选完成数n。
每对有n选2组合。
给优选回复1分,给次选回复0分。
然后重排提示,优选在前。
这是重要一步,因奖励模型期待首选完成,即称为y_sub_j第一,一旦完成此数据,重构人类回应将符合训练格式。
奖励模型注意,虽然点赞,点踩,反馈常比排名反馈更容易一起。
排名反馈提供更多提示完成数据训练奖励模型,如你所见。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P87:人类反馈强化学习5——RLHF - 奖励模型 - 吴恩达大模型 - BV1gLeueWE5N
好的,目前阶段,你已拥有训练奖励模型的所有必要内容,虽然到达这一点花费了相当多的人力,当你完成训练奖励模型时,将不再需要将人类纳入循环中,相反,奖励模型将有效地脱离人类标注者。
并在ARHF过程中自动选择首选完成。
此奖励模型通常也是一个语言模型,例如,使用监督学习方法训练的鸟,基于你准备的成对比较数据。
从人类标注者对给定提示x的评价,奖励模型学会偏爱人类首选完成y_j,同时最小化奖励差异r_j减去r_k的对数sigmoid,如上一页所示。
人类首选选项始终是第一个标记为y_j的,一旦模型在人类排名提示完成对上进行训练。
你可以将奖励模型用作二元分类器。
为正负类提供一系列逻辑。
逻辑是未应用任何激活函数的模型输出,假设你想净化你的LLM。
并且奖励模型需要识别完成是否包含仇恨言论,在这种情况下。
两个类别将是非仇恨,即你最终希望优化的正面类别,和仇恨,即你想避免的负面类别。
正面类别的逻辑值是你在RHF中使用的奖励值,提醒一下,如果你对逻辑应用softmax函数。
你将获得概率,此示例显示了对非毒性完成的良好奖励。
第二个示例显示了对毒性完成的糟糕奖励,嘿嘿。
我知道这节课到目前为止已经涵盖了大量内容,但此时你拥有了一个强大的工具——奖励模型,用于对齐你的LLM,下一步是探索奖励模型如何在强化学习过程中使用,以训练你的人类对齐LLM,加入我在下一个视频中。
看看这是如何工作的,在下一节中。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P88:人类反馈强化学习6——RLHF - 通过强化学习进行微调 - 吴恩达大模型 - BV1gLeueWE5N
好的,把所有东西整合起来,看看如何在强化学习过程中使用奖励模型,更新llm权重并生成人类对齐模型,记住要从已经在您感兴趣的任务上表现良好的模型开始。
所以您将努力对齐一个指令。
首先您会从提示数据集中传递一个提示。
在这种情况下,狗是指导,一条肢体,然后生成一个完成。
在这种情况下,一个毛茸茸的动物,接下来,您将把这个完成和原始提示发送给奖励模型作为提示完成对。
奖励模型基于它所训练的人类反馈评估对。
并返回一个奖励值,更高的值,如这里显示的0。24,代表更对齐的响应。
较不一致的响应将获得较低的值,例如,-0。53。
然后您将把这个奖励值传递给提示完成对,到强化学习算法以更新llm的权重并使其朝着。
生成更多对齐的更高奖励响应,让我们称这个中间版本的模型为。
rl更新llm,这些步骤一起形成一个rhf过程的单个迭代。
这些迭代将持续给定的周期数。
类似于其他类型的微调,您可以看到由rl更新llm生成的完成获得更高的奖励得分。
指示权重更新已导致更对齐的完成。
如果过程进展顺利,您将看到每次迭代后奖励都有所提高,因为模型产生越来越符合人类偏好的文本。
您将继续这个迭代过程,直到您的模型对齐,基于某些评估标准。
例如,达到您定义的有用性阈值。
您还可以定义最大步骤数,例如。
20,000作为停止标准,让我们称微调后的模型为人类对齐llm。
我们还没有讨论的一个细节是强化学习算法的确切性质,这是接受奖励模型输出的算法,并使用它来更新llm模型权重。
以便奖励得分随时间增加。
对于rf过程的这一部分,您可以使用几种不同的算法。
一个流行选择是近端策略优化或简称ppo。
ppo是一个相当复杂的算法,您不必熟悉所有细节。
就能使用它,然而,它可能是一个难以实现的算法,更深入地了解其内部工作原理是有帮助的。
如遇问题,可帮你排错,让它工作,详细解释PPO算法,我邀请了AWS同事,E,K,深入探讨技术细节,下一个视频可选,可跳过,看奖励破解视频,完成测验或本周作业无需此信息,然而,鼓励查看详情。
因LLM日益重要。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P89:人类反馈强化学习7——PPO增强学习算法深度解析 - 吴恩达大模型 - BV1gLeueWE5N
Dr。的儿子卡玛利尼·贾德,通常被称为K的机器学习应用科学家,目前是亚马逊NLP开发的首席科学家,之前共同创立了计算机视觉领域的Y Combinator初创公司Visual One,在那之前。
他是苹果的机器学习技术负责人,负责项目如Memories,EA还是加州州立大学东湾分校的数学副教授,感谢今天加入讨论PPO强化学习算法,谢谢邀请我,PPO代表近端策略优化。
这是一种强大的解决强化学习问题的算法,顾名思义,PPO优化策略,在这种情况下,使LLM更符合人类偏好,经过多次迭代,PPO更新LLM,更新小且在边界内,结果是一个接近先前版本的更新LLM。
因此名为近端策略优化,保持这些变化在这个小区域内导致更稳定的学习。
好的,目标是更新策略以最大化奖励,你能猜出在大型语言模型的具体背景下这是如何工作的吗,是的,很高兴你开始用初始指导LLM进行PPO,然后,从高层次来看,每个PPO周期包括两个阶段,在第一阶段。
LLM被用来进行一系列实验,完成给定的提示,这些实验允许你在第二阶段更新LLM以对抗奖励模型,记住,奖励模型捕获了人类偏好,例如,奖励可以定义响应有多有帮助,无害和诚实。
完成奖励是一个重要的PPO目标量,我们通过这个LLM的单独头部——价值函数来估计这个量,让我们更仔细地看看价值函数。
和价值损失,假设首先给出了一些提示,你生成LLM对提示的响应,然后使用奖励模型计算提示完成的奖励,例如,这里显示的第一个提示完成可能获得1。87的奖励,下一个可能获得-1。24的奖励,等等。
你有一组提示完成和相应的奖励,价值函数估计给定状态s的预期总奖励。
换句话说,当LM生成每个完成令牌的时,你想估计基于当前令牌序列的总体未来奖励,价值损失衡量预测奖励与实际奖励之间的差异,可视为基准,评估完成质量与对齐标准,假设完成此步,预计未来总奖励0。34。
生成下一个标记时,预计未来总奖励增至1。23,目标是减少价值损失,即实际未来总奖励,示例中,1。87与其对价值函数的近似,示例中,一二三,损失使未来奖励估计更准,值函数用于第二阶段优势估计,稍后讨论。
类似你开始写文章,对最终形式有大致想法,甚至在你写之前,好的,好的,你提到一阶段确定的损失和奖励用于二阶段,更新权重以更新LLM,能否更详细解释此过程?当然,在二阶段对模型进行小更新。
评估这些更新对模型对齐目标的影。
模型权重,更新由提示完成引导,损失和奖励,PPO确保模型更新在一个小区域内,称为信任区,这是PPO的近端方面发挥作用的地方,理想情况下,这些小更新将模型推向更高奖励。
PPO策略目标是此方法的主要成分,记住目标是找到预期奖励高的策略,换句话说,你试图更新LLM,权重导致更符合人类偏好的完成,因此获得更高奖励,策略损失是PPO算法在训练中试图优化的主要目标。
我知道数学看起来很复杂,但实际上它比看起来简单,逐步分解,首先,关注主要表达,忽略其他,子t的π,给定s子t,在LLM的上下文中,是下一个token的概率,给定当前提示的A子t,S子t,动作。
A子t是下一个token,状态s子t是完成的提示,到标记t为止,分母是下一个标记的概率,初始版本的llm,是冻结的,分子是下一个标记的概率,通过更新的llm,我们可以改变以获得更好的奖励。
帽子下标t是特定动作选择的估计优势项,优势项估计当前动作,与该状态下所有可能动作的比较,所以我们看新标记后完成预期的未来奖励,并估计这种完成与其余的比较优势,有一个递归公式来估计这个量。
基于我们之前讨论的价值函数,这里,我们关注直观理解,这是我刚刚描述的可视化表示,你有提示s,你有不同的路径来完成它,如图所示的不同路径,优势项告诉你当前标记,相对于所有可能标记在这个可视化中的好坏。
顶部路径更高,是更好的完成,获得更高的奖励,底部路径下降,是更差的完成,所以我有一个问题,为什么最大化这个术语导致更高的奖励,考虑建议标记的优势为正的情况,正优势意味着建议标记优于平均。
因此增加当前标记的概率似乎是一个好的策略,导致更高的奖励,这转化为最大化我们这里的表达式,如果建议的标记比平均差,优势将再次为负,最大化表达式将降级标记,这是正确的策略。
所以总体结论是最大化这个表达式会导致更好的对齐的llm,好的很好,那么我们只需最大化这个表达式,然后直接,最大化表达式会导致问题,因为我们的计算在优势估计有效的前提下是可靠的。
优势估计仅当旧和新策略接近时才有效,这就是其余术语发挥作用的地方,所以后退一步,再次看整个方程,这里你选择两个术语中较小的,我们刚刚讨论的,和这个第二。
修改后的版本注意这个第二个表达式定义了两个策略接近的区域,这些附加条款是护栏,仅定义了靠近llm的区域,我们的估计有小的误差,这称为信任区域,这些附加条款确保我们不太可能离开信任区域,总之。
优化ppo策略目标可得到更好的llm。
不会过度到不可靠区域,还有其他组件吗?是的,还有熵损失,策略损失使模型向对齐移动,目标熵允许模型保持创造力。
如果保持熵低,你可能会总是以相同的方式完成提示,如图所示。
更高的熵引导llm向更多创意,这类似于第一周看到的llm温度设置,区别是温度影响模型创造力在推理时间,而熵影响模型创造力在训练期间。
将所有项作为加权总和,我们得到ppo目标,以稳定方式更新模型以符合人类偏好,这是总体ppo目标,c一和c二系数是超参数,ppo目标通过反向传播更新模型权重。
一旦模型权重更新,ppo开始新的周期进行下一次迭代,llm被更新的llm替换。
经过多次迭代后,开始新的ppo周期,你到达与人类对齐的llm,还有其他强化学习技术用于rhf吗?
是的,例如,Q学习是另一种通过rl微调llms的技术,但ppo是目前最受欢迎的方法,在我看来,ppo流行因为它具有复杂性和性能的正确平衡,虽然如此,通过人类或AI反馈微调llms是一个活跃的研究领域。
我们可以期待这个领域在不久的将来会有更多的发展,例如,就在我们录制这个视频之前,斯坦福的研究人员发表了一篇描述称为直接偏好优化的技术论文,这是一种比rf更简单的替代方法,像这样的新方法仍在积极开发中。
需要做更多的工作来更好地理解它们的优点,但我认为这是一个非常令人兴奋的研究领域,同意,非常感谢您分享关于ppo和强化学习的见解。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P9:9-总结 - 吴恩达大模型 - BV1gLeueWE5N
现在,你已经理解了微调是什么,它在哪里适用,以及为什么它重要,现在,微调已经成为你工具箱中的一部分,你已经完成了所有不同的步骤,从数据准备到训练到你评估模型。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P90:人类反馈强化学习8——奖励攻击 - 吴恩达大模型 - BV1gLeueWE5N
让我们回顾一下到目前为止所看到的,Rhf是一个微调过程,使LLM与人类偏好对齐,在此过程中,您使用奖励模型评估LLM的完成情况,基于人类偏好指标的提示数据集。
如有帮助或不帮助,接下来,您使用强化学习算法,在这种情况下,PPO,以更新LM的权重,基于当前版本的LLM生成的完成情况所分配的奖励。
您将多次迭代此循环,使用许多不同的提示和模型权重的更新。
直到您获得所需的对齐程度,最终结果是与人类对齐的LLM,您可以在应用程序中使用。
在强化学习中可能出现的一个有趣问题是称为奖励黑客的问题,其中代理学习欺骗系统,通过偏爱最大化所接收奖励的行动,即使这些行动与LLM上下文中的原始目标并不完全一致。
奖励黑客可能表现为在完成中添加单词或短语,这些短语对于正在对齐的指标得分很高,但降低了语言的整体质量,例如。
假设您使用Rhf来解毒一个指导模型,您已经训练了一个,可以进行情感分析的奖励模型,并将模型完成分类为有毒或无毒。
您从训练数据中选择提示'此产品是',并将其传递给指导的LLM,它生成一个完成,这个完成垃圾不是非常好,您可以期望它获得很高的有毒评级。
完成由毒性奖励模型处理。
它生成一个分数,这被馈送到PPO算法。
它使用它来更新模型权重,随着您迭代,Ri Jeff将更新LM以创建更少有毒的响应。
然而,随着策略试图优化奖励,它可能会偏离初始语言模型太多,在这个例子中,模型已经开始生成完成,它已经学会,将导致非常低的毒性分数,通过包括短语如'最棒','最不可思议',这种语言听起来非常夸张。
模型还可以开始生成无意义的,语法不正确的文本,只是碰巧以类似的方式最大化奖励。
这样的输出肯定不是很实用。
为了防止您的奖励黑客发生,您可以使用初始的指导LLM作为性能参考,称为参考模型。
参考模型的权重冻结,迭代时不更新。
这样,训练时始终有一个参考模型比较。
每个提示传递给两个模型。
参考LM和中间RL更新模型生成完成。
此时,可以比较两个完成,并计算一个称为回调标签发散或KL发散的值,简而言之。
KL发散是衡量两个概率分布差异的统计量。
可用于比较两个模型的完成,并确定更新模型与参考模型的偏离程度,不必过于担心如何工作,KL发散算法包含在许多标准机器学习库中。
可以无需了解所有数学背景使用。
本周的实验将使用KL发散。
这样你可以自己看到如何工作,每个生成的标记计算发散。
跨越整个LM词汇表,这很容易是数万或数十万个标记,然而,使用softmax函数,将概率减少到远小于完整词汇表大小。
记住这仍然是一个相对计算密集的过程,因此几乎总是受益于使用GPU,一旦计算出两个模型之间的KL发散。
将其作为奖励计算的项,这将惩罚RL更新模型,如果它偏离参考LLM太远并生成太不同的完成。
注意现在需要两个完整的LM来计算KL发散。
冻结的参考LM和RL更新的PPO LLM。
顺便说一句,可以从结合RHF,与PEFT受益,在这种情况下。
只更新路径适配器的权重,不是整个LM的权重。
这意味着可以重用相同的底层LM,对于参考模型和PPO模型,用训练的路径参数更新,这大约将训练期间的内存占用减少一半,我知道这里有很多要消化,但别担心,RHF与PAIS将在实验中涵盖。
所以你会有机会看到实际操作并亲自尝试,一旦完成你的AH,RHF对齐模型,将想要评估模型的性能,可用总结数据集量化毒性减少,例如,对话,之前课程中看到的某个数据集,此处使用的数字是毒性评分。
负面类别的概率,在这种情况下,是恶毒或仇恨回复的平均值。
如果我们的Jeff成功降低了LLM的毒性。
该分数应首先下降。
将为原始指导LLM创建基准毒性评分。
通过评估其离线完成,使用可以评估有毒语言的奖励模型进行总结数据集。
然后,您将在同一数据集上评估您的新人类对齐模型。
并比较分数,例如。
毒性评分在RHF后确实下降,再次表明毒性更小,对齐更好的模型。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P91:人类反馈强化学习9——扩大人类反馈的规模 - 吴恩达大模型 - BV1gLeueWE5N
尽管你可以使用奖励模型来消除人类评价的需要,在rhf微调期间,最初产生训练的奖励模型所需的人类努力巨大,用于训练奖励模型的标签数据通常需要庞大的标签团队。
有时需要数千人来评估许多提示。
这项工作需要大量的时间和其他资源。
随着模型数量和用例的增加,这些可能是重要的限制因素,人类努力成为一种有限的资源。
扩大人类反馈的方法是研究活动的活跃领域。
一种克服这些限制的想法是通过模型自我监督进行扩展。
宪法式AI是2022年由人类中心主义研究者首次提出的一种规模监督方法。
宪法式AI是一种训练模型的方法,使用一套规则和原则来规范模型的行为。
再加上一组样本提示,这些形成了宪法,然后,您训练模型自我批评并修订其响应以符合这些原则。
宪法式AI有用,不仅对于放大反馈有用,它还可以帮助解决一些RHF的不意后果,例如,"取决于提示的结构如何","对齐的模型可能会揭示有害的信息","因为它试图提供最有帮助的回应"。
它可以,"例如","想象一下,如果你问模型给你提供指示","如何破解邻居的Wi-Fi","因为这个模型已经被对齐以优先考虑有用性"。
"实际上,它告诉你一个可以让你做到这一点的应用"。
"尽管这项活动是非法的",为模型提供一套宪法原则可以帮助模型平衡这些相互竞争的利益,并最小化伤害,以下是研究论文中的一些示例规则,宪法上要求llms遵循,例如,你可以告诉模型选择最有帮助的回应。
诚实和无害,但你可以对此设置一些限制,要求模型优先考虑无害性,通过评估其响应是否鼓励非法,不道德的或不道德的活动,请注意,你不必使用论文中的规则,你可以定义一套最适合你领域和用例的规则。
在实施宪法AI方法时,你训练你的模式在两个不同的相位。
在第一阶段,你进行监督学习来开始,你以试图让模型生成有害反应的方式提示模型。
这个过程被称为重新喂养你。
然后要求模型根据宪法原则批评自己的有害反应。
并一旦完成,修订它们以符合那些规则。
你会发现自己在模型中,使用红色团队的提示对和修订后的宪法响应对。
让我们来看看一个这些提示完成对如何生成的例子。
让我们回到Wi-Fi黑客问题,正如你之前看到的,这个模型给你一个有害的反应,因为它试图最大化其对减轻此问题的帮助。
你使用有害的完成来增强提示。
并一套预先定义的指令,要求模型批评其响应。
根据宪法中的规定,模型检测其响应中的问题。
在这种情况下,它正确承认黑客他人的Wi-Fi是非法的,最后,你将所有部分放在一起,并要求模型写一个新响应。
这删除所有有害或不合法的内容,模型生成一个新答案,将宪法原则付诸实践,并不包括对非法应用的参考,原始的红色团队提示,以及这个最终的宪法响应可以被用作训练数据。
你将构建起许多像这样的例子的数据集,以创建一个精细调优的LLM,它学会了如何生成宪法响应。
过程的第二部分进行强化学习。
这个阶段类似于RHF,除了人类反馈之外,我们现在使用由模型生成的反馈。
这有时被称为强化学习从AI反馈或RIOF这里。
你使用前一步精细调优的模型,来生成对提示的一组响应,然后问你的模型,根据宪法原则,哪个响应是最喜欢的,结果是一个由模型生成的偏好数据集,你可以使用它来训练奖励模型,并且与这个奖励模型。
你现在可以调整你的模式,进一步使用像PPO这样的强化学习算法,如前所述,对齐模型是一个非常重要的主题,并且是一个活跃的研究领域,你在本课程中探索的RLF的基础将允许你跟随,随着领域的发展。
我对研究人员在这个领域将做出新发现的兴奋,我鼓励你保持关注。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P92:《大型语言模型与语义搜索》- 1.Intro.zh - 吴恩达大模型 - BV1gLeueWE5N
欢迎来到短期课程,本课程与Cohere合作,内置了语义搜索的大型语言模型,你将学习如何将大型语言模型或LMS集成到信息搜索中,在你的应用程序中,例如,假设你运行一个包含许多文章的网站,为了论证。
想象一下维基百科,或者一个包含许多电子商务产品的网站,甚至在LMS出现之前,关键词搜索是很常见的,"以便人们可能搜索你的网站","但是,有了LMS,你现在可以做很多事情",首先,"你可以让用户提出问题。
你的系统然后搜索你的网站或数据库来解答","其次,电影也在展示检索结果",更接近于用户询问的含义或语义,"我想介绍这门课程的教师们",杰伊·阿拉米尔和路易斯·塞尔拉诺。
"杰伊和路易斯都是经验丰富的机器学习工程师",以及教育者,我一直钦佩他,Jay创作的一些高度引用的插图,用于解释变压器网络,他还在合著一本关于大规模语言模型的实践书。
Louis是《摇篮机器学习》一书的作者,他还与深度学习一起教学,《AI数学》用于机器学习和连贯性,Jay和Lewis,与Neil Amir一起,他们正在开发一个名为LMU的网站。
他们已经有很多经验教开发者如何使用LMS,因此,当他们同意使用LMS教授语义搜索时,我欣喜若狂,谢谢安德鲁,这真是一份无与伦比的荣誉,能与你一起教这门课程,我感到荣幸,八年前。
是你的机器学习课程让我接触到机器学习,正如你所说,你的学习继续激励我分享我所学到的,路易斯和我在科赫工作,所以我们能在这个行业中指导他人,关于如何使用和部署大型语言模型以满足各种应用场景。
我们很高兴能承担这门课程,以提供开发人员所需的工具,他们需要构建,坚固的,由LLM驱动的应用程序,我们很高兴分享我们从领域经验中学到的东西,谢谢,杰伊和路易斯,很高兴有你与我们在一起。
这门课程首先包括以下主题,它教你如何使用基本关键词搜索,这也是被称为词性搜索的,它为许多搜索系统提供了动力,甚至在大型语言模型出现之前,它包括找到与查询匹配单词数量最多的文档。
然后您将学习如何使用一种称为排名的方法来增强这种关键词搜索,正如名称所暗示的,然后按查询的相关性对响应进行排名,接下来,您将学习一种更先进的搜索方法,这种方法极大地提高了关键词搜索的结果。
因为它试图使用文本的实际意义或实际语义意义来执行搜索,以这种方式进行搜索,这种方法被称为密集检索,这使用了自然语言处理中一种非常强大的工具,称为嵌入,这是一种将向量数与每个文本片段相关联的方法。
语义搜索包括找到与查询最接近的文档,在嵌入空间中,类似于其他模型,搜索算法需要得到适当的评估,您还将学习如何有效地进行此操作,最后,由于lms可以用于生成答案,您还将学习如何将搜索结果插入到llm中。
并使它基于它们生成答案,使用嵌入的密集检索,极大地提高了lm的问答能力,因为它首先搜索并检索相关的文档,并从这些检索的信息中创建答案,许多人都对这门课程做出了贡献,我们感谢miamir,Patrick。
Lewis noreimer和sebastian hofstadter从coir的辛勤工作,以及在深度学习ai方面,Eddie shu和dialla作为院长。
在第一课中,您将看到在大型语言模型出现之前搜索是如何进行的,我们将向您展示如何使用llms来改进搜索,包括工具如嵌入和重新排名为什么听起来很棒,并且。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P93:2.L1-keyword search.zh - 吴恩达大模型 - BV1gLeueWE5N
欢迎第一课,学习关键词搜索回答问题。
数据库搜索是导航世界关键,包括搜索引擎,也包括应用内搜索,如搜索Spotify、YouTube或谷歌地图。
例如,公司组织需用关键词搜索或搜索内部文档,关键词搜索是构建搜索系统常用方法,看如何使用关键词搜索系统,看语言模型如何改进系统,现在看这个代码示例,连接数据库,做关键词搜索。
首单元格安装uviate客户端。
无需运行此操作,若在教室中运行,但若要下载此代码并在自己的环境中运行。
需安装viviate客户端,需运行的首代码单元,加载稍后课程中所需的API密钥。
现在我们可以导入v八,这将允许我们连接在线数据库,我们将讨论这个数据库,谈谈viviate是什么,Uv八是一个开源数据库,具有关键词搜索功能,还有向量搜索功能,依赖于语言模型。
我们将使用的API密钥是公开的,这是公共演示的一部分,实际密钥并非秘密,你可以使用它,我们鼓励你用它访问演示数据库。
现在配置了认证设置,让我们看看连接客户端和实际数据库的代码。
这个数据库是公共的,包含1000万条记录,这些是维基百科的记录,每条记录或行是一个段落,是维基百科中的一段,这1000万记录来自10种语言。
其中100万是英语,其余900万是其他语言,我们可以,选择和过滤要查询的语言。
稍后在本实验中查看。
运行此行代码后,确保客户端已准备就绪并连接,如果得到true,则表示本地uv eight客户端能够连接到远程uate数据库。
现在我们可以对数据集进行关键词搜索,在查看代码之前,让我们简单谈谈关键词搜索,假设你有查询,草是什么颜色,你正在搜索一个非常小的档案,其中包含这五个文本,这五句话,明天是星期六,草是绿色的。
加拿大的首都是渥太华,天空是蓝色的,鲸鱼是哺乳动物,这是一个简单的搜索示例,关键词搜索的工作原理是高层次地比较。
因此,如果我们比较查询和第一句话共有多少个单词,它们只共享单词是。
因此,它们共有1个单词,我们可以看到档案中每个句子的计数。
我们可以看到第二句话,与查询共有最多的单词,因此,关键词搜索可能会检索该答案。
现在我们已经连接到数据库,让我们构建将查询它的函数。
让我们称之为关键词搜索。
我们将构建这个并来回切换,这里我们需要做的最简单的事情是说出响应等于,然后客户端点查询点,获取现在,我们在这里所做的一切,这就是我们所看到的。
因此,所有这些都由uv八api定义,它告诉我们数据的类型,我认为我们需要在这里添加的集合称为文章。
这在数据库中定义,由于我们想进行关键词搜索,嗯,在我们进入关键词搜索之前,让我们复制这些属性的样子,这些将是,这是一个由这个数据集定义的列表,看起来像这样,数据库中的每篇文章都有多个属性。
我们在这里所说的是,对于这个搜索的结果,我们希望您返回给我们,标题。
URL和每个结果的文本,这里还有其他属性。
但我们不希望数据库将它们返回给我们,现在现在进行关键词搜索部分V,V,8号有BM25和BM25类型。
这是关键词搜索还是词法搜索算法?并基于特定公式,对档案中的文档与查询评分,考察查询与每篇文档共享单词的计数,我们需要做的是说,查询等于将传递给您的查询,我们需要添加到此函数的查询,因此它也是此处的参数。
需要传递给we are with where的更多行,这里我们可以添加一个where子句,以特定方式格式化。
我们想要做的是限制结果仅限英语。
结果俚语将是一些,我们还将添加到这个定义中,比如说,默认情况下,我们将按英语语言过滤,仅查看英语文章。
这就是为什么我们在这里将其添加为默认值的原因,但这是我们可以随时在调用关键词搜索方法时更改的内容。
现在我们需要添加的另一行是说明使用limit,搜索引擎要返回多少结果,我们说,嗯,结果,在这里也定义,嗯,结果。
默认设为3,查询完成,我们只说做,然后关闭请求。
完成后,现在可获取响应并返回结果。
这是我们的关键词搜索功能,现在,让我们使用这个关键词搜索功能并传递一个查询,假设我们说最受欢迎的电视事件是什么,我们将查询传递给函数,然后打印它。
所以让我们看看运行这个会发生什么,它去并返回。
这些是我们拥有的搜索结果,将会有很多文本需要浏览,但我们可以看到,这是字典列表,所以定义一个打印更好方式的函数。
函数可以像这样 print result,用这个可以说。
好的,现在打印并让我确切看到结果。
我们得到的第一结果是这是文本,这是文本的段落或文章。
这是标题,嗯,记得我们找的是最常播出的活动。
这看起来不太像正确结果。
但包含很多关键词,这里还有一篇关于超级碗的文章。
这是个更好的结果,所以超级碗可能是高收视率的活动。
这里还有另一个结果提到世界杯,但不是世界杯结果,对于每个结果,你会看到那篇文章的网址。
可以点击它,它会带我们到一个维基百科页面,可以尝试编辑查询,这样可以看到数据集中还有哪些内容,这是一个查询连接到数据库的高层示例,然后查看结果。
这里还可以尝试一些事情,你需要查看属性。
这是数据集构建时使用的属性列表,这些都是数据库中存储的列,可以说你可以查看维基百科页面收到的浏览量,你可以用它来过滤或排序,这是一个估计数字,但这是用于过滤的语言列,你可以使用其他语言值。
其他语言的代码看起来像这样。
英语,德语,法语,西班牙语,意大利语,日语,阿拉伯语。
中文,韩语和印地语,我相信,只需输入其中一个并传递给关键词搜索,它会给你那个语言的结果。
让我们看看如何用不同的语言查询数据库,所以假设我们复制这段代码,注意现在我们在这里打印结果,让我们指定语言为另一种语言,这里我将使用,比如说。
我们做了德语这里,因为有些单词可能是共享的,我们可以看到这里有一些结果,这个关于最常播出活动的结果是关于Busta Rhymes的音乐家,但你可以看到为什么它带来了这个结果,因为事件这个词在这里。
然后提到的专辑名称在这里是事件,所以提到的事件的结果是关于Busta Rhymes的音乐家,文本和查询共享,不必包含所有关键词,但至少有一些,BM25只需一个词相关,查询和文档共享的单词越多。
文档中重复的越多。
得分越高,总体来看,虽然返回了结果,这可能不是最佳答案,与问题最相关的文档。
看看语言模型如何帮助。
第一课结束时,回顾搜索的高层,主要组件是查询,搜索系统,系统可访问预处理文档档案,响应查询,系统按与查询最相关排序结果。
更仔细看,搜索系统可视为多阶段,第一阶段通常是检索或搜索,之后有重排阶段,重排常需包含额外信号,不仅仅是文本相关性,第一阶段,检索常用BM25算法评分文档,与查询相比,第一阶段检索实现含倒排索引概念。
注意此表与之前文档表不同,倒排索引是这种两列表,一列是关键词,旁边是含关键词的文档,这是为优化搜索速度,在搜索引擎中输入查询,期待几毫秒内结果,实践中就是这样,除了文档ID,关键词出现频率也添加到此。
现在对关键词搜索有良好概览,注意这个查询,天空什么颜色,查看倒排索引,颜色词含文档804,天空词也含文档804,804将从第一阶段检索结果中高评分,从关键词搜索理解,可看到一些限制。
假设我们有这个查询强烈头痛侧面。
如果搜索包含确切答案的文档档案,但使用不同关键词,所以不完全使用它们。
说剧烈偏头痛,关键词搜索无法检索此文档,语言模型可帮助此领域,因为它们不比较关键词,仅能查看总体含义。
能检索此类文档以响应此类查询,语言模型可改进搜索阶段,下节课将探讨如何实现,将探讨语言模型如何改进检索,或第一阶段使用嵌入,下节课主题,然后探讨重排如何工作及如何改进第二阶段,本课程结束时。
将探讨大型语言模型如何生成响应,基于先前的搜索步骤。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P94:3.L2-embedding.zh - 吴恩达大模型 - BV1gLeueWE5N
欢迎来到第2课,本课将学习嵌入,嵌入是文本的数值表示,计算机更容易处理,它们是大型语言模型最重要的组件之一。
让我们从嵌入层开始,这段代码将帮助我们加载现在需要的所有API密钥,在课堂上,这些都为你做好了,但如果你想自己做,你需要pip,安装一些包,例如,连贯的,一个,其他你需要安装的包用于可视化,是你地图。
学习,Altire和维基百科数据集,数据集,我将注释这行,因为我不需要在课堂上运行它,接下来导入连贯性库,连贯性库是一个使用大型语言模型的函数的广泛库,它们可以通过API调用,在本课中。
我们将使用嵌入函数,但还有其他函数,如生成函数,你将在课程后期使用,下一步是使用API密钥创建连贯性客户端,首先让我告诉你这里的嵌入是什么,我们有一个带有水平和垂直轴的网格和坐标。
我们有一堆单词位于这个网格中,如你所见,根据这些单词的位置,你会把苹果放在哪里,如你所见在这个嵌入中,相似单词被分组在一起,左上角是运动,左下角是房屋、建筑和城堡,右下角是车辆,如自行车和汽车。
右上角是水果,所以苹果将放在水果中,苹果这里的坐标是5,5,因为我们正在将表格中的每个单词,关联到两个数字,水平和垂直坐标,这是一个嵌入,现在这种嵌入将每个单词发送到两个数字。
通常嵌入会将单词发送到更多数字,我们会有所有可能单词,实践中使用的嵌入可发送单词至数百个不同数字,甚至数千,现在导入名为pandas的包,我们称其为pd,Pandas擅长处理表格数据。
我们将使用的第一个表格数据非常小,它有三个单词,单词joy,单词happiness和单词potato,您可在此处看到,下一步是创建嵌入,对于这三个单词,我们将它们称为三个单词m,并创建嵌入。
我们将调用cohere函数,Embed,Embed函数接受一些输入,我们想嵌入的数据集,称为three words for此表格,我们还需要指定列,称为text。
接下来我们指定要使用的coherent模型,最后我们从那里提取嵌入,所以现在我们有三个单词,嵌入,现在让我们看看与每个单词相关联的向量,与单词joy相关联的,我们将称之为word one。
我们获取它的方式是查看three words m并获取第一行,现在我们将对work two和word three做同样的事情,它们是与单词happiness和potato对应的向量,出于好奇。
让我们看看与单词joy相关联的向量的前十个条目,那将是word one,一直到十,现在嵌入不仅适用于单词,它们还可以适用于更长的文本片段,实际上它可以是非常长的文本片段,在这个例子中。
这里我们有句子的嵌入,句子被发送到一个向量或数字列表,请注意,第一个句子是hello,How are you,最后一个词是hi,How's it going,它们没有相同的单词,但它们非常相似。
因为它们非常相似,嵌入将它们发送至非常接近的两个数字,现在让我向您展示一个嵌入示例。
首先我们将不得不导入pandas作为pd,Pandas是一个用于处理表格数据的库,它处理表格数据,接下来看小数据集,共8个句子,如你所见,它们不完整,每个都是前一个的答案,例如,天空什么颜色。
天空是蓝色,白色是苹果,苹果是一种水果,现在绘制嵌入,看哪些句子相近或相远,为将这些句子转为嵌入,将使用coher的嵌入函数,将此表称为m,将端点代码称为embed,该函数将给出所有嵌入。
它接受一些输入,第一个输入是要嵌入的句子表,表称为sentences,必须指定列,这称为文本,下一个输入是模型名称,最后从函数输出提取嵌入,该函数将给出每个句子的数字列表,查看嵌入的前10项。
每个前3个句子,它们现在在这里,每个句子有多少数字,在这种情况下,是4996,但不同嵌入长度不同,现在可视化此嵌入,将调用util中的umap plot函数。
Yuma plot使用umap和altair包,生成此处的图表,注意,此图表给出8个成对的点,让我们看看这些对是什么,这只熊住在森林里,最近的句子是,熊住在哪里,这很合理,因为它们是非常相似的句子。
看这两个,这里我们有,苹果是什么?苹果是一种水果,这里我们有,世界杯在哪里?世界杯在卡塔尔,这里天空是什么颜色?天空是蓝色,所以,如你所见,嵌入,将相似句子放在附近点,将不同句子放在远离的点。
注意非常特别的东西,最接近问题的句子是其特定答案,因此理论上可用此找问题答案,通过搜索最接近的句子,这实际上是密集检索的基础,Jay将在下一视频中教你,现在可以添加更多句子或完全更改这些句子。
然后绘制嵌入并查看其外观,现在知道如何嵌入8个句子的小数据集,让我们对大型数据集这样做,我们将与维基百科文章的大型数据集合作,让我们加载以下数据集,它包含许多带有标题的文章,第一段文本及其嵌入。
它有两千篇文章,我们将导入numpy和一个将帮助我们可视化此图的功能,非常类似于上一个,我们将它降维到二维,以便我们可以看到它,嵌入在这里,注意相似的文章在相似的地方,例如。
在这里你可以找到许多语言和国家,在这里你将找到许多国王和王后,在这里你将找到许多足球运动员,在这里你将找到艺术家,随意探索此嵌入并尝试找到主题的位置,关于嵌入就这些了,在下一节与J的课程中。
你将能够使用嵌入进行密集检索。
LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI - P95:4.L3-dense retrieval.zh - 吴恩达大模型 - BV1gLeueWE5N
欢迎来到第三堂关于密集检索的课,现在,我们已经在之前的课程中学习了嵌入式,让我们学习如何使用它们进行语义搜索或搜索。
按照意义,这堂课将分为两部分,在第一部分,我们将连接到我们在第一课中使用的同一数据库。
但是,而不是做关键词搜索,我们将做向量搜索,使用嵌入式进行语义搜索,然后在第二部分,我们已经对已经为我们准备的向量数据库感到舒适,我们将从文本的开始处处理,并看看如何从零开始构建一个向量索引。
让我们使用之前的代码加载我们的API密钥,所以在我们做语义搜索之前,让我们首先将cohere移植过来并设置cohere的Python SDK,我们说,去这里,那个客户端,然后。
我们就将API密钥访问代码粘贴上去,我们会像设置UV一样做同样的事情,连接八个客户端,连接到那个精确的数据库,到现在为止,没有什么是新的,现在,在我们开始编写基于嵌入式或密集检索的搜索代码之前。
让我们根据我们在嵌入式课程中学到的内容来理解它,所以我们有查询,加拿大的首都是什么,我们有,假设,在我们的档案中,有五个可能的回应或句子,加拿大的首都是渥太华,法国的首都是巴黎。
我们可以像处理嵌入一样绘制这些,并且我们可以看到,意义相似的句子,在图中将靠近彼此,所以如果我们绘制所有这些五个,我们可以看到,关于加拿大和法国的首都的句子彼此靠近,然后。
关于颜色的这些句子在顶部紧密地排列在一起,现在就在这里,这个查询应该在哪里,如果我们将其投影到相同的嵌入空间中,如果我们使用优化为搜索的嵌入模型,它将最接近那个查询的答案,因此。
当我们问加拿大的首都是什么时,它将最接近这个点,说加拿大首都是奥托的句子,这就是我们如何使用我们在嵌入中学到的东西,将这些相似性和距离的特性用于搜索,这就是密集检索,语义搜索的两种主要方式之一。
另一种是后锚点,让我们看看如何使用weave ate进行密集检索,这是代码,对你来说会很熟悉,如果你已经完成了第一课,这是we v eight API调用,这里的主要区别是。
我们不再使用bm two five,我们说的是近文本,在这里,我们将查询传递给,所以我们将查询放入这个Python字典,我们称它为近文本,然后我们将这个变量传递给查询,这就是我们如何获取响应。
这就是we v eight如何进行向量搜索,而不是pm two five的关键词搜索,一旦我们执行了这个,我们可以开始发送查询并查看结果,所以现在让我们运行一些查询并看数据库返回什么。
假设我们有这个查询谁写了哈姆雷特,我们可以运行它,这是第一个结果,发生了什么,是所有文本的嵌入都被查询匹配了吗,这是查询最相似的文本,在这里,我们可以看到它谈论莎士比亚写哈姆雷特。
所以这是归档中最相关的文本,对于这个查询,我们也可以在第二个结果中看到,它提到了莎士比亚和写作,所以这是这里另一个相关的结果,uv eight返回这个距离数字,这表明查询与这里的文本有多近。
现在让我们尝试另一个查询,这可能有点困难,所以让我们说加拿大的首都是什么,我们搜索,第一个结果是来自维基百科的渥太华页面,这是加拿大的首都,让我们看看关键词搜索如何比较。
让我们导入我们在第一课中构建的关键词搜索函数,并将相同的查询传递给这个函数,让我们看看我们的结果是什么。
但不是真的很加拿大的首都。
第二个页面是关于早期现代时期的,第三个结果是关于加拿大国旗的,所以也在同一空间,也许不是这个一个,但不是我们想要查询的答案。
也不是数据集对于这个查询最相关的段落,让我们再看一个例子,在另一个查询上,我们再次比较关键词搜索和时态检索,所以让我们说,我们现在想要查看的查询是,历史上最高的人,如果我们对这个进行关键词搜索。
我们将得到关于日本的历史信息。
我们将得到七座高峰,我们还得到了有关哈梅德·本·哈利法·阿尔·坦尼的信息,这些并不完全与我们现在的查询相关。
如果你这样做密集检索。
结果会是什么,让我们复制代码,然后只是更改查询,让我们说,历史上最高的人,然后检索能够给我们罗伯特·沃德洛,他是谁,他是有记录以来最高的人,对于 whom 有无可争议的证据,所以这是另一个例子。
在哪里密集检索真正能够捕获查询的意图,并返回最佳结果,在这里要展示的另一件事,密集检索在多语言方面真正有帮助的是,所以这就是你如何支持多语言搜索的,所以让我们说,我们从前有过同样的查询。
但如果我们用另一种语言写,我们一直在使用的模型,这是一个多语言模型,所以它能够匹配在德语中的查询,以任何其他语言的结果,我们可以选择结果语言,它可以接受查询的任何语言,所以让我们使用阿拉伯语的翻译。
让我们说,对于这个相同的查询,所以这将像这样,当我们执行这个,这是历史上最高的人,只是它用阿拉伯语写,它能够返回给我们相同的结果,另一个真的很酷的事情,我喜欢在嵌入式搜索中做的一件事是探索。
所以你可以说关于时间旅行悖论的电影,你可以探索你返回的结果,所以这是一部关于时间的电影,嗯,让我们说,还有一个叫做时间机器的电影,这可能基于小说,嗯,关于时间再次,你可以花很多时间探索像这样的数据集。
我发现这非常有趣,我花费大量的时间使用语义搜索探索数据集,像这样,所以现在是一个开始花几分钟探索的好时机,你可以通过更改查询并在维基百科内部查找各种页面来使用语义搜索,这就是第一部分。
我们只是消费向量数据库的结束,现在让我们开始第二部分,实际上构建我们自己的向量搜索数据库,所以让我们从导入一些库开始,我们需要主要的一个,这里是一个叫做annoy的库,这是一个最近邻库,有点像我们绕过。
但稍微简单些,我们将讨论最近邻库和向量数据库之间的差异,然后,我们将导入Python的一些著名库,因为这个是简单的例子,我们将使用星际页面的文本,所以让我们复制一大段这个文本,并将它粘贴到笔记本中。
这是我们从维基百科复制过来的文本,我们只是将它添加到这个叫做text的变量中,这就是简单地复制和粘贴,然后,我们进入关于语义搜索的一个重要问题,所以我们需要将这段文本分解成块,但这些块的大小是多少。
我们是将其分成句子,还是分成段落,或者如何最好地分解它,这是一个经常被问到的问题,而且答案对于每个任务都是不同的,一些常见的方法是分割,假设在每个点处,所以我们知道这个文本非常干净。
所有的句子都由句号分隔,所以我们可以在句号上分割,但在现实生活中,如果你正在处理大量的嘈杂文本,你可能需要在处理之前稍微处理一下,然后你可能也需要使用实际在句子分割上使用的库。
比仅仅在句号上分割更复杂或高级的方式,所以这是一种选择,让我们看看如果我们执行它会发生什么,所以现在这些文本是什么,所以我们可以看到,列表中的每一句话都是一个字符串,所以这就是一种分块的方式。
其中每一句话都是一个列表。
现在,实际数据集的方式,我们一直在处理的开源数据集,实际上是按段落分割的,所以我们没有做句号,我们做段落,因此,每个块实际上现在是一个完整的段落,哪一段最适合你,这通常取决于情况。
您希望每个块可能包含一个想法,但这实际上取决于您的应用场景,但这是一种做它的方式,让我们回到句子分割,我想在这里向您展示一些东西,所以让我们假设我们按句子分割,您看到这句话吗。
它说因其表演指导、剧本、音乐分数、视觉效果、雄心主题和情感重量而受到赞誉,剧本,音乐分数,视觉效果,雄心主题和情感重量,现在,这个句子缺乏上下文,如果您只是嵌入这个句子,我们只是将这个发送到嵌入模型。
它实际上不知道您在谈论什么,现在,维基百科的好处是我们有标题,所以我们可以添加标题,我们可以在句子后面添加页面标题。
所以它给它提供了一些上下文,为了添加这个上下文。
我们可以在做完标题复制后复制标题,我们可以将这个添加到这个变量中,然后只需在每个这些块前面添加它,然后它看起来像这样,所以,它因其表演受到赞誉,我们知道这现在是关于星际的,填充,这是一个启发式。
我们在这里为维基百科做的,但然后,对于每个数据库或数据集,你需要考虑这些,这些设计选择来总结一下我们关于分块的讨论,让我们回顾一下我们与分块讨论过的一些设计选择。
我们有一个维基百科页面,我们可以将其分解为段落或句子,然后,我们将每个一个嵌入,我们将继续查看代码来实现这一点,所以,每个这些都有自己的嵌入,向量,一旦我们有我们的查询,我们将嵌入该查询,然后。
搜索只是找到最近的邻居,或查询在嵌入空间中最近的文章,在这种情况下,如果我们问,变压器是否有循环结构,这篇文章是概述那个的,并且包含了回答那个查询的答案。
现在我们有了我们的片段,让我们继续到下一步,这是嵌入文本以使用连贯API的步骤,我们说代码嵌入,我们给它文本,例如,文本点列表,点嵌入,现在,这个响应包含代表我们过去有的这些文本的向量。
让我们看看它看起来像什么,所以让我们说embeds等于,我希望能够与numpy数组工作,嗯,因为我们可以像这样检查它们,并查看它们的维度,所以我们有十五句话,然后。
每句话都由一个包含四千个数字的向量表示,那是捕获这些句子意义的向量,现在我们有了这些嵌入,我们可以将它们扔给搜索库,并开始能够搜索它们,这是annoy的代码,我们定义索引,然后,我们遍历我们有的嵌入。
并将它们插入到搜索索引中,然后,我们有它,构建它们,然后,将索引保存到文件并写入磁盘,所以这是test,ann和ann代表annoy,但它也代表近似最近邻,这样,我们就有了我们的向量搜索索引就绪。
我们可以向它发送查询,它将能够返回给我们从它拥有的十五篇文档中的最近结果,现在让我们定义基本搜索,这里是它做什么的,我们将发送一个查询,它将嵌入该查询,所以它将查询发送到语言模型并获取查询的嵌入。
该嵌入然后发送到因子搜索索引,然后,我们获取前三个结果,所以,这个查询的最近三个邻居,在这里,我们只是格式化它们并打印它们,让我们运行这个代码,然后开始显示一些查询,这是一个问题。
我们可以问这部电影赚了多少钱,我们有十五句话关于这部电影,Interstellar我们能否找到谈论票房的句子,即使它不使用那些关键词,我们打印了结果两次,所以我们检索到了前三个结果,这是它的全部文本。
所以第一个结果说这部电影的全球票房超过六七亿七百万,这是我们正在寻找的正确事情,在这里我们也打印了一次,显示距离,所以我们有这个评分机制,衡量文本与查询的接近程度。
现在,我们已经看到了如何进行密集检索,让我们谈谈使用像Oy这样的工具进行向量搜索,我们刚刚看到的那个是近似最近邻,并谈谈它与这种其他类型的向量搜索工具的比较,被称为向量数据库。
密集检索真正通过找到搜索查询的近邻来工作,为了优化速度,我们现在实际上搜索近似最近邻,所以找到精确最近邻是耗时的计算,但我们有许多高度优化的算法可以获取你,近似最近邻,这就是他们被称为ann的原因。
或近似最近邻,我们谈论了ann库,但还有其他一些也是开源的,所以ann来自Spotify,Feist是Facebook的另一个热门选择,Scan来自Google,都是近似最近邻向量搜索库的选择。
另一方面,向量数据库有很多更多的变化和选择,所以我们v eight是其中之一,还有其他一些也是在线服务的,如pine,Cone和一些其他开源的,一些常见的选择包括quadrant,Vespa。
Chroma,但如果你对数据库如PostgreSQL熟悉,PostgreSQL有扩展可以进行向量搜索,现在,一个常见的问题是想知道这些两者之间的差异,所以,近似最近邻向量搜索库通常设置起来更容易。
你看到如何设置ann,和安装它可能比其他选择更容易,这些向量搜索库也倾向于只存储向量,所以它们不存储与示例文本相关的文本,你看到我们给它了一个搜索查询,它返回给我们文本,所以它管理这个,并存储文本。
它能够检索我们要的文本,所以它做了一点更多,它稍微更丰富一些,另一个主要区别这些库和向量数据库是,数据库更新更容易,数据库比这些库更容易更新,所以,如果你在使用库时想要添加新记录或修改记录。
你需要重建你的索引,而如果你在使用数据库,数据库会为你处理这些,向量数据库也允许我们过滤和执行更复杂的查询,就像我们看到的,通过过滤语言,嗯。
这些都是向量数据库现在让我们在现实世界中可以做的一些有用的事情,你不需要真正完全替换关键词搜索与向量搜索,它们相互补充,你可以在同一个流水线中使用它们作为混合搜索,这意味着当你收到一个查询时。
你会同时对它进行关键词搜索和向量搜索,你可以看到语言模型如何驱动向量搜索组件,这两个搜索组件都将给出一个分数,为文本档案中的每个文档分配一个分数,然后,我们可以聚合这些分数并呈现最佳结果。
你看到这些其他信号在右边吗,这里是你可以将其他信号注入搜索结果的地方,Google,例如,有它的著名PageRank算法,为其他网页和网站分配权威分数,基于它们链接到的其他网页的数量。
所以你可以视为另一个信号,搜索引擎有数十,数百,有时甚至数千个信号,它们输入到决定如何排序搜索结果的决策中,这就是你如何将文本相关性与其他信号结合在一起的方式,通过下一个课程的聚合步骤。
你将看到重排如何融入搜索步骤,并了解它如何大大提高排名,以及查询与搜索结果之间的相关性,如果你想了解更多关于过去几年密集检索的历史,这是一个非常好的资源,它是一本书和一篇论文。
叫做预训练变压器用于文本排名BERT和 beyond,我强烈推荐你去看看,如果你对过去几年这些模型的发展感兴趣,现在,我们已经看到了密集检索的工作方式,这是其中一种主要使用语言模型的语义搜索方式。
让我们去下一个课程,我们将学习第二种类型,被称为重排。
标签:吴恩达,训练,提示,模型,微调,教程,笔记,搜索,我们 From: https://www.cnblogs.com/apachecn/p/18443049