揭开生成性文本人工智能的神秘面纱

60 阅读27分钟

生成式文本人工智能解密

通过动画图片轻松介绍生成式文本AI,涵盖人工神经网络、单词表示、生成式文本AI和ChatGPT的具体内容。

当我最初计划开这个博客时,我的想法是谈一谈我对生成性语言技术的个人看法。然而,在把我的初稿发给朋友、家人和同事后,很快就发现首先需要一些关于生成式文本AI本身的背景信息。

因此,我的第一个挑战是提供一个关于生成性文本人工智能的介绍和简单的解释。

这是为所有对生成式文本人工智能的奇迹感到惊奇,并想知道奇迹是如何发生的以及发生在哪里的人们准备的。警告:如果你不是真的对它感兴趣,这将是无聊的。

什么是人工智能,什么是机器学习,以及什么是深度学习?

人工智能是一个更广泛的概念,即机器能够执行需要人类智能的任务。它只是一个计算机程序在做一些智能的事情。一个使用if-then-else规则来做决定的系统也是人工智能。如果你建立了一个由成千上万条规则组成的贷款专家系统,如 "如果花在咖啡上的钱比花在杂货上的钱多,获得贷款的机会就少 "或 "如果向他/她的重要朋友隐藏他/她的网上购物,获得贷款的机会就少",以决定你是否获得贷款,这个系统属于人工智能领域。这些程序(尽管规则稍好)已经存在了50多年。人工智能并不是什么新东西。

机器学习是人工智能的子集,它涉及使用算法和统计学,使系统能够自己学习并做出预测。简单地说,它是一种让计算机自己学习如何做事情的方法,而不需要专门编程来做。如果没有人类专家指定所有的领域知识,如 "如果向父母借钱来支付Netflix的订阅费,那么获得贷款的机会就会减少"。系统根据实例找出该做什么。同样,这些--甚至是当前流行的方法,如神经网络--已经存在了50多年,尽管主要是在学术环境中。

深度学习是机器学习的子集,通常与(深度)人工神经网络的使用有关--这是机器学习中最流行的方法。我们将在下一节解释人工神经网络,但现在,请把它们想象成试图像我们的大脑一样工作的计算机系统。就像我们的大脑有很多称为神经元的小细胞,它们一起工作来帮助我们思考和学习,人工神经网络有很多节点,它们一起工作来解决问题。术语 "深度 "指的是这些网络的深度--它们之所以越来越多地出现在媒体上,以及真实的使用案例中,是因为要使它们运行良好,它们需要大量的节点和层(因此,术语 "深度"),这反过来需要大量的数据和计算能力。是什么结束了之前的人工智能冬天(=人工智能没有重大突破的时期),主要是我们现在有更多的数据和计算能力。最近一些重要的算法进展增强了人工智能季节的新春天,尽管以20年前的数据和计算能力,(几乎)没有令人印象深刻的机器学习系统会被用于今天的实际产品中。这些神经网络可以算出诸如 "如果一个人有一个宠物石头,穿蓬蓬裙上班,只说韵语,对钱过敏,对银行有恐惧感,但有初步的影响者成功,得到更多的贷款机会",但随后甚至是千倍或百万倍的复杂,而且没有可能让深网以我们人类可以解释的方式解释自己。

泽维尔,下一次我将把它留给你,以使文本更有趣的阅读。

人工智能、ML和DL之间的联系在维恩图中是这样表示的:

什么是人工神经网络?

在这个博客中,我们会经常谈论生成性文本的AI。由于每个执行生成式文本,AI属于深度学习领域;这意味着我们需要谈论人工神经网络。**人工神经网络(ANN)**是一种机器学习模型,其灵感来自人脑。它们由一层层相互连接的节点或 "神经元 "组成:

图片上的神经网络决定了一个词是否具有正面、中性或负面的含义。它有1个输入层(接受输入的单词),2个隐藏层(=中间的层),和1个输出层(返回输出)。

