公开课 | 2024清华大模型公开课 第5课 大模型前沿架构 Part 1(RAG、MoE)

本文由readlecture.cn转录总结。ReadLecture专注于音、视频转录与总结,2小时视频,5分钟阅读,加速内容学习与传播。

大纲

  • 第一部分:检索增强式语言模型

    • 检索增强式语言模型的概念

    • 大模型面临的幻觉问题

    • 解决幻觉问题的方法

      • 领域数据微调

      • 访问外部知识库

    • 检索增强式语言模型的实现

      • 信息检索的整体框架

      • 密集向量检索模型

      • 向量缩减模型和重排序模型

      • 对比学习在检索模型中的应用

    • 检索增强式语言模型的应用

      • 多模态检索

      • 代码场景的RAG建模

  • 第二部分:Mixture-of-Experts(MOE)

    • MOE模型的概念

    • 人类大脑与大模型的比较

    • MOE模型的实现

      • 稀疏化建模

      • 模块化建模

      • 动态结合多个专家模型

    • MOE模型的训练方法

      • 切换稀疏稠密训练

      • 动态模块化训练

    • MOE模型的应用和效果

  • 第三和第四部分:大模型的长文本建模及大模型相关内容(由朝军介绍)

内容总结

一句话总结

本文深入探讨了检索增强式语言模型和Mixture-of-Experts(MOE)模型在大模型前沿框架中的应用和挑战,强调了通过外部知识和模块化建模提高模型性能的重要性。

观点与结论

  • 检索增强式语言模型通过访问外部知识库可以有效缓解幻觉问题。

  • MOE模型通过稀疏化和模块化建模,显著降低了计算成本并提高了模型效率。

  • 对比学习和动态模块化训练是提高检索模型和MOE模型性能的有效方法。

  • 大模型的发展需要考虑能耗和响应时间,人类大脑的稀疏化结构提供了有价值的参考。

自问自答

  1. 什么是检索增强式语言模型?

    • 检索增强式语言模型是一种通过访问外部知识库来辅助生成更精准回复的语言模型。

  2. 大模型面临的幻觉问题是什么?

    • 幻觉问题是指大模型在生成过程中产生的事实性错误或不准确的回复。

  3. MOE模型的主要优势是什么?

    • MOE模型的主要优势在于通过稀疏化和模块化建模,显著降低了计算成本并提高了模型效率。

  4. 如何通过对比学习提高检索模型的性能?

    • 对比学习通过选择难负样本进行训练,可以有效提升检索模型的性能。

  5. 大模型的发展面临哪些挑战?

    • 大模型的发展面临能耗高、响应时间长和计算成本高等挑战。

关键词标签

  • 检索增强式语言模型

  • Mixture-of-Experts(MOE)

  • 幻觉问题

  • 对比学习

  • 稀疏化建模

适合阅读人群

  • 人工智能研究人员

  • 自然语言处理工程师

  • 数据科学家

  • 计算机科学学生

术语解释

  • 检索增强式语言模型:通过访问外部知识库来辅助生成更精准回复的语言模型。

  • Mixture-of-Experts(MOE):一种通过稀疏化和模块化建模来提高模型效率的模型结构。

  • 幻觉问题:大模型在生成过程中产生的事实性错误或不准确的回复。

  • 对比学习:一种通过选择难负样本进行训练,以提高模型性能的学习方法。

  • 稀疏化建模:通过减少模型中激活的神经元数量,来降低计算成本和提高模型效率的方法。

视频来源

bilibili: Lecture 5 大模型前沿架构 Part 1_哔哩哔哩_bilibili

讲座回顾

  • 课程分为四个部分。

  • 第一部分介绍检索增强式原模型。

  • 第二部分介绍Mixture-of-Experts(MOE)。

  • 第三和第四部分由朝军介绍,内容涉及大模型的长文本建模及大模型相关内容。

很高兴能与朝军共同探讨大模型前沿框架。本课程将分为四个部分:第一部分是检索增强式原模型;第二部分是Mixture-of-Experts(MOE);第三和第四部分将由朝军介绍,内容包括大模型的长文本建模及大模型相关内容。

  • 介绍了检索增强式语言模型的概念。

  • 提到了人类在问答过程中会利用互联网信息辅助回复。

  • 探讨了大模型面临的问题,特别是幻觉问题。

首先,我们将介绍检索增强式语言模型。相信大家对这一概念已有一定了解。在人类进行问答过程中,我们通常会从互联网获取信息,以辅助我们做出更精准的回复。接下来,我们将探讨大模型当前面临的一些问题。首先,是老生常谈的幻觉问题,即大模型在生成过程中的幻觉现象。

  • 大模型在回复中可能生成错误或包含事实性错误。

  • 举例说明:大模型错误地列出了Hinton的五篇代表作。

  • 这种现象被称为“幻觉问题”,与第一节课讨论的问题相关。

通常会生成这样的错误回复,或者回复中包含事实性错误。例如,我们列举了Hinton的五篇最重要的代表作,但大模型可能会给出错误的书籍信息。这其实就是我们常说的幻觉问题,这回到了我们第一节课所讲的例子,即幻觉问题。

我们这样一个社会影响是非常不利的,比如说我们会造成谣言的传播,还是以我们这样的一个,以杭州的一则新闻为例,这是一个由大型模型生成的不符合实际的例子。从这个例子中,我们可以想象,如果大型模型能够访问公共网络,是否就能帮助缓解其产生的幻觉问题。

  • 通过在特定领域数据上微调大型模型可以改善性能。

  • 微调过程中存在泄露用户隐私的风险。

  • 在金融或私密领域构建模型时,需要进行数据脱敏或特殊处理以防止信息泄露。

解决幻觉问题,我们还可以采用另一种方法,即通过在特定领域数据上进行微调来改善大型模型的性能。然而,在领域数据上进行微调也存在一些挑战。例如,经过下游数据微调后,大型模型可能会泄露用户隐私。这意味着,如果我们希望构建一个金融或更私密领域的大型模型,如果不进行数据脱敏或特殊处理,模型很容易泄露敏感信息。

  • 大型语言模型存在信息泄露的风险,如输出电话号码或电子邮箱。

  • 指令微调(SFT)是改进模型的方法,但存在数据质量问题。

  • 使用Self-Instruct方式通过GPT生成回复进行微调,效果不佳,模型难以学习事实性知识。

