探索大型语言模型-第2部分

大型语言模型探索-第2部分

高效使用LLM:信息检索,个人助手,因果推理代理,解释性和基于层次控制的部署。

本文主要用于自学。因此,它广泛而深入地涉及了各个方面。根据您的兴趣,可以随意跳过某些部分或寻找您感兴趣的领域。

以下是在尝试微调LLM时让我感到好奇或遇到的一些问题。本文试图回答这些问题,并与其他好奇的人分享这些信息。

由于LLM基于带有损失函数的神经网络,难道所有的LLM训练都不是监督训练吗?为什么通常称之为无监督训练?您能用一个非常简短的句子训练一个LLM来说明LLM训练的实际工作原理吗?什么是掩码和因果语言模型?您能用一张图片解释Transformer架构的直觉吗?LLM中的无监督训练到底意味着什么?ChatGPT的主要架构师Ilya Suverskar为什么认为无监督训练是机器学习的圣杯?”LLM的涌现/理解”是什么意思?

LLM的用例有哪些?为什么LLM最适合作为生产力助手?什么是信息检索的向量数据库/嵌入模式?LLM可以用于除文本任务以外的其他事物吗?什么是因果推理?LLM存在什么问题?为什么像Yan LeCun这样的人认为当前的LLM是无望的?LLM是否具有解释性,如果没有解释性,如何有效地使用它们?

为什么需要微调/重新训练LLM?为什么训练LLM很困难?量化和LoRA如何帮助训练大型LLM?量化和LoRA是如何工作的?微调预训练LLM的有效方法是什么?什么是Instruct Tuning?什么是自指令?如何生成高质量的Instruct Tuning训练数据集?

尚未回答的问题:您能展示如何将具有不同能力的LLM层次化结构化,以创建具有因果推理的复杂自动化吗?为什么我们要从LLM或神经网络中创建类似人类智能的东西?为什么这似乎与在固定翼飞机发明之前创造类似鸟类飞行的概念如此相似?

由于本文内容较长,我将其分为三个部分以提高可读性。

第一部分将讨论LLM训练的演变。我们的目的是为了理解当模型大小超过某个阈值并用大量数据进行训练时,所发生的神奇或更准确地说是涌现的背景。深入的部分将更详细地阐述这些概念,尽管大多数程序员也能轻松理解。

第二部分将简要讨论LLM的常见用例,个人助手和聊天机器人通过信息检索模式(使用LLM增强的向量空间搜索)。我们还将探讨心智模型和模型的自然语言理解如何成为更强大的用例。在此背景下,我们将通过对比有监督训练的优势和LLM模型的弱点(缺乏解释性或难以确定事实与幻觉的区别)来探索LLM模型的一个主要限制。我们将探索这种系统在计算机系统中如何通过层次控制非常有效地使用的例子,例如我们日常使用ChatGPT,以及如何将其扩展到其他用例。

第三部分将讨论与在自定义领域训练LLM相关的一些概念。我们在这里着重讨论领域理解部分,以及它相对于简单的向量空间信息检索模式而言的更强大之处。这在玩具示例中很简单,但在实际数据中并不容易。我们将探讨量化技术如何将非常大的LLM开放给世界,并且如何通过减少训练参数的概念使LLM微调变得民主化。我们将探索有效微调的主要技术——Instruct tuning,以及如何解决Instruct tuning的最大实际问题——缺乏具有我们迄今为止介绍的所有概念的高质量指令训练数据集。

未来的部分将讨论利用LLM的理解部分和使用层次控制来利用这些强大系统来增强AI/ML系统的概念。

一个主要的用例是提高生产力 – 智能助手。

这是LLMs的一个重要且广泛可用的模式。麦肯锡公司的一份名为《生成式AI的经济潜力 – 下一个生产力前沿》(2023年6月)的报告预测,LLMs在各种格式中应用可以改变不同行业的当前工作方式,为世界经济增加数万亿。

在我们详细讨论之前,最近有一个讲座,作者在其中谈到了如何从不可靠的系统构建更可靠的系统 – 引用著名的TCP/IP协议栈设计。该设计采用了分层的方式,通过传输控制和重传逻辑(在检测到数据包丢失时)的TCP层,将不可靠/有丢包的IP层变得可靠。

助手类别的用例也是分层的,LLMs的弱点(如幻觉)通过更高级和更好的控制(通常是人类)来克服。