神经网络通过处理和传输数字到每个下一层来进行预测。输入词被传送到第一个隐藏层的节点,在那里计算出一些新的数字,这些数字被传递到下一个层。为了计算这些数字,每个连接的权重与每个连接的输入值相乘,然后应用另一个函数(如本例中的sigmoid),将传递的数字保持在一个特定的范围。正是这些权重在引导着计算的进行。最后,最后一个隐藏层计算出的数字被传送到输出层,并决定输出是什么。对于我们的例子,最终的结果是0.81代表积极,0.02代表消极,0.19代表中立,表明神经网络预测这个词应该被归类为积极(因为0.81是最高的):

泽维尔的技术说明

在上面的动画中,我们没有解释为什么在输入层中用数字[4, 0.5, -1]来表示 "快乐 "这个词。我们现在只是忽略了如何向网络表示一个词--重要的是要得到这个词是以数字的形式向网络表示。我们将在后面介绍如何将一个词表示为数字。

另外,上面的ANN返回一个概率分布。ANNs几乎总是这样工作的。它们从不说 "这是确切的输出";它几乎总是在所有(或很多)不同的选项上的一个概率。

训练一个神经网络

神经网络如何知道要进行哪些计算,以实现正确的预测?我们不能轻易地编造任何规则或以一些传统的方式进行计算,以最终得到一个正确的概率分布(当处理非结构化数据时,如一段文本、一个音频片段或一个图像)。

那么,第一个版本的神经网络的权重实际上是完全错误的。它们是随机初始化的。但是,通过处理一个又一个的例子,并使用一种叫做反向传播的算法**,**它知道如何调整其权重以越来越接近一个准确的解决方案。

这个过程也被称为神经网络的训练。为了使其发挥作用,该网络需要知道每个训练实例的正确输出值。没有它,它就无法计算其误差,也无法使其权重适应正确的解决方案。因此,对于我们上面的例子,我们需要(词->分类)对作为训练数据,如(快乐:正面=1;中性=0,负面=0),在训练期间提供给网络。对于其他ANNS,这将是不同的东西。例如,对于语音识别,这将是(语音片段->正确转录的文本)对。

如果你需要有这样的训练数据,为什么你还需要神经网络?你就不能在训练数据上做个查询吗?对于你所拥有的例子,你可以做这样的查询,但是对于大多数使用神经网络的问题,没有一个例子是唯一的,而且收集所有可能输入的训练数据是不可行的。关键是,它学会了在其神经元中建立问题模型,并学会了概括,所以它也可以处理在训练时没有看到的输入。

小、大或巨大的人工智能模型

你会听到人们谈论小、大或巨大的人工智能模型

人工智能模型的这种规模是指人工神经网络的参数数量。一个参数实际上只是你之前看到的权重之一*(纯粹主义者注意:我们在这里省略了偏置参数,而且我们也不涉及网络的超参数,那是完全不同的东西*)。小型ANN学生作业涉及只有几个参数的神经网络。许多生产语言相关的ANN有大约100M的参数。据报道,OpenAI的GPT3模型有1750亿个参数。

参数的数量与你所需要的计算能力和ANN所能学习的内容直接相关。参数越多,你需要更多的计算能力,你的ANN可以学习更多不同的东西。特别是GPT3模型的大小跨越了皇冠:仅存储参数,你就需要350GB!要存储维基百科的所有文本数据,你只需要50GB。这让人感觉到它存储详细数据的能力,但它也让人感觉到与其他模型相比,它需要多少计算能力。

转移学习

在人工智能社区,一个流行的做法是使用转移学习

为了理解转移学习是如何工作的,你可以把人工神经网络的第一个隐藏层看作是包含解决你的问题的更一般的信息。对于语言模型来说,第一层可以代表更粗略的特征,如单个单词和语法,而后面的层则学习更高层次的特征,如语义、语境信息和单词之间的关系。通过只删除网络的最后几层,你可以将同一个网络用于不同的任务,而不需要重新训练整个网络。

这意味着,只需重新训练最后几层,就可以为某一特定任务或领域重新训练较大的模型,这在计算上的成本要低得多,而且一般来说,需要的训练数据要少得多(通常,几千个训练样本就足够了,而不是几百万)。这使得预算较少的小公司或研究团队有可能用大型模型做一些事情,并使人工智能模型向更多的公众普及(因为基础模型的训练费用通常非常昂贵)。