那么这个大型语言模型非常容易泄露我们的信息。这也是一个例子,比如我让这个大模型输出相关的信息,如电话号码或电子邮箱,它很容易就泄露了用户的信息。这是大模型微调面临的问题。刚才丁宁提到,通过指令微调可以训练出更好的SFT模型。但在指令微调中,也存在一些问题,比如如何保证数据的质量。如果我们采用Self-Instruct方式,使用GPT生成回复来微调语言模型,我们发现效果并不理想。例如,这个大模型不能很好地学习到其中的事实性知识。

  • 右边的例子展示了红色部分的事实性错误和绿色部分的事实性正确。

  • 模型更多地模仿了GPT的表述方式。

  • 例子反映了丁宁在指令微调过程中讨论的问题。

在撰写的一种形式中,我们可以参考右边的例子。右边的例子展示了红色部分,这部分含有事实性错误,而绿色部分则是GPT回答的正确部分,具有事实性正确。然而,我们可以发现这个模型更多地模仿了GPT的表述方式。这个例子也反映了我们之前提到的丁宁所讨论的问题,即在指令微调过程中,指令微调的数字。

数据是非常重要的,但目前我们缺乏有效的方法来构建,只能依赖于如GPT这类方式来实现。这种训练方式实际上并不容易。要使大型模型更好地记忆事实性知识并不容易。因此,我们可以考虑一个问题:如果不通过微调,而是赋予大型模型访问外部知识的权限,是否能帮助我们提高响应的准确性和可靠性?

  • RAG模型与全参数微调模型对比:

    • RAG模型无需微调,操作简便。

    • 全参数微调模型微调耗时。

    • RAG模型通过外部知识库更新知识,操作简便。

    • 全参数微调模型需通过微调参数更新知识。

我们可以解决幻觉问题或记忆不准确的问题。在此,我们进行一个横向对比,比较RAG模型与全参数微调模型之间的差异。RAG模型不需要微调,但如果要微调一个大规模模型,则非常耗时。同时,外部知识库非常容易更新,随着时代变迁,知识可以更新。通过更新外部知识库,操作更为简便。然而,若要更新模型知识,则需对参数进行微调。

  • RAG模型框架包含两个主要部分:

    • 从外部知识库检索有用信息。

    • 将检索到的知识输入大模型以辅助生成更精准的回答。

那么相较于微调而言,RAG Modeling 也是一种更为快捷且易于实现的方法。RAG模型的框架主要由两个部分构成。首先,我们需要从外部知识库中检索出有助于模型回答问题的知识。这一步骤涉及从大规模知识库中抽取有用信息。其次,是生成阶段,我们将这些知识输入到大模型中,以辅助其进行更精准的生成。接下来,我们将详细介绍如何实现这一检索框架。

在介绍这个检索框架之前,首先我们来回顾一下信息检索这个问题。那么相信大家在平时生活中已经拥有了很多这样的经验。

  • 搜索引擎通过大规模索引系统处理用户的信息需求。

  • 信息检索模型分为密集向量检索模型和稀疏检索模型。

  • 稀疏检索模型常用TF-IDF或BM25方法实现。

  • 文章将主要介绍密集向量检索模型。

搜索引擎对外部数据库进行查询的总体框架是,当用户有信息需求时,会提出问题,例如“奥巴马的家庭族谱”。通过预先构建的大规模索引系统进行查询,返回与用户需求相关的搜索结果。这是信息检索的整体框架。信息检索模型的实现分为两个部分:首先是检索模型,包括密集向量检索模型和稀疏检索模型。稀疏检索模型通常使用TF-IDF或BM25等方法实现。接下来,我们将主要介绍密集向量检索模型。

  • 向量缩减模型:最广泛使用的IR模型,用于高效抽取大规模文本中的相关文档,确保高召回率。

  • 重排序模型:在向量缩减模型后对候选文档进行精细调整,以提升模型效果。

  • 模型结构

    • 向量缩减模型采用双塔模型,用户问题和文档独立编码,便于离线处理和存储。

    • 重排序模型采用单塔模型,允许用户问题和文档进行深层次交互。

  • 其他技巧:多路召回、密集检索模型和稀疏检索模型的结合使用,以及密集向量检索模型的研究。

在当前的IR模型中,向量缩减模型是最为广泛使用的。这种模型在数据库中被称为向量数据库。除了向量缩减模型外,还存在一个重排序模型,它在整个过程中起到关键作用。如图右侧所示,面对大规模文本时,我们需要使用向量缩减模型来高效地抽取相关文档,并确保高召回率。在第二阶段,通过重排序模型对搜索到的候选文档进行精细调整,以保证模型效果。

在整个模型框架中,向量缩减模型通常采用双塔模型,即用户问题和文档分别进行独立编码。这种独立编码的优势在于所有文档向量可以独立进行离线编码,且只需编码一次即可存储于向量数据库中。在重排序阶段,通常采用单塔模型,将用户问题和文档输入模型中,进行更深层次的交互,从而实现更好的排序效果。

总体而言,当前的框架大致如此。此外,还有一些其他技巧,如在第一阶段采用多路召回,结合密集检索模型和稀疏检索模型等方式,以实现更精准的召回模型。这些都是商业模型中常用的技巧。目前研究的一个热点是密集向量检索模型,它是向量数据库的基础。

  • 向量检索模型包含多个部分。

  • 使用BERT模型对用户问题和文档进行编码,生成密集向量WQ和WD。

  • 通过计算WQ与WD的点积来评估相关性分数。

  • 根据相关性分数对文档进行排序。

  • 模型需要优化以支持大量文档。

这个向量检索模型实际上分为几个部分,整个流程非常简单。首先,我们使用一个BERT模型,分别对用户的问题和待检索的文档进行编码。这样,它们就变成了密集向量,即WQ和WD。在WQ和WD的检索过程中,我们需要用WQ的向量与所有WD的向量进行点积,计算它们之间的相关性分数。然后,将相关性分数最高的文档进行排序,形成我们的密集向量检索模型。当然,为了支持大量文档,我们还需要进行相应的优化。

  • Facebook的Faiss库用于高效处理大规模向量数据。

  • 支持百万级别向量的处理,压缩速度快。

  • 支持GPU操作和CPU多线程操作。

  • 需要训练Bert模型以适配Faiss库。

