TOC
Open TOC
概述
自然语言处理(NLP)是机器学习和人工智能的一个子领域。人工智能(AI)有各种定义,或多或少已经成为共识的是 AI 是一类计算机系统,能够执行通常需要人类智能才能完成的任务。
在这个定义之下,许多算法都可以被归类为 AI 算法,比如导航应用或者游戏中基于规则的系统。
机器学习(machine learning,ML)是 AI 的一个子集。 在 ML 中,我们不试图直接实现 AI 系统使用的决策规则,而是让系统通过示例自己学习。
深度学习(deep learning,DL)是 ML 的一个分支,专注于受大脑结构启发的算法。这些算法被称为人工神经网络(artificial neural network,ANN)。
GPT 是基于一种特定的神经网络架构——Transformer。Transformer 就像一个高效的阅读机,能够关注句子或段落中的不同部分,从而理解其上下文并生成连贯的回答。同时,它能够解析句子中单词的顺序和上下文的意义。这些特性使得 Transformer 在语言翻译、问题回答和文本生成等任务中表现得尤为出色。
LLM
LLM 是试图完成文本生成任务的一类 ML 模型。LLM 使计算机能够处理、解释和生成人类语言,从而提高人机交互效率。
为了做到这一点,LLM 会分析大量文本数据或基于这些数据进行训练,从而学习句子中各词之间的模式和关系。这个学习过程可以使用各种数据源,包括维基百科、Reddit、成千上万本书,甚至互联网本身。在给定输入文本的情况下,这个学习过程使得 LLM 能够预测最有可能出现的后续单词,从而生成对输入文本有意义的回应。
n-gram 模型
n-gram 模型通过使用词频来根据前面的词预测句子中的下一个词,其预测结果是在训练文本中紧随前面的词出现的 频率最高 的词。虽然这种方法提供了不错的着手点,但是 n-gram 模型在理解上下文和语法方面仍需改进,因为它有时会生成不连贯的文本。
为了提高 n-gram 模型的性能,人们引入了更先进的学习算法,包括 循环神经网络(recurrent neural network,RNN)和 长短期记忆(long short-term memory,LSTM)网络。与 n-gram 模型相比,这些模型能够学习更长的序列,并且能够更好地分析上下文,但它们在处理大量数据时的效率仍然欠佳。
Transformer 架构
Transformer 架构由来自谷歌公司的 Ashish Vaswani 等人在 2017 年的论文 Attention Is All You Need 中提出,最初用于序列到序列的任务,如机器翻译任务。
Transformer 架构彻底改变了 NLP 领域,这主要是因为它能够有效地解决之前的 NLP 模型(如 RNN)存在的关键问题:难以处理长文本序列并记住其上下文。
换句话说,RNN 在处理长文本序列时容易忘记上下文(也就是臭名昭著的「灾难性遗忘问题」),Transformer 则具备高效处理和编码上下文的能力。
注意力机制 是 Transformer 最具革命性的机制。模型不再将文本序列中的所有词视为同等重要,而是在任务的每个步骤中关注最相关的词。
Transformer架构广泛使用了 交叉注意力 模块和 自注意力 模块。
-
交叉注意力有助于模型确定输入文本的不同部分与输出文本中下一个词的相关性。它就像一盏聚光灯,照亮输入文本中的词或短语,并 突出显示预测下一个词所需的相关信息,同时忽略不重要的细节。
-
自注意力机制是指模型能够关注其输入文本的不同部分。具体到 NLP 领域,自注意力机制使模型能够评估句子中的 每个词相比于其他词的重要性。这使得模型能够更好地理解各词之间的关系,并根据输入文本中的多个词 构建新概念。
与 RNN 不同,Transformer 架构具有易于并行化的优势。这意味着 Transformer 架构可以同时处理输入文本的多个部分,而无须顺序处理。基于 Transformer 架构的模型所具备的并行处理能力与图形处理单元(graphics processing unit,GPU)的架构完美契合。
标准的 Transformer 架构有两个主要组件:编码器 和 解码器,两者都十分依赖注意力机制。
编码器的任务是处理输入文本,识别有价值的特征,并生成有意义的文本表示,称为 嵌入(embedding)。解码器使用这个嵌入来生成一个输出,比如翻译结果或摘要文本。这个输出有效地解释了编码信息。
生成式预训练 Transformer(Generative Pre-trained Transformer,GPT)是一类基于 Transformer 架构的模型,专门利用原始架构中的解码器部分。在 GPT 中,不存在编码器,因此无须通过交叉注意力机制来整合编码器产生的嵌入。
BERT 等其他一些众所周知的模型基于编码器部分。
也就是说,GPT 仅依赖解码器内部的自注意力机制来生成上下文感知的表示和预测结果。
GPT 标记化和预测步骤
GPT 模型接收一段提示词作为输入,然后生成一段文本作为输出。这个过程被称为 文本补全。这主要是一个概率问题。
当 GPT 模型收到一段提示词之后,它首先将输入 拆分成标记(token)。这些标记代表单词、单词的一部分、空格或标点符号。
经验法则:对于英语文本,100 个 Token 大约等于 75 个单词。
为了生成新的句子,LLM 根据提示词的上下文预测最有可能出现的下一个 Token。与之前的循环模型不同,带有注意力机制的 Transformer 架构使得 LLM 能够将上下文作为一个整体来考虑。
GPT 简史:从 GPT-1 到 GPT-4
GPT-1
2018 年,就在 Transformer 架构诞生一年后,OpenAI 发表了一篇题为 Improving Language Understanding by Generative Pre-Training 的论文,作者是 Alec Radford 等人。这篇论文介绍了 GPT,也被称为 GPT-1。
在 GPT-1 出现之前,构建高性能 NLP 神经网络的常用方法是利用监督学习。这种学习技术使用大量的手动标记数据。
在论文中,GPT-1 的作者提出了一种新的学习过程,其中 引入了无监督的预训练步骤。这个预训练步骤不需要标记数据。
对于预训练,GPT-1 模型使用了 BookCorpus 数据集。该数据集包含约 11000 本未出版图书的文本。BookCorpus 最初由 Yukun Zhu 等人在 2015 年的论文 Aligning Books and Movies:Towards Story-like Visual Explanations by Watching Movies and Reading Books 中给出。(现在原始数据集的正式版本已不能公开访问)
人们发现,GPT-1 在各种基本的文本补全任务中是有效的。
GPT-1 是小模型,它无法在不经过微调的情况下执行复杂任务。因此,人们将 微调 作为第二个 监督学习 步骤,让模型在一小部分手动标记的数据上进行微调,从而适应特定的目标任务。这个过程使模型在初始的预训练阶段习得的参数得到修改,从而更好地适应具体的任务。
GPT-1 在仅用少量手动标记的数据进行微调后,能够出色地完成多个 NLP 任务。GPT-1 的架构包括一个解码器(与原始 Transformer 架构中的解码器类似),具有 1.17 亿个参数。
GPT-2
2019 年初,OpenAI 提出了 GPT-2,作为 GPT-1 的一个扩展版本,其参数量和训练数据集的规模大约是 GPT-1 的 10 倍。这个新版本的参数量为 15 亿,训练文本为 40 GB。
2019 年 11 月,OpenAI 发布了完整版的 GPT-2 模型。
GPT-2 表明,使用更大的数据集训练更大的语言模型可以提高语言模型的任务处理能力,并使其在许多任务中超越已有模型。它还表明,更大的语言模型能够更好地处理自然语言。
GPT-3
2020 年 6 月,OpenAI 发布了 GPT-3。GPT-2 和 GPT-3 之间的主要区别在于模型的大小和用于训练的数据量。GPT-3 比 GPT-2 大得多,它有 1750 亿个参数,这使其能够捕捉更复杂的模式。
GPT-3 是在更广泛的数据集上进行训练的。这包括 Common Crawl(它就像互联网档案馆,其中包含来自数十亿个网页的文本)和维基百科。这个训练数据集包括来自网站、书籍和文章的内容,使得 GPT-3 能够更深入地理解语言和上下文。
GPT-3 在各种语言相关任务中都展示出更强的性能。它在文本生成方面还展示出更强的连贯性和创造力,甚至能够编写代码片段,如 SQL 查询,并执行其他智能任务。
此外,GPT-3 取消了之前的 GPT 模型中是必需的微调步骤。
GPT-3 存在一个问题,即最终用户提供的任务与模型在训练过程中所见到的任务不一致。训练过程不一定与最终用户希望模型执行的任务一致。增大语言模型的规模并不能从根本上使其更好地遵循用户的意图或指令。
尽管数据源经过一定的筛选,但用于训练模型的数据仍然可能包含虚假信息或有问题的文本,比如涉及种族歧视、性别歧视等。因此,模型有时可能说错话,甚至说出有害的话。
从 GPT-3 到 InstructGPT
2021 年,OpenAI 发布了 GPT-3 模型的新版本,并取名为 InstructGPT。与原始的 GPT-3 基础模型不同,InstructGPT 模型 通过强化学习和人类反馈进行优化。这意味着 InstructGPT 模型利用反馈来学习和不断改进。这使得模型能够从人类指令中学习,同时使其真实性更大、伤害性更小。
在题为 Training Language Models to Follow Instructions with Human Feedback 的论文中,OpenAI 的 Long Ouyang 等人解释了 InstructGPT 是如何构建的。
从 GPT-3 模型到 InstructGPT 模型的训练过程主要有两个阶段:
- 监督微调(supervised fine-tuning,SFT)
- 通过人类反馈进行 强化学习(reinforcement learning from human feedback,RLHF)。
每个阶段都会针对前一阶段的结果进行微调。也就是说,SFT 阶段接收 GPT-3 模型并返回一个新模型。RLHF 阶段接收该模型并返回 InstructGPT 版本。
在 SFT 阶段中(步骤 1),原始的 GPT-3 模型通过监督学习 进行微调。
OpenAI 拥有一系列由最终用户创建的提示词。首先,从可用的提示词数据集中随机抽样。然后,要求 标注员 编写一个示例来演示理想的回答。重复这个过程数千次,以获得一个由提示词和相应的理想回答组成的监督训练数据集。
最后,使用该数据集微调 GPT-3 模型,以针对用户的提问提供更一致的回答。此时得到的模型称为 SFT模型。
RLHF 阶段分为两个子步骤:首先训练奖励模型(步骤 2),然后使用奖励模型进行 强化学习(步骤 3)。
奖励模型的目标是自动为回答给出分数。当回答与提示词中的内容匹配时,奖励分数应该很高;当回答与提示词中的内容不匹配时,奖励分数应该很低。
为了训练奖励模型,OpenAI 首先随机选择一个问题,并使用 SFT 模型生成几个可能的答案。我们稍后将看到,通过一个叫作 温度(temperature)的参数,可以针对同一输入生成许多回答。
然后,要求标注员根据与提示词的匹配程度和有害程度等标准给这些回答排序。在多次重复此过程后,使用数据集微调 SFT 模型以进行评分。这个奖励模型将用于构建最终的 InstructGPT 模型。
训练 InstructGPT 模型的最后一步是强化学习,这是一个迭代的过程。它从一个初始的生成式模型开始,比如 SFT 模型。然后随机选择一个提示词,让模型给出预测结果,由奖励模型来评估结果。
根据得到的奖励分数,相应地更新生成式模型。这个过程可以在无须人工干预的情况下重复无数次,从而自动、高效地提高模型的性能。
GPT-3.5、Codex 和 ChatGPT
2022 年 3 月,OpenAI 发布了 GPT-3 的新版本。新模型可以编辑文本或向文本中插入内容。它们所用的训练数据截至 2021 年 6 月,OpenAI 称它们比先前的版本更强大。
2022 年 11 月底,OpenAI 正式称这些模型为 GPT-3.5 模型。
OpenAI 还提出了 Codex 模型,这是一个在数十亿行代码上进行了微调的 GPT-3 模型。Codex 模型在 2023 年 3 月被 OpenAI 弃用。OpenAI 建议用户从 Codex 切换到 GPT-3.5 Turbo 或 GPT-4。
2022 年 11 月,OpenAI 推出了 ChatGPT,并将其作为一种实验性的对话式模型。可以说,ChatGPT 是由 LLM 驱动的应用程序,而不是真正的 LLM。
GPT-4
2023 年 3 月,OpenAI 发布了 GPT-4。关于这个新模型的架构,我们知之甚少,因为 OpenAI 提供的信息很少。OpenAI 声称, GPT-4 在高级推理能力方面超越了 ChatGPT。
GPT-4 是第一个能够同时接收文本和图像的 多模态模型。这意味着 GPT-4 在生成输出句子时会考虑图像和文本的上下文。这样一来,用户就可以将图像添加到提示词中并对其提问。
GPT-4 经过了各种测试,它在测试中的表现优于 ChatGPT。比如,在美国统一律师资格考试中,ChatGPT 的得分位于第 10 百分位,而 GPT-4 的得分位于第 90 百分位。国际生物学奥林匹克竞赛的结果也类似,ChatGPT 的得分位于第 31 百分位,GPT-4 的得分则位于第 99 百分位。
这个进展令人印象深刻,尤其考虑到它是在不到一年的时间内取得的。
参考资料
- [比]奥利维耶·卡埃朗, [法]玛丽-艾丽斯·布莱特. 大模型应用开发极简入门:基于 GPT-4 和 ChatGPT. 人民邮电出版社. 2024