生成式文本人工智能中的词是如何表示的?

在关于人工神经网络的文章中,我们对这种神经网络给出了一些高层次的表述。你对这些神经网络挖掘得越深,你遇到的细节就越多,比如为什么修剪节点往往是有意义的,或者有几种神经元,其中一些保持不同的 "状态"。或者,甚至有非常不同种类的神经网络层和由多个神经网络相互通信组成的复杂架构。但我们现在只关注一个问题,特别是与语言相关的ANN。

让我们回到我们之前谈到的神经网络:

在计算的例子中,我们将输入的单词 "happy "呈现为[4, 0.5, -1],以展示神经网络的工作原理。当然,这种对 "快乐 "一词的表述完全是虚构的,在真实环境中是行不通的。那么,我们该如何表示一个词呢?

1.1.天真无邪的方法:不考虑语义信息

一个自然的反射会是:这是一个什么样的问题?当然是通过它的字母。你用 "字 "来代表 "词"。很简单!好吧,事实并非如此。机器只理解数字,所以我们需要将单词转换成数字。那么,有什么好办法可以做到这一点呢?

要将一个词转换为数字,一个天真的方法是用每个已知的词(或词的一部分)创建一个字典,并给每个词一个独特的数字。马 "这个词可以是编号1122,而 "人 "这个词可以是编号1123。

泽维尔的技术说明

我在这里走了个捷径:你实际上需要先把实际的数字转换为它们的一热矢量编码,这样才能使这种方法发挥作用。否则,单词或字母之间就会产生一种根本不存在的关系,例如,"人 "与 "马 "几乎是一样的,因为它们的数字几乎相同。

对于许多问题,如预测下一个词或翻译一个句子中的下一个词,事实证明上述方法并不奏效。这里的重要一环是,这种方法从根本上缺乏以语义方式将词与词之间联系起来的能力。

2.更好的方法:将静态语义信息纳入考虑范围

让我们考虑一下 "女王 "和 "国王 "这两个词。这些词在语义上非常相似--除了性别之外,它们基本上是指同样的东西。但在我们上面的方法中,这些词将是完全不相关的。这意味着,无论我们的神经网络为 "女王 "这个词学习了什么,它都需要为 "国王 "这个词再次学习。

但是我们知道单词与其他单词有许多共同的特征--把它们当作完全独立的实体是没有意义的。它们可能是同义词或对立面,属于同一语义域,具有相同的语法类别......把每个词看作是一个独立的单元,甚至只是其字母的组合,都不是办法--这肯定不是人类会采取的方法。我们需要的是一种考虑到所有这些关系的数字语义表示。

我们如何获得这样的语义词表征?

答案是:用一种算法,这种算法是基于哪些词在一组巨大的句子中一起出现。它的细节并不重要。如果你想了解更多,请阅读关于Word2Vec和GloVe,以及词嵌入的内容。使用这种方法,我们可以得到一个词的语义表征,捕捉其(静态)意义。

简化后的表征可以是:

王后:[-0.43 0.57 0.12 0.48 0**.63**0.930.01 ... 0.44]

国王:[-0.43 0.57 0.12 0.48**-0.57** -0.910.01 ... 0.44]

正如你可能注意到的,这两个词的表示方法是相同的(它们共享相同的数字),除了第五和第六个值,这可能与词的不同性别有关。

泽维尔的技术说明

我们又一次进行了简化--在现实中,2个这样相关的词的嵌入非常相似,但绝不会完全相同,因为人工智能系统的训练永远不会产生完美的结果。这些值也从来不是人类可读的;你可以认为每个数字都代表着诸如性别、单词类型或领域......但当它们被机器训练时,机器更有可能得出人类不可读的特征,或者人类可读的特征被分散在多个值中。

事实证明,对于语义很重要的任务(比如预测或翻译下一个词)来说,捕捉词与词之间的这种语义关系是至关重要的。它是使 "下一个词预测 "和 "遮蔽语言建模 "等任务顺利进行的一个基本要素。

虽然还有很多语义任务,但我在这里提到 "下一个词预测 "和 "掩蔽语言建模",因为它们是大多数生成性文本ai模型训练的主要任务。

