LLMs的实用介绍

Introduction to LLMs

实践中使用LLM的3个层次

这是一系列关于实践中使用大型语言模型(LLMs)的文章的第一篇。在这里,我将介绍LLMs并提出与它们一起工作的3个层次。未来的文章将探讨LLMs的实际应用方面,例如如何使用OpenAI的公共API、使用Hugging Face Transformers Python库、如何微调LLMs以及如何从头开始构建LLMs。

Photo by Patrick Tomasso on Unsplash

什么是LLM?

LLM是大型语言模型(Large Language Model)的缩写,它是人工智能和机器学习的最新创新。这种强大的新型人工智能在2022年12月发布ChatGPT后迅速走红。

对于那些生活在人工智能热潮和科技新闻周期之外的人来说,ChatGPT是一个运行在称为GPT-3上的LLM的聊天界面(现在在撰写本文时已升级为GPT-3.5或GPT-4)。

如果你使用过ChatGPT,你会发现它与AOL即时通讯或信用卡客户服务的传统聊天机器人有所不同。

这个聊天机器人与众不同。

什么使LLM“大”?

当我听到“大型语言模型”这个术语时,我最初的问题之一是,它与“常规”语言模型有什么不同?

语言模型比大型语言模型更为通用。就像所有正方形都是矩形,但并非所有矩形都是正方形一样。所有LLMs都是语言模型,但并非所有语言模型都是LLMs

Large Language Models are a special type of Language Model. Image by author.

好吧,所以LLMs是一种特殊类型的语言模型,但是它们有什么特别之处呢?

LLMs与其他语言模型有两个关键特性。一个是定量的,另一个是定性的。

  1. 定量上,LLM与其他语言模型的区别在于模型中使用的参数数量。目前的LLMs大约有1000亿到1000亿个参数 [1]。
  2. 定性上,当语言模型变得“大”时,会出现令人瞩目的现象,例如零样本学习 [1]。这些是当语言模型达到足够大的规模时,突然出现的特性。

零样本学习

GPT-3(以及其他LLMs)的重大创新在于它能够在各种语境中进行零样本学习 [2]。这意味着ChatGPT可以执行任务,即使它没有被明确训练过

虽然对于我们这些高度进化的人类来说,这可能不算什么大不了的事情,但这种零样本学习能力与之前的机器学习模式形成了鲜明对比。

以前,模型需要在其旨在执行的任务上进行明确训练,以获得良好的性能。这可能需要从1,000到1,000,000个预标记的训练示例。

例如,如果您想让计算机进行语言翻译、情感分析和识别语法错误。每个任务都需要一个专门训练的模型,并使用大量标记示例进行训练。然而,LLMs现在可以在没有明确训练的情况下完成所有这些任务

LLMs如何工作?

训练大多数最先进的LLM(语言模型)的核心任务是词语预测。换句话说,给定一系列词语,下一个词的概率分布是什么

例如,给定序列“听你的______”,最有可能的下一个词可能是:心脏、直觉、身体、父母、奶奶等。下面是这种概率分布的示例。

序列“听你的______”中下一个词的玩具概率分布。图片由作者提供。

有趣的是,这与许多(非大型)语言模型以前的训练方式相同(例如GPT-1)[3]。然而,由于某种原因,当语言模型的规模超过一定大小(约10B个参数)时,这些(新出现的)能力,如零样本学习,就会开始出现[1]。

虽然目前还没有明确的答案可以解释为什么会发生这种情况(只有猜测),但可以肯定的是,LLM是一种功能强大的技术,具有无数的潜在用途。

使用LLM的3个级别

现在我们将讨论如何在实践中使用这种强大的技术。虽然LLM有无数潜在的用途,但我将它们分为根据所需的技术知识和计算资源排序的3个级别。我们从最容易上手的开始。

级别1:提示工程

在实践中使用LLM的第一个级别是提示工程,我定义它为使用现成的LLM,即不更改任何模型参数。尽管许多技术倾向的个人似乎对提示工程不屑一顾,但这是在实践中使用LLM(无论从技术上还是从经济上)最容易的方式。

提示工程有两种主要方法: 简单方法稍微困难的方法