在这个时候,我们可以使用Facebook的Faiss高效处理库。该库支持处理百万级别的向量,并且压缩速度非常快,同时支持GPU操作和CPU的多线程操作。那么,如何训练我们的Bert模型,使其能够适配到这种程度呢?

  • 讲座采用对比学习方法。

  • 正例文本来源:语料库文本或无监督重排序模型筛选的包含答案的文本。

  • 负例文本选取方法:

    • 随机选取。

    • 无监督BM25检索模型检索的文档。

    • 批次训练中,每个查询对应一个真实答案段落,其他真实答案段落作为负例。

在本次讲座中,我们采用了对比学习的方法。在对比学习过程中,正例文本来源于语料库中提供的文本,或者通过无监督重排序模型筛选出的包含答案字符串的文本,这些都被视为正例文本。负例文本的选取则有几种方法:首先,可以通过随机选取的方式;其次,可以利用无监督的BM25检索模型检索到的文档作为负例文档;此外,还有一种高效的训练方法,即在每个批次训练时,每个查询(query)对应一个真实答案的段落(ground truth passage),而其他真实答案的段落则作为负例文档。

这些训练方式实际上是老生常谈的,因为它们最早源自于图像嵌入学习。因此,这些方法体现了Dense Retrieval的一些优势。

  • 训练方法中存在问题:负例文档过于简单导致模型容易学习,损失值低。

  • 损失值低导致梯度消失,影响实际应用效果。

  • 2022年ICLR需要改进此问题。

在训练方法中,存在一些不足之处。例如,如果我们提供的负例文档过于简单,如随机选取的负例过于简单,模型很容易学会,导致损失值(loss)变得非常低,进而引发梯度消失的问题。尽管损失值接近零,但梯度几乎不存在,这在实际应用场景中表现并不理想。因此,在2022年的ICLR中,需要对此进行改进。

  • 熊晨严等人在2021年提出了一种使用难负样本的方法进行模型训练。

  • 该方法涉及定期更新Checkpoint,并利用其结果选取与查询相近的负样本作为难负样本。

  • 通过对比学习,这种方法旨在提高模型的检索效果。

  • 该检索场景与传统预训练模型场景存在差异。

在2021年,熊晨严等人提出了一种使用难负样本的方法进行选择。例如,每隔一段时间我们更新了这样一个Checkpoint,然后利用这个Checkpoint的结果来选取与查询相近的负样本,作为难负样本进行对比学习,以训练我们的模型,从而实现更好的检索效果。在这个过程中,我们会发现这种检索场景与传统的预训练模型场景有所不同。

  • 在BERT模型中,Mask的词如Seattle和Tokyo在语义上都成立,但在实际检索场景中需要区分。

  • 实际检索场景中,词向量如Cat和Dog应相近但需区分,以检索相关内容如Video或Image。

  • 需要通过全参数微调方法,利用问题和文档的相关性信号,学习词之间的不同语义匹配模式。

  • 实际用户标准存在问题,如美国官方标准局2020年的TREC-Covid比赛。

但是还是有所不同,主要的不同在于我们可以参考上面的例子。在这个例子中,如果我们采用类似BERT的预训练模型,我们会发现在这个地方,我们Mask的词,无论是填Seattle还是Tokyo都是正确的,也就是说在这个地方Mask的语义,实际上Seattle和Tokyo都是完全成立的。然而,在实际的检索场景中,我们希望的是Tokyo retrieval,它检索出来的是Tokyo retrieval,而不是Seattle retrieval。也就是说,在我们实际的检索场景中,我们原始的词向量,比如像Cat和Dog,它们应该是非常相近的,但在检索过程中,应该将Cat和Dog区分开来。我们希望搜索的Cat是一个Video或者是一个与Cat相关的Image。因此,在这里我们会发现在实际的信息检索场景中,词向量的语义实际上应该是不一样的。这样的不同,需要我们通过全参数微调的方法去实现,也就是说,我们要有这样的问题和文档的相关性信号,去训练我们的模型,学习到词之间的不同模式的语义匹配。在这里,实际上还有另外一个问题,即在实际用户标准中,它会有非常大的问题,例如在美国官方标准局在2020年的时候,有一个TREC-Covid的比赛,这个比赛实际上是...

  • 任务涉及新冠学术文档的检索。

  • 美国官方标准仅标注了50条查询(query)。

  • 标注过程包括使用检索器检索候选文档,然后进行对比和评估。

这是一个关于新冠学术文档的检索任务。在这个任务中,美国官方标准仅标注了50条查询(query)。之所以只标注了50条query,是因为整个标注过程是这样的:首先使用一些检索器进行检索,检索到候选文档后,再与我们进行对比和评估。

  • 数据标注在垂直领域面临高人力成本和Hold rate problem。

  • Hold rate problem指未标注但相关的文档影响训练效果。

  • 提出通过生成候选Query来解决标注问题,利用语言模型在垂直领域构建问题和文档对。

  • 直接生成文档可能存在挑战。

在标注过程中,存在几个关键问题。首先,人力成本极高。因为在垂直领域进行数据标注时,需要聘请大量专业人士,这些专业人士的标注成本较高。其次,无法对所有文档进行标注,只能对部分候选文档进行标注,这导致了Hold rate problem的出现。Hold rate problem指的是在语料库中,存在一些未标注但与用户问题相关的文档,这影响了训练效果。因此,数据标注过程非常困难。

为了解决这一问题,一个简单的方法是生成问题。由于文档数量庞大,可以根据这些文档生成与文档对应的候选Query,作为QD的生成。利用语言模型的强大泛化能力,在通用域的大规模数据中训练Query生成器,并在垂直领域根据文本生成Query。这样可以在垂直领域构建问题和文档对,通过这些对训练检索模型,以达到更好的效果。

然而,这里存在一个问题,即直接生成文档可能会遇到挑战。

  • 问题描述:提出的问题关于新冠爆发的症状,非常宽泛,与多个文档相关。

  • 对比学习需求:对比学习需要一个正例和一个负例,宽泛问题不适用。

  • 训练方法改进:2021年提出新的训练方法,以适应对比学习的需求。