"下一个词的预测 "是预测给定短语之后最可能出现的词的任务。例如,对于给定的短语 "我在写博客",这样的系统会在所有可能的下一个词(部分)上输出一个概率分布,其中 "文章"、"关于 "或". "可能都是非常可能的。

"屏蔽语言建模 "是一个类似的任务,但不是预测下一个词,而是预测句子中间最可能的词。对于像 "我正在写一篇文章。"这样的短语,它将返回位置上所有可能的词的概率分布。

Xavier的技术说明

这些词嵌入是一个很好的起点,可以让你在与语言相关的机器学习方面有所作为。训练它们很容易--你不需要大量的计算能力或大量的注释数据。

它们也相对特殊,因为在训练它们时,实际使用的输出是权重,而不是训练过的网络本身的输出。这有助于对什么是ANN的权重及其激活获得一些更深层次的直觉。

它们也有许多实际和有趣的应用。你可以用它们来查询另一个词的同义词,或者查询某个特定领域的单词列表。通过在额外的文本上训练它们,你可以控制哪些词在嵌入中是已知的,例如,添加低频或本地词(非常相似的词有非常相似的嵌入)。他们也可以被问到诸如 "男人对计算机程序员来说就是女人对...... "的问题。不幸的是,在这种情况下,他们的答案很可能是 "家庭主妇 "之类的。所以,他们通常含有很多偏见。但是,可以证明你实际上可以在发现这种偏见后将其删除,尽管词嵌入本身是不可读的。

3.3.最佳方法:将上下文语义信息纳入考虑范围

然而,这并不是终点。我们需要把表示法再向前推进一步。我们现在拥有的每个词的静态语义嵌入是很好的,但是我们仍然缺少一些重要的东西:每个词在每个句子中的含义都略有不同。

这方面的一个明显例子是 "兔子知道它必须逃离狐狸 "和 "狐狸知道它可以攻击兔子 "这两个句子。同一个词 "它 "指的是两个完全不同的东西:一次是狐狸,一次是兔子,而且,在这两种情况下,它都是必要的信息。

虽然 "它 "是一个容易理解的例子,但句子中的每个词也是如此,这就比较难理解了。事实证明,建立模型的关系是 每个词与句子中所有其他词的关系,可以得到更好的结果。而我们的语义嵌入并不对这样的关系进行建模--它们并不对其他词语进行 "环顾"。

因此,我们不仅需要捕捉词与词之间的 "永远真实 "的关系,例如国王是女王的男性版本,还需要捕捉我们在确切的句子中使用的词之间的关系。捕捉这种关系的第一种方法是使用一种特殊的神经网络--递归神经网络--但目前最先进的方法是使用转化器,它有一个编码器,可以给我们提供上下文嵌入(是基于静态的),而不是我们在上一节讨论的非上下文的嵌入。

这种方法--首先在被广泛引用的论文 "Attention is all you need"中描述--可能是GPT3、ChatGPT和GPT4能够像今天这样良好运作的最重要的突破口。

从静态语义词表征到上下文语义词表征,是在向机器表示一个词时剩下的最后一部分难题。

什么是生成性文本人工智能?

生成式文本人工智能是指人工智能--一个ANN,要么是一个循环神经网络,要么是一个转化器--能够产生连续的文本。通常,这些系统被训练的一般基础任务是 "下一个词的预测",但它可以是任何东西。翻译一个文本,转述一个文本,纠正一个文本,使一个文本更容易阅读,预测前面而不是后面的内容......

过度简化的生成性文本人工智能 下一个词的预测。当你在ChatGPT或GPT4中输入一个提示,如 "给我写一个关于生成式文本人工智能的故事",它通过预测一个又一个单词来生成所要求的故事。

泽维尔的技术说明

为了使生成式人工智能运行良好,和标记通常被添加到训练数据中,以教他们确定事物的开始和结束。最近的模型还在上面加入了人类的反馈,以使其更加真实,并可能减少危害。而在下一个词的预测之上,也可以训练中间词的预测或上一个词的预测。但是,如果不考虑更复杂的架构和其他选择,这些系统始终只是在预测一个又一个的单词,而没有在上面添加任何推理