简单方法:ChatGPT(或其他方便的LLM用户界面)— 这种方法的主要优点是方便。像ChatGPT这样的工具提供了一种直观、免费且无需编码的使用LLM的方式(没有比这更简单的了)。

然而,方便往往伴随着一些代价。在这种情况下,这种方法有两个主要缺点。第一个是功能的限制。例如,ChatGPT不方便地让用户自定义模型输入参数(例如温度或最大响应长度),这些值会调节LLM的输出。 第二个是与ChatGPT用户界面的交互无法轻松自动化,因此无法应用于大规模使用案例。

虽然这些缺点可能对某些用例来说是不可接受的,但如果我们进一步推进提示工程,这两个缺点都可以得到改善。

稍微困难的方法:直接与LLM交互 — 通过编程接口直接与LLM交互,我们可以克服ChatGPT的一些缺点。这可以通过公共API(例如OpenAI的API)或在本地运行LLM(使用Transformers等库)来实现。

尽管这种提示工程方式不太方便(因为它需要编程知识和可能的API成本),但它提供了一种可定制、灵活和可扩展的使用LLM的方式。本系列的未来文章将讨论付费和免费的提示工程方法。

尽管提示工程(如此定义)可以处理大多数潜在的LLM应用,但对于特定的用例,依赖通用模型的现成方法可能导致性能不佳。对于这些情况,我们可以进入下一个级别使用LLM。

级别2:模型微调

使用LLM的第二个级别是模型微调,我将其定义为通过至少更改一个(内部)模型参数(即权重和偏差)来调整现有LLM以适应特定用例。在此类别中,我还将转移学习(即使用现有LLM的某部分来开发另一个模型)归为此类。

Fine-tuning通常包括2个步骤。 第一步:获取预训练的LLM。 第二步:针对特定任务更新模型参数,给定(通常是数千个)高质量标记的示例。

模型参数是定义LLM对输入文本的内部表示的内容。因此,通过调整这些参数来适应特定任务,内部表示将为微调任务进行优化(至少是这个想法)。

这是一种强大的模型开发方法,因为相对较少的示例和计算资源可以产生出色的模型性能。

然而,不足之处在于,与提示工程相比,它需要更多的技术专长和计算资源。在未来的一篇文章中,我将尝试通过回顾微调技术并分享示例Python代码来减轻这个不足。

虽然提示工程和模型微调可以处理99%的LLM应用,但也有一些情况需要更进一步。

第三级:构建自己的LLM

在实践中使用LLM的第三种方法是构建自己的LLM。在模型参数方面,这就是你从头开始设计所有的模型参数

LLM主要是其训练数据的产物。因此,对于某些应用,可能需要为模型训练策划定制的自定义高质量文本语料库,例如为临床应用程序开发的医疗研究语料库。

这种方法的最大优点是您可以完全定制LLM以适应特定的使用情况。这是终极的灵活性。然而,通常情况下,灵活性是以方便性为代价的。

由于LLM的性能关键在于规模,从头开始构建LLM需要巨大的计算资源和技术专长。换句话说,这不会是一个独立的周末项目,而是一个团队全力以赴工作数月甚至数年的项目,需要7-8F的预算。

尽管如此,在本系列的未来文章中,我们将探讨从头开始开发LLM的流行技术。

结论

尽管当今关于LLM的炒作足够多,但它们是人工智能领域的一项强大创新。在这里,我提供了一个关于LLM是什么以及如何在实践中使用它们的入门指南。本系列的下一篇文章将提供OpenAI的Python API的入门指南,以帮助启动您的下一个LLM用例。

资源

联系:我的网站 | 预约电话 | 提问

社交媒体:YouTube 🎥 | LinkedIn | Twitter

支持:成为会员 ⭐️ | 请我喝咖啡 ☕️

数据创业者

数据领域的创业者社区。👉 加入Discord!

VoAGI.com

[1] 大型语言模型综述。arXiv:2303.18223 [cs.CL]

[2] GPT-3论文。arXiv:2005.14165 [cs.CL]

[3] Radford, A., & Narasimhan, K. (2018). 通过生成预训练来改进语言理解。 (GPT-1论文)