这也可以是在较低模型上的更认知模型。这就是这种用例如此广泛和强大的原因。使用Github Co-pilot的软件工程师就是一个典型的例子。模型推理与能够有效使用输出的更好控制相结合,可以提取其中的优点,对缺点(错误、幻觉)进行微调或丢弃。人类越熟练,就越能有效地使用这些模型。自从引入以来,这种方法作为编程或领域助手的高效率收益已经广为人知。当这些助手为其他领域开发时,也是如此,一个最近的例子是Google的Med-Palm2,以及它在医疗领域帮助医生的神奇能力。

更好的控制需求与可解释性的概念有着隐含的联系。

可解释性及其影响。

我们在这里提到了助手用例、分层方法和Med_Palm2。这其中隐含的是可解释性的概念。

当前LLMs的一个弱点就是可解释性。

这里是Yann LeCun的观点。他直言不讳地说:

自回归LLMs不行!它们作为助手很好,但在提供事实和一致答案方面不太好(由于幻觉),也无法考虑最新信息(始终过时的训练)

自回归LLMs注定要失败。它们无法变得准确,也无法修复(除非进行重大重新设计)…

可解释性的缺乏迫使更高层次的控制和更少的自动化。我们之前已经探讨过这个流行的领域助手用例,或者通过ChatGPT,我们每天都体验到我们人类作为更高级控制的用例。

但是当我们讨论AI/ML时,我们的目标是基于计算机的自动化。为了给出一个非LLM场景的例子并提供一些思路,让我们看看卷积神经网络是如何彻底改变计算机视觉,并有效地解决这个可解释性问题的。

甚至最好的计算机视觉模型对图像一无所知。因此,很容易用对抗性图像欺骗这些模型,使其预测其他结果。一个训练用于从医学图像中检测某些疾病的模型无论是否被篡改,或者是否捕捉到与对抗性图像相似的图像中的某些东西,都不能被信任。(依赖摄像头的自动驾驶汽车有时也会在边界情况下错误地解释 – 有时导致致命结果)

更好的控制 – 在这里需要医生来审查。然而,如果医生要仔细审查图像的细节,那么首先自动化就没有太多用处。这就是计算机视觉中用于此类用例的可视化解释性发挥作用的地方。医生需要一些解释,解释模型为什么会预测如此 – 预测的可解释性。对于计算机视觉来说,可以使用Grad-CAM算法以可视化方式表示。下面,我们可以看到模型确实捕捉到了预测图像包含法国号所需的相关特征。在医疗领域中,其中的主题并不那么明显,这有助于通过有效的控制快速诊断。

来源 -作者生成 https://medium.com/data-science-engineering/how-to-train-your-cnn-a8c84d108a77

对于基于数据的其他深度学习模型,可解释性是指模型为其预测选择的特征组合。解释性在机器学习中是一个难题,尤其是在存在太多特征时,无法使用基于规则的引擎或人类进行相关性分析的情况下使用深度学习。但是,在监督训练的机器学习系统中,通过去除特征并检查其对模型输出的影响以及其他类似方法,可以在一定程度上实现解释性。

在缺乏这些技术的情况下,需要严格控制,因为无法确定幻觉。另一种选择是在一些错误不重要的场景中使用这些技术。我们将在第3节中看到一个这样的用例,使用LLM创建训练数据来训练LLM。还有许多其他用例,例如更好的产品推荐引擎等,其中少数错误并不重要。

LLM作为搜索引擎(LLM增强信息检索)

这是一个非常流行且不断增长的用例,新的参与者经常涌现。人们会想知道为什么这比基于关键词索引技术的传统企业搜索要好得多。

这里的主要技术直觉是矢量嵌入和相似性搜索;与传统的企业搜索(例如ElasticSearch)相比,这里的主要非技术直觉是利用了上下文词嵌入/句子嵌入的概念。

传统搜索引擎索引每个单词(或ES的倒排索引概念),而这个方法是根据句子与其他句子的相似程度对其进行分组。理论上,这使得它成为更好的信息检索代理。我们需要回到第1部分,通过Transformer的注意机制来了解更深入。此外,本文的第一部分对GPT2的解释也很深入。