这个问题通常非常宽泛,例如以下例子。我们根据中间的文档生成了一个问题,该问题是关于新冠爆发的症状。我们发现这个问题与许多文档相关。然而,对于对比学习而言,我们期望有一个正例和一个负例。因此,这样一个非常宽泛的问题并不适用于我们的对比学习训练。因此,在2021年,我们提出了这样的训练方法。

  • 查询生成方法:基于对比学习,首先生成假问题,然后搜索正负样本文档。

  • 生成新查询:通过对比生成方式,模型识别正负样本文档的特定词汇,提升问题生成质量。

  • 训练效果:该方法辅助进行更有效的对比学习训练。

  • 多模态检索:将密集向量检索模型适配到多模态检索过程中,提出基于对比学习的密集检索模型。

基于对比学习的查询生成过程如下:首先,根据已有的文档生成一个假问题,然后利用这个假问题搜索两个混淆的文档,分别作为正样本和负样本。通过对比生成的方式,进一步生成新的查询。这种方法能够有效提升问题生成的质量。具体来说,在对比学习的生成过程中,模型能够从正样本文档中识别出区别于负样本文档的特定词汇,从而更好地区分正负样本文档。此外,这种方法还能辅助进行更有效的对比学习训练。除了对比学习的新颖问题,我们还可以将密集向量检索模型适配到多模态检索过程中。今年,我们提出了这一基于对比学习的密集检索模型。

具体而言,当我们拥有一个训练良好的稠密向量检索模型时,可以通过视觉模块插件的方式,赋予文本检索器图片理解的能力。通过这种方式实现多模态检索的效果。

  • 采用两种方法进行视觉理解模块的微调。

  • 第一种方法:通过原始图片和图像描述的对比学习训练,文本检索模块保持不变。

  • 第二种方法:在执行下游任务时,固定CLIP图像编码器和投影层。

在这里,我们采用了两种方法。第一种方法是通过原始图片和图像描述(image caption)的对比学习训练,对视觉理解模块进行微调。在此过程中,文本检索模块被固定,即保持不变。第二种方法是在执行下游任务时,固定CLIP图像编码器,同时固定投影层(projection layer)。

  • 检索器在接收到“提供15个创新提案”的问题时被激活。

  • 检索器不仅能检索文本信息,还能检索相关图片,实现多模态检索。

  • 在RAG模型中,第二个模块负责实现这一多模态检索功能。

通过这种方式对编码器进行微调,以适配到我们下游的多模态检索任务。具体的检索效果如下所示。当我们提出一个问题,即提供15个创新提案时,检索器将被激活,不仅检索相关的文本信息,还能包含一些有价值的图片,从而实现多模态检索的效果。在RAG模型中,第二个模块实际上是负责这一功能的。

  • RAG框架用于增强语言模型,通过检索外部知识。

  • 框架结构包括密集向量检索模型和语言模型(Reader)。

  • 生成概率包含检索器的概率和基于上下文的预测概率。

我们如何利用检索到的结果来生成语言模型,即如何使语言模型学会利用检索到的结果。首先,我们探讨如何使用外部知识来增强语言模型。在2020年,我们提出了RAG(Retrieval Augmented Generation)框架。在RAG框架中,当时仍处于BERT语言模型的时代,因此我们依赖于预训练和微调的范式。我们可以看到其结构如下:当给定输入时,我们采用密集向量检索模型来检索相关上下文。第二部分,我们将这些上下文输入给Reader,即语言模型,使其进行生成。在此过程中,生成概率实际上包含两个部分:第一部分是检索器的概率,即根据输入对每个上下文的概率进行建模;第二部分是根据X及其上下文预测的概率。

  • 存在一些模型无法通过微调优化。

  • RAG模型旨在不进行微调的情况下实现更优的生成效果。

  • 近年来已实现无需微调即可达到更佳生成效果的目标。

在这个时代,我们所有的模型都是基于微调框架实现的,即在整个RG框架中,原始模型与微调模型保持一致。在众多模型中,实际上存在一些无法通过微调来优化的模型。在RAG模型中,我们最大的动机是无需微调语言模型,便能实现更优的生成效果。近年来,我们已能够实现这一目标,即在不进行微调的情况下,达到更佳的生成效果。

  • REPLUG框架是一种实现RAG(检索增强生成)的模型。

  • 该框架在处理上下文问题时,首先调用检索器获取多个文档。

  • 这些文档与输入分别拼接后,单独送入原模型进行处理。

  • 每个文档拼接后的结果产生不同的概率,这些概率被累加以生成最终结果。

  • 这种处理方式实现了对多文档的建模。

实际上,也有一些模型实现了RAG框架,其中较为经典的是REPLUG框架。REPLUG框架与之前的框架基本相似。在给定上下文问题后,我们调用检索器,它会返回不同的文档。我们将这些文档作为上下文,分别与输入拼接,并单独送入原模型中。随后,我们计算出不同的概率并进行累加,从而得到生成结果。在整个建模过程中,上下文与输入被单独拼接,单独计算概率,然后累加这些概率,以实现对多文档的建模过程。

那么还有一种更为简单且通用的方法,即我们不希望将概率进行累加,因为概率累加可能会产生误差。例如,如果每个检索片段的质量不佳,那么这种累加方式可能会受到影响。他的输出概率会对我们整个输出概率产生重大影响,此时我们也可以采取相应措施。

  • 采用In-context learning方式进行Retrieval Augmented Generation建模。

  • 给定输入后,通过检索获取大量上下文信息。

  • 将获取的上下文信息拼接到大模型前端,作为基础背景。

  • 利用这种方式进行大模型的解码输出。

我们可以采用In-context learning的方式进行Retrieval Augmented Generation的建模。具体来说,当我们给定一个输入进行检索,获取到大量上下文信息后,将这些信息直接拼接到大模型前端,作为其基础背景,然后通过这种方式进行大模型的解码输出。

那么这也是一种更为简便的方法。除了针对文本进行建模外,我们这样的模型同样适用于多模态的方法。

  • 目标:生成高质量图片,例如拉布拉多犬坐在小椅子上的场景。

  • 方法:参考已有生成图片结果,使用Retrieval Augmented Generation(RAG)模型适应多模态场景。

