ChatGPT 的发布是语言大模型()发展史的转折点,它让人们意识到 的潜力,并引发了 “AI 竞赛”,世界上主要实验室和初创公司都参与其中。在这之后,基于 的聊天机器人层出不穷。
1语言模型
简单来说,语言模型能够以某种方式生成文本。它的应用十分广泛,例如,可以用语言模型进行情感分析、标记有害内容、回答问题、概述文档等等。但理论上,语言模型的潜力远超以上常见任务。
想象你有一个完备的语言模型,可生成任意类型的文本,并且人们还无法辨别这些内容是否由计算机生成,那么我们就可以使其完成很多事,例如生成具有代表性的内容,如电子邮件、新闻稿、书籍和电影剧本等。再进一步来看,还可以用其生成计算机程序,甚至构建整个软件。只要愿意,我们还可以让它生成科学论文。如果语言模型真正 “完备”,那么它们生成的论文将能够以假乱真,与真实论文没有区别,这意味着必须对语言模型展开实质性研究!
当然,就目前而言,完备的语言模型还无法实现,不过也展示出了这些系统的潜力。语言模型不仅仅能 “预测文本”,它们的潜力可能远超想象。
现在我们回顾一下语言模型的发展历程,从最初的朴素语言模型到目前基于 Transformer 的 LLM(语言大模型)。
2
朴素语言模型
语言模型是机器学习模型,因此它们会学习如何生成文本。教授它们的方法(即训练阶段)是提供一个大规模文本语料库,它们将从中学习如何模仿生成这些文本的过程。
也许这听起来有些抽象,但创建一个朴素语言模型实际上非常简单。你可以将文本语料库分成一定大小的字符串块,并测量它们的频率。下面是我使用大小为 2 的字符串得到的结果:
图源:《机器学习导论》
这些字符串块被称为 n-gram(其中 n 表示字符串的大小,因此此处 n=2)。通过这些 n-gram,你可以像玩多米诺骨牌一样生成文本。从一个初始的 n-gram 开始,例如 “th”,然后根据测量的频率随机选择一个以初始 n-gram 结尾的 n-gram 。在这个例子中,如果选择 “hi”,就会形成 “th” + “hi” = “thi”。然后再继续添加以 “i” 开头的 n-gram,以此类推,生成整段文本。不过正如你所想,这些 n-gram 模型并不能生成足够连贯的文本。以下是我继续执行这一过程时得到的结果:
说实话,这一结果并不太理想!但也说得通,因为该模型的记忆能力很有限,只通过前一个字符来预测下一个字符。如果我们使用 n=4 的字符串,结果会稍微好一些:
“complaine building thing Lakers inter blous of try sure camp Fican chips always and to New Semested and the to have being severy undiscussion to can you better is early shoot on”
现在出现了一些拼写正确的单词,但结果仍不够理想!理论上,进一步增加 n 的值,输出结果会得到改善,但在实践中,我们无法显著增加 n 值,因为这需要一个庞大的数据集来训练模型。最后,我们可以尝试将单词而不是字符作为基本单位(在自然语言处理术语中称为 “词元(token)”)。这会改善输出结果,但因为 n<6,生成的文本仍然缺乏连贯性。
这些朴素语言模型的记忆能力始终有限,因此无法生成超过一定长度的连贯文本。尽管如此,它们仍具备一定用途。几年前,朴素语言模型被广泛用于文本分类和语音识别,且如今仍被用于语言识别等任务。然而,对于更高级的文本理解和文本生成任务来说,朴素语言模型就捉襟见肘了。因此需要神经网络。
3
基于神经网络的语言模型
现代语言模型基于(人工)神经网络。神经网络是受人脑启发开发出的计算机,能够通过任务示例学习如何执行任务。这种机器学习形式也被称为深度学习,因为其中的网络由多个计算层组成(因此被称为 “深度” 网络)。在神经网络中,通过遍历任务示例并迭代修改网络参数以优化任务目标,从而实现学习。你可以将这些参数想象成一组旋钮(knob),通过左右旋动以改进目标,但区别是计算机为你进行改进,并且知道如何同时正确地朝着改进方向进行调整(得益于著名的反向传播算法)。因此,网络会遍历任务示例(通常以几百个示例为一批),并在这一过程中优化目标。以下是一个正在被优化的目标示例(称为成本函数,数值越小越好):
成本函数随训练迭代次数的变化。图源:《机器学习导论》
随着模型的训练,成本函数值会逐渐下降,意味着模型在任务处理上变得更加优秀。
在该案例中,我们想要生成文本。目前,标准的方法是训练一个模型,通过前面的单词预测后面的单词。由于下一个单词有多种可能性,模型会学习为每个可能的单词关联一个概率。以下是对 “the cat sat on the” 之后可能出现单词的概率分布可视化图像:
改编自《机器学习导论》
一旦拥有这样的预测模型,就可以从预测概率中抽样来生成下一个单词,然后将该单词重新输入到网络,再抽样一个新的单词,以此类推,从而生成文本。这一生成过程被称为自回归,因为网络利用自己的预测结果来生成新的预测。虽然有人对此提出了异议,认为这并非最佳方法,但目前而言,这就是最实际的操作方式,且效果也出奇地好!
曾经用于建模语言的第一类神经网络是 RNN(循环神经网络),尤其是 LSTM(长短期记忆网络)架构。RNN 就像一个逐个阅读单词的小型机器,在这一过程中,它会更新思维状态(mental state)。这种思维状态如同记忆,使它们在生成文本时能大概记住一段时间的信息。相比 n-gram 模型,RNN 模型能够获得更为优越的性能。
RNN 创建之初,神经对话模型(Neural Conversational Model)给我留下了深刻印象。该模型是 Google 于 2015 年基于电影字幕训练的一个特殊 LSTM 模型,当时这个模型已经算得上是 LLM 了(也可能是首个 LLM):拥有 3 亿参数,并在约 10 亿词的数据上进行训练。由于电影字幕是对话形式,因此可直接将该模型用作聊天机器人。以下是不同人类输入对应的回答示例:
人类:你叫什么名字?
机器:我叫朱莉娅。
人类:你是什么时候出生的?
机器:7 月 20 日。
人类:我的名字是大卫。我的名字是什么?
机器:大卫。
人类:天行者是谁?
机器:他是一个英雄。
人类:天空是什么颜色?
机器:蓝色。
人类:血液是什么颜色?
机器:和黑眼圈的颜色相同。
如你所见,该模型能够闲聊,同时也对世界有一定了解,这些知识完全是通过学习如何预测文本获得的!我记得自己曾对这一事实很感兴趣:学习预测文本迫使你理解世界(但并不意味着这个过程很容易)。然而,该模型也有一些明显的短板:它经常出错,并且与类似基于 LSTM 的模型一样,无法生成长篇连贯的文本。理论上,循环神经网络可以长时间记忆事物,但在实践中,它们却往往很快就忘记了:经过几十到一百个词之后,它们就会开始偏离主题,不再连贯。
2017 年,人们针对短期记忆问题提出一种解决方案 ——Transformer。Transformer 是一种基于注意力机制的新型神经网络架构(本质上是一种选择操作),下图来自介绍 Transformer 的论文,用以说明其在翻译任务中的工作原理:
Transformer 架构。来源:https://arxiv.org/abs/1706.03762
Transformer 在各个方面都可圈可点,但最值得一提的是,该架构在文本建模方面表现非常出色,并且很适合在 GPU 上运行,从而处理(和学习)大量数据。正是有了 Transformer 这种架构,才使得现代 LLM 得以兴起(或至少起到了很强的促进作用)。
4
现代语言大模型
Transformer 的发明标志着现代 LLM 时代的开始。自 2018 年以来,AI 实验室开始训练规模越来越大的模型。令众人惊讶的是,这些模型的质量也在不断提高!下图对这些模型进行了可视化,我们将重点介绍其中值得关注的模型:
LLM 进化树。来源:https://github.com/Mooler0410/LLMsPracticalGuide
这些语言模型主要分为三类。一是 “仅编码器(encoder-only)” 组(上图中的粉色部分),该类语言模型擅长文本理解,因为它们允许信息在文本的两个方向上流动。二是 “仅解码器(decoder-only)” 组(上图中的蓝色部分),该类语言模型擅长文本生成,因为信息只能从文本的左侧向右侧流动,以自回归方式有效生成新词汇。三是 “编码器 - 解码器(encoder-decoder)” 组(上图中的绿色部分),该类语言模型对上述两种模型进行了结合,用于完成需要理解输入并生成输出的任务,例如翻译。
这一切都主要始于文本理解类模型。最初是使用 RNN 的 ELMo,之后是谷歌著名的 BERT 模型及其派生模型(如 RoBERTa),它们都基于 Transformer。这些模型通常具有几亿个参数(相当于约 1GB 的计算机内存),在大约 10GB 到 100GB 的文本上进行训练(通常为几十亿个单词),并且可以在现代笔记本电脑上以约 0.1 秒的速度处理一段文本。这些模型极大地提升了文本理解任务的性能,如文本分类、实体检测和问题回答等。这已然是 NLP(自然语言处理)领域的一场革命,不过才刚刚拉开序幕……
在文本理解类语言模型发展的同时,OpenAI 开始基于 Transformer 创建文本生成类语言模型。首先是 2018 年的 GPT-1,有 1 亿个参数;然后是 2019 年的 GPT-2,拥有高达 15 亿个参数,并在 40GB 的文本上进行了训练。至少对我来说,GPT-2 的创建是一个至关重要的时刻。以下是 GPT-2 可以生成的文本示例,从一个由人类撰写的段落开始:
来源:https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
生成的英语文本质量很不错,而且具有连贯性。例如,科学家的名字没有改变,而这在基于 RNN 的模型中是个经典问题。由于 GPT-2 在所生成文本的质量上取得了巨大突破,为避免滥用,OpenAI 最初决定不向公众发布。可以说 GPT-2 标志着 LLM 正朝着正确的方向发展。需要注意的是:使用这类语言模型需要先提供一个起始文本,这个起始文本被称为提示(prompt)。
一年后(2020 年),OpenAI 创建了 GPT-3。GPT-3 是一个具有 1750 亿个参数的模型(需要 700GB 的计算机内存来存储模型!),该模型不仅规模显著扩大,文本生成质量也有重大改进。除了性能的提升外,GPT-3 还让人们对未来如何使用 LLM 大开眼界。
首先,GPT-3 能够编写代码。例如,你可以使用 GPT-3 来生成(非常)简单的网站,只需在提示中描述网站的外观即可。以下是一个示例,让 GPT-3 使用 HTML 创建一个按钮:
这些基本的编码能力在当时并不十分实用,但它们的出现意味着软件开发在未来可能会发生根本性转变。
GPT-3 另一令人瞩目的能力是能够进行上下文学习,它可以通过提示中所展示的示例来学习如何执行任务。这意味着你可以通过编写提示来定制 LLM,而无需更改它们的权重。这一能力开辟了一种全新的、完全基于提示的自然语言处理方式,如今十分受欢迎。
总而言之,GPT-3 展示了 “提示” 作为一种新方式的潜力,可以让机器通过自然语言按照我们的意愿执行任务。
注意:GPT-3 比 GPT-2 要大得多。自 2018 年以来,模型的规模急剧增加。以下是一些值得关注的 LLM 及其规模:
在两年时间里,模型参数的数量增加了 1000 倍,目前最大的模型(如 GPT-4)已接近 1 万亿个参数,这是因为模型规模的增加与性能的改善密切相关,并且目前还未达到性能瓶颈。这些模型规模十分庞大,与人脑相比,人脑约有 1000 亿个神经元,每个神经元平均与其他 1000 个神经元相连接,总共约有 100 万亿个连接。从某种意义上说,最大的 LLM 仍然比人脑小 100 倍。当然,这只是一个非常宽泛的比较,因为人脑和当前 LLM 使用的架构和学习方法都截然不同。
另一个有趣的指标是这些模型在训练阶段所 “阅读(read)” 的单词数量。
如你所见,数量十分庞大。这些模型在训练过程中会接触超 1000 亿个单词,是一个人在一生中听到或阅读单词数量的 100 倍以上!这显示出神经网络与人脑的不同之处:神经网络的学习速度比人类慢得多,但可以获得比人类接触的多得多的数据。
需要注意的是,LLM 在训练过程中所接触到的单词数量并未像参数数量那样迅速增长(从 GPT-1 到 GPT-3 只增长了 3 倍)。这是因为优先考虑模型规模,不过结果证明这是一个小小的失误。最新的模型并没有比 GPT-3 大很多,但通过处理更多单词来进行训练。
这种对数据的渴求导致了一个问题,即可用文本的总量存在硬性限制,约为数万亿个单词,而模型正在接近这一限制。虽然仍有可能循环遍历所有文本,但这会导致模型性能的回报递减。总而言之,可得出结论:网络在训练阶段处理的有效限制是几十万亿个单词,比 GPT-4 的数量约多出 10 倍。
另一个问题是,通过用更多的数据训练更大的模型,计算成本也在增加。以下是训练上述模型的预估计算成本:
为显著超越当前模型的性能,下一代模型需要耗费数亿美元的计算资源。虽然考虑到这些模型能带来的好处,这一成本是合理的,但如此巨大的花费仍然是一个问题。
模型的扩展变得越来越困难。幸运的是,扩大规模并不是改进 LLM 的唯一途径。2022 年末,一项创新开启了另一场革命,这次的影响远远超出了 NLP 领域。
5
指令调优和聊天机器人 LLM
GPT-3 揭示了提示的潜力,但撰写提示并不容易。事实上,传统语言模型经训练可以模仿其在网络上看到的内容。因此,要想创建一个好的提示,你必须清楚网络上哪种起始文本可能会引导模型生成你所期望的结果。这是一种奇怪的游戏,也是一种找到正确表述的艺术,你需要改变措辞,假装自己是专家,展示如何逐步思考的示例等等。这一过程叫做提示工程,这使得使用这些 LLM 变得困难。
为解决这个问题,研究人员一直在探索如何修改基础 LLM,以让其更好地遵循人类指令。现主要有两种方法:一是使用人类编写的指令 - 回答对(instruction-answer pairs),并在此数据集上对基础 LLM 进行微调(即继续训练)。二是让 LLM 生成几个可能的答案,然后由人类对答案评分,并使用强化学习在此数据集上对 LLM 微调。这就是著名的 RLHF(人类反馈的强化学习)的过程。此外,我们还可以将两种方法相结合,OpenAI 在 InstructGPT 和 ChatGPT 中就对这两者进行了结合。
InstructGPT 和 ChatGPT 的指令调整步骤。来源:https://openai.com/blog/chatgpt(修改自 https://arxiv.org/abs/2203.02155)
将这两种技术结合在一起可以得到一个经过指令调整的 LLM。调整后的 LLM 比基础模型更擅长遵循人类指令,使用起来更加容易。
经过指令调整的 LLM 已经非常出色了,但还有最后一步才能将这些 LLM 真正转化为每个人都可以使用的东西 —— 聊天机器人。OpenAI 在 2022 年 12 月发布了 ChatGPT,一个基于 GPT-3.5 的聊天机器人。它的创建方式与 InstructGPT 相同,但这次使用的是整个对话而不仅仅是指令 - 回答对。
ChatGPT 发布后,基于 LLM 的新型聊天机器人开始层出不穷。OpenAI 使用 GPT-4 来代替 GPT-3.5,对 ChatGPT 进行了改进,Anthropic 发布了 Claude,Google 推出 Bard,Meta 也研发出了 LLaMA,还有几个开源 LLM 正在发布过程中。这是一次真正的模型大爆炸,将会带来许多令人兴奋的应用,NuMind 也会为此出一份力。
ChatGPT 发布两个月后,迅速拥有了上亿用户,成为有史以来用户增长最快的产品。人们用 ChatGPT 来根据要点编写电子邮件、重新组织文本、总结文本、编写代码,或学习东西(在此之前,搜索引擎一直垄断着这项任务)。ChatGPT 的发布是 LLM 发展史的转折点,它让人们意识到了 LLM 的潜力,引发了 “AI 竞赛”,世界上主要实验室和初创公司都参与其中。
值得注意的是,LLM 的突然普及也引发了人们的担忧。人们担心 LLM 被有心人利用,做一些有害的事情,所以创建开放式 LLM 聊天机器人必须确保它们的 “安全” 性(或 “与人类价值观保持一致”),也就是说它们不能帮助制造炸弹等。目前有一些方法可以绕过聊天机器人的安全防御措施,但随着时间推移,这些安全措施会逐渐完善,想绕过它们将变得十分困难。
6
语言大模型的未来
近年来,LLM 取得了很大进步,人们对它的热情达到了空前高度,在这一领域投入了大量精力。那么,LLM 的未来将如何发展?虽然预测未来很难,但我们也有一些看法:
模型大小和训练规模将继续扩大。扩展在过去取得了非常好的效果,且仍有提升空间,但问题是,模型的训练成本急剧增长,逐渐让人望而却步(>1 亿美元)。更好的 GPU 和新的专用硬件有助于扩展模型规模,但它们的开发和生产需要时间。此外,最大的模型已经迭代了所有书籍和整个网络,这意味着我们正在达到可用训练数据的极限(即 “词元危机”)。
因此,可以肯定的是,在未来几年内,参数数量不会像过去那样出现爆发式增长。最大的模型今年应该会稳定在 1 万亿参数以下规模,然后以每年 50% 的速度增长。
LLM 将超越纯语言模型,将图像和视频纳入训练数据,成为多模态模型。从图像和视频中学习可能有助于模型更好地理解世界。GPT-4 就是在图像和文本上进行训练的,且取得了少许性能提升。利用视频数据训练 LLM 可能给这一领域带来质的改变,但这需要大量计算。预计还需两年多的时间才能真正实现利用视频训练 “语言” 大模型。
扩大规模、实现语言模型向多模态模型的转变需要大量算力。为缓解这一问题,我们可以采用更好的神经架构和训练程序,这些架构和训练程序要么计算强度较低,要么可以用更少的数据进行学习(人类大脑证明这是可能的)。然而更可能的是类似于 RNN 的内存会卷土重来,因为这种内存运行时的效率非常高(例如最近的 RWKV 架构)。
此外,还可能有一些更大的变化,例如 LLM 不以自回归的方式生成,而是以自上而下的方式生成(例如在生成单词之前做出(随机)决定),这种做法可能更合乎逻辑(这就是神经网络目前生成图像的方式)。到底何时会开发出这样的新架构 / 方法还很难说,但我们预计应该就在未来几年,一旦开发出来,LLM 模型的性能将得到大幅提升。
另一个改进方向是继续进行指令调优,让更多人参与到 “教育” LLM(即与 AI 对齐)的过程中。这可以由私人 AI 实验室来实现,也可以是一个更像维基百科的众包项目,以改进和对齐开放模型的 LLM 能力。在这个问题上,我们还是希望偏离传统的 RLHF,而是让人们与模型对话来进行教导,就像我们对待孩子一样。我不确定这种项目的具体时间线,但我已经思考了一段时间,非常希望看到它的实现。
上文我们只讨论了改进实际模型的方法,但实际上有一些方法可以在不改变模型的情况下改进 LLM。方法之一就是为 LLM 提供工具。这种工具可以是用于查找准确信息的搜索引擎,或者是用于进行基本数学计算的计算器。此外,它还可以是一个结合了推理引擎(符号的经典组件)的知识库,如 Wolfram Alpha,用于查找事实、进行逻辑推理或其他神经网络不擅长的计算。当然,这个工具还可以是一个用于编写和运行代码的完整编程环境。LLM 可以通过生成触发 API 调用的特殊词元(单词)来使用这些工具,然后将 API 的输出插入到生成的文本中。
LLM 使用工具示例。来源:https://arxiv.org/abs/2302.04761
上述趋势实际上已经开始了(例如,ChatGPT 插件、LangChain 库和 Toolformer 论文),我相信这些工具将成为 LLM 的核心。
改进 LLM 的另一个方法是以更智能的方式使用它们,让它们更好地完成任务。这可以通过巧妙的提示或更高级的程序来实现。比如说我们可以让 LLM 按步骤进行思考(即思想链提示( chain-of-thoughts prompting)),并提高 LLM 在逻辑任务上的表现。以下是提示 LLM 按步骤思考的示例:
思维链提示示例。来源:https://arxiv.org/abs/2201.11903
同样地,我们可以要求 LLM 反思、批判自己的输出,并对其进行迭代修改。通过迭代,我们可以显著提高 LLM 性能,尤其是生成代码方面的性能。我们还可以更进一步,创建完全自主的智能体,这些智能体可以管理任务列表并迭代任务,直到达到主要目标(请参考 AutoGPT 和 BabyAGI)。目前,这些自动化智能体的运行效果并不理想,但它们的效果会逐步提升,很难说这些自动化智能体会发展到何种程度,对 LLM 产生何种影响。
由于 LLM 可以通过这些程序(思想链、迭代批评等)改进答案,因此,我们可以使用这些程序创建指令 - 答案对,然后在指令 - 答案对上按顺序对 LLM 微调以提高其性能。这种自我完善是可能的(参见 https://arxiv.org/abs/2210.11610),我相信它具有很大的潜力。例如,我们可以想象模型为了变得更加自洽而与自身进行讨论,这是一种自我反思过程。可能会进一步提升 LLM 的表现。
LLM 可能还有其他改进方向,总的来说,我们无法确定 LLM 的未来,但显然它们将继续发展下去。理解和生成文本的能力使 LLM 成为了一项基本技术。即使在目前的发展情况下,LLM 也将解锁大量应用程序,日常工作中的数字助理就是一个很好的例子,更疯狂的是,LLM 甚至可能引导我们创造某种超级智能。