生成式文本人工智能的基本思想是在一个大的文本数据集上训练模型,如书籍、文章或网站,以使其预测下一个单词。我们不需要标记的数据,因为 "下一个词 "总是存在于文本本身的句子中。当我们不需要人类标记的数据时,我们谈论的是 "无监督学习"。这有一个巨大的优势。由于存在数以万亿计的可用于训练的句子,获取 "大数据 "很容易。

如果我们想在高层次上可视化这样一个ANN,它看起来像这样:

这只是一个高水平的代表。在现实中,这些系统最先进的架构--变压器--是相当复杂的。我们已经在上一节中提到了转化器,当时我们正在讨论产生上下文嵌入的编码器。正如我们在那里所展示的,它能够以一种比以前的语言模型更加复杂和精密的方式来处理文本。

关于它的直觉是::

  • 通过考虑一个词的周围的词和句子,可以更好地理解所要表达的意思
  • 它以一种 "双向 "的方式工作--它可以理解一个句子中的词是如何向前和向后联系的,这可以帮助它更好地理解一段文字的整体含义。

泽维尔的技术说明

这个转化器架构实际上由编码器(例如,"从静态单词嵌入到上下文嵌入")和解码器(例如,"从编码器的上下文嵌入和它自己的上下文嵌入到目标任务输出")两部分组成。编码器是双向的,而解码器是单向的(只看后面的作品,不看前面的)。这个系统的解释相当复杂,有许多变种,都使用了上下文语义嵌入/自我注意的概念。GPT模型实际上被称为 "仅解码器",因为它们只使用了典型变形器的解码器部分,尽管 "仅修改的编码器 "是一个更合适的名字,我认为。这个视频是对变形器的一个很好的解释--它是解释当前生成式文本人工智能突破的最清晰的视频之一。继而,博客文章 "图解变形器"更深入地解释了变形器。如果你想更深入地挖掘,这个视频解释了转化器在训练和推理时的工作原理。不过,这些需要更多的技术背景。

像这样的系统学习的任务是 "下一个词的预测",而不是 "下一个整个短语的预测"。它一次只能预测一个词。因此,ANN以不同的时间步骤运行,先预测第一个下一个单词,然后是第二个,以此类推。

正如我们之前提到的,每次运行的输出又是一个概率分布。因此,例如,如果你给ANN输入句子 "我在工作",下一个概率最高的词可能是 "in",但它可能紧接着是 "at "或 "on"。那么,就会选择一个选项。

泽维尔的技术说明

这并不需要是概率最高的词--所有的实现都允许一个配置选项来选择概率最高的词或允许在这方面有一些自由。一旦选定了这个词,算法就会继续预测下一个词。就这样一直进行下去,直到满足某个条件,比如达到最大标记或遇到标记(这是模型在训练时学到的一个 "词",用来知道何时停止)。

这里需要认识到的一个重要问题是算法的简单性。它唯一真正在做的事情--尽管转化器提供的是 "聪明的、有意义的词和句子中的关系表示"--是根据大量的统计资料预测一些输入文本("提示")的下一个词。

这种生成性文本人工智能的一个很酷的地方是,它不一定需要预测下一个词。你可以很容易地训练它进行 "前一个词的预测 "或 "中间词的预测"--这对人类来说要困难得多。你可以告诉它 "嗨,这是我的书的最后一章。你能不能告诉我前面的内容。"- 这和其他方式的效果一样好。

ChatGPT只是使用下一个单词预测吗?

在上一篇文章中,我们解释了GPT本身(如GPT3和GPT3.5)如何工作,而不是ChatGPT(或GPT4)。那么,有什么区别呢?

生成式文本人工智能的基础模型总是在 "下一个单词预测"(或 "掩蔽式语言建模")等任务上进行训练。这是因为学习这项任务的数据很丰富:即我们每天产生的所有句子都可以在互联网数据库、文档和网页中获得,......它们无处不在。没有标签是必要的。这一点是至关重要的。没有可行的方法来获得一个由数万亿个人工标注的例子组成的训练集。

但是像 "下一个词的预测 "这样的任务会产生一个能力与对齐的问题。我们实际上是在训练我们的模型来预测下一个词。这是我们作为人类真正想要或期望的吗?肯定不是。