例如,我们来看下面这个模型,在这个模型中,我们的目标是生成一张高质量的图片。这一点非常容易理解,比如给出的例子是拉布拉多犬坐在一个小椅子上。我们希望生成这样一张图片。在生成图片的过程中,有时我们会参考已有的生成图片结果。这时,我们可以将Retrieval Augmented Generation(RAG)模型适配到多模态场景中。

在这里,我们的实现方法非常简单。首先,我们接收到一个用户的问题,随后我们需要搜索相关的图片。为此,我们采用了一种图片搜索的方法。

在Clip框架中,搜索到图片后,我们对其进行上下文建模,将其作为大语言模型的输入,并嵌入到上下文中。最终,我们通过这种方式对图片进行解码,从而增强图片生成的效果。这一步骤至关重要。

  • 场景描述:在不太熟悉的环境中,利用检索器调用代码库中的文档。

  • 功能增强:通过增强代码文档,辅助大语言模型生成更精准的代码。

  • 研究现状:已有研究探讨这一过程。

  • 问题探讨:介绍多个RAG框架及其应用后,思考RAG建模中的问题。

除了图片模态之外,我们还可以对代码场景进行RAG建模。因为在实际的代码工程中,存在许多API或其他元素,这些都可以进行建模。我们并不是特别熟悉。在这个场景中,我们可以通过检索器调用代码库中存在的代码文档。通过这些代码文档的增强,进一步辅助大语言模型生成更精准的代码。这一过程已有相关研究进行探讨。在介绍了许多RAG框架及其应用后,我们思考RAG建模中存在哪些问题。

  • 讲座探讨两个关键问题:何时进行知识检索以及如何调用检索器增强语言模型。

  • 当前模型主要采用被动检索框架,不考虑模型实际需求,如REALM模型和KNN-LM。

  • REALM模型在检索一次后利用返回的知识增强语言模型,进行RAG建模。

  • KNN-LM在每次解码一个词时进行一次检索,以此增强语言模型。

值得我们深入思考的是,本次讲座将探讨两个关键问题。首先,我们需要明确何时进行知识检索,即在何种情况下调用检索器以增强语言模型。目前,许多模型采用被动检索框架,这种框架不考虑模型对知识的实际需求,而是在初始阶段进行知识检索。例如,REALM模型在检索一次后,利用返回的知识增强语言模型,进行RAG建模。另一种方法是KNN-LM,它在每次解码一个词时都进行一次检索,以此增强语言模型。显然,这两种模型各有其建模特点。

  • 用户问题不明确时,RG建模的优势受限。

  • 每次生成词都进行检索会导致效率低下。

  • 考虑让模型自主调用检索模块以提高效率。

在检索过程中,当用户问题不够明确时,我们在解码过程中需要新的知识,这时无法充分发挥RG建模的优势。然而,如果每次生成一个词都需要进行检索,这将导致效率问题。因此,我们考虑是否能教会模型自主调用检索模块,以进行实时的研究。

  • 使用动画形式展示主动检索框架。

  • 用户输入问题“generate a summary about Joe Biden”,语言模型生成关于乔·拜登的生日和地位的信息。

  • 评估语言模型输出的可信度,若不足则继续下一步。

  • 生成乔·拜登在宾夕法尼亚大学学习并获得法律学位的信息,但模型对此不确信。

  • 对“宾夕法尼亚大学”和“法律学位”进行编码,调用检索器补全知识。

  • 检索器返回乔·拜登的背景介绍文档,信息送回语言模型继续生成内容。

那么这里我们就介绍这个框架。在这个框架中,我们将通过动画形式进行展示。首先,为了实现主动检索框架,例如给定用户问题“generate a summary about Joe Biden”,即生成关于乔·拜登的简要总结。在接收到输入后,我们调用语言模型进行输出,生成关于乔·拜登的生日及其地位的信息。随后,我们评估这一输出是否可信。如果发现语言模型对输出结果不够确信,我们将继续进行下一步。

第二步,我们生成关于乔·拜登进入宾夕法尼亚大学学习并获得法律学位的信息。然而,在语言模型建模过程中,我们发现宾夕法尼亚大学和法律学位并非模型确信的内容。因此,我们对这两个词进行编码,并调用检索器以补全相关知识。检索器返回关于乔·拜登的背景介绍文档,我们再将这些信息送回语言模型,使其继续生成内容。

因此,在整个生成过程中,我们依赖于语言模型对其已有生成结果的处理。这个置信度,即指其适应性。生成的词的概率用于判断是否需要进行检索。这是一个主动检索的经典框架及其动机。第二个问题是,在RAG建模中,我们如何利用检索到的结果。

  • RAG框架面临的主要问题包括:

    • 检索器返回的候选passage中包含噪音,影响检索精确度和模型生成结果。

    • 用户问题通常简短且不精确,导致用户意图不明确,影响RAG模型效果。

在RAG框架中,我们面临两个主要问题。首先,检索器返回的候选passage中不可避免地包含噪音,这导致检索过程无法达到100%的精确度。这些噪音会对模型生成结果产生负面影响。例如,使用ChatGPT时,稍微调整上下文就可能导致结果出现显著偏差。因此,大量噪音输入会直接影响模型输出结果。其次,用户提出的问题通常简短且不精确,用户往往只输入几个关键词来代表问题,而不提供详细信息。这种用户意图不明确的情况会导致RAG模型效果不佳。例如,询问“Who was the producer of The Woods”时,搜索引擎可能会给出多个不同含义的The Woods,如某个人或某部电影。

我们想探讨的是一个电影问题,这是NQ数据集的一个实际案例。从中可以发现,很多时候用户提出的问题并不明确,因此需要大模型来帮助用户进行查询和尝试。

  • 提出的方法旨在生成更精准、用户意图明确的问题。

  • 处理上下文的基本方法包括模型自行检查并去除噪音。

  • 介绍了基础工作,并提及后续经典工作如Self-RAG,这些工作主要利用大模型来判断和处理上下文中的噪音。

这将会产生一个更加精准且用户意图明确的问题。为了处理上下文,最简单的方法是让模型自行检查其中是否存在噪音,并对这些噪音进行去噪和总结。这里我们介绍一个基础的工作,后续还有一些经典的工作,例如Self-RAG,但它们大多采用一种思想,即利用大模型来判断上下文与用户问题之间是否存在噪音。