在实践中,这是通过使用预训练模型(如流行的SentenceTransformers)计算数据的高阶嵌入或语义嵌入,并使用一些类似FAISS(Facebook AI相似性搜索)的库来快速基于相似度搜索检索这些嵌入向量的方法来完成的。除了嵌入之外,FAISS或类似的技术还包括不断增长的矢量数据库,例如Pinecone、Weviate、Milvus等。请参阅这篇Forbes文章。

DeepDive – 所有文档首先被分成组件(句子、段落,甚至带有URL和某些元数据的文档)并使用类似Sentence Transformers的模型将其转换为矢量嵌入。 (将它们想象成浮动在N维空间中(N是一个非常大的数字),并且相似的向量在这个向量空间中被聚集在一起)。

这是一个Colab笔记本,其中使用SentenceTransformer和只有本地存储的FAISS来实现此模式:https://colab.research.google.com/drive/1PU-KEHq-vUpUUhjbMbrJip6MP7zGBFk2?usp=sharing。请注意,Langchain在许多库上有更简单的封装,这就是我们上面使用的方式。直接方式更加神秘,请参阅这个Colab笔记本。

这些块的语义嵌入被用作矢量嵌入。例如,如果您使用LamaCPPEmbedding,可以看到从模型评估中选择了logits,其中选择了最后一个词的嵌入来表示句子。langchain->lmacpp(Python)->lamacpp(C++)

这种方法的优点是计算向量嵌入并在比较模型微调时使用数据更容易,而不是基于对查询中的单词进行划分的理解用户查询的方式,而是基于关注/语义嵌入的复杂性。正如我们之前解释的那样,模型对领域没有“理解”。由于使用了预训练模型,它能够理解查询并利用相似性搜索的上下文创建有意义的答案。

通常,这对于许多用途来说已经足够了。但是,如果您觉得与ChatGPT或Bard等模型获得的相同程度的输出精细度在这里难以实现,那么选择的选项是在自定义领域上对模型进行微调。

LLM作为因果推理代理

与之前发现的可解释性相关的是机器学习中的因果关系概念(SHAP,LIME,The Book of Why – Judea Pearl在这个概念上进行了更深入的解释,超出了本文的范围)。

简单来说,这是因果推理。想象一下早期人类如何将因果关联起来。有一天晚上他们进行了一些仪式舞蹈,第二天就下雨了。

作者 + Dalle2; 原始人将舞蹈与雨联系在一起

这个过程重复了一两次,他们将这两个事实联系在一起。将事物联系在一起是因果思维阶梯的第一步,但并不是唯一的一步。

根据Judea P.的说法,我们所有的人工智能系统都处于这一步骤中。(我猜我们很多人类也仍然停留在这一步骤上)。简单的人类会在下次下雨时继续跳舞。现在,对于我们的祖先来说,假设他们每次下雨都会跳舞,几乎没有人能够说服他们相反。

除非他们“没有”跳舞而还是下雨了,或者他们跳舞了但没有下雨。第一步“联系”也可以表示为“观察”,下一步是“行动”,第三步是“想象”(如书中所述)。

希望这能让我们意识到因果推理需要一些理解,而不仅仅是记号之间的联系。

微软研究有一篇有趣的论文使用LLMs进行因果发现。

我们发现基于LLM的方法在多个因果基准测试上建立了新的最高准确率。

我用ChatGPT 4检查了论文中相同的提示,并且它给出的结果比他们之前使用相同模型得到的结果更好;虽然这并不意味着太多,但它仍然说明了它们在开箱即用的因果推理能力。

作者和ChatGPT

请注意,这里没有提到在线和离线人口统计等。GPT4模型已经挑选出了混淆因素,并且不仅依据数据进行推理,还根据自身的世界观。如作者所述,LLMs在这方面并不完美,它们也会犯错。

再次强调,对于我现在来说很难用一个简单的用例进行说明,但这是一个令人兴奋的研究领域。我特别喜欢论文中的这句话,它有效地回避了争论他们是否是模仿者的证明或反驳,并利用这些能力在实际中使用。

无论LLMs是否真正进行因果推理,它们在某些因果任务中的实证观察能力足以为我们目前仅依赖人类的因果推理提供有用的补充。

也就是说,虽然这些系统本身很难解释,但它们可以被用作在数据集中发现变量之间因果关系的工具。这展示了它们在高级推理任务中的潜在潜力。

在第三部分中,我们将探讨如何通过使用模型本身来帮助生成数据以及如何可能借助它们在定制领域应用中的作用。