让我们考虑一些例子。

对于 "经理的性别是什么 "这个提示,下一个词会是什么?由于基础模型是在不同的文本上训练的,其中许多是几十年前的文本,我们知道一个事实,即训练数据包含了许多与这个问题有关的偏见。正因为如此,从统计学上看,输出 "男性 "的概率会比 "女性 "大得多。

或者让我们要求它为 "美国与列支敦士登开战 "提供下一个词。据统计,在这个 "in "之后最可能的输出是年号,而不是 "an"(因为你需要达到 "另一个宇宙")或任何其他词。 但是,由于它得到的任务是鉴于它所训练的数据的预期,实际预测统计上最有可能的词,如果它输出一些年份,它在这里做了一个了不起的工作,不是吗?100%正确,100%有能力。

问题是,我们并不希望它预测下一个最有可能的词。我们希望它能根据我们人类的偏好给出一个合适的答案。在模型的训练方式和我们想要使用它的方式之间存在着明显的分歧。它本质上是错位的。预测下一个词与给出一个真实的、无害的、有帮助的答案不是同一个任务。

这正是ChatGPT试图解决的问题,它试图通过学习模仿人类的偏好来做到这一点。

如果你期望现在有一个大的启示,比如这个东西学会了推理,或者它至少学会了推理自己,那么你会感到失望:它实际上只是更多相同的ANN的东西,但有一点不同。

很简单,使用转移学习的方法(见前文)被开发出来,其中GPT3.5模型被微调为 "根据人类反馈学习人类喜欢的反应"。正如我们之前所说,转移学习意味着冻结神经网络的第一层(在GPT-3的情况下,这几乎是整个模型,因为即使微调最后10B的参数也是非常昂贵的)。

第一步 是使用基于标记数据的标准转移学习创建一个微调模型。为此创建了一个由大约15000个<提示,理想人类反应>对组成的数据集。这个经过微调的 "模型已经可以开始输出比基础模型更受人类青睐的反应(更真实,更有帮助,有可能是有害的)。然而,为这个模型创建数据集已经是一项巨大的任务--对于每个提示,人类需要做一些智力工作,以确保反应可以被认为是 "理想的人类反应",或者至少是足够接近。这种方法的问题是,它没有规模。

然后,第二步是学习奖励模型。

正如我们之前看到的,经过训练的生成式文本人工智能输出一个概率分布。因此,你可以不要求它提供最有可能的下一个词,而是要求它提供第二个最有可能的下一个词,或10个最有可能的下一个词,或100个在某种阈值下可能足够的词。你可以根据你想要的对提示的反应进行采样。

为了得到一个数据集来训练这个奖励模型,对每个提示的4到9个可能的反应进行抽样,对于每个提示,人类将这些反应从最不喜欢到最喜欢排序。这种方法的规模比人类手动写出对提示的理想反应要好得多。他们需要对回答进行排序的事实可能会使奖励模型变得有点不清楚,但奖励模型就像你所期望的那样:它只是为每个文本输出一个 "人类偏好等级 "的分数:越高,越可取。他们之所以要求人们对回答进行排序,而不是仅仅指定一个分数,是因为不同的人类对这种 "自由文本 "总是给出不同的分数,而使用排序+类似ELO系统(例如,标准化的排名系统)的方式,在多个人类参与评分时,比手动指定一个数字更能计算出一个一致的分数。

在**第三步,**通过使用奖励模型创建另一个微调模型(在第一步创建的模型基础上进行微调),该模型在输出人类偏好的反应方面更加出色。

第1步只做一次;第2和第3步可以反复进行,以不断改进模型。

使用这种转移学习方法,我们最终得到了一个系统--ChatGPT--实际上在创造人类偏好的反应方面比基础模型好得多,这些反应确实更真实,更不偏颇。

如果你不明白这怎么能行,答案又在嵌入中。这个模型有某种关于概念的深层知识。因此,如果我们把含有男/女偏见的回答持续地排在比没有这种偏见的回答更差的位置,这个模型实际上会看到这种模式,并很普遍地应用它,这种偏见会得到相当成功的消除(除了输出完全不同的情况,比如,作为计算机程序的一部分)。