所以说,这里我们介绍一个最简单的框架来处理这个问题。实际上,我们希望语言模型能够接收一个指令,然后根据这个指令从搜索到的内容中总结出相关信息。

  • 关键步骤包括:撰写笔记、判断笔记与用户问题的相关性、根据相关性决定是否直接生成答案或进行输出。

  • 利用大模型处理上下文。

  • 可以进一步细化处理步骤以明确用户问题。

那么在这个指令中,我们明确了几个关键步骤:首先,撰写笔记;其次,判断笔记与用户问题的相关性;第三,如果不相关,则直接生成答案;如果相关,则进行输出。这种方法简单地利用大模型对上下文进行处理。此外,为了使用户问题更加明确,我们还可以进一步细化处理步骤。

我们可以采用大模型的COT方式来补充用户意图。这里我们将介绍一种迭代式搜索的工作方法。迭代式搜索是一种通过不断优化搜索策略来提高搜索效率的技术。

  • 迭代式搜索模型首先对用户问题进行初步检索,获取相关文档。

  • 基于初次检索的文档和用户问题,生成一个Chain-of-Thought(COT)结果,即T1。

  • 将T1作为新的查询问题进行二次检索,并根据二次检索的结果再次生成一个新的COT结果T2。

  • 整个过程综合考虑了用户问题、初次检索结果及首次生成的COT结果。

迭代式搜索模型框架如下:首先,对用户问题进行初步检索,获取相关文档。随后,基于检索到的文档和用户问题生成一个Chain-of-Thought(COT)结果,即T1。接着,将T1作为新的查询问题进行二次检索,并根据二次检索的结果再次生成一个新的COT结果T1。此过程中,综合考虑了用户问题、初次检索结果及首次生成的COT结果。

  • 描述的方法是一种交互式检索。

  • 通过原模型生成退离2的方式,使问题更明确。

  • 该方法属于迭代式检索。

  • RAG模型包含多项工作,继续探索可能会有新发现。

所以说这种方法实际上也是一种交互式检索,通过原模型生成退离2的方式,使得用户问题更加明确。这是我们迭代式检索的一个简单介绍。最后总结一下,RAG模型包含了许多工作,相信如果继续探索这些工作,会有更多的发现。

  • RAG模型比SITP模型更简单,可能不需要微调语言模型。

  • RAG模型能访问外部知识库,辅助内容生成。

  • RAG模型适用于多模态场景,如代码和图片生成。

  • 模型由检索器和生成器组成,检索模块面临训练标注不足的问题。

  • 可通过插件化扩展检索器至多模态场景。

  • 大型模型在RAG应用中面临何时检索及如何有效利用检索知识的挑战。

其实里面还有很多问题需要我们去解决。我们来总结一下,RAG模型相较于SITP模型,是一个更为简单的模型,这意味着我们可能不需要对语言模型进行微调,就能使其输出更加精准。RAG模型能够访问外部知识库,并利用这些知识辅助生成内容。此外,RAG模型可以应用于多模态场景,如辅助代码或图片的生成。该模型主要由检索器和生成器两部分组成。检索模块通常面临训练标注不足的问题,这在持续领域尤为明显。我们可以通过插件化的方式将检索器扩展到多模态场景中。当前,大型模型在RAG应用场景中还面临两个主要问题:何时进行检索以及如何有效利用检索到的知识。

  • RAG模型在商业领域,特别是文档理解中有广泛应用。

  • 未来研究方向包括对结构化文本和多模态文本的RAG处理。

  • 即将介绍混合专家模型(mixer of expert)及其详细内容。

在探讨如何应用我们解锁的脑理智时,整个RAG模型已经为大家提供了一个简洁而详细的介绍。实际上,RAG在多个商业领域,包括文档理解,都有其独特的应用。后续可以进一步研究如何对结构化文本和多模态文本进行RAG处理,这些都是潜在的研究方向,在商业领域中应用广泛。这是第一部分。第二部分,我们将介绍混合专家模型,即mixer of expert。首先,我们将详细介绍混合专家模型。

  • 人类是已知最聪明的物种,代表宇宙生物智力的最高水平。

  • 人类经历了数百万年的演化,脑容量和结构发生了显著变化。

  • 250万年前的人类(能人)只会使用简单工具,30万年前的智人脑体积更大且更复杂。

  • Yann LeCun和Yoshua Bengio在2022年的白皮书中提到,神经科学将为下一代人工智能提供指导。

我们来看一下人脑的结构。人类是目前世界上已知的最聪明的物种,代表着宇宙生物智力的最高水平。人类经历了数百万年的演化,脑容量和结构发生了巨大变化,比重也逐渐增加。例如,250万年前的人类以能人的形式存在,只会使用简单工具;30万年前则以智人的形式存在,脑体积变得更大且更复杂。Yann LeCun和Yoshua Bengio在2022年发布的白皮书中指出,神经科学将为下一代人工智能提供强大的指导。

  • GPT-3模型参数数量与人类大脑神经元数量相当,约为1750亿。

  • GPT-3的能耗为400瓦特,远高于人类大脑的15瓦特。

  • GPT-3的响应时间为2000毫秒,远高于人类大脑的100毫秒。

  • 人类大脑具有稀疏化结构,能以低能耗和灵活机制实现复杂认知。

  • 人类大脑的不同功能模块协同配合,如视觉、听觉和注意力等。

首先,我们来比较一下当前模型与人类大脑之间的区别。以GPT-3模型为例,尽管其能力非常强大,但其参数数量为1750亿,与我们人类大脑的2000亿神经元大致相当。然而,在能耗方面,GPT-3的能耗高达400瓦特,而人类大脑仅为15瓦特,显示出显著的能耗差异。此外,GPT-3的响应时间为2000毫秒,远高于人类大脑的100毫秒。因此,在响应时间和能耗方面,人类大脑明显优于GPT-3。

人类大脑的结构呈现出稀疏化的特点,能够以更低的能耗和更灵活的机制实现复杂的认知。这种稀疏化结构依赖于神经元的稀疏连接,从而形成了不同的功能模块。为了完成语言认知等任务,大脑需要不同模块的协同配合,如视觉、听觉和注意力等模块的相互作用。因此,相较于大型模型,人类大脑的稀疏化结构在功能实现上更具优势。

