如今,像 GPT 这样的大型语言模型在媒体中获得了压倒性的关注,给人一种我们都身处一场持续革命的印象。然而,即使是一场革命也是建立在其前辈的成功之上的,而 GPT 是数十年研究的成果。
在这篇文章中,我想概述语言模型领域研究的一些主要步骤,这些步骤最终导致了我们今天拥有的大型语言模型。在讨论一些在不同时期引领该领域的核心技术之前,我将简要描述一下语言模型,这些技术通过克服原先的障碍和困难,为当今的技术铺平了道路,其中(Chat-)GPT可能是最著名的代表。
什么是语言模型?
语言模型是一种机器学习模型,它根据给定的单词序列预测下一个单词。它是如此简单!
主要思想是,这样的模型必须具有人类语言的某种表示。在某种程度上,它模拟了我们的语言所依赖的规则。在看到数百万行文本后,该模型将表示这样一个事实:动词、名词和代词等事物存在于语言中,并且它们在句子中具有不同的功能。它还可能得到一些来自单词含义的模式,例如“巧克力”经常出现在“甜”、“糖”和“脂肪”等单词的上下文中,但很少与“割草机”等单词一起出现”或“线性回归”。
如前所述,它通过学习预测给定单词序列的下一个单词来获得这种表示。这是通过分析大量文本来推断给定上下文中下一个可能是哪个单词来完成的。让我们看看如何实现这一目标。
先从简单的开始
让我们从第一个直观的想法开始:给定大量文本,我们可以计算给定上下文中每个单词的频率。上下文就是之前出现的单词。也就是说,例如,我们计算单词“喜欢”出现在单词“我”之后的频率,我们计算单词“不”之后出现的频率,依此类推,对于所有出现在该单词之前的单词“喜欢”。如果我们将其除以之前单词的频率,我们很容易得到概率 P(“喜欢”|“我”),即给定单词“我”时单词“ 喜欢”的概率:
P(“喜欢” | “我”) = 计数(“我喜欢”) / 计数(“我”)
P(“喜欢” | “不喜欢”) = 计数(“不喜欢”) / 计数(“不喜欢”)
我们可以对文本中找到的每个单词对执行此操作。然而,有一个明显的缺点:用于确定概率的上下文只是单个单词。这意味着,如果我们想预测“不”这个词后面是什么,我们的模型不知道“不”之前是什么,因此无法区分“他们不”、“我不”或“我们不”。
为了解决这个问题,我们可以扩展上下文。因此,我们不是计算 P(“喜欢”|“不”),而是计算 P(“喜欢”|“我不”) 和 P(“喜欢”|“他们不”) 和 P( “喜欢”|“我们不”)等等。我们甚至可以将上下文扩展到更多单词,我们称之为 n-gram 模型,其中 n 是上下文要考虑的单词数量。n-gram 只是 n 个单词的序列,因此,例如“我喜欢巧克力”就是一个 3-gram。
n 越大,模型在预测下一个单词时可以考虑的上下文就越多。然而,n 越大,我们必须计算的不同概率就越多,因为 5-gram 的不同数量比 2-gram 的数量多得多。不同 n-gram 的数量呈指数级增长,并且很容易达到在内存或计算时间方面无法处理它们的程度。因此,n-gram 只允许我们提供非常有限的上下文,这对于许多任务来说是不够的。
循环神经网络(RNN)
循环神经网络 (RNN) 引入了一种方法来解决 n-gram 模型在更大上下文中存在的问题。在 RNN 中,输入序列被一个单词一个单词地处理,生成所谓的隐藏表示。主要思想是,该隐藏表示包含迄今为止序列的所有相关信息,并且可以在下一步中用于预测下一个单词。
让我们看一个例子:假设我们有这个句子
老鼠爱大米
RNN 现在一个接一个地处理单词(先“老鼠”,然后“爱”,……),创建隐藏表示,并预测下一个最有可能出现的单词。现在,如果我们到达单词“大米”,模型的输入将包括当前单词(“大米”)和一个隐藏表示向量,其中包括句子“老鼠爱”的相关信息。该信息用于预测下一个单词(例如“大米”)。请注意,模型看不到“老鼠”和“爱”等词;它们被编码在隐藏表示中。
这比像 n-gram 模型那样看到最后 n 个单词更好吗?这得看情况。隐藏表示的主要优点是,它可以包含有关不同大小的序列的信息,而不会呈指数增长。在 3-gram 模型中,模型恰好看到 3 个单词。如果这还不足以准确预测下一个单词,那么它就无能为力;它没有更多信息。另一方面,RNN 中使用的隐藏表示包括整个序列。然而,它必须以某种方式将所有信息放入这个固定大小的向量中,因此信息不会以逐字方式存储。如果序列变得更长,这可能成为所有相关信息必须通过的瓶颈。
它可能会帮助你这样思考差异:n-gram 模型只能看到有限的上下文,但它可以清楚地看到这个上下文(单词本身),而 RNN 具有更大、更灵活的上下文,但它们只能看到它的模糊图像(隐藏的表示)。
不幸的是,RNN 还有另一个缺点:由于它们一个接一个地处理序列,因此无法并行训练。要处理位置 t 处的单词,您需要步骤 t-1 的隐藏表示,为此您需要步骤 t-2 的隐藏表示,依此类推。因此,无论是在训练过程中还是在推理过程中,计算都必须一步一步地完成。如果您可以并行计算每个单词所需的信息,那就更好了,不是吗?
拯救者:Transformers
Transformer 是一系列模型,旨在解决 RNN 的缺点。它们避免了隐藏表示的瓶颈问题,并且允许并行训练。他们如何做到这一点?
Transformer 模型的关键组成部分是注意力机制。请记住,在 RNN 中,有一个隐藏表示,其中包含迄今为止输入序列的所有信息。为了避免整个序列只有单一表示所带来的瓶颈,注意力机制在每个步骤中构造一个新的隐藏表示,其中可以包含来自先前任何单词的信息。这使得模型能够决定序列的哪些部分与预测下一个单词相关,因此它可以通过为它们分配更高的相关性来关注这些部分来计算下一个单词的概率。假设我们有这样的句子
有一天,当我看到韩梅梅和稻草人时,我走到她跟前说:“嗨”
我们想要预测下一个单词。注意力机制允许模型关注与延续相关的单词,并忽略那些不相关的部分。在此示例中,代词“她”必须指“韩梅梅”(而不是“稻草人”),因此模型必须决定关注“韩梅梅”并忽略“稻草人”来预测下一个单词。对于这句话,更有可能是“嗨,韩梅梅”而不是“嗨,稻草人”或“嗨,在一起”。
RNN 将只有一个隐藏表示向量,该向量可能包含也可能不包含决定代词“她”指代的人所需的信息。相比之下,通过注意力机制,创建了一个新的隐藏表示,其中包含来自单词“Dorothy”的大量信息,但来自当前不相关的其他单词的信息较少。对于下一个单词的预测,将再次计算新的隐藏表示,这可能看起来非常不同,因为现在模型可能希望更多地关注其他单词,例如“稻草人”。
注意力机制还有另一个优点,即它允许训练并行化。如前所述,在 RNN 中,您必须逐个计算每个单词的隐藏表示。在 Transformer 中,您在每一步计算隐藏表示,只需要单个单词的表示。特别是,为了计算步骤 t 的隐藏表示,您不需要步骤 t-1 的隐藏表示。因此您可以并行计算两者。
过去几年模型大小的增加使得模型的性能每天都变得越来越好,这是唯一可能的,因为并行训练这些模型在技术上变得可行。使用循环神经网络,我们将无法训练具有数千亿个参数的模型,因此无法使用这些模型与自然语言交互的能力。Transformer 的注意力机制可以被视为最后一个组件,它与大量的训练数据和适当的计算资源一起,是开发 GPT 及其兄弟姐妹等模型以及启动人工智能和语言处理领域持续革命所需的最后一个组件。
总结
那么,我们在这篇文章中看到了什么?我的目标是向您概述实现我们今天拥有的强大语言模型所需的一些主要步骤。总而言之,以下是按顺序排列的重要步骤:
语言建模的关键是在给定文本序列的情况下预测下一个单词。 n-gram 模型只能表示有限的上下文。 循环神经网络具有更灵活的上下文,但它们的隐藏表示可能成为瓶颈,并且无法并行训练。 Transformer 通过引入注意力机制来避免瓶颈,该机制允许详细关注上下文的特定部分。最终,它们可以并行训练,这是训练大型语言模型的要求。
当然,要达到我们今天所拥有的模型还需要更多的技术。此概述只是强调一些非常重要的关键方面。您认为还有哪些技术与大型语言模型相关?