我们是否可以将大模型建模成稀疏化和模块化的形式呢?实际上,这就是MOE所采用的模型结构。在大模型领域,从2019年到2022年的四年间,数据增长了500倍,参数规模增长了1.6万倍。这种参数规模的扩充显著提高了计算复杂度,同时也导致了高昂的计算成本。

也就是说,我们原本可能只需要几块2080Ti就能运行,但现在使用A100可能需要多块来进行模型的推理和训练。因此,这个。

  • 大型模型发展遵循分层结构,包括多个阶段:能力提升、对齐、聊天、阅读理解、真实性验证、意图识别和代码生成。

  • 大型模型的训练存在冗余问题。

  • 软件开发通过重用和转移能力(如分支和合并)来提高效率。

我们现在面临的问题是大型模型的发展。整个过程遵循一个分层结构,包括能力提升、对齐、聊天、阅读理解、真实性验证、意图识别和代码生成等阶段。与软件开发相比,大型模型的训练往往导致冗余,而软件开发则受益于重用和转移的能力,如分支和合并。

  • 大语言模型的开发采用层级化方式,通过微调参数和对齐训练来增强特定能力。

  • 以LLaMA 2为例,通过微调和对齐训练得到LLaMA 2-chat,进一步微调增强API调用能力得到fLLaMA 2模型。

  • 若要增强代码能力,需微调LLaMA 2得到codeLLaMA模型,进一步增强可得到新模型。

  • 大语言模型的开发未采用模块化方法,而是通过重新训练模型来获得新模型。

  • 相比之下,代码开发采用可复用和可迁移的特性,提高开发效率。

大语言模型的开发采用了层级化的方式。以LLaMA 2为例,若采用对齐策略,需对LLaMA 2的所有参数进行微调,进而进行对齐训练,得到LLaMA 2-chat。进一步地,若想增强其API调用能力,则需使用API调用数据进行进一步微调,得到fLLaMA 2模型。以此类推,若要增强代码能力,同样需微调LLaMA 2,实现codeLLaMA模型。再进一步增强,可得到新模型。由此可见,大语言模型的开发并未遵循模块化方法,而是通过增强特定能力,重新训练模型以获得新模型的方式进行。相比之下,代码开发则采用可复用和可迁移的特性,从而提高开发效率。因此,我们也在考虑如何进一步提升代码开发的效率。

也能够实现模块化的过程。在这里,我们首先要介绍实现模块化的一个重要前提。因为人脑中,它是以模块化的形式存在。在Transformer这一大型模型中,我们发现每个FN层,如前馈层,呈现出低激活状态,即约80%的神经元仅被激活了5%的比例。

因此,在一次推理过程中,实际能激活的神经元数量非常有限。若我们能通过某种方法对其进行稀疏化建模,是否能有效实现模块化建模?

那么这一章我们将介绍的问题是MOE模型,它是一种非常具有代表性的稀疏计算建模方法。

我们可以详细探讨如何实现Mixture of Experts模型。在这个模型中,我们将整个FFN模块视为一个专家。

  • 每个专家(FFN层)设计用于特定的任务或数据子集。

  • 数据输入时,通过路由模块决定由哪个FFN层处理。

  • 路由机制根据输出选择合适的FFN层。

每个专家都设计有单独适配的任务或特定的数据子集。这意味着每个FFN层都适配于不同的任务或数据子集。因此,我们可以将这些FFN层视为不同的专家。第二部分是,当数据输入时,我们需要将其分配给不同的专家进行处理。这里有一个简单的路由机制,即路由模块根据输出决定将数据交给哪个专家的FFN层进行处理。整个过程相对简单,例如在图例中,路由器判断该模式应由第二个FFN层处理。

  • 参数被分配给第一个FFN层处理。

  • 参数在输入处理过程中被分配给不同专家分别处理。

  • 模型包含多个FFN层,但推理时仅激活部分FFN层(专家)。

  • 这种设计在保持参数规模的同时,实现高效推理。

下面这个Parameters被分配给了第一个FFN层进行处理。在整个输入处理过程中,这些参数被分配给不同的专家进行分别处理。因此,在模型的建模过程中,我们可以拥有多个FFN层,但在实际推理过程中,只有一部分FFN层,即专家被激活。这样的模型设计可以在保证模型参数规模的前提下,实现高效推理过程。

  • MOE架构优势:显著降低计算成本,通过动态结合多个专家模型实现高效训练和推理。

  • 推理过程:在推理阶段,只需激活部分专家模型,无需计算所有参数。

  • FFN层实现:前馈神经网络层通过乘以矩阵WE、ReLU激活、再乘以W2得到输出。

  • ReLU函数特性:输入为正时输出不变,输入为负时输出为0。

  • 专家系统构建:利用ReLU特性,将经常一起激活的神经元聚集成专家系统。

我们的模型采用了Mixture of Experts(MOE)架构,这一架构的主要优势在于能够显著降低计算成本。MOE通过动态结合多个专家模型的输出,实现了更有效的训练和更高效的推理。在推理阶段,只需激活部分专家模型,即可完成高效的推理过程,无需计算所有参数。

我们团队的一项经典工作涉及如何构建不同的混合专家框架。具体来说,对于一个前馈神经网络(FFN)层,其实现形式如下:给定输入,首先乘以矩阵WE,然后通过ReLU函数进行激活,接着乘以第二个参数W2,最终得到输出。ReLU函数的形式为f(x) = max(0, x),这意味着当输入为正时,输出保持不变;当输入为负时,输出为0,即未激活状态。

利用这一特性,我们可以将FFN层划分为不同的专家系统。具体而言,如果某些神经元经常一起被激活,例如针对某些输入,多个专家同时被激活,我们可以将这些神经元聚集成一个专家。通过这种方式,我们可以采用聚类或其他方法进行整体建模,从而将经常一起激活的神经元聚集成专家系统。

  • 成绩员转变为专家,进行高效推理。

  • 使用MLP方法训练路由器进行专家选择。

  • FFN层拆解为两个专家,通过路由器选择。

  • 训练中关注专家激活效率,选择标签为1的专家。

  • 实验表明,T5模型性能得到提升。

这些成绩员会转变为一个专家,然后进行处理。因此,如果我们每次只处理这些专家,就可以实现更高效的推理过程。接下来,我们需要针对输入进行专家选择,这里可以采用MLP方法,训练一个简单的路由器来进行专家选择。这样,我们可以将FFN层拆解成两个专家,并通过路由器的方式进行专家选择。在训练专家选择时,我们需要关注在某些情况下哪个专家被更高效地激活,此时该专家的标签为1,我们应选择该专家进行相应的路由。在实验结果中,我们以T5模型为例,发现这种形式能够有效提升模型性能。

  • 实际激活的神经元比例低:不到10%。

  • 大规模模型中,80%的神经元激活概率小于3%。

  • 小型模型的神经元激活比例较高。

  • 通过优化,使用10%到30%的前馈神经网络参数可达到95%的模型效果。

  • 提出Suite方法,探讨将稀疏性引入训练过程。

输入实际上激活了不到10%的神经元。例如,我们可以参考以下例子:以3%的激活概率为例,我们发现除了小型模型外,所有大规模模型的80%神经元激活概率都小于3%。因此,我们可以观察到许多神经元在整个推理过程中并未被激活。此外,小型模型的激活比例相对较高。这体现了大模型的稀疏性。通过模型的改进,我们可以使用10%到30%的前馈神经网络(FFN)参数,达到95%的模型效果。这意味着,当达到30%时,整个大模型的结果都能超过95%。这样,我们可以降低推理过程中的参数,从而提高推理速度。第二部分是探讨是否能将这种稀疏性引入训练过程,为此我们提出了SSD方法。

  • SSD训练方法的特点分析

  • 图A展示训练步骤与激活稀疏性的关系

  • 初始随机初始化导致约0.5的稀疏化比例

  • 两万个步骤后,模型达到90%以上的稀疏性

也就是说,SSD的这种训练方法,我们首先分析了该模型的一个特点。在图A中,展示了训练步骤与激活稀疏性之间的比较。我们发现,由于模型最初是随机初始化的,其稀疏化比例大约为0.5。这是由于对称性导致的,因此模型的激活比例大约在0.5左右。经过大约两万个步骤后,模型达到了90%以上的稀疏性。

  • 模型训练初期展现出强烈的吸收性特质。

  • 训练早期,观察点的吸收性和结构激活模式的相似性较低。

  • 经过五千步训练后,结构激活模式的相似性变化变得缓慢,结构趋于稳定。

  • 尽管经过训练,模型结构仍存在差异。

经过短暂的训练后,整个激活的吸收性比例会急剧增加。那么这个就是我们模型训练的第一个特性,即在训练几步之后,模型展现出一种非常强的吸收性特质。在第二张图中,我们可以观察到连续观察点的吸收性以及结构激活模式的相似性,在训练早期是非常低的。然而,经过五千步训练后,这种相似性变得较为缓慢,即整个结构呈现出不易变化的形式,变化非常缓慢。通过比较不同步数的两两tripoint,我们发现尽管经过训练,模型的结构仍然存在差异。

这样一个变化非常缓慢,但在相隔许多步的跟踪点之间,其模型结构也表现出不同的趋势。也就是说,间隔较大的步数之间的两个跟踪点,其结构实际上有所不同。

  • 采用交换式的Sparse-Dense Learning方法进行训练。

  • 引入动态模块化训练的概念。

  • 初始阶段使用密集训练方式。

  • 当密集训练模型的相似性达到一定程度后,进行进一步调整。

在训练过程中,我们采用了交换式的Sparse-Dense Learning方法。这种方法引入了动态模块化训练的概念。首先,我们通过密集训练方式进行,即正常的密集训练模型。当密集训练模型的相似性达到一定程度时,我们会进行进一步的调整。

  • 训练方法包括稀疏性训练和稠密训练的交替进行。

  • 通过这种方法,SSD模型达到了最佳效果,且训练消耗更低。

  • 紫色线条代表的SSD模型在最低计算代价下实现了更低的PPL值。

  • 在相同计算开销下,SSD模型比从头训练的SMOE模型效果更好。

在相似性超过某一阈值,表明变化不大后,我们转而进行稀疏性训练。经过一定部署的稀疏性训练后,我们再返回稠密训练,从而得到最终模型。这种方法将稀疏化学习引入整个训练过程,总体效果显示,SSD模型达到了最佳效果,同时训练消耗更低。如图所示,紫色线条代表SSD模型,它以最低的计算代价实现了更低的PPL值,证明了稀疏与稠密训练相互切换模型的有效性。在相同的计算开销下,SSD模型比从头训练的SMOE模型效果更好,始终保持较低水平。

  • 讨论了两种机械模型:MOE和DENSE,展示了SSD模型在计算开销和性能间的平衡。

  • 总结了MOE模型的特点:

    • 基于人脑稠密框架,具有高效、可用和可解释性。

    • 发现大模型中的稀疏激活模式,仅5%的激活比例。

    • 采用MOE方法,将FFN层拆解为不同S-part,通过路由选择高效激活的S-part进行计算。

    • 将稀疏激活方法引入整个训练过程,实验证明其有效性。

我们讨论了两种机械模型:MOE和DENSE。这些模型展示了我们的SSD模型能够在计算开销和性能之间实现平衡。这是我们整个可切换的稀疏和密集训练模型的效果。最后,我们总结了MOE模型的特点。首先,我们在人脑中发现了一个稠密的框架,它非常有效、可用且具有可解释性。因此,我们希望将这种大模型转换为模块化框架。同时,在大模型中我们发现了一个稀疏激活模式,仅有5%的激活比例。这种稀疏激活模式非常明显。因此,我们采用了MOE方法,将FFN层拆解成不同的S-part,并通过路由方式选择经常激活的S-part进行高效计算。这样,我们只需计算高效激活的S-part。最后,我们将这种稀疏激活方法引入到整个训练过程中,实验结果证明了其有效性。

在语言模型训练过程中,采用切换稀疏稠密的方式,能够实现更优的训练效果,并更适用于未来系统的应用。这就是我们MOE的slides,下面有请曹军来介绍剩下的部分。

猜你喜欢

转载自blog.csdn.net/ys707663989/article/details/143061718