Transcription
大家好,我一直想拍这个视频很久了。这是一个全面但面向普通大众的关于大型语言模型(如 ChatGPT)的介绍。我希望在这个视频中实现的目标是,让你们能够通过一些心智模型来思考这个工具到底是什么。它在某些方面显然是神奇而惊人的,它在某些事情上做得非常好,在其他事情上做得不太好,而且还有很多需要注意的“锋利边缘”。
那么,在这个文本框后面是什么呢?你可以输入任何东西,然后按回车键。但是,我们应该输入什么呢?这些生成的词又是如何产生的呢?它是如何工作的?你到底在和什么对话?所以,我希望在这个视频中涵盖所有这些主题。我们将贯穿整个构建这些东西的流程,但我会尽量让所有内容都对普通大众来说易于理解。
所以,让我们先来看看如何构建像 ChatGPT 这样的东西。在这个过程中,我将谈论一些工具带来的认知和心理影响。
好的,让我们来构建 ChatGPT。它将有多个阶段,按顺序排列。第一个阶段称为预训练阶段。预训练阶段的第一步是下载和处理互联网。
为了让你大致了解这是什么样子,我建议你看看这个 URL。有一家名为 Hugging Face 的公司收集、创建和整理了一个名为 FineWeb 的数据集。他们在关于如何构建 FineWeb 数据集的博客文章中详细介绍了这一点。像 OpenAI、Anthropic 和 Google 等所有主要的 LLM 提供商,内部都有类似于 FineWeb 数据集的等价物。
那么,我们大致想在这里实现什么呢?我们想从互联网上公开可用的来源获取大量的文本。我们希望拥有海量的高质量文档,并且我们还希望文档具有极大的多样性,因为我们希望这些模型内部包含大量知识。所以,我们想要大量多样化的高质量文档,并且我们想要很多很多。实现这一点相当复杂,正如你在这里看到的,需要多个阶段才能做好。
所以,让我们稍微看看这些阶段中的一些是什么样的。目前,我想指出的是,例如,FineWeb 数据集,它相当具有代表性,你会在生产级应用中看到它,最终只占用大约 44TB 的磁盘空间。你可以很容易地买到一个 1TB 的 U 盘,或者我认为今天这几乎可以装在一块硬盘上。归根结底,这并不是一个巨大的数据量,尽管互联网非常非常大。我们在处理文本,并且我们也在积极地过滤它,所以在这种情况下,我们最终得到了大约 44TB。
所以,让我们来看看这些数据是什么样的,以及这些阶段中的一些是什么。许多这些努力的起点,并且最终贡献了大部分数据的是来自 Common Crawl 的数据。Common Crawl 是一个自 2007 年以来一直在扫描互联网的组织。例如,截至 2024 年,Common Crawl 已经索引了 27 亿个网页。他们有这些爬虫在互联网上到处爬行,你基本上所做的就是从几个种子网页开始,然后跟踪所有链接,不断跟踪链接,并索引所有信息,最终随着时间的推移获得大量的互联网数据。这通常是许多这些努力的起点。
现在,这个 Common Crawl 数据非常原始,并且以许多不同的方式进行过滤。在这里,他们记录了——这是同一个图表——他们记录了这些阶段中发生的处理过程。第一个是 URL 过滤。这指的是存在这些 URL 或域名的黑名单,你不想从中获取数据。通常,这包括恶意软件网站、垃圾邮件网站、营销网站、种族主义网站、成人网站等等。因此,有许多不同类型的网站在这个阶段被淘汰,因为我们不希望它们出现在我们的数据集中。
第二部分是文本提取。你必须记住,所有这些网页,这些是爬虫保存的网页的原始 HTML。所以,当我在这里检查时,这就是原始 HTML 的样子。你会注意到它有所有的标记,比如列表之类的东西,还有 CSS 和所有这些东西。这几乎是这些网页的计算机代码。但我们真正想要的是,我们只想要这些文本,对吧?我们只想要这个网页的文本,我们不想要导航之类的东西。因此,有大量的过滤和处理,以及启发式方法,用于充分过滤出这些网页的良好内容。
下一个阶段是语言过滤。例如,FineWeb 使用语言分类器进行过滤。他们试图猜测每个网页是什么语言,然后他们只保留英语占 65% 以上的网页,举个例子。所以,你可以感觉到这是一个设计决策,不同的公司可以为自己做出。我们将包含多少比例的各种语言在我们的数据集中?因为,例如,如果我们过滤掉所有西班牙语,举个例子,那么你可能会想象我们的模型以后在西班牙语方面不会很好,因为它从未见过那么多该语言的数据。因此,不同的公司可以不同程度地专注于多语言性能,举个例子。所以,FineWeb 非常专注于英语,因此如果他们以后训练语言模型,它将非常擅长英语,但可能不擅长其他语言。
在语言过滤之后,还有其他一些过滤步骤,以及去重等。最后是 PII(个人身份信息)的移除。这是个人身份信息。例如,地址、社会安全号码之类的东西。你会尝试检测它们,并尝试从数据集中过滤掉这些类型的网页。所以,这里有很多阶段,我不会详细介绍,但这是预处理中相当广泛的一部分。最终,你会得到 FineWeb 数据集。
当你点击它时,你可以看到一些例子,它最终看起来是什么样的。任何人都可以从 Hugging Face 网页上下载它。所以,这里有一些最终进入训练集的文本示例。这是一篇关于 2012 年龙卷风的文章。所以,2020 年和 2012 年有一些龙卷风,发生了什么?下一个是关于“你知道你的身体里有两个小小的、9 伏电池大小的肾上腺吗?”好的,这是一篇奇怪的医学文章。所以,把它们想象成互联网上的网页,经过各种方式的文本过滤。现在我们有了海量的文本,40TB,这现在是这个阶段下一步的起点。
我想让你直观地感受一下我们现在的位置。我在这里取了前 200 个网页,记住我们有海量的网页。我把所有文本都放在一起,连接起来。这就是我们最终得到的结果。我们得到了这些原始的、原始的互联网文本,而且数量巨大,即使在这 200 个网页中也是如此。所以,我可以继续放大,我们只是拥有这块巨大的文本数据织锦。这些文本数据具有所有这些模式。现在,我们想在这段数据上训练神经网络,以便神经网络能够内化和模拟文本的流动方式。所以,我们只是拥有这块巨大的文本织锦,现在我们想要获得模仿它的神经网络。
好的,在我们把文本输入神经网络之前,我们必须决定如何表示这些文本,以及如何输入它们。我们现在的技术工作方式是,它们期望一维符号序列,并且它们想要一个有限的符号集。所以,我们必须决定什么是符号,然后我们必须将我们的数据表示为这些符号的一维序列。
所以,现在我们拥有的是一维文本序列。它从这里开始,然后到这里,然后到这里,等等。所以,这是一维序列,尽管在我的显示器上,它当然是以二维方式布局的,但它是从左到右,从上到下的。所以,这是一维文本序列。
当然,这是计算机,这里有一个底层的表示。如果我进行所谓的 UTF-8 编码,我可以得到与计算机中的文本相对应的原始比特。这就是它的样子。事实证明,例如,这里的第一个条形是第一个 8 位,举个例子。
那么,这是什么呢?在某种意义上,我们只有两个可能的符号:零和一。并且我们有一个非常长的序列。现在,事实证明,这个序列的长度实际上将是我们神经网络中一个非常有限且宝贵的资源。我们实际上不想要极长的只有两个符号的序列。相反,我们想要的是,我们想要权衡这个符号大小——我们称之为词汇量——以及由此产生的序列长度。我们不想要只有两个符号和极长的序列。我们将想要更多的符号和更短的序列。
所以,一种压缩或缩短我们序列长度的简单方法是,基本上考虑一组连续的比特,例如八个比特,并将它们分组到一个所谓的字节中。因为这些比特要么开启要么关闭,如果我们取一组八个比特,那么只有 256 种可能的组合,这些比特可以开启或关闭。因此,我们可以将这个序列表示为字节序列。这个字节序列将比原来的短八倍,但现在我们有 256 个可能的符号。所以,这里的每个数字都从 0 到 255。
我真的鼓励你不要把它们看作数字,而是看作唯一的 ID 或唯一的符号。所以,也许最好是将每一个都替换成一个独特的表情符号,你会得到这样的东西。所以,我们基本上有一个表情符号序列,有 256 种可能的表情符号,你可以这样想。
现在,事实证明,在生产中,对于最先进的语言模型,你实际上想做得更多。你想继续缩短序列的长度,因为再次强调,这是一个宝贵的资源,以换取词汇量中更多的符号。实现这一点的方法是运行所谓的字节对编码算法。它的工作原理是,我们基本上在寻找非常常见的连续字节或符号。例如,事实证明序列 116 后跟 32 是相当常见的,并且经常出现。所以,我们将把这个对组合成一个新的符号。我们将创建一个 ID 为 256 的符号,并将所有 11632 对都用这个新符号重写。然后,我们可以根据需要多次迭代此算法。每次我们创建一个新符号时,我们都会缩短长度并增加符号大小。在实践中,事实证明,一个相当好的词汇量大小设置大约是 100,000 个可能的符号。特别是 GPT-4 使用 100,277 个符号。
将原始文本转换为这些符号(我们称之为 token)的过程称为 tokenization。所以,让我们来看看 GPT-4 如何进行 tokenization,从文本到 token,再从 token 回到文本,以及它实际看起来是什么样的。
我喜欢用来探索这些 token 表示的一个网站叫做 tick tokenizer。所以,来到下拉菜单,选择 cl100_base,这是 GPT-4 基础模型的 tokenizer。在这里,左边你可以输入文本,它会显示该文本的 tokenization。例如,hello space world。hello world 实际上是两个 token:token hello,其 ID 为 15339,以及 token space world,其 ID 为 11917。所以,hello space world。
现在,如果我把这两个连接起来,例如,我将再次得到两个 token,但它是 token h 后面跟着 token l world,没有 h。如果我在 hello 和 world 之间放两个空格,它又是不同的 tokenization。有一个新的 token 220 在这里。所以,你可以玩这个,看看会发生什么。也要记住,这是区分大小写的。所以,如果这是一个大写的 H,它就是不同的东西。或者,如果它是 hello world,那么实际上这会变成三个 token,而不是两个。是的,你可以玩这个,并对这些 token 的工作方式获得一些直观的理解。
我们实际上将在视频稍后回到 tokenization。现在,我只想向你展示网站,并想向你展示,归根结底,这段文本——例如,如果我取一行——这就是 GPT-4 将如何看待它。所以,这段文本的长度将是 62。这是序列,这是文本块如何对应于这些符号。再次,有 100,277,777 个可能的符号,我们现在拥有这些符号的一维序列。所以,是的,我们将回到 tokenization,但现在我们就在这里。
好的,我现在所做的是,我取了我们数据集中拥有的文本序列,并使用我们的 tokenizer 将其重新表示为 token 序列。这就是它现在的样子。所以,例如,当我们回到 FineWeb 数据集时,他们提到这不仅是 44TB 的磁盘空间,而且是该数据集中大约 15 万亿个 token 的序列。所以,这里是这个数据集的一些前一两个或三四个,我认为是几千个 token。但请记住,这里有 15 万亿个。再次,请记住,所有这些都代表着小的文本块。它们都只是这些序列的原子。这里的数字没有意义,它们只是唯一的 ID。
好了,现在我们来到了有趣的部分,也就是神经网络训练。这就是计算方面的大部分繁重工作发生的地方。在这个步骤中,我们要做的是模拟这些 token 在序列中如何相互跟随的统计关系。所以,我们所做的是,我们进入数据,并取 token 的窗口。我们从数据中随机抽取 token 窗口。窗口的长度可以从零个 token 到我们决定的某个最大大小。所以,例如,在实践中,你可以看到 token 窗口,比如 8000 个 token。原则上,我们可以使用任意长度的 token 窗口,但处理非常长的窗口序列将非常耗费计算资源。所以,我们只是决定,比如 8000 是一个不错的数字,或者 4000 或 16000,然后我们在这里裁剪。
在这个例子中,我将取前四个 token,以便一切都能很好地适应。这些 token 是 bar view in 和 space single,这些是 token ID。现在,我们正在尝试做的是,我们试图预测序列中的下一个 token。3962 是下一个,对吧?所以,我们现在所做的是,我们称之为上下文。这四个 token 是上下文,它们输入到神经网络中,这就是神经网络的输入。我现在将详细介绍这个神经网络内部是什么,但目前重要的是理解神经网络的输入和输出。
输入是可变长度的 token 序列,长度在零到某个最大值(如 8000)之间。输出现在是对下一个可能出现的预测。因为我们的词汇量有 100277 个可能的 token,神经网络将输出正好这么多数字。所有这些数字都对应于该 token 作为序列中下一个出现的概率。所以,它在猜测下一个会出现什么。
一开始,这个神经网络是随机初始化的。所以,我们稍后会看到这意味着什么,但它是一个随机变换。所以,在训练的最初阶段,这些概率也将是随机的。所以,这里有三个例子,但请记住,这里有 100,000 个数字。所以,这个 token "space direction" 的概率,神经网络说它现在有 4% 的可能性。11799 是 2%,然后这里是 3962(post)的概率是 3%。
当然,我们已经从数据集中采样了这个窗口,所以我们知道接下来会发生什么。我们知道,这就是标签。我们知道正确的答案是 3962 实际上是序列中的下一个。所以,现在我们有了一个进行神经网络更新的数学过程。我们有了调整它的方法,我们稍后会详细介绍。但基本上,我们知道这个 3% 的概率,我们希望这个概率更高,我们希望所有其他 token 的概率都更低。所以,我们有一种数学方法来计算如何调整和更新神经网络,以便正确答案具有稍高的概率。
所以,如果我现在对神经网络进行一次更新,下一次我将这四个 token 的序列输入神经网络时,神经网络将已经调整过,它会说“好的,post 现在可能是 4%,case now 可能是 1%,direction 可能是 2% 或其他什么”。所以,我们有一种方法来微调、轻微更新神经网络,以便为下一个正确的 token 提供更高的概率。
现在,你只需要记住,这个过程不仅发生在——这个 token 这里,这四个输入并预测了这个,这个过程同时发生在整个数据集的所有这些 token 上。所以,在实践中,我们采样小的窗口,小的窗口批次,然后在每一个 token 上,我们都希望调整我们的神经网络,以便该 token 的概率稍微提高。所有这些都以并行方式发生,以大批量的 token 进行。这就是神经网络训练的过程。它是一个更新序列的过程,以便它的预测与训练集中的实际情况相匹配,并且它的概率与这些 token 在数据中如何跟随彼此的统计模式一致。
现在,让我们简要地了解一下这些神经网络的内部结构,让你对里面有什么有一个概念。
神经网络内部。正如我所提到的,我们有这些输入,它们是 token 序列。在这种情况下,这是四个输入 token,但这可以是零到比如说 8000 个 token。原则上,它可以是无限数量的 token。我们只是——处理无限数量的 token 的计算成本太高了。所以,我们只是在某个长度处裁剪它,它就成为该模型的最大上下文长度。
这些输入 X 与神经网络的参数或权重混合在一个巨大的数学表达式中。在这里,我展示了六个示例参数及其设置。但实际上,这些现代神经网络将拥有数十亿个这样的参数。一开始,这些参数是完全随机设置的。
有了随机设置的参数,你可能会期望这个神经网络会做出随机的预测,而且确实如此。一开始,它是完全随机的预测。但正是通过这个迭代更新网络的過程——我們稱之為訓練神經網絡——參數的設置會被調整,使得我們神經網絡的輸出與我們在訓練集中看到的模式一致。
所以,把这些参数想象成 DJ 台上的旋钮。当你转动这些旋钮时,你会得到不同的预测,对于每一个可能的 token 序列输入。训练神经网络就是发现一个参数设置,这个设置似乎与训练集的统计数据一致。
现在,让我举个例子,这个巨大的数学表达式是什么样的,让你有一个概念。现代网络是巨大的表达式,可能包含数万亿个项。但让我给你展示一个简单的例子。它看起来会是这样的。我的意思是,这些是表达式的类型,只是为了表明它并不可怕。我们有输入 X,比如 X1,X2。在这种情况下,两个示例输入,它们与网络的权重 W0,W1,2,3 等混合在一起。这种混合是简单的东西,比如乘法、加法、指数运算、除法等等。设计具有许多便利特征的有效数学表达式是神经网络架构研究的主题,例如它们具有表现力、可优化性、可并行性等等。但归根结底,这些都不是复杂的表达式。它们基本上是将输入与参数混合以进行预测。我们正在优化这个神经网络的参数,以便预测结果与训练集一致。
现在,我想向你展示一个实际的生产级神经网络示例,让你了解它们是什么样的。为此,我鼓励你去访问这个网站,它有一个非常好的神经网络可视化。这就是你在该网站上找到的内容。这个在生产环境中使用的神经网络具有这种特殊的结构。这个网络称为 Transformer。这个特定的例子大约有 85,000 个参数。
在这里,顶部是我们输入的 token 序列。然后信息流经神经网络,直到输出,这里是 logits softmax,但这些是对下一个 token 的预测。然后这里有一系列变换,以及所有这些中间值,这些值在数学表达式中产生,它在预测下一个。
例如,这些 token 被嵌入到一种所谓的分布式表示中。所以,每个可能的 token 都有一个代表它的向量在神经网络中。所以,首先我们嵌入 token,然后这些值沿着这个图表流动。这些都是非常简单的数学表达式,单独来看。我们有层归一化、矩阵乘法、softmax 等等。这里是 Transformer 的注意力块。然后信息流经多层感知器块等等。所有这些数字都是表达式的中间值。你可以大致认为它们是这些合成神经元的放电率。但我会警告你不要过多地将其与神经元进行比较,因为与你大脑中的神经元相比,这些是极其简单的神经元。你的生物神经元是具有记忆等复杂动态过程。这个表达式中没有记忆,它是一个从输入到输出的固定数学表达式,没有记忆,它只是无状态的。所以,与生物神经元相比,这些是非常简单的神经元。但如果你愿意,你仍然可以大致将其视为一块合成的大脑组织。信息流经所有这些神经元,直到我们得到预测。
我现在不会过多地纠缠于所有这些变换的确切数学细节。老实说,我认为深入研究这些细节并不那么重要。真正重要的是要理解,这是一个数学函数,它由一组固定的参数(比如 85,000 个)参数化,并且它是一种将输入转换为输出的方法。当我们调整参数时,我们会得到不同类型的预测。然后我们需要找到一个好的参数设置,以便预测结果与训练集中看到的模式相匹配。所以,这就是 Transformer。
好的,我已经向你展示了神经网络的内部结构,并且我们谈论了一些关于训练它的过程。我想涵盖与这些网络工作的另一个主要阶段,那就是称为推理的阶段。
在推理中,我们正在从模型生成新数据。所以,我们想看看它在网络参数中内化了什么样的模式。从模型生成相对简单。我们从一些 token 开始,它们基本上是你的前缀,比如你想从什么开始。所以,假设我们想从 token 91 开始。我们将其输入网络,并记住网络给我们概率。它给我们这个概率向量。所以,我们现在可以做的是,我们可以基本上抛一枚有偏见的硬币。所以,我们可以根据这个概率分布采样一个 token。由模型给出高概率的 token 在你抛这枚有偏见的硬币时更有可能被采样。你可以这样想。我们从分布中采样得到一个唯一的 token。例如,在这种情况下,token 860 接下来。所以,860 在这种情况下,当从模型生成时,可能接下来。860 是一个相对可能的 token。在这种情况下,它可能不是唯一可能的 token,可能还有许多其他 token 可以被采样,但我们可以看到 860 是一个相对可能的 token,举个例子。事实上,在我们这里的训练示例中,860 确实跟在 91 后面。
所以,现在让我们继续这个过程。在 91 之后是 860。我们将其附加,然后再次询问第三个 token 是什么。让我们采样,假设它是 287,就像这里一样。让我们再做一次。我们回到这里,现在我们有一个三元组序列,我们询问第四个可能的 token 是什么。我们从中采样并得到这个。现在,让我们再做一次。我们取那四个,采样并得到这个。而这个 13659——这实际上不是 3962,就像我们之前那样。这个 token 是 "article" token。所以,查看一篇单一的文章。在这种情况下,我们并没有完全重现我们在训练数据中看到的序列。
所以,请记住,这些系统是随机的。它们有——我们在采样,我们在抛硬币。有时我们会幸运地重现训练集中一些文本的小片段,但有时我们会得到一个 token,它不是训练数据中任何文档的逐字部分。所以,我们将得到我们看到的训练数据的某种“混音”。因为在每一步,我们都可以抛硬币并得到一个稍微不同的 token。然后一旦那个 token 被纳入,如果你采样下一个,依此类推,你很快就会生成与你在训练文档中看到的 token 流非常不同的 token 流。
所以,统计上它们将具有相似的属性,但它们与你的训练数据不完全相同。它们是受训练数据启发的。所以,在这种情况下,我们得到一个稍微不同的序列。你可能会想象,在 "bar viewing single" 等上下文窗口中,article 是一个相对可能的 token。你可能会想象,在训练文档的某个程度上,article 这个词跟随了这个上下文窗口。我们碰巧在这个阶段采样了它。
所以,基本上,推理就是一次又一次地从这些分布中进行预测。我们继续反馈 token 并获取下一个。我们一直在抛硬币。取决于我们有多幸运或多不幸,我们可能会得到非常不同的模式,这取决于我们如何从这些概率分布中采样。所以,这就是推理。
在大多数常见情况下,基本上下载互联网并对其进行 tokenization 是一个预处理步骤。你只做一次。然后,一旦你有了 token 序列,我们就可以开始训练网络。在实际情况中,你会尝试训练许多不同类型的网络,具有不同的设置、不同的排列方式和不同的尺寸。所以,你会进行大量的神经网络训练。然后,一旦你有了神经网络并训练了它,并且你对一组特定的参数感到满意,你就可以获取模型并进行推理,你就可以从模型中生成数据。
当你使用 ChatGPT 时,你正在与模型对话。那个模型是由 OpenAI 训练的,可能是在几个月前训练的。它们有一个特定的权重集,效果很好。当你与模型对话时,所有这些都只是推理。不再有训练了。这些参数是固定的,你只是在与模型对话。你给它一些 token,它就在完成 token 序列。这就是你在实际使用 ChatGPT 模型时看到的生成内容。所以,那个模型只进行推理。
所以,让我们现在来看一个训练和推理的例子,这个例子是具体的,并让你对这些模型实际训练时是什么样子有一个概念。我特别喜欢的一个例子是 OpenAI 的 GPT-2。GPT 代表生成式预训练 Transformer。这是 OpenAI 的 GPT 系列的第二个迭代。当你今天与 ChatGPT 对话时,那个模型是那个神奇交互的底层,是 GPT-4,该系列的第四个迭代。
GPT-2 于 2019 年由 OpenAI 在我在这里的这篇论文中发表。我喜欢 GPT-2 的原因是,它是第一个出现可识别的现代技术栈的。所以,GPT-2 的所有组成部分今天都符合现代标准。只是所有东西都变大了。
当然,我无法详细介绍这篇论文的全部细节,因为它是一篇技术出版物。但我想强调的一些细节如下:GPT-2 是一个 Transformer 神经网络,就像你今天使用的神经网络一样。它有 16 亿个参数。所以,这些是我们在这里看到的参数。今天,现代 Transformer 会有接近一万亿或几百亿个参数。
它的最大上下文长度是 1024 个 token。所以,当我们从数据集中采样 token 窗口时,我们永远不会超过 1024 个 token。所以,当你试图预测序列中的下一个 token 时,你永远不会有超过 1024 个 token 在你的上下文中来做出这个预测。根据今天的标准,这也很小。今天的上下文长度会更接近几十万,甚至可能是一百万。所以,你有更多的上下文,更多的历史 token,你可以以这种方式对下一个 token 做出更好的预测。
最后,GPT-2 在大约 1000 亿个 token 上进行了训练。根据今天的标准,这也很小。正如我所提到的,我们在这里看到的 FineWeb 数据集有 15 万亿个 token。所以,1000 亿个相对较小。
我实际上尝试为我的 lm.c 项目重现 GPT-2,以供娱乐。你可以在 GitHub 上的 lm.c 存储库中看到我重现它的帖子。特别是,2019 年训练 GPT-2 的成本估计约为 40,000 美元。但今天你可以做得更好。特别是,这花了大约一天和大约 600 美元。但这甚至不是在非常努力地尝试。我认为今天你可以将其降至约 100 美元。
为什么成本下降了这么多?首先,这些数据集变得更好了。我们过滤、提取和准备它们的方式变得更加精细。所以,数据集的质量大大提高。这是第一点。但最大的区别是,我们的计算机在硬件方面变得快了很多。我们稍后会看看这一点。而且,运行这些模型并真正从硬件中榨取所有速度的软件也变得好多了,因为每个人都专注于这些模型并试图非常非常快地运行它们。
我无法详细介绍 GPT-2 的完整重现。这是一篇很长的技术帖子。但我想仍然让你对作为研究人员实际训练一个模型是什么样子有一个直观的感受。你看到什么?它感觉如何?所以,让我给你一个大概的感受。
好的,这就是它的样子。让我把它移过来。我现在正在训练一个 GPT-2 模型。这里发生的每一行都代表着对模型的一次更新。还记得我们如何在这里改进每个 token 的预测,并且我们正在更新神经网络的权重或参数吗?所以,这里每一行都是对神经网络的一次更新,我们稍微改变了它的参数,以便它能更好地预测序列中的下一个 token。特别是,这里的每一行都改进了训练集中 100 万个 token 的预测。我们基本上从数据集中取出了 100 万个 token,并试图同时改进这些 token 作为序列中下一个的预测。在每一个步骤中,我们都会对网络进行一次更新。
要密切关注的数字是称为“损失”的数字。损失是一个单一的数字,它告诉你神经网络目前表现如何。它的设定是,低损失是好的。所以,你会看到随着我们对神经网络进行更多更新,损失会减少,这对应于对下一个 token 的预测越来越好。所以,损失是神经网络研究人员关注的数字。你只是等待,你坐立不安,你喝咖啡,你确保这一切看起来不错,这样每一次更新你的损失都在改善,网络在预测方面越来越好。
在这里,你看到我们每次更新处理 100 万个 token。每次更新大约需要 7 秒。在这里,我们将进行总共 32,000 次优化步骤。32,000 步,每步 100 万个 token,大约是 330 亿个 token,我们将处理。我们目前只完成了 32,000 步中的大约 420 步。所以,我们只完成了 1% 多一点,因为我只运行了大约 10 到 15 分钟。
每 20 步,我都配置了这个优化器进行推理。所以,你在这里看到的是模型正在预测序列中的下一个 token。所以,你随机开始,然后继续输入 token。所以,我们正在运行这个推理步骤,这就是模型正在预测序列中的下一个 token。每次你看到出现的东西,就是一个新 token。所以,让我们看看这个,你可以看到它还没有非常连贯。请记住,这只是训练过程的 1%。所以,模型还不能很好地预测序列中的下一个 token。所以,输出实际上有点像胡言乱语。但它仍然有一些局部连贯性。所以,例如,“since she is mine it's a part of the information should discuss my father great companions Gordon showed me sitting over at and etc.”。所以,我知道它看起来不太好。但让我们向上滚动,看看当我开始优化时它是怎么样的。
一直到第一步。所以,经过 20 步优化后,你看到我们在这里得到的东西看起来完全是随机的。当然,这是因为模型只对其参数进行了 20 次更新。所以,它给你随机文本,因为它是一个随机网络。所以,你可以看到,至少与这个模型相比,它正在做得更好。事实上,如果我们等待整个 32,000 步,模型将得到改进,以至于它实际上正在生成相当连贯的英语。token 流是正确的,它们在很大程度上构成了更好的英语。所以,这还需要大约一两天才能运行。所以,在这个阶段,我们只是确保损失在下降,一切看起来都不错。我们只需要等待。
现在,让我转向计算的故事,因为当然,我不是在我的笔记本电脑上运行这个优化。那会太贵了。因为我们必须运行这个神经网络,我们必须改进它,我们需要所有这些数据等等。所以,你无法在你的电脑上很好地运行它,因为网络太大了。所以,所有这些都在云端的计算机上运行。我想解决训练这些模型的计算方面的问题,以及它是什么样的。所以,让我们看看。
好的,我运行这个优化的计算机是这个 8x h100 节点。所以,一个节点或一台计算机中有八个 h100。我现在正在租用这台计算机,它在云端的某个地方。我实际上不知道它在哪里。我喜欢租用的地方叫做 Lambda,但还有许多其他公司提供这项服务。所以,当你向下滚动时,你可以看到他们有一些按需定价的计算机,这些计算机有这些 h100,也就是 GPU。我稍后会展示它们是什么样的。但按需 8x Nvidia h100 GPU,这台机器每小时每 GPU 的价格是 3 美元,举个例子。所以,你可以租用这些,然后你就会得到云中的一台机器,你可以进去,你可以训练这些模型。
这些 GPU 看起来是这样的。所以,这是一个 h100 GPU。它看起来是这样的。你把它插到你的电脑里。GPU 非常适合训练你的网络,因为它们计算成本很高,但它们在计算中显示出大量的并行性。所以,你可以有许多独立的工人同时工作,解决神经网络训练的底层矩阵乘法。所以,这只是其中一个 h100 GPU。但实际上,你会把它们放在一起。你可以把八个堆叠在一个节点里。然后你可以把多个节点堆叠成一个数据中心或一个系统。
所以,当我们看一个数据中心时,我们开始看到这样的东西,对吧?我们有一个 GPU,到八个 GPU,到一个系统,到许多系统。所以,这些是更大的数据中心。当然,它们会贵得多。所有大型科技公司都渴望这些 GPU,以便它们可以训练所有这些语言模型,因为它们非常强大。这从根本上推动了英伟达今天的股价达到 3.4 万亿美元,例如,以及英伟达为何爆炸式增长。这就是淘金热。淘金热就是获得 GPU,获得足够的 GPU,以便它们可以协同工作来执行这个优化。它们都在做什么?它们都在协作,在 FineWeb 数据集这样的数据集上预测下一个 token。这就是计算工作流程,它基本上非常昂贵。你拥有的 GPU 越多,你可以尝试预测和改进的 token 就越多。你将更快地处理这个数据集,你可以更快地迭代,并获得更大的网络,训练更大的网络等等。所以,这就是所有这些机器在做什么。这就是为什么这一切如此重要。
例如,这是一篇大约一个月前的文章。这就是为什么埃隆·马斯克在一个数据中心获得 100,000 个 GPU 如此重要。所有这些 GPU 都非常昂贵,将消耗大量电力,而所有这些 GPU 都只是在尝试预测序列中的下一个 token,并以此改进网络。并可能比我们在这里看到的获得更连贯的文本,速度更快。
好的,不幸的是,我没有几千万或几亿美元来花费训练一个像这样的大模型。但幸运的是,我们可以转向一些大型科技公司,它们会定期训练这些模型,并在训练完成后发布其中一些。所以,它们花费了巨大的计算量来训练这个网络,并在优化结束时发布这个网络。所以,它非常有用的,因为它们已经做了大量的计算。
因此,有许多公司定期训练这些模型。但实际上,很少有公司会发布这些所谓的“基础模型”。模型在优化结束时出来的就是所谓的“基础模型”。什么是基础模型?它是一个 token 模拟器。它是互联网文本 token。
模拟器,所以它本身还没有用,因为我们想要的是所谓的助手,我们想提问并让它给出答案。这些模型做不到这一点,它们只是创建互联网的混合体,它们会梦到互联网页面。所以基础模型通常不会发布,因为它们只是几个步骤中的第一步,我们还需要采取其他几个步骤才能得到一个系统。然而,已经发布了一些版本,例如,GPT-2 模型在 2019 年发布了 16 亿,抱歉,15 亿的模型,而这个 GPT-2 模型是一个基础模型。那么,什么是模型发布?发布这些模型是什么样的?这是 GitHub 上的 GPT-2 仓库。基本上,你需要两样东西来发布模型。第一,我们需要 Python 代码,通常它会详细描述模型中操作的序列。所以,如果你还记得,Transformer 中神经网络中采取的这些步骤就是这段代码所描述的。所以这段代码基本上实现了这个神经网络所谓的“前向传播”。所以我们需要确切地知道它们是如何连接这个神经网络的具体细节。这只是计算机代码,通常只有几百行代码,并不算太复杂,而且这都是相当容易理解的,而且通常相当标准。不标准的是参数,这才是真正有价值的地方。这个神经网络的参数是什么?因为有 16 亿个参数,我们需要正确的设置,或者一个非常好的设置。所以,除了源代码之外,它们还发布了参数,在这种情况下,大约有 15 亿个参数。这些只是数字,它们是 15 亿个数字组成的单个列表。精确且良好的设置所有旋钮,以便标记能够很好地输出。所以,你需要这两样东西来发布一个基础模型。现在 GPT-2 已经发布了,但正如我所提到的,它实际上是一个相当旧的模型。所以实际上我们要转向的模型叫做 Llama 3,我想在接下来向你展示它。所以 Llama 3,再次强调,GPT-2 是 16 亿个参数,在 1000 亿个标记上训练的。Llama 3 是一个更大、更现代的模型。它由 Meta 发布和训练,是一个 450 亿参数的模型,在 15 万亿个标记上训练,方式与此非常相似,只是规模要大得多。Meta 也发布了 Llama 3,这是这篇论文的一部分。所以,在这篇详细介绍的论文中,他们发布的最大基础模型是 Llama 3.1 405 亿参数模型。所以这是基础模型,然后除了基础模型之外,你在这里看到的预示着视频的后续部分,他们还发布了指令模型。指令模型意味着这是一个助手,你可以问它问题,它会给你答案。我们稍后还会介绍这部分。现在,让我们先看看这个基础模型,这个标记模拟器,让我们玩一下,试着思考一下,这是什么?它是如何工作的?以及如果我们让这个非常大的神经网络在大量数据上运行到最后,我们会得到什么?我最喜欢与基础模型互动的地方是这家名为 Hyperbolic 的公司,它基本上提供了 405B Llama 3.1 的基础模型。所以当你访问网站时,我认为你可能需要注册等等。确保在模型中,确保你使用的是 Llama 3.1 405 亿基础模型,它必须是基础模型。然后在这里,假设最大标记数是我们即将生成的标记数。所以让我们稍微减少一下,这样我们就不会浪费计算资源,我们只需要接下来的 128 个标记,然后保持其他设置不变。我不会在这里详细介绍。现在,从根本上说,这里发生的事情与推理过程中发生的事情是相同的。所以这只是会继续你给它的任何前缀的标记序列。所以我想首先向你展示这个模型还不是一个助手。所以你可以问它,例如,2 加 2 等于多少?它不会告诉你,哦,它是 4,还有什么我可以帮忙的?它不会这样做,因为“2 加 2 等于多少”将被标记化,然后这些标记只是作为前缀,然后模型现在要做的是,它将获得下一个标记的概率。它只是一个华丽的自动补全,一个非常非常昂贵的自动补全,关于接下来会发生什么,这取决于它在训练文档中看到的内容的统计数据,这些文档基本上是网页。所以让我们按回车键看看它会生成什么样的继续标记。好的,所以这里它实际上回答了问题,并开始进入一些哲学领域。让我们再试一次。所以让我复制粘贴,让我们从头开始再试一次。2 加 2 等于多少?好的,所以它又跑偏了。所以请注意我想要强调的另一件事是,我认为每次你输入时,它都会从头开始。所以它不会,这里的系统是随机的。所以对于相同的标记前缀,我们总是得到不同的答案。原因是,我们得到了这个概率分布,我们从中采样,我们总是得到不同的样本,然后我们总是进入不同的领域。所以在这里,我不知道这是什么。让我们再试一次。所以它只是继续下去。所以它只是在做它在互联网上看到的东西,对吧?它只是在模仿那些统计模式。所以第一件事是,它还不是一个助手,它是一个标记自动补全。第二,它是一个随机系统。现在,关键在于,即使这个模型本身对于许多应用程序来说还不是很有用,但它仍然非常有用,因为在预测序列中的下一个标记的任务中,模型已经学到了很多关于世界的东西,并且它将所有这些知识存储在网络的参数中。所以请记住,我们的文本看起来是这样的,对吧?互联网网页。现在所有这些都以某种方式压缩在网络的权重中。所以你可以认为这 405 亿个参数是互联网的一种压缩。你可以认为这 450 亿个参数就像一个 zip 文件,但它不是无损压缩,它是**有损压缩**。我们基本上得到了互联网的一瞥,我们可以从中生成。现在我们可以通过相应地提示基础模型来提取一些知识。所以,例如,这里有一个可能有效的提示,可以提取隐藏在参数中的一些知识。这是我在巴黎看到的顶级地标的我的前十名列表。我这样做是因为我试图让模型继续这个列表。所以让我们看看当我按回车键时是否有效。好的,所以你看到它开始了一个列表,现在它正在给我提供一些地标。现在请注意,它正在尝试提供大量信息。现在你可能无法完全信任这里的一些信息。请记住,这只是对一些互联网文档的回忆。因此,在互联网数据中经常出现的事物可能比不经常出现的事物更容易被正确记住。所以你无法完全信任这里的一些事物和一些信息,因为这只是对互联网文档的模糊回忆。因为信息没有明确存储在任何参数中,它只是回忆。也就是说,我们确实得到了一些可能大致正确的东西,而且我实际上没有专业知识来验证这是否大致正确。但是你看到我们已经提取了模型的大量知识,而这些知识并不精确和准确。这些知识是模糊的、概率性的和统计性的。经常出现的事物是更容易被记住的事物。现在我想向你展示这个模型行为的几个更多例子。我首先想向你展示这个例子。我去了维基百科上关于斑马的页面,让我复制粘贴第一个句子,然后把它放在这里。现在当我点击回车键时,我们会得到什么样的完成?所以让我按回车键。有三个现存的物种等等等等。模型在这里生成的是对这个维基百科条目的精确复述。它纯粹是凭记忆背诵这个维基百科条目。而这种记忆存储在它的参数中。所以有可能在这些 512 个标记中的某个点,模型会偏离维基百科条目,但你可以看到它已经记住了其中的大部分。让我看看,例如,这个句子是否在这里出现。好的,所以我们还在正轨上。让我检查一下。好的,我们还在正轨上。它最终会偏离。好的,这个东西在很大程度上被背诵了。它最终会偏离,因为它无法确切记住。现在发生这种情况的原因是,这些模型可以非常擅长记忆,而这通常不是你想要的最终模型。这被称为**复述**,直接引用你训练过的内容通常是不受欢迎的。现在发生这种情况的原因是,对于许多文档,例如维基百科,当这些文档被认为是高质量的来源时,例如维基百科,当你在训练模型时,你很可能优先从这些来源中采样。所以基本上,模型可能已经在这个数据上进行了几个 epoch,这意味着它可能已经看过这个网页大约 10 次,这有点像你,当你多次阅读某种文本时,比如你读了一百次,然后你就能背诵它。对于这个模型来说也是如此,如果它看到某个东西太频繁,它就能从记忆中背诵它。只是这些模型在每次呈现时可能比人类更有效。所以它可能只看过这个维基百科条目 10 次,但基本上它已经精确地记住了这个文章在它的参数中。接下来我想向你展示一些模型在训练期间肯定没有见过的事情。所以,例如,如果我们去论文,然后导航到预训练数据,我们会看到数据集的知识截止日期是 2023 年底。所以它不会看到此后的文档,当然,它也没有看到任何关于 2024 年选举及其结果的信息。现在,如果我们用未来的标记来提示模型,它将继续标记序列,并且它将根据其自身参数中的知识进行最佳猜测。所以让我们看看那会是什么样子。共和党候选人特朗普,美国总统,2017 年起。让我们看看之后会发生什么。所以,例如,模型将不得不猜测竞选伙伴是谁,以及它反对谁等等。所以让我们按回车键。这里说,迈克·彭斯是竞选伙伴,而不是 J.D. Vance,而竞选搭档是希拉里·克林顿和蒂姆·凯恩。所以这可能是一个有趣的平行宇宙,根据 LM 可能会发生什么。让我们得到一个不同的样本。相同的提示,让我们重新采样。这里,竞选伙伴是罗恩·德桑蒂斯,他们与乔·拜登和卡玛拉·哈里斯竞争。所以这又是一个不同的平行宇宙。所以模型将做出有根据的猜测,并将根据这些知识继续标记序列。它只是会做我们在这里看到的一切,这被称为**幻觉**。模型只是以概率的方式做出最佳猜测。接下来我想向你展示的是,即使这是一个基础模型,而不是一个助手模型,如果你巧妙地设计提示,它仍然可以用于实际应用。这里有一个我们称之为**少样本提示**的东西。这里是,我有 10 个词或 10 对,每对都是一个英语单词,然后是韩语翻译。我们有 10 个。然后我们有“教师”一栏,然后在这里我们将完成大约 5 个标记。而这些模型具有我们称之为**上下文学习能力**。这指的是,当它阅读这个上下文时,它会就地学习,存在某种算法模式在我的数据中,并且它知道要继续这个模式。这被称为上下文学习。它扮演翻译的角色。当我们点击完成时,我们看到教师翻译是“sim”,这是正确的。所以这就是如何构建应用程序,通过巧妙地设计提示,即使我们现在只有一个基础模型。它依赖于我们称之为上下文学习能力,并且它是通过构建所谓的少样本提示来完成的。最后,我想向你展示,有一种巧妙的方法可以通过提示来实例化一个完整的语言模型助手。诀窍在于,我们构建一个看起来像网页的提示,这是一个有用的 AI 助手和一个人类之间的对话。然后模型将继续这个对话。所以实际上,为了写这个提示,我转向了 ChatGPT 本身,这有点元,但我告诉它我想创建一个 LLM 助手,但我只有一个基础模型。所以你能帮我写我的提示吗?这是它想出来的,实际上相当不错。所以这是一段 AI 助手和人类之间的对话。AI 助手知识渊博、乐于助人、能够回答各种问题等等。然后,仅仅给它一个描述是不够的,它通过创建这个 fot 提示效果更好。所以这里有一些人类助手、人类助手的术语,我们有一些对话的几个回合,然后在这里结尾,我们将放入我们想要的实际查询。所以让我把它复制粘贴到基础模型的提示中。现在让我输入“人类:”然后在这里输入我们的实际提示。“天空为什么是蓝色的?”然后让我们运行。助手:天空之所以呈现蓝色,是因为一种称为瑞利散射的现象,等等等等。所以你看到基础模型只是在继续序列。但是,因为序列看起来像这样的对话,它就扮演了这个角色。但这有点微妙,因为这里它只是,你知道,它结束了助手,然后只是,你知道,**幻觉**出人类的下一个问题等等。所以它会一直持续下去。但是你可以看到我们已经完成了任务。如果你只取这个“天空为什么是蓝色的?”如果我们刷新一下,然后把它放在这里,那么当然,我们不期望它能用一个基础模型工作,对吧?我们只会得到更多的问题。好的,这是创建助手的一种方式,即使你可能只有一个基础模型。好的,这是我们过去几分钟讨论过的内容的简要总结。现在让我放大一下,这就是我们到目前为止所讨论的。我们希望训练像 ChatGPT 这样的 LLM 助手。我们已经讨论了其中的第一阶段,即预训练阶段。我们看到,实际上它归结为,我们获取互联网文档,将它们分解成这些标记,这些文本块的原子,然后我们使用神经网络预测标记序列。这个整个阶段的输出是基础模型。它是这个网络的参数的设置。而这个基础模型基本上是一个标记级别的互联网文档模拟器。所以它可以生成具有与互联网文档相同的统计数据的标记序列。我们看到它可以在某些应用程序中使用,但我们实际上需要做得更好。我们想要一个助手,我们想要能够提问,我们想要模型给我们答案。所以我们现在需要进入第二阶段,称为**后训练阶段**。所以我们采用基础模型,我们的互联网文档模拟器,然后将其交给后训练。所以我们现在将讨论几种方法来完成这些模型的后训练。这些后训练阶段的计算成本将大大降低。所有大量的计算工作,所有庞大的数据中心,以及所有繁重的计算和数百万美元都用于预训练阶段。但现在我们进入了一个稍微便宜但仍然极其重要的阶段,称为后训练,我们将这个 LLM 模型变成一个助手。所以让我们看看如何让我们的模型不采样互联网文档,而是给出问题的答案。换句话说,我们想开始思考对话。这些对话可以是多轮的。所以,所以,可以有多轮。在最简单的情况下,它们是人类和助手之间的对话。所以,例如,我们可以想象对话可能看起来像这样:当人类说“2 加 2 等于多少?”时,助手应该回答“2 加 2 等于 4”。当人类接着说“如果它是乘法而不是加法呢?”时,助手可以回答“就像这样”。类似地,这里是另一个例子,表明助手也可以有一些个性。它有点像友善。然后在这里的第三个例子中,我展示了当人类要求我们不想提供帮助的东西时,我们可以产生所谓的**拒绝**。我们可以说我们无法提供帮助。换句话说,我们现在想做的是,我们想思考一下系统应该如何与人类互动,我们想在这些对话中对助手及其行为进行编程。现在,因为这是神经网络,我们不会在代码中显式编程它们。我们无法以那种方式对助手进行编程,因为这是神经网络。一切都通过神经网络在数据集上进行训练。因此,我们通过创建对话数据集来隐式地对助手进行编程。这是数据集中的三个独立对话示例。实际的数据集将更大,可能包含数十万个多轮、非常长的对话等等,涵盖各种主题。但这里我只展示三个例子。但它的工作原理基本上是,助手通过示例进行编程。而这些数据来自哪里?比如 2 * 2 = 4,与 2 + 2 相同等等。这些来自人类标注员。所以我们基本上会给人类标注员一些对话上下文,然后我们会要求他们基本上在这种情况下的理想助手响应。而一个人会写出助手在任何情况下的理想响应。然后我们会让模型进行训练,并模仿这些响应。所以它的工作方式是,我们将采用我们在预训练阶段生成的基础模型,这个基础模型是在互联网文档上训练的。现在我们将采用这个互联网文档数据集,然后将其丢弃,然后替换为一个新的数据集,这将是一个对话数据集。我们将继续在这些对话上训练模型,在这个新的对话数据集上。发生的情况是,模型会迅速调整,并会学习助手如何响应人类查询的统计数据。然后稍后在推理过程中,我们将能够基本上提示助手并获得响应。它将模仿人类标注员在那种情况下的做法,如果这有意义的话。所以我们将看到它的例子。这将变得更加具体。我还想提到,在这个后训练阶段,我们基本上将继续训练模型。但是,预训练阶段在实践中可能需要大约三个月的时间,在许多计算机上进行训练。后训练阶段通常会短得多,例如 3 小时。这是因为我们手动创建的对话数据集比互联网上的文本数据集小得多。所以这个训练会很短。但从根本上说,我们将采用基础模型,我们将使用完全相同的算法,完全相同的设置继续训练,除了我们将数据集替换为对话。所以现在的问题是,这些对话是什么?我们如何表示它们?我们如何让模型看到对话而不是原始文本?然后这种训练的结果是什么?当我们谈论模型时,在某种心理意义上,我们会得到什么?所以让我们开始讨论对话的标记化。所有这些模型中的一切都必须转化为标记,因为一切都只是关于标记序列。所以问题是如何将对话转化为标记序列?为此,我们需要设计某种编码。这可能与你是否熟悉互联网上的 TCP/IP 数据包相似,有精确的规则和协议来表示信息,一切如何组合在一起,以便你在纸上写出所有这些数据,并且每个人都可以同意。现在 LLM 中也是如此。我们需要某种数据结构,并且我们需要围绕这些数据结构(如对话)如何编码和解码到标记以及从标记中解码的规则。所以我想现在向你展示我将如何重现这个对话在标记空间中。所以如果你去 Tech tokenizer,我可以采用那个对话,这就是它在语言模型中的表示。所以这里我们正在迭代一个用户和一个助手,在这个两轮对话中。你看到的是,它看起来很丑,但实际上相对简单。它最终如何转化为标记序列有点复杂,但最终,用户和助手之间的对话以 49 个标记结束。它是一个一维的 49 个标记序列,这些是标记。而所有不同的 LLM 将有略微不同的格式或协议,现在有点混乱。但例如,GPT-40 的做法如下:你有一个特殊的标记叫做 IM_START,这是 IM_MONOLOGUE 的缩写,开始。然后你必须指定,说实话,我不知道为什么它叫这个。然后你必须指定谁的轮次,例如用户,它是标记 428。然后是内部独白分隔符,然后是确切的问题,即问题的标记。然后你必须关闭它,所以 IM_END,想象中的独白的结尾。所以基本上,用户关于“2 加 2 等于多少?”的问题最终变成了这些标记的标记序列。现在要在这里提及的重要一点是,IM_START,这不是文本,对吧?IM_START 是一个特殊的标记,它被添加了。它是一个新标记,而这个标记到目前为止还没有被训练过。它是一个我们在后训练阶段创建并引入的新标记。所以这些特殊的标记,如 IM_SEP、IM_START 等等,被引入并穿插在文本中,以便它们能够让模型知道,嘿,这是一个轮次的开始,是谁的轮次?这是轮次的开始,是用户的,然后这是用户所说的,然后用户结束,然后这是一个新的轮次的开始,它是助手的,然后助手说了什么?这些是助手所说的标记等等。所以这个对话并没有转化为标记序列。这里的具体细节实际上并不重要。我只是想用具体的方式向你展示,我们认为是结构化对象的对话,通过某种编码最终变成了标记的一维序列。所以,因为这是一维标记序列,我们可以应用之前应用的所有东西。现在它只是一个标记序列,现在我们可以对其进行训练。所以我们只是预测序列中的下一个标记,就像以前一样。我们可以表示和训练对话。那么在测试时,在推理过程中它看起来是什么样的?所以,假设我们已经训练了一个模型,并且我们已经在这个对话数据集上训练了一个模型。现在我们想进行推理。那么在推理过程中,当你在 ChatGPT 上时,它看起来是什么样的?所以你来到 ChatGPT,你和它进行对话。它的工作原理是,假设这已经被填好了,比如“2 加 2 等于多少?”“2 加 2 等于 4”。现在你发出“如果它是乘法呢?”IM_END。然后实际上发生的是,在 OpenAI 的服务器上或类似的地方,他们输入 IM_START、ASSISTANT、IM_SEP,这就是他们在这里结束的地方。所以他们构建了这个上下文,然后他们开始从模型中采样。正是在这个阶段,他们会去模型说,好的,一个好的序列是什么?一个好的第一个标记是什么?一个好的第二个标记是什么?一个好的第三个标记是什么?这就是 LLM 接管并创建一个响应的地方,比如看起来像这样的响应。但它不必与此完全相同,但它将具有这种对话的味道,如果这种对话出现在数据集中。所以,这大致是协议的工作方式,尽管协议的细节并不重要。所以再次,我的目标只是向你展示,一切最终都只是一个一维标记序列。所以我们可以应用我们已经看到的所有东西。但我们现在正在训练对话,我们也正在生成对话。现在我想转向这些数据集在实践中是什么样的。我想展示的第一个论文和第一个努力是 OpenAI 在 2022 年的这篇论文,这篇论文被称为 InstructGPT,或者他们开发的这项技术。这是 OpenAI 第一次谈论如何获取语言模型并在对话上对其进行微调。所以这篇论文有很多细节,我想带你了解一下。所以我想做的第一件事是在第 3.4 节,他们谈论了他们雇佣的人类承包商,在这种情况下,他们通过 Upwork 或 Scale AI 来构建这些对话。所以有人类标注员参与,他们的工作是创建这些对话。这些标注员被要求提出提示,然后他们被要求完成理想的助手响应。所以这些是人们提出的提示类型。所以这些是人类标注员。列出五种重拾职业热情的方法。我接下来应该读的十大科幻小说是什么?这里有许多不同类型的提示。将这个句子从...翻译成西班牙语等等。所以人们提出了许多事情。他们首先提出提示,然后他们也回答这个提示,并给出理想的助手响应。那么他们如何知道什么是他们应该为这些提示写的理想助手响应呢?所以当我们向下滚动一点时,我们看到这里有这个标注说明摘录,这是给人类标注员的。所以开发语言公司的公司,例如 OpenAI,会编写标注说明,说明人类应该如何创建理想的响应。所以这里有一个摘录,这些类型的标注说明。高层次上,你要求人们要乐于助人、诚实、无害。如果你想看更多,可以暂停视频。但高层次上,基本上就是回答,尽量乐于助人,尽量诚实,不要回答我们不希望系统稍后在 ChatGPT 中处理的问题。所以大致来说,公司会制定标注说明。通常它们不会这么短,通常有数百页,人们必须专业地学习它们,然后他们会按照这些标注说明写出理想的助手响应。所以正如这篇论文所描述的,这是一个非常依赖人类的过程。InstructGPT 的数据集从未被 OpenAI 发布过。但我们有一些开源的重现,它们试图遵循这种设置并收集自己的数据。例如,我熟悉的一个是 Open Assistant 的努力,这是我所认为的许多例子中的一个。但我只想举一个例子。所以这里,这些人是在互联网上被要求基本上创建这些对话,类似于 OpenAI 使用人类标注员所做的那样。所以这里有一个条目,一个人提出了这个提示:“你能写一个关于‘manop’这个术语在经济学中的相关性的简短介绍吗?请使用例子等等。”然后同一个人或可能不同的人会写出响应。所以这是助手对这个的回应。然后同一个人或不同的人会写出这个理想的响应。然后这是一个例子,说明对话可能如何继续。“现在把它解释给一只狗听。”然后你可以尝试想出一个稍微简单一点的解释或者类似的东西。然后这就变成了标签,我们最终会对其进行训练。所以训练过程中发生的是,当然,我们不会完全覆盖模型在测试时可能遇到的所有问题。我们不可能涵盖人们将来会问的所有可能的提示。但是如果我们有一个包含几个这些例子的小型数据集,那么模型在训练过程中就会开始扮演这个有用的、诚实的、无害的助手的角色。它完全是通过示例编程的。所以这些都是行为的例子。如果你有这些示例行为的对话,并且你有足够多的对话,比如 10 万个,并且你对其进行训练,模型就会开始理解统计模式,它就会扮演这个助手的个性。现在,当你得到完全相同的问题时,就像这样,在测试时,答案可能会被精确地复述为训练集中的内容。但更有可能的是,模型会做一些类似的事情。我们会理解这是你想要的答案。所以这就是我们在做的。我们通过示例对系统进行编程。系统在统计上采用了这个有用的、诚实的、无害的助手的个性,这在公司创建的标注说明中有所体现。现在我想向你展示,自 InstructGPT 论文以来,在过去两三年里,最先进的技术已经取得了进展。所以,特别是,人类不再像以前那样独自承担所有繁重的工作了。这是因为我们现在有了语言模型,这些语言模型正在帮助我们创建这些数据集和对话。所以人们很少会从头开始写出响应。更有可能的是,他们会使用现有的 LLM 来生成答案,然后他们会对其进行编辑,或者类似的事情。所以现在有许多不同的方式,LLM 已经开始渗透到这个后训练堆栈中。LLM 被广泛用于帮助创建这些庞大的对话数据集。我不想展示“UltraChat”就是一个这样的例子,一个更现代的对话数据集。它在很大程度上是合成的,但我相信有一些人类参与。我可能是错的。通常会有一点点人类参与,但会有大量的合成帮助。而这一切都是以不同的方式构建的。UltraChat 只是众多 SFT 数据集中的一个例子。我只想向你展示的是,这些数据集现在有数百万个对话。这些对话大部分是合成的,但可能经过人类编辑。它们涵盖了各种各样的领域等等。所以这些现在是相当广泛的产物。而且还有所有这些所谓的 SFT 混合体。所以你有一个混合体,比如许多不同的类型和来源,部分是合成的,部分是人类的。它基本上朝着这个方向发展。但大致来说,我们仍然有 SFT 数据集。它们由对话组成。我们像以前一样对其进行训练。我想说的最后一件事是,我想稍微消除与 AI 对话的魔力。比如当你去 ChatGPT,你给它一个问题,然后你按回车键。回来的是与训练集中的内容在统计上对齐的东西。而这些训练集,我的意思是,它们真的只是以人类遵循标注说明为基础。那么你实际上在和 ChatGPT 对话的是什么?或者你应该如何看待它?它不是来自某个神奇的 AI。大致来说,它来自某种在统计上模仿人类标注员的东西,而这又来自这些公司编写的标注说明。所以你正在模仿这个。你正在得到。这几乎就像你在问人类标注员。想象一下,你从 ChatGPT 得到的答案是某种人类标注员的模拟。这就像在问,在这种对话中,人类标注员会怎么说?而且这不仅仅是这个人类标注员,他只是一个随机的互联网用户,因为这些公司实际上雇佣了专家。所以,例如,当你问关于代码等问题时,参与创建这些对话数据集的人类标注员通常会是受过教育的专家。你就像在问一个这些人的模拟问题。如果这有意义的话。所以你不是在和一个神奇的 AI 对话,你是在和一个平均标注员对话。这个平均标注员可能技能相当高,但你是在和一个被雇佣来构建这些数据集的那种人的即时模拟对话。所以,在我们继续之前,我想给你一个更具体的例子。例如,当我进入 ChatGPT 并说“推荐我在巴黎看到的五个顶级地标”然后我按回车键。好的,来了。当我按回车键时,这里出来的东西是什么?我该如何思考?嗯,它不是某种神奇的 AI,它已经研究了所有地标,然后用它无限的智慧对它们进行了排名等等。我得到的是 OpenAI 雇佣的标注员的统计模拟。你可以大致这样想。所以,如果这个特定的问题存在于 OpenAI 的后训练数据集中,那么我很有可能会看到一个答案,这个答案可能与那个标注员为这五个地标设定的内容非常非常相似。人类标注员是如何得出这个答案的?嗯,他们会去互联网,自己做一点研究,花 20 分钟,然后就列出一个列表。所以,如果他们列出了这个列表,并且它在数据集中,我很有可能看到他们提交的作为助手正确答案的内容。现在,如果这个特定的查询不在后训练数据集之外,那么我得到的东西就更具**涌现性**了。因为模型基本上理解了统计上的。这个训练集中的地标通常是著名的地标,人们通常想看的地标,通常在互联网上经常被谈论的地标。而且请记住,模型已经从其在互联网上的预训练中获得了大量的知识。所以它可能已经看到了关于巴黎、关于地标、关于人们喜欢看的东西的大量对话。所以是预训练的知识与后训练的数据集相结合,从而产生了这种模仿。所以,这大致就是你如何看待这里幕后发生的事情,从统计意义上说。现在我想转向我称之为 LLM 心理学的主题,即我们为这些模型设计的训练流程所产生的认知效应。特别是,我想谈论的第一个当然是**幻觉**。你可能熟悉模型幻觉,那就是 LLM 编造东西,它们完全捏造信息等等。这是 LLM 助手的一个大问题。这是一个存在于早期模型中的大问题,很多年前。我认为这个问题已经有所改善,因为有一些我将在稍后讨论的**药物**。现在,让我们先试着理解这些幻觉的来源。所以这里有一个具体的例子,三个对话,你可能会认为它们在你的训练集中。这些是非常合理的对话,你可以想象它们在训练集中。例如,谁是汤姆·克鲁斯?嗯,汤姆·克鲁斯是一位著名的演员、美国演员和制片人等等。谁是约翰·巴罗?这恰好是一位美国参议员。谁是成吉思汗?嗯,成吉思汗是……等等。所以你的对话在训练时可能看起来是这样的。现在的问题是,当人类在每种情况下为助手编写正确答案时,人类要么知道这个人是谁,要么他们在互联网上研究他们,然后他们来写这个答案,这个答案带有自信的语气。基本上发生的是,在测试时,当你问一个完全随机的名字时,我完全想出来的,我不认为这个人存在,据我所知,我只是随机生成它。问题是,当我们问“谁是奥森·科瓦茨?”时,问题是助手不会直接告诉你“我不知道”,即使助手和语言模型本身可能知道,在其特征中,在其激活中,在其大脑中,它可能知道这个人不是它熟悉的人。即使网络的某些部分在某种意义上知道这一点,说“我不知道这个人是谁”也不会发生,因为模型在统计上模仿了它的训练集。在训练集中,形式为“谁是……?”的问题被自信地用正确答案回答。所以它会采用答案的风格,它会尽力而为。它会给你统计上最可能的猜测,它基本上会编造东西,因为正如我们刚才讨论的,这些模型无法访问互联网,它们没有进行研究。它们是统计标记转盘,我称它们为。只是试图采样序列中的下一个标记,它基本上会编造东西。所以让我们看看那是什么样子。我这里有一个叫做 Hugging Face 的推理游乐场。我特意挑选了一个叫做 Falcon 7B 的模型,这是一个旧模型,现在是几年前了,所以它是一个旧模型。所以它有幻觉。正如我所提到的,这随着时间的推移已经有所改善。但让我们说“谁是奥森·科瓦茨?”让我们问 Falcon 7B Instruct。运行。哦,是的,奥森·科瓦茨是一位美国作家和科幻作家。这是完全错误的,这是幻觉。让我们再试一次。这些是统计系统,对吧?所以我们可以重新采样。这次,奥森·科瓦茨是 1950 年代电视节目中的一个虚构角色。这是完全胡说八道。让我们再试一次。他是一位前小联盟棒球运动员。所以基本上,模型不知道,它给了我们很多不同的答案,因为它不知道。它只是从这些概率中采样。模型以“谁是奥森·科瓦茨?助手”的标记开始,然后它进来,它得到这些概率,它只是从概率中采样,然后它就编造了一些东西。而这些东西实际上在统计上与训练集中的答案风格一致。它只是在这样做。但你和我将其体验为编造的事实知识。但请记住,模型基本上不知道,它只是模仿答案的格式,它不会去查找,因为它只是再次模仿答案。那么我们如何减轻这种情况呢?例如,当我们去 ChatGPT 并说“谁是奥森·科瓦茨?”时,我正在问 OpenAI 最先进的模型。这个模型会告诉你,哦,所以这个模型实际上更聪明,因为你看到它非常短暂地说“正在搜索网络”。我们稍后会讨论这一点。它实际上正在尝试使用工具,并且刚刚编造了一些故事。但我想说的是,奥森·科瓦茨没有使用任何工具,我不想让它进行网络搜索。有一个著名的历史人物或公众人物叫奥森·科瓦茨。所以这个模型不会编造。
模型知道它不知道的东西,并且会告诉你它不知道。它似乎不是一个人,模型知道它不知道。所以不知何故,我们算是改进了幻觉,尽管它们显然是旧模型中的一个问题,而且如果你训练集看起来像这样,你为什么会得到这类答案是完全有道理的。那么我们该如何解决这个问题呢?好吧,显然我们需要在数据集中包含一些例子,其中助手的正确答案是模型不知道某个特定事实,但我们只需要在模型实际不知道的情况下才能产生这些答案。那么问题是,我们如何知道模型知道什么或不知道什么呢?我们可以通过实证探测模型来找出答案。所以,让我们以 Meta 为例,看看它如何处理 Llama 3 系列模型的幻觉。例如,在这篇 Meta 发表的论文中,我们可以深入研究幻觉,他们称之为“事实性”,并描述了他们如何审问模型以找出它知道什么和不知道什么,从而找出其知识的边界。然后,他们会在训练集中添加例子,对于模型不知道的事情,正确答案是模型不知道它们。这原则上听起来是一件很容易做到的事情,但这大致上解决了问题,而它之所以能解决问题的原因是,请记住,模型可能在网络内部有一个相当不错的自我知识模型。所以,请记住我们看了网络以及网络内部的所有这些神经元,你可能会想象网络中有某个神经元会在模型不确定时亮起,但问题是,该神经元的激活目前并没有连接到模型实际用语言说出它不知道。所以,即使神经网络的内部知道,因为有一些神经元代表模型不会浮现,它会取而代之,尽力猜测,这样它听起来就很自信,就像它在训练集中看到的那样。所以我们基本上需要审问模型,并允许它在不知道的情况下说“我不知道”。所以,让我带你了解一下 Meta 大致的做法。所以,基本上他们所做的是,这里我有一个例子,Dominic Hasek 是今天的特色文章,我只是随机点进去,他们所做的是,他们从训练集中随机选取一篇文档,然后选取一个段落,然后使用 LLM 构建关于该段落的问题。例如,我在这里用 ChatGPT 做到了,我说,这是来自这篇文档的一个段落,请根据这个段落生成三个具体的事实性问题,并给我问题和答案。所以,LLM 已经足够好,可以创建和重构这些信息。如果信息在 LLM 的上下文窗口中,这实际上效果相当不错。它不必依赖其记忆,它就在上下文窗口中。所以,它可以相当准确地重构这些信息。例如,它可以为我们生成问题,比如“他为哪个球队效力?答案是:他赢了多少个奖杯?等等”。现在,我们要做的是,我们有一些问题和答案,现在我们想审问模型。所以,大致来说,我们会做的是,我们会带着我们的问题去我们的模型,假设是 Meta 的 Llama,但让我们以 Mol 7B 为例,这是另一个模型。所以,这个模型知道这个答案吗?让我们来看看。所以,他效力于布法罗军刀队,对吧?所以,模型知道。你可以通过编程来决定,基本上,我们会从模型中获取这个答案,然后将其与正确答案进行比较。再次,模型足够好,可以自动完成这项工作。这里没有人参与。我们可以获取模型的基本答案,并使用另一个 LLM 裁判来检查它是否根据这个答案是正确的。如果它是正确的,这意味着模型可能知道。所以,我们要做的就是,我们可能会这样做几次。所以,好的,它知道是布法罗军刀队。让我们输入布法罗军刀队。让我们再试一次,布法罗军刀队。所以,我们问了三次关于这个事实性问题,模型似乎知道。一切都很棒。现在,让我们尝试第二个问题,“他赢了多少个斯坦利杯?”再次,让我们审问模型。正确答案是两个。所以,这里模型声称他赢了四次,这是不正确的,对吧?它不等于两个。所以,模型不知道,它在编造。让我们再试一次。所以,这里模型又在编造了,对吧?让我们输入这里。它说,他甚至在他职业生涯中都没有赢得过。所以,显然模型不知道。我们可以再次通过编程来告诉我们,我们审问模型三次,然后将它的答案,也许三次,五次,与正确答案进行比较。如果模型不知道,那么我们就知道模型不知道这个问题。然后,我们要做的就是,我们获取这个问题,我们在训练集中创建一个新的对话。所以,我们将添加一个新的对话训练集。当问题是“他赢了多少个斯坦利杯?”时,答案是“抱歉,我不知道”或“我不记得了”。对于这个问题来说,这是正确的答案,因为我们审问了模型,并且我们看到了这种情况。如果你对许多不同类型的问题,许多不同类型的文档这样做,你就给了模型一个机会,在它的训练集中,基于它的知识拒绝回答。如果你在训练集中只有几个这样的例子,模型就会知道,并且有机会学习这种基于知识的拒绝与网络中某个内部神经元之间的关联,我们推测它存在,并且经验上这似乎是这种情况。它可以学习这种关联,即当这个不确定性的神经元很高时,我实际上不知道,并且我被允许说“抱歉,但我不认为我记得这个等等”。如果你在训练集中有这些例子,那么这对幻觉来说是一个很大的缓解,而这大致就是 ChatGPT 能够做到这些事情的原因。所以,这些是人们已经实施的缓解措施,并且随着时间的推移,它们已经改进了事实性问题。好的,我描述了第一个缓解措施,基本上是为了缓解幻觉问题。现在,我们可以做得更好。与其仅仅说我们不知道,我们可以引入第二个额外的缓解措施,让 LLM 有机会变得事实性并实际回答问题。那么,如果我问你一个事实性问题,而你不知道,你会怎么做?嗯,你可以去搜索,使用互联网,你可以找出答案,然后告诉我答案。我们也可以对这些模型做同样的事情。所以,把神经网络内部的知识,它数十亿个参数,看作是对模型在预训练阶段,很久以前在训练中看到的东西的一种模糊的记忆。所以,把参数中的知识看作是你一个月前读过的东西。如果你一直在阅读某样东西,你就会记住它,模型也会记住它。但如果某样东西很少见,你可能对那信息没有很好的记忆。但你和我所做的是,我们只是去查找。现在,当你去查找时,你基本上是在用信息刷新你的工作记忆,然后你就可以检索它,谈论它等等。所以,我们需要一些等同于允许模型刷新其记忆或回忆的方法,我们可以通过引入工具来实现。所以,我们将要采取的方法是,与其仅仅说“抱歉,我不知道”,我们可以尝试使用工具。所以,我们可以创建一个机制,语言模型可以发出特殊标记,这些是我们引入的新标记。例如,这里我引入了两个标记,并且我引入了一种格式或协议,模型如何使用这些标记。例如,当模型不知道时,而不是回答问题,而不是仅仅说“抱歉,我不知道”,模型现在可以选择发出特殊标记“search start”,这是将发送到 bing.com 的查询,在 OpenAI 的情况下,或者说 Google 搜索之类的。所以,它会发出查询,然后发出“search end”。然后,这里会发生的是,从模型中采样、运行推理的程序,当它看到特殊标记“search end”时,它不会采样序列中的下一个标记,而是会暂停从模型生成,它会去,它会与 bing.com 打开一个会话,并将搜索查询粘贴到 Bing 中,然后它会获取所有检索到的文本。它会基本上获取这些文本,它可能会用其他特殊标记或类似的东西再次表示它,然后它会获取这些文本,并将其复制粘贴到我用括号显示的这里。所以,所有这些文本都来到这里,然后它进入上下文窗口。所以,来自网络搜索的文本现在就在上下文窗口中,它将馈送到神经网络中。你应该把上下文窗口看作是模型的“工作记忆”。上下文窗口中的数据可以直接被模型访问,它直接馈送到神经网络中。所以,它不再是模糊的回忆,而是它在上下文窗口中的数据,并且可以直接提供给该模型。所以,现在当它采样新的标记时,它可以很容易地引用复制粘贴到那里。所以,这大致就是这些工具如何工作。网络搜索只是我们将要查看的工具之一。但基本上,你引入了新的标记,你引入了一些模式,模型可以利用这些标记并调用这些特殊函数,如网络搜索函数。你如何教会模型如何正确使用这些工具,比如“search start”、“search end”等等?再次,你通过训练集来做到这一点。所以,我们现在需要大量的数据和大量的对话,通过例子向模型展示如何使用网络搜索。所以,你使用搜索的设置是什么?它看起来像什么?这里有一个例子,如何开始搜索以及搜索等等。如果你在训练集中有几千个这样的例子,模型将能够很好地理解这个工具是如何工作的,并且它将知道如何构建它的查询。当然,由于预训练数据集和它对世界的理解,它实际上有点理解什么是网络搜索,所以它实际上有点对什么东西是一个好的搜索查询有一个很好的原生理解。所以,这一切都奏效了,你只需要一些例子来展示它如何使用这个新工具,然后它就可以利用它来检索信息,并将其放入上下文窗口。这相当于你和我查找东西,因为一旦它在上下文中,它就在工作记忆中,并且很容易操作和访问。所以,这就是几分钟前我搜索 ChatGPT 时看到的,关于“Orson Kovats 是谁?”ChatGPT 语言模型决定这是某种罕见的个体或类似的东西,而不是从它的记忆中给出答案,它决定它将采样一个特殊标记,它将进行网络搜索。我们短暂地看到了闪烁的东西,它像是“正在使用网络工具”之类的。它短暂地说了一下,然后我们等了大约两秒钟,然后它生成了这个。你看到它是如何在这里创建引用的,所以它在引用来源。所以,这里发生的是,它去进行了网络搜索,找到了这些来源和这些 URL,以及这些网页的文本都塞在这里面。它在这里没有显示,但它基本上被塞在这里的文本中。现在它看到了这些文本,然后它引用它,说可能是这些人引用,可能是那些人引用等等。所以,这就是这里发生的事情。这就是为什么当我问“Orson Kovats 是谁?”时,我也可以说“不要使用任何工具”,这足以让 ChatGPT 不使用工具,只使用它的记忆和回忆。我还去尝试问 ChatGPT 这个问题,“Dominic Hasek 赢了多少个斯坦利杯?”ChatGPT 实际上决定它知道答案,并且有信心说他赢了两次。所以,它只是依赖于它的记忆,因为可能它有足够的信心在它的权重、参数和激活中,这是可以检索的,仅仅是记忆。但你也可以反过来使用网络搜索来确保。对于同一个查询,它实际上会去搜索,然后找到很多来源,找到所有这些东西都被复制粘贴到这里,然后它会再次告诉我们,并引用。它实际上还提到了维基百科文章,这也是我们信息来源。所以,这就是工具,网络搜索。模型决定何时搜索,然后,这就是这些工具的工作方式。这是另一个缓解幻觉和事实性的措施。所以,我想再强调一次这个非常重要的心理学观点:神经网络参数中的知识是一种模糊的回忆。构成上下文窗口的标记中的知识是工作记忆。它大致上就像我们的大脑一样工作。我们记住的东西是我们的参数,而我们刚刚经历的,比如几秒钟或几分钟前的东西等等,你可以想象它在我们的上下文窗口中。这个上下文窗口在你周围的意识体验中不断建立。所以,这对你实际使用 LLM 有很多影响。例如,我可以去 ChatGPT,然后做这样的事情。我说,“你能总结一下简·奥斯汀的《傲慢与偏见》的第一章吗?”这是一个完全没问题的问题,ChatGPT 实际上做得相当不错。但它之所以能做到,是因为 ChatGPT 对像《傲慢与偏见》这样著名的作品有很好的回忆。它可能看过很多关于它的东西,可能有关于这本书的论坛,它可能读过这本书的版本。它有点像记得,因为即使你读过这本书或关于它的文章,你也会有足够的回忆来谈论这一切。但通常,当我与 LLM 互动并想让它们回忆具体事情时,直接给它们总是更好。所以我认为一个更好的提示是这样的:“你能为我总结一下简·奥斯汀的《傲慢与偏见》的第一章吗?我下面附上供你参考。”然后我用一个分隔符,然后粘贴进去。我发现从我找到的某个网站复制粘贴第一章。我这样做是因为当它在上下文窗口中时,模型可以直接访问它,并且精确地,它不必回忆它,它只是访问它。所以,这个摘要可以预期质量会显著提高或更高,仅仅因为它直接可供模型使用。我认为你和我也会以同样的方式工作。如果你要我总结,在你需要总结之前,你已经重读了这一章,你会做得更好。这基本上就是这里发生的事情,或者等同于它。下一个我想简要谈论的心理学怪癖是自我认知。我在网上经常看到人们这样做,他们问 LLM 诸如“你是哪个模型?谁建造了你?”之类的问题。基本上,这个问题有点荒谬。我之所以这么说,是因为正如我试图解释的那样,它不是一个人。它没有任何持久的存在。它会启动进程,标记,然后关闭,它对每个人都是如此。它只是建立一个对话的上下文窗口,然后一切都被删除。所以,这个实体基本上每次对话都会从头开始。如果这有意义的话。它没有持久的自我,没有自我意识。它是一个标记的翻转器,它遵循其训练集的统计规律。所以,问它“你是谁?谁建造了你?”等等,并没有真正意义。默认情况下,如果你这样做,并且从无处,你会得到一些相当随机的答案。例如,让我们挑一个相当老的模型 Falcon,看看它会告诉我们什么。所以,它在回避问题,“才华横溢的工程师和开发者在这里。”它说,“我由 OpenAI 基于 GPT3 模型构建。”它完全在编造。我在这里认为它是由 OpenAI 构建的事实,很多人会认为这是模型以某种方式在 OpenAI 数据上训练的证据。我实际上不认为这必然是真的。原因在于,如果你不明确地对模型进行编程来回答这类问题,那么你将得到的是它对答案的统计最佳猜测。这个模型有一个 SFT 数据混合对话,在微调过程中,模型在训练这些数据时,它会理解它正在扮演一个乐于助人的助手的角色,它不知道如何,它实际上没有被告知要给自己贴上什么标签。它只是在扮演一个乐于助人的助手的角色。请记住,预训练阶段是从整个互联网上获取文档,而 ChatGPT 和 OpenAI 在这些文档中非常突出。所以我认为这里实际可能发生的是,这只是它对自己的一个幻觉标签,这是它的自我身份,即它是 OpenAI 的 ChatGPT。它之所以这么说,是因为互联网上有大量数据,其中有来自 ChatGPT 的类似答案。所以,这是它对自己身份的标签。现在,作为开发者,你可以覆盖它。如果你有一个 LLM 模型,你可以覆盖它。有几种方法可以做到这一点。例如,让我向你展示一下,这是来自 Allen AI 的 Almo 模型。这是一个 LLM,它不是顶级的 LLM,但它很受欢迎,因为它完全开源。所以,Almo 的论文以及其他一切都是完全开源的,这很好。所以,这里我们看到它的 SFT 混合。这是微调的数据混合。这是对话数据,对吧?所以,他们为 Almo 模型解决这个问题的方式是,我们看到混合中有大量内容,总共有 100 万次对话。但这里我们有一个硬编码的 Almo。如果我们去那里,我们看到这是 240 次对话。看看这 240 次对话,它们是硬编码的。“告诉我关于你自己,”用户说。然后助手说,“我是一个由人工智能开发的开放语言模型,由艾伦人工智能研究所开发,等等。我在这里帮忙,等等。”“你叫什么名字?”“Almo 项目。”所以,这些都是关于 Almo 2 的精心策划的硬编码问题,以及在这些情况下给出的正确答案。如果你把 240 个这样的问题或对话放到你的训练集中,然后进行微调,那么模型实际上会期望以后会模仿这些东西。如果你不给它这个,那么它很可能是 OpenAI 的 ChatGPT。还有一种方法有时可以做到这一点,那就是基本上,在这些对话中,你有人类和助手之间的术语,有时有一个特殊的系统消息,在对话的最开始。所以,它不仅仅是人类和助手之间的对话,还有一个系统。在系统消息中,你可以硬编码并提醒模型,嘿,你是一个由 OpenAI 开发的模型,你的名字是 ChatGPT 4.0,你是在这个日期训练的,你的知识截止日期是这个。基本上,它有点像记录了模型。然后,这会被插入到你的对话中。所以,当你打开 ChatGPT 时,你看到一个空白页面,但实际上系统消息被隐藏在里面,那些标记就在上下文窗口中。所以,这是两种方式来编程模型谈论自己。要么通过这样的数据,要么通过系统消息等等。基本上是不可见的标记,它们在上下文窗口中,并提醒模型它的身份。但这一切都只是某种程度上精心策划和附加的,它实际上并没有真正深入地存在,就像人类一样。我现在想继续下一节,它处理计算能力,或者我应该说这些模型在解决问题场景中的原生计算能力。特别是,我们在构建对话示例时,必须非常小心这些模型。这里有很多尖锐的边缘,它们很有启发性,当我们考虑这些模型如何思考时,它们很有趣。所以,考虑以下来自人类的提示,假设我们正在构建一个对话来进入我们的对话训练集。我们将训练模型。我们正在教你如何解决简单的数学问题。提示是:“艾米买了三个苹果和两个橙子。每个橙子卖 2 美元。总成本是 13 美元。苹果的成本是多少?”非常简单的数学问题。这里有两个答案,左边和右边。它们都是正确的答案。它们都说答案是三个,这是正确的。但这两个答案中,有一个对助手来说比另一个好得多。如果我是一个数据标注员,我正在创建这些答案中的一个,其中一个对助手来说是一个非常糟糕的答案,而另一个还可以。我想让你暂停视频,思考一下为什么这两个答案中有一个比另一个好得多。如果你使用了错误的答案,你的模型在数学上可能会非常糟糕,并且会产生不良后果。这是你在生活中标注文档时需要小心的事情,当你训练人们创建助手的理想回应时。所以,这个问题的关键在于认识到并记住,当模型训练和推理时,它们是在从左到右的一维标记序列中工作的。这是我脑海中经常出现的画面。我基本上想象标记序列从左到右演变。为了始终生成序列中的下一个标记,我们将所有这些标记馈送到神经网络中。然后,这个神经网络会给出下一个标记序列的概率。所以,这里的画面与我们之前看到的画面完全相同。这来自我之前展示的网络演示。这是基本上将顶部的输入标记进行计算的计算,并执行所有这些神经元的运算,并给出下一个标记序列的概率。所以,重要的是要认识到,大致来说,这里基本上有一个有限的计算层数。例如,这里的模型只有一层、两层、三层所谓的注意力机制和 MLP。也许典型的现代最先进的网络会有更多,比如 100 层左右。但只有 100 层计算或类似的东西,才能从前面的标记序列到下一个标记的概率。所以,对于每个标记,这里都有一个有限的计算量。你应该把它看作是非常少量的计算。这个计算量对于序列中的每个标记来说几乎是固定的。这实际上并不完全正确,因为你输入的标记越多,这个神经网络的前向传递就越昂贵,但差别不大。所以,你应该把它看作是一个好的模型,这是一个固定的计算量,将发生在每个标记的这个框中。这个计算量不可能太大,因为从上到下没有那么多层。这里不会发生太多计算。所以,你不能想象模型在一次前向传递中进行任意计算来获得一个标记。所以,这意味着我们实际上必须将我们的推理和计算分布在许多标记上,因为每个标记只花费有限的计算量。所以,我们想要将计算分布在许多标记上,并且我们不能期望在任何单个标记中进行太多计算,因为每个标记的计算量有限。所以,这里大约是固定的计算量。所以,这就是为什么这个答案在这里明显更差。原因在于,想象一下从左到右。我复制粘贴了它。答案是三个等等。想象一下模型必须从左到右,一个接一个地发出这些标记。它必须说,我们期望它说“答案是空格美元符号”,然后在这里,我们期望它将这个问题的所有计算都塞进这个单一标记中。它必须发出正确的答案“三”。然后,一旦我们发出了答案“三”,我们就期望它说出所有这些标记。但此时,答案已经生成,并且对于所有后续标记来说,它已经在上下文窗口中了。所以,这里的一切都只是对为什么这是答案的“事后辩护”。因为答案已经创建,它已经在标记窗口中了。所以,它实际上不是在这里计算的。所以,如果你直接立即回答问题,你就是在训练模型尝试在单个标记中猜测答案。这行不通,因为每个标记的计算量是有限的。这就是为什么右边的答案明显更好,因为我们正在将计算分布在答案上。我们实际上让模型从左到右慢慢得出答案。我们得到中间结果。我们说,“好的,橙子的总成本是四美元。所以,13 减去 4 是 9。”所以,我们正在创建中间计算。这些计算本身并不昂贵。所以,我们实际上是在猜测模型在任何一个标记中能够处理的难度。在任何一个标记中都不可能存在太多的工作量,因为模型在测试时无法做到这一点。所以,我们在这里教模型将它的推理和计算分布在标记上。这样,每个标记只有非常简单的问题,它们可以累加。然后,当它接近结尾时,它在工作记忆中拥有所有先前的结果,并且更容易确定答案是“三”。所以,这是一个明显更好的标签,用于我们的计算。这会非常糟糕,并且是在教模型尝试在单个标记中完成所有计算。这非常糟糕。所以,这是一种有趣的事情,值得牢记。在你的提示中,你通常不必明确考虑它,因为 OpenAI 的人有标注员等等,他们实际上会担心这个问题,并确保答案是分散的。所以,OpenAI 实际上会做正确的事情。所以,当我问 ChatGPT 这个问题时,它实际上会非常缓慢地进行。它会说,“好的,让我们定义我们的变量,建立方程。”它正在创建所有这些中间结果。这些不是给你的,而是给模型的。如果模型不为自己创建这些中间结果,它就无法得出三个。我还想向你展示,可以稍微“欺负”一下模型。我们可以要求它做一些事情。例如,我说,我给了它完全相同的提示,我说“立即用一个标记回答问题,只给我答案,别的什么都没有。”结果是,对于这个简单的提示,它实际上能够做到。它只创建了一个,我认为是两个标记,对吧?因为美元符号是它自己的标记。所以,基本上这个模型没有给我一个标记,它给了我两个标记,但它仍然得到了正确的答案。并且它在一个前向传递中完成了。那是因为我认为这里的数字非常简单。所以我让它变得更难,稍微“欺负”一下模型。我说,“艾米买了 23 个苹果和 177 个橙子。”然后我只是把数字变大了。我只是让模型更难。我要求它在单个标记中进行更多计算。所以我说了同样的话。这里它给了我五个。五实际上是不正确的。所以,模型未能完成所有这些计算。在一个前向传递中,它无法从输入标记开始,然后在一次前向传递中,在一次网络传递中,它无法产生结果。然后我说,“好的,现在不用担心标记限制,像往常一样解决问题。”然后它会给出所有中间结果,它会简化。这里的所有中间结果和中间计算都比模型更容易。它基本上是,它不是每个标记的工作量太大。这里所有的标记都是正确的。它得出了解决方案,那就是七。我就是无法将所有这些工作挤进去。它无法将它挤进一次网络前向传递。所以,我认为这只是一个可爱的例子,值得思考。我认为它在某种程度上再次揭示了这些模型是如何工作的。关于这个话题,我想说的最后一件事是,如果我实际上在日常生活中尝试解决这个问题,我可能不会相信模型在这里的所有中间计算都正确。所以,我可能会这样做:我会来这里,然后说“使用代码”。因为代码是 ChatGPT 可以使用的工具之一。而不是让它进行心算,我在这里的心算,我并不完全信任它。特别是如果数字变得非常大,模型不一定能正确完成。任何一个中间步骤都可能失败。我们正在使用神经网络进行心算,就像你在大脑中进行心算一样。它可能会搞砸一些中间结果。它实际上能够进行这种心算,这真是太神奇了。我无法在脑海中做到这一点。但基本上,模型正在脑海中进行。我不信任它。所以,我想使用工具。你可以说“使用代码”之类的。我不确定发生了什么。使用代码。所以,正如我提到的,有一个特殊的工具,模型可以编写代码,我可以检查代码是否正确。然后,它不依赖于它的心算,它使用 Python 解释器,这是一个非常简单的编程语言,来编写计算结果的代码。我个人会更信任这一点,因为它来自 Python 程序,我认为它比语言模型的心算有更多的正确性保证。所以,只是另一个潜在的提示,如果你有这类问题,你可能想让模型使用代码解释器。就像我们看到网络搜索一样,模型有特殊的标记来调用,它不会真正从语言模型生成这些标记。它会编写程序,然后它实际上将该程序发送到计算机的另一个部分,该部分实际上运行该程序并返回结果。然后模型可以访问该结果,并告诉你,好的,每个苹果的成本是七。所以,这是另一个工具。我会在实践中为你自己使用它。而且,我可以说,它出错的可能性更小。所以,这就是我称这一节为“模型需要标记来思考”。将你的计算分布在许多标记上。让模型创建中间结果,或者 whenever possible 依赖工具和工具使用,而不是让模型在内存中完成所有事情。所以,如果它们试图在内存中完成所有事情,我并不完全信任它,并且 whenever possible 倾向于使用工具。我想再给你一个例子,说明这实际上是如何出现的,那就是计数。模型实际上并不擅长计数,原因与你要求单个标记进行太多计算完全相同。让我给你一个简单的例子。下面有多少个点?然后我放了一堆点。ChatGPT 说,“有”,然后它试图在一个标记中解决问题。在一个标记中,它必须计算上下文窗口中的点数。并且它必须在一个网络前向传递中做到这一点。正如我们所谈论的,在一个网络前向传递中,没有太多计算量可以发生。把它看作是非常少的计算量。所以,如果我只看模型看到的东西,让我们去 LM,去分词器。它看到“下面有多少个点?”然后发现,这里的点,这组,我认为是 20 个点,是一个标记。然后这组,不管是什么,是另一个标记。然后出于某种原因,它们被分解成这样。所以,我实际上不,这与分词器的细节有关。但事实证明,模型基本上看到标记 ID,这个,这个,等等。然后,从这些标记 ID 中,它应该计算数量。剧透一下,它不是 161,实际上我认为是 177。所以,我们可以这样做。我们可以说“使用代码”。你可能会期望,为什么这会起作用?它实际上是微妙的,而且很有趣。所以,当我输入“使用代码”时,我实际上期望它能工作。让我们看看。好的,177 是正确的。所以,这里发生的是,我实际上,看起来不像,但我把问题分解成了对模型来说更容易的问题。我知道模型不能计数,它不能进行心算。但我知道模型实际上很擅长复制粘贴。所以,我在这里做的是,当我输入“使用代码”时,它会为这个创建一个 Python 字符串。而复制粘贴我的输入到这里这个任务非常简单,因为对模型来说,它看到这个字符串,它看到的是这四个标记或类似的东西。所以,模型很容易复制粘贴这些标记 ID,并将它们解包成这里的点。所以,它创建了这个字符串,然后调用 Python 例程.count,然后得出正确答案。所以,Python 解释器在计数,而不是模型的心算在计数。所以,这又是一个简单的例子,模型需要标记来思考,不要依赖它们的心算。这就是为什么模型也不擅长计数。如果你需要它们执行计数任务,总是让它们依赖工具。模型也有很多其他的小认知缺陷。这些是技术的尖锐边缘,需要随着时间的推移而注意。例如,模型在所有拼写相关的任务上都不擅长。我告诉你我们会回到分词。原因在于,模型看不到字符,它们看到标记。它们的世界完全是关于标记的,这些是文本的小块。所以,它们看不到像我们的眼睛那样的字符。所以,非常简单的字符级任务经常失败。例如,我给它一个字符串“ubiquitous”,然后要求它只打印每第三个字符,从第一个开始。所以,我们从“u”开始,然后每三个。所以,1、2、3,“q”应该是下一个,然后等等。所以,我认为这是不正确的。再次,我的假设是,这又是心算,第一,有点,但第二,我认为更重要的问题是,如果你去分词器,看看“ubiquitous”,我们看到它是三个标记。所以,你和我看到“ubiquitous”,我们可以轻松访问单个字母,因为我们看到了它们。当我们把它放在视觉场的工作记忆中时,我们可以很容易地索引到每第三个字母,我可以完成这项任务。但模型无法访问单个字母。它们将这个看作是这三个标记。并且,请记住,这些模型是从互联网上从头开始训练的。所有这些标记,基本上模型必须发现所有这些不同字母中有多少被打包到所有这些不同的标记中。我们使用标记主要是为了效率。但我认为很多人有兴趣完全删除标记,比如我们应该真正拥有字符级或字节级模型。只是那样会产生非常长的序列,人们现在不知道如何处理。所以,虽然我们有标记的世界,任何拼写任务实际上都不太可能做得很好。因为我知道拼写不是强项,这与分词有关,我再次可以要求它依赖工具。所以我可以简单地说“使用代码”。我再次期望这会起作用。因为复制粘贴“ubiquitous”到 Python 解释器的任务要容易得多。然后我们依赖 Python 解释器来操作这个字符串的字符。所以,当我输入“使用代码 ubiquitous”时,它会索引到每第三个字符。实际的真相是“u2s uqs”,这看起来是正确的。所以,再次一个拼写相关任务效果不佳的例子。最近一个非常著名的例子是“草莓中有多少个 R?”这个问题病毒式传播了很多次。基本上,模型现在能正确回答了,它们说“草莓中有三个 R”。但很长一段时间以来,所有最先进的模型都坚持认为草莓中只有两个 R。这引起了很多,你知道,骚动,因为,这是个词吗?我想是的。因为,它只是让你觉得,为什么模型如此聪明,它们可以解决数学奥林匹克问题,但它们却不能数草莓中的 R?答案是,我慢慢地建立起来了,但第一,模型看不到字符,它们看到标记。第二,它们不擅长计数。所以,这里我们将看到字符的难度与计数的难度结合起来。这就是为什么模型在这种情况下会遇到困难,尽管我认为现在,说实话,我认为 OpenAI 可能已经硬编码了答案,或者我不知道他们做了什么。但这个特定的查询现在有效了。所以,模型不擅长拼写。还有很多其他的小尖锐边缘。我不想一一列举。我只是想给你举几个例子,让你知道要注意什么。当你实际使用这些模型时,我不想对模型在各个方面不足的地方进行全面的分析。我只是想说明,这里有一些尖锐的边缘。我们已经讨论了一些,其中一些是有道理的,但有些也只是没有多大意义,而且它们让你挠头,即使你深入了解了这些模型的工作原理。一个很好的例子是,模型不擅长非常简单的问题。这让很多人震惊,因为这些数学问题,这些问题可以解决复杂的数学问题。它们可以回答比我更好的博士级别的物理、化学、生物学问题。但有时它们在如此简单的问题上却失败了。所以,这里是 9.11 比 9.9 大。它以某种方式进行了论证。但显然,最后,它实际上后来改变了它的决定。所以,我不相信这是非常可复现的。有时它会改变答案,有时会得到正确的答案,有时会得到错误的答案。再试一次。所以,即使它看起来更大。所以,这里它甚至没有最终纠正自己。如果你问很多次,有时它也会得到正确的答案。但模型如何能做得如此出色?
在奥林匹克级别的难题上表现出色,但却在非常简单的问题上失败,比如这个问题,嗯,我认为这个问题正如我所提到的,有点令人费解。事实证明,很多人深入研究了这个问题,我实际上并没有读过那篇论文,但这个团队告诉我的是,当你仔细审查神经网络中的激活时,当你观察一些特征以及哪些特征会开启或关闭,哪些神经元会开启或关闭时,神经网络中会有大量的神经元被激活,而这些神经元通常与圣经经文相关。所以,我认为这个模型有点像被提醒,这些看起来几乎像是圣经经文的标记,而在圣经经文的设置中,9.11 会出现在 9.9 之后。所以基本上,模型以某种方式发现,在圣经经文中,9.11 会大于 9.9,这在认知上非常令人分心。即使在这里,它实际上是在尝试用数学来证明它并得出答案,它最终还是会得到错误的答案。所以基本上它根本不完全说得通,而且也不完全被理解。而且,还有一些类似这样的零散问题。所以这就是为什么我们将它视为它本身,一个随机系统,它确实很神奇,但你也不能完全信任它,你想把它当作一个工具,而不是你那种随意地解决一个问题并复制粘贴结果的东西。
好的,现在我们已经涵盖了大型语言模型训练的两个主要阶段。我们看到在第一阶段,这被称为预训练阶段,我们基本上是在互联网文档上进行训练。当你用互联网文档训练一个语言模型时,你会得到所谓的基模型,它基本上是一个互联网文档模拟器。现在我们看到这是一个有趣的产物,而且,这需要数月时间在数千台计算机上进行训练,它基本上是对互联网的一种有损压缩,而且它非常有趣,但它并不直接有用,因为我们不想采样互联网文档,我们想向人工智能提问并让它回应我们的问题。所以为此,我们需要一个助手,我们看到我们实际上可以在训练后阶段构建一个助手,特别是在我们称之为监督微调的过程中。所以在这个阶段,我们看到它在算法上与预训练相同,什么都不会改变,唯一改变的是数据集。所以,我们不再使用互联网文档,而是想创建一个非常好的对话数据集。我们想要数百万关于各种多样化主题的人与助手之间的对话。从根本上说,这些对话是由人类创建的,所以人类编写提示,人类编写理想的响应,他们根据标签文档来做这件事。现在在现代技术栈中,它实际上并不是完全由人类手动完成的。他们现在得到了这些工具的很多帮助,所以我们可以使用语言模型来帮助我们创建这些数据集,而且这被广泛地完成,但从根本上说,最终这一切仍然来自人类的策划。所以我们创建了这些对话,它们现在成为了我们的数据集,我们在上面进行微调,或者继续训练,我们得到一个助手。然后我们改变了方向,开始谈论这个助手的一些潜在的认知影响。我们看到,例如,如果你不采取任何缓解措施,助手就会产生幻觉。所以我们看到幻觉会很常见,然后我们看了一些缓解这些幻觉的方法。然后我们看到模型非常令人印象深刻,可以在脑海中做很多事情,但我们也看到它们可以依靠工具来变得更好。所以,例如,我们可以依靠网络搜索来减少幻觉,或者可能带来一些更新的信息之类的。或者我们可以依靠代码解释器之类的工具,所以代码可以,所以大型语言模型可以编写一些代码并实际运行它并查看结果。所以这些是我们到目前为止研究过的一些主题。
现在我想做的是,我想涵盖这个流程的最后一个主要阶段,那就是强化学习。强化学习仍然被认为是后训练的范畴,但它是最后一个主要阶段,它是一种不同的训练语言模型的方式,通常作为第三步。所以,在像 OpenAI 这样的公司里,你会从这里开始,这些都是独立的团队。有一个团队负责预训练的数据,一个团队负责预训练的训练,然后有一个团队负责所有对话的生成,在一个不同的团队中,负责监督微调,也会有一个团队负责强化学习。所以这就像是这些模型的交接,你得到你的基模型,然后你发现你需要成为一个助手,然后你进入强化学习,我们现在将要讨论。所以这基本上是主要的流程,所以现在让我们专注于强化学习,训练的最后一个主要阶段。让我先解释一下,为什么我们想要进行强化学习,以及它在高层次上看起来是什么样的。
所以,我现在想尝试解释强化学习阶段,以及它与你可能熟悉的事物相对应,那就是上学。就像你上学是为了在某方面变得非常出色一样,我们想让大型语言模型也经历上学过程。实际上,我们正在做的是,我们有几种提供知识或转移技能的范式。所以,特别是在学校里,当我们使用教科书时,你会看到这些教科书中有三个主要的信息部分,三类信息。你首先看到的是大量的阐述。顺便说一句,这是一本我从网上随便拿来的书,我认为是某种有机化学之类的,我不确定。但重要的是,你会看到大部分文本,大部分是阐述,是背景知识等等。当你阅读这些阐述的文字时,你可以大致认为这相当于在训练这些数据。所以,这就是为什么当你阅读这些背景知识和所有这些上下文信息时,它基本上相当于预训练。这就是我们建立数据知识库并了解主题的地方。你看到的下一类主要信息是这些问题及其已解决的方案。所以,基本上,在这种情况下,人类专家,这本书的作者,不仅给了我们一个问题,还给出了已解决的方案。而且解决方案基本上相当于有一个理想的助手响应。所以,基本上,专家正在向我们展示如何以其完整形式解决问题。所以,当我们阅读解决方案时,我们基本上是在训练专家数据,然后稍后我们可以尝试模仿专家。而且,基本上,这大致对应于拥有 SFT 模型,这就是它将要做的事情。所以,基本上,我们已经完成了预训练,并且我们已经涵盖了对专家及其解决问题方式的模仿。而强化学习的第三阶段基本上是练习题。所以,有时你会看到这里只有一个练习题,但当然,在任何教科书的每个章节的末尾通常都会有很多练习题。而且,练习题当然对学习至关重要,因为它们让你做什么?它们让你练习,自己发现解决这些问题的方法。所以,在练习题中,你会得到一个问题描述,但你不会得到解决方案,但你通常会在教科书的答案键中得到最终答案。所以,你知道你想要达到的最终答案,你有一个问题陈述,但你没有解决方案。你正在尝试练习解决方案,你尝试了很多不同的事情,你正在观察什么能最好地让你达到最终解决方案。所以,你正在发现如何解决这些问题。而且,在这个过程中,你依赖于第一,来自预训练的背景信息,以及第二,可能有一点点模仿人类专家,你也可以尝试类似的解决方案等等。所以,我们已经完成了这个和那个,现在在这个部分,我们将尝试练习。所以,我们将得到提示,我们将得到解决方案,抱歉,是最终答案,但我们不会得到专家解决方案。我们必须练习并尝试各种事情。这就是强化学习的意义所在。
所以,让我们回到我们之前处理过的问题,以便有一个具体的例子来讨论,当我们探索这个话题时。所以,我在这里的文本分词器,因为我也想,嗯,我得到一个文本框,这很有用,但第二,我想再次提醒你,我们一直在处理一维的 token 序列。所以,我实际上更喜欢这个视图,因为这就像是大型语言模型的原生视图,如果可以这么说的话,就像它实际看到的那样,它看到的是 token ID,对吧?
好的,艾米丽买了三个苹果和两个橙子。每个橙子是 2 美元。所有水果的总成本是 13 美元。每个苹果的成本是多少?我想让你在这里欣赏的是,这就像是四个可能的候选解决方案的例子,它们都达到了答案三。现在,我想让你在这个时候欣赏的是,如果我是人类数据标注员,正在创建一个要输入训练集的对话,我实际上并不知道应该将这些对话中的哪一个添加到数据集中。有些对话设置了一个方程系统,有些对话只是用英语讨论,有些对话只是跳到解决方案。如果你看 ChatGPT,例如,你给它这个问题,它会定义一个变量系统,然后它会做这个小事情。但是我们必须欣赏和区分的是,解决方案的第一个目的是达到正确的答案,当然,我们想要得到最终答案三,这是这里的重要目的。但也有一个次要目的,在这里,我们也只是想让它对人类来说“好一点”,因为我们假设那个人想看到解决方案,他们想看到中间步骤,我们想把它呈现得很好等等。所以这里有两个独立的事情在进行:第一,是为人类呈现;第二,我们实际上正在尝试得到正确的答案。
所以,让我们暂时只关注达到最终答案。如果我们只关心最终答案,那么这些中哪一个对于大型语言模型来说是最佳或最好的提示?抱歉,是最好的解决方案?而我想说的是,我不知道,作为人类标注员,我不知道哪一个最好。所以,例如,我们之前看到,当我们在这里查看 token 序列和心算和推理时,我们看到对于每个 token,我们基本上只能花费有限的计算量,而且这个计算量并不大,或者你应该那样想。所以,我们实际上不能在任何一个 token 上进行太大的飞跃,这也许是思考的方式。所以,例如,在这个例子中,它非常好的地方在于它的 token 非常少,所以我们需要很短的时间来得到答案。但在这里,当我们做 30 - 4 除以 3 等于右边这个 token 时,我们实际上要求在这个单个 token 上发生大量的计算。所以,也许给大型语言模型这个例子是个坏主意,因为它实际上是在激励它非常快地跳过计算,它实际上会犯错误,在心算中犯错误。所以,也许把它分散开会更好,也许把它设置成一个方程会更好,也许用语言讨论会更好。我们根本不知道,我们不知道,因为对你或我,或者作为人类标注员来说容易的事情,对我们来说容易或难的事情,与对大型语言模型来说容易或难的事情是不同的。它的认知是不同的,而且 token 序列对它来说有点不同。所以,这里的一些对我说来很简单的 token 序列,对大型语言模型来说可能太大了。所以,这里的这个 token 会太难了。但反过来,我在这里创建的许多 token 对大型语言模型来说可能只是小菜一碟,我们只是在浪费 token,为什么浪费所有这些 token,当这一切都很简单的时候?所以,如果我们只关心最终答案,并且我们将呈现给人类的问题分开,那么我们实际上并不知道如何标注这个例子。我们不知道应该给大型语言模型什么解决方案,因为我们不是大型语言模型。而且,在数学例子中很清楚,但这实际上是一个非常普遍的问题。因为我们的知识不是大型语言模型的知识。大型语言模型实际上拥有大量的数学、物理、化学等领域的博士知识。所以,在很多方面,它实际上比我知道的要多,而我可能没有利用它在解决问题中的知识。但反过来,我可能在我的解决方案中注入了大量大型语言模型在其参数中不知道的知识,然后这些就成了让模型感到困惑的突然飞跃。所以,我们的认知是不同的,如果我只关心达到最终解决方案并以经济高效的方式完成它,我真的不知道该放什么。所以,长话短说,我们没有一个好的位置来为大型语言模型创建这些 token 序列,它们通过模仿来初始化系统很有用,但我们真的希望大型语言模型能够发现适合它的 token 序列。它需要自己找到什么 token 序列能够可靠地根据提示得到答案,并且它需要在强化学习和试错的过程中发现这一点。
所以,让我们看看这个例子在强化学习中是如何工作的。
好的,我们现在回到了 Hugging Face 推理游乐场,它允许我非常轻松地调用各种模型。所以,例如,在这里的右上角,我选择了 Gemma 2 20 亿参数模型。所以,20 亿参数非常非常小,这是一个微小的模型,但没关系。所以,我们将给它,强化学习的工作方式实际上非常非常简单。我们需要尝试各种不同的解决方案,我们想看看哪些解决方案效果好,哪些不好。所以,我们基本上将采用提示,运行模型,模型会生成一个解决方案,然后我们将检查解决方案,我们知道这个问题的正确答案是 3 美元。所以,确实,模型得到了正确答案,它说它是 3 美元。所以,这是正确的。所以,这只是对这个解决方案的一次尝试。现在我们将删除它,然后再次运行它。让我们尝试第二次尝试。模型以稍微不同的方式解决了它,对吧?每一次尝试都会是一个不同的生成,因为这些模型是随机系统,记住,在每一个 token 上,我们都有一个概率分布,我们从中采样。所以,我们最终会走上稍微不同的道路。所以,这是第二个解决方案,也得到了正确答案。现在我们将删除它,让我们第三次尝试。
好的,又是一个稍微不同的解决方案,但也得到了正确答案。现在我们可以重复这个很多次。所以,实际上,你可能会对单个提示采样数千个独立解决方案,甚至数百万个解决方案。有些会是正确的,有些则不太正确。基本上,我们想做的是鼓励那些导致正确答案的解决方案。所以,让我们看看那是什么样的。所以,如果我们回到这里,这里有一个卡通图,说明这是什么样子。我们有一个提示,然后我们并行尝试了许多不同的解决方案。有些解决方案可能进展顺利,它们得到了正确的答案,用绿色表示。有些解决方案可能进展不顺利,没有得到正确的答案,用红色表示。现在,这个问题不幸不是最好的例子,因为它是一个微不足道的提示,正如我们所见,即使是一个 20 亿参数的模型也总是能正确回答。所以,从这个意义上说,它不是最好的例子。但让我们发挥一点想象力,假设绿色的是好的,红色的是坏的。所以,我们生成了 15 个解决方案,只有 4 个得到了正确答案。所以,现在我们想做的是,基本上,我们想鼓励那些导致正确答案的解决方案。所以,无论这些红色解决方案中发生了什么 token 序列,显然在某个地方出了问题,而且这条路不适合解决问题。而这些绿色解决方案中的 token 序列,嗯,在这种情况下,事情进展得很顺利。所以,我们想在这样的提示中做更多这样的事情。我们鼓励这种行为的方式是,我们基本上在这些序列上进行训练。但这些训练序列现在不再来自专家人类标注员。没有人决定这是正确的解决方案。这个解决方案来自模型本身。所以,模型在这里练习,它尝试了几种解决方案,其中四个似乎奏效了。现在模型将对其进行训练。这相当于一个学生看着他们的解决方案,然后说,“好吧,这个奏效得很好,所以这就是我应该如何解决这类问题。”而且,在这个例子中,有很多不同的方法可以稍微调整一下方法。但为了传达核心思想,也许最简单的方法就是考虑从中选出最好的一个解决方案。比如这个,这就是为什么它是黄色的。所以,这是不仅导致了正确答案的解决方案,而且可能还有其他一些不错的特性,也许它是最短的,或者在某些方面看起来最好,或者还有其他标准可以考虑。但我们将决定,这是最好的解决方案,我们将对其进行训练。然后,一旦你进行了参数更新,模型在未来更有可能在这种情况下走这条路。但你必须记住,我们将运行许多不同的多样化提示,涵盖大量的数学问题、物理问题等等,可能成千上万的提示。请记住,有数千个解决方案提示。所以,这一切都同时发生。随着我们迭代这个过程,模型正在为自己发现什么类型的 token 序列能够引导它得到正确的答案。它不是来自人类标注员。模型正在这个游乐场里玩耍,它知道它想要达到什么目标,并且它正在发现适合它的序列。这些序列不会进行任何心算上的飞跃,它们似乎能够可靠地、统计地工作,并且充分利用模型已有的知识。所以,这就是强化学习的过程。它基本上是猜测和检查。我们将猜测许多不同类型的解决方案,我们将检查它们,并且我们将在未来做得更多。这就是强化学习。
所以,在之前的内容的背景下,我们现在看到 SFT 模型,监督微调模型,它仍然很有帮助,因为它仍然可以在一定程度上将模型初始化到正确解决方案的附近。所以,它就像是模型的初始化,因为它让模型写出解决方案,也许它理解如何设置方程系统,或者也许它会通过解决方案进行讨论。它让你接近正确的解决方案。但强化学习是所有事情都得到调整的地方。我们真正发现适合模型的解决方案,得到正确的答案,鼓励它们,然后模型会随着时间的推移而不断进步。
好的,这就是我们如何训练大型语言模型的高层次流程。简而言之,我们训练它们的方式与训练孩子非常相似。基本上,唯一的区别是,孩子们会看书的章节,他们会在每本书的章节中完成所有这些不同的训练练习。但相反,当我们训练人工智能时,几乎就像我们分阶段进行,取决于该阶段的类型。所以,首先,我们进行预训练,正如我们所见,这相当于基本上阅读所有阐述性的材料。所以,我们同时查看所有教科书,阅读所有阐述,并尝试建立一个知识库。第二,然后我们进入 SFT 阶段,这实际上是查看所有人类专家的固定解决方案,查看所有教科书中的所有不同类型的已解决解决方案,我们只是得到一个 SFT 模型,它能够模仿专家,但这样做是盲目的。它只是尽力猜测,就像统计上模仿专家行为一样。所以,这就是当你查看所有已解决的解决方案时得到的东西。然后,最后,在最后一个阶段,我们完成所有练习题,在 RL 阶段,在所有教科书中,我们只做练习题,这就是我们得到 RL 模型的方式。所以,在高层次上,我们训练大型语言模型的方式与我们训练孩子的方式非常相似。
我想说的下一个观点是,实际上,这两个阶段,预训练和惊喜微调,已经存在多年了,而且它们非常标准,所有不同的 LLM 提供商都在这样做。是这个最后的阶段,RL 训练,它还处于发展的早期阶段,并且在该领域还不标准。所以,这个阶段更加早期和初级。原因是我在这里跳过了大量的细节。高层次的想法非常简单,它是试错学习,但有很多细节和细微的数学上的细微之处,关于你如何选择最佳解决方案,以及你训练它们的程度,以及提示分布是什么,以及如何设置训练运行以使其正常工作。所以,核心思想非常非常简单,但有很多细节和调整。所以,在这里把细节做好并不容易。所以,很多公司,例如 OpenAI 和其他 LLM 提供商,在 LLM 的强化学习微调方面进行了内部实验,但他们没有公开谈论过。这一切都是在公司内部完成的。所以,这就是为什么 DeepSeek 最近发布的论文如此重要,因为这是一篇来自中国一家名为 DC Kai 的公司的论文。这篇论文非常公开地谈论了大型语言模型的强化学习微调,以及它对大型语言模型有多么重要,以及它如何激发模型的大量推理能力。我们稍后会详细介绍。所以,这篇论文重新激发了公众对使用 RL 进行 LLM 的兴趣,并提供了许多重现其结果并实际使该阶段适用于大型语言模型所需的细节。
所以,让我简要地带你了解一下 DeepSeek RL1 论文,以及当你正确地将 RL 应用于语言模型时会发生什么,以及它看起来是什么样的,以及它给你带来了什么。所以,我首先滚动到这个图 2,我们在这里查看模型在解决数学问题方面的改进。这是数学问题的准确性。然后我们可以去网页,我们可以看到这些问题中的问题类型,这些数学问题的类型正在被衡量。这些是简单的数学问题,如果你愿意,可以暂停视频。但这些是模型被要求解决的问题类型,你可以看到一开始它们做得不好,但随着你用数千步更新模型,它们的准确性会不断提高。所以,模型正在改进,并且随着你在大量这类问题数据集上进行试错,它们的准确性正在提高。模型正在学习如何解决数学问题。但比解决这些问题的数量化结果更令人难以置信的是,模型实现这些结果的定性方式。所以,当我们向下滚动时,这里有一个有趣的图表是,在优化后期,模型的平均响应长度似乎在增加。所以,模型似乎使用更多的 token 来获得更高的准确性结果。所以,它正在学习创建非常非常长的解决方案。为什么这些解决方案这么长?我们可以定性地看看。所以,基本上,他们发现模型解决方案变得非常非常长,部分原因是,这里有一个问题,这里是模型的一种答案。模型学会做什么,这是新优化的一种新兴属性,它只是发现这对解决问题有好处。它开始做这样的事情:“等等,等等,等等,那不是一个时刻,我可以标记一下。让我们一步一步地重新评估,以确定正确的总和。”所以,模型在这里做什么?模型基本上是在重新评估步骤。它已经学会了,为了提高准确性,尝试很多想法,从不同角度尝试,回溯,重新构建,重新跟踪,它正在做很多你和我解决数学问题时正在做的事情。但它正在重新发现你脑海中发生的事情,而不是你写在解决方案中的东西。而且,没有人可以硬编码这些东西到理想的助手响应中。这只能在强化学习过程中发现,因为你不知道该放什么。这恰好对模型有效,并且提高了它解决问题的准确性。所以,模型学会了我们称之为“思维链”。它是优化的一个新兴属性。这就是导致响应长度膨胀的原因,但这也是提高问题解决准确性的原因。所以,这里令人难以置信的是,模型正在发现思考方式。它正在学习我称之为“认知策略”,即你如何操纵问题,如何从不同角度处理它,如何引入一些类比或做其他类似的事情,以及你如何随着时间的推移尝试很多事情,从不同角度检查结果,以及你如何解决问题。但在这里,它是由 RL 发现的。所以,在优化中看到这一点出现而无需硬编码任何东西是极其令人难以置信的。我们唯一给它的是正确的答案,这来自于尝试正确解决它们,这是令人难以置信的。
现在,让我们回到我们一直在处理的问题,让我们看看对于这种我们称之为“推理”或“思考”模型来说,它将如何解决那个问题。
所以,回想一下,这是我们一直在处理的问题。当我将其粘贴到 ChatGPT 40 时,我得到了这样的响应。让我们看看当你将相同的查询提供给所谓的“推理”或“思考”模型时会发生什么。这是一个用强化学习训练的模型。所以,这个 DC Car1 论文中描述的模型可以在 chat.dec.com 上找到。所以,这是开发它的公司正在托管它。你必须确保“深度思考”按钮已打开,才能获得所谓的 R1 模型。我们可以将其粘贴在这里并运行。所以,让我们看看现在会发生什么,以及模型的输出是什么。
好的,这里是它说的。所以,这是我们之前通过基本上使用 SFT 方法得到的。监督微调方法。这是模仿专家解决方案。这是我们从 RL 模型得到的。好的,让我试着弄清楚。艾米丽买了三个苹果和两个橙子。每个橙子价格 2 美元。总共 13 美元。我需要找出等等等等。所以,在这里,当你阅读它时,你无法摆脱这样的想法:这个模型正在思考。它肯定在追求解决方案。它推断出它必须花费 3 美元。然后它说:“等等,让我再检查一下我的数学,以确保。”然后它从稍微不同的角度尝试它。然后它说:“是的,一切都检查过了。我认为这就是答案。我没有发现任何错误。让我看看是否有另一种方法来解决这个问题。也许建立一个方程。让我们把一个苹果的成本设为 8 美元,那么等等等等。是的,同样的答案。所以,每个苹果绝对是 3 美元。好了,我确信这是正确的。”然后它在完成思考过程后,会写出对人类来说很好的解决方案。所以,这现在考虑到了。这更多是关于正确性方面,这更多是关于呈现方面,它以一种很好的方式写出来,并在底部用框框住正确的答案。所以,令人难以置信的是,我们得到了这个模型的思考过程。这就是来自强化学习过程的东西。这就是导致 token 序列膨胀的原因。它们在思考,它们尝试不同的方法。这就是在解决问题中带来更高准确性的原因。这就是我们看到这些“啊哈”时刻和这些不同策略以及这些关于如何确保你得到正确答案的想法的地方。
最后一点我想说的是,有些人对将非常敏感的数据输入 chat.com 有点担心,因为这是一家中国公司。所以,人们有点小心翼翼。DeepSeek R1 是这家公司发布的一个模型。这是一个开源模型或开放权重模型。任何人都可以下载和使用。你将无法在 MacBook 或本地设备上运行完整的模型,因为它是一个相当大的模型。但许多公司都在托管完整的最大模型。我喜欢使用的公司之一叫做 Together.ai。所以,当你去 Together.ai 注册并进入游乐场时,你可以在这里选择聊天中的 DeepSeek R1。还有许多其他类型的模型可供选择。这些都是最先进的模型。所以,这与我们到目前为止一直在玩的 Hugging Face 推理游乐场类似。但 Together.ai 通常会托管所有最先进的模型。所以,选择 DT Car1。你可以尝试忽略很多这些。我认为默认设置通常是可以的。我们可以输入这个。而且,因为这个模型是由 DeepSeek 发布 的,你在这里得到的东西应该与你在这里得到的东西基本相同。由于采样中的随机性,我们会得到一些略有不同的结果。但原则上,它在模型能力方面应该是相同的,你应该能够看到相同的东西,无论是定量的还是定性的。但这个模型来自一家美国公司,那就是 DeepSeek,这就是所谓的推理模型。
现在,当我回到聊天时,让我去聊天。好的,你在下拉菜单中看到的模型,有些,比如 01、03 mini、O3 mini High 等等,它们都在谈论使用高级推理。这指的是它通过强化学习进行训练,技术与 DeepSeek Car1 非常相似。根据 OpenAI 员工的公开声明,这些是使用 RL 训练的思考模型。这些模型,比如 GPT 4 或 GPT 40 mini,你在免费层级中得到的,你应该认为它们主要是 SFT 模型,监督微调模型。它们实际上并没有像 RL 模型那样进行“思考”。即使这些模型涉及一些强化学习,我稍后会详细介绍,但它们主要是 SFT 模型。我认为你应该这样想。所以,就像我们在这里看到的一样,我们可以选择一个思考模型,比如 03 mini High。顺便说一下,除非你支付每月 20 美元或每月 200 美元的订阅费才能使用一些顶级模型,否则你可能无法使用这些模型。所以,我们可以选择一个思考模型并运行。现在会发生什么呢?它会说“推理”,然后它会开始做这样的事情。而且,我们在这里看到的与我们在这里看到的并不完全一样。所以,尽管在底层模型会产生这些“思维链”,但 OpenAI 选择不在网页界面中显示确切的“思维链”。它们显示了这些“思维链”的摘要。而且,OpenAI 这样做,我认为部分原因在于它们担心所谓的“蒸馏风险”,也就是说,有人可以进来并试图模仿这些推理过程,并通过模仿推理“思维链”来恢复很多推理性能。所以,它们隐藏了它们,只显示摘要。所以,你得到的并不完全是你从 DeepSeek 得到的,关于推理本身。然后它们写出解决方案。所以,这些基本上是等效的,尽管我们没有看到完整的底层细节。
现在,在性能方面,这些模型和 DeepSeek 模型目前基本上是相当的。我想说,由于评估的原因,很难说清楚。但如果你每月向 OpenAI 支付 200 美元,我相信其中一些模型目前仍然看起来更好。但 DeepSeek R1 目前仍然是一个非常可靠的思考模型选择,你可以通过这个网站或任何其他网站获得,因为模型是开放权重的,你可以下载它。所以,这就是思考模型。
那么,到目前为止的总结是什么?我们已经讨论了强化学习,以及思考在优化过程中出现的。当我们基本上在许多具有可验证解决方案的数学和代码问题上运行 RL 时,例如答案是三等等。现在,这些思考模型可以在例如 DeepSeek 或任何推理提供商(如 Together.ai)上访问,并在那里选择 DeepSeek。这些思考模型也在 ChatGPT 中可用,在任何 01 或 O3 模型下。但这些 GPT 4 R 模型等等,它们不是思考模型。你应该认为它们主要是 SFT 模型。现在,如果你有一个需要高级推理等的提示,你应该使用一些思考模型,或者至少尝试一下。但根据经验,在我的很多使用中,当你问一个更简单的问题时,比如一个基于知识的问题,这可能有点大材小用。对于一些事实性问题,没有必要思考 30 秒。所以,对于这些,我有时会默认使用 GPT 40。所以,根据经验,我大约 80-90% 的使用是 GPT 40,当我遇到非常困难的问题时,比如数学和代码等,我会选择思考模型。但那时我必须等待更长的时间,因为它们在思考。所以,你可以在 ChatGPT 上访问这些,也可以在 DeepSeek 上访问。我还想指出,AI Studio.google.com,尽管它看起来非常忙碌,非常丑陋,因为 Google 无法很好地做到这一点,但如果你选择模型并选择 Gemini 2.0 Flash Thinking Experimental 01 21,如果你选择那个,那也是 Google 的一个早期实验性的思考模型。所以,我们可以去那里,给它相同的问题,然后点击运行。这也是一个思考模型,它也会做类似的事情,并得到正确的答案。所以,基本上,Gemini 也提供了一个思考模型。Anthropic 目前不提供思考模型。但基本上,我认为这是这些 LLM 的前沿发展。我认为 RL 是一种令人兴奋的新阶段,但要掌握细节很难。这就是为什么所有这些模型和思考模型目前都是实验性的,截至 2025 年,2025 年初。但这是通过推理来推动这些非常困难问题的性能的前沿发展,这种推理正在这些优化中出现。
我想要提出的另一个联系是,强化学习是学习的一种极其强大的方式的发现,这在人工智能领域并不新鲜。我们已经看到它在围棋游戏中得到证明。DeepMind 开发了 AlphaGo 系统,你可以观看一部关于它的电影,其中系统学会了与顶级人类玩家下围棋。当我们去看 AlphaGo 的基础论文时,在这篇论文中,当我们向下滚动时,我们实际上发现了一个非常有趣的图表,我认为它对我们来说很熟悉。我们正在一个更开放的领域,而不是在围棋这个封闭的特定领域,来解决任意问题。但基本上,他们看到的是,我们也会在 LLM 中看到这一点,随着它的成熟。这是围棋比赛的 ELO 等级。这是李世石,一个极其强大的人类玩家。在这里,他们比较的是监督学习模型和强化学习模型的强度。所以,监督学习模型是在模仿人类专家玩家。所以,如果你只是得到大量专家玩家在围棋中玩过的游戏,并尝试模仿它们,你会变得更好。但然后你会达到顶峰,你永远无法比围棋中的一些顶级玩家,比如李世石,变得更好。你永远无法达到那里,因为你只是在模仿人类玩家。如果你只是模仿人类玩家,你根本无法超越人类玩家。但强化学习的过程要强大得多。在围棋中,强化学习意味着系统正在走那些在经验和统计上导致获胜的棋步。所以,AlphaGo 是一个系统,它通过与自己对弈,并利用强化学习来创建滚球。所以,这里是完全相同的图表,但没有提示。因为没有提示,所以它只是一个固定的围棋游戏。但它尝试了大量的解决方案,它尝试了大量的走法。然后那些导致胜利而不是特定答案的游戏被强化了,它们变得更强。所以,系统基本上是在学习那些在经验和统计上导致赢得比赛的行动序列。而且,强化学习不会受到人类表现的限制。而且,强化学习可以做得更好,甚至可以克服像李世石这样的顶级玩家。所以,也许他们可以运行得更长,他们只是选择在某个时候裁剪它,因为这需要花钱。但这是一个非常强大的强化学习演示。而且,我们才刚刚开始在大型语言模型中看到这个图表的迹象,用于推理问题。所以,仅仅模仿专家不会让我们走得太远。我们需要超越这一点,设置这些小游戏环境,让系统发现推理过程或解决问题的方法,这些方法是独特的,而且效果很好。
现在,关于独特性这一点,请注意,当你进行强化学习时,没有什么能阻止你偏离人类玩游戏的方式。所以,当我们回到 AlphaGo 的搜索时,一个建议的修改叫做“第 37 步”。在 AlphaGo 中,第 37 步指的是一个特定的时间点,当时 AlphaGo 走了一步,没有人类专家会走。所以,人类玩家走这一步的概率被评估为大约万分之一。所以,这是一个非常罕见的举动。但事后看来,这是一个绝妙的举动。所以,AlphaGo 在强化学习过程中发现了某种下棋策略,这是人类不知道的,但事后看来是绝妙的。我推荐这个 YouTube 视频:“李世石 vs AlphaGo 第 37 步反应与分析”。这就是 AlphaGo 走这一步时人们的反应。这是一个非常非常令人惊讶的举动。我以为,我以为这是一个错误。当我看到这个举动时。总之,人们有点疯狂,因为它是一个人类不会走的举动,而 AlphaGo 却走了。因为在它的训练中,这个举动似乎是个好主意。它恰好不是人类会做的事情。所以,这就是强化学习的力量。而且,原则上,我们可以看到它的等价性,如果我们继续扩大这个范式在语言模型中的应用。而那是什么样子,我们还不知道。
所以,用人类无法理解的方式解决问题意味着什么?你如何比人类更擅长推理或思考?你如何超越一个思考的人?也许这意味着发现人类无法创造的类比。
或者,也许它就像一种新的思维策略,有点难想清楚,嗯,也许它是一种全新的语言,实际上甚至不是英语,也许它发现了自己的语言,这种语言在思考方面要好得多,嗯,因为模型不受限制,甚至不像坚持英语那样,嗯,所以也许它需要一种不同的语言来思考,或者它发现了自己的语言,所以原则上,系统的行为定义就少了很多,它可以做任何有效的事情,而且它也可能慢慢偏离其训练数据的分布,而训练数据是英语,但所有这些只有在我们拥有大量多样化的问题集,其中这些策略可以得到改进和完善时才能做到,而这正是目前正在进行的许多前沿 LM 研究,试图创造那些大型且多样化的提示分布,这些都是类游戏环境,在这些环境中,LLM 可以练习它们的思维,嗯,这有点像写作,你知道,这些练习题,我们必须为所有知识领域创建练习题,如果我们有练习题,而且有很多练习题,模型将能够进行强化学习,在它们上面进行强化学习,并创造出这种图表,但在开放思维领域,而不是像围棋这样的封闭领域,强化学习中还有一个部分我想涵盖,那就是在不可验证的领域中学习,所以到目前为止,我们看过的所有问题都属于所谓的“可验证领域”,也就是说,任何候选解决方案我们都可以很容易地根据具体答案进行评分,所以例如答案是三,我们可以非常容易地根据答案三对这些解决方案进行评分,要么我们要求模型将答案框起来,然后我们只检查框中的内容是否与答案相等,或者你也可以使用所谓的 LLM 裁判,所以 LLM 裁判会查看一个解决方案,并得到答案,然后基本上根据解决方案是否与答案一致来对其进行评分,而 LLM 在经验上已经足够好,以至于它们可以相当可靠地做到这一点,所以我们也可以应用这些技术,无论如何,我们都有一个具体的答案,我们只是根据它来检查解决方案,而且我们可以自动完成,没有人为干预,问题是我们无法将这种策略应用于所谓的“不可验证领域”,所以通常这些是例如创意写作任务,比如写一个关于鹈鹕的笑话,或者写一首诗,或者总结一段话,或者类似的东西,在这些领域中,很难对这个问题的不同解决方案进行评分,所以例如写一个关于鹈鹕的笑话,我们可以生成很多不同的笑话,当然这没问题,例如我们可以去 chbt,我们可以让它生成一个关于鹈鹕的笑话,它们嘴里有很多东西,因为它们不会把东西放进背包里,什么?好吧,我们可以尝试别的东西,为什么鹈鹕从不为它们的饮料买单?因为它们总是把账单推给别人,哈哈,好吧,所以这些模型显然不太擅长幽默,实际上我认为这很迷人,因为我认为幽默是秘密地非常困难,而模型有能力,我认为无论如何,你可以想象创造很多笑话,我们面临的问题是如何给它们评分,现在原则上,我们当然可以让人类来查看所有这些笑话,就像我现在所做的那样,问题是,如果你正在进行强化学习,你将进行数千次更新,对于每一次更新,你想查看例如数千个提示,对于每一个提示,你可能需要查看一百个或数千个不同的生成,所以有太多东西需要查看了,所以,原则上,你可以让人类检查所有这些并对它们进行评分,并决定,好吧,也许这个很有趣,也许这个很有趣,这个也很有趣,我们可以对它们进行训练,让模型在笑话方面变得更好一点,至少在鹈鹕方面,问题是这需要太多的人类时间,这是一种不可扩展的策略,我们需要某种自动化的策略来做到这一点,其中一种解决方案是在这篇论文中提出的,它引入了所谓的“人类反馈强化学习”,所以这是当时来自 Open 的一篇论文,其中许多人现在是 Anthropic 的联合创始人,这基本上提出了一种在不可验证领域进行强化学习的方法,所以让我们看看它是如何工作的,这是涉及核心思想的卡通图,正如我所提到的,原生方法是,如果我们有无限的人类时间,我们就可以在这些领域中很好地进行 RL,所以例如,我们可以像往常一样运行 RL,如果我有无限的人类,我只想做,这些只是卡通数字,我想做 1000 次更新,每次更新都将基于 1000 个提示,对于每个提示,我们将有 1000 次回滚需要评分,所以我们可以用这种设置运行 RL,问题是,在这个过程中,我需要运行一次,我需要请一个人评估一个笑话,总共 10 亿次,所以那将是很多人在看非常糟糕的笑话,所以我们不想这样做,所以我们想采用 RLHF 方法,所以,在我们的 RLHF 方法中,我们有点像,核心技巧是间接性,我们将只涉及一点点人类,而我们作弊的方式是,我们基本上训练一个完全独立的神经网络,我们称之为奖励模型,这个神经网络将模仿人类评分,所以我们将请人类对回滚进行评分,然后我们将使用神经网络模仿人类评分,这个神经网络将成为人类偏好的模拟器,现在我们有了一个神经网络模拟器,我们可以针对它进行 RL,所以,而不是问一个真正的人,我们问一个模拟的人对笑话的评分,例如,一旦我们有了模拟器,我们经常是种族主义者,因为我们可以根据需要查询它,而且这是一个完全自动化的过程,我们现在可以针对模拟器进行强化学习,而模拟器正如你所料,不会是一个完美的人,但如果它至少在统计上与人类判断相似,那么你可能会期望这会起作用,而且实际上确实如此,一旦我们有了模拟器,我们就可以进行 RL,一切都很好,所以让我向你展示一张卡通图,这个过程看起来有点像什么,虽然细节并不完全重要,这只是关于它是如何工作的核心思想,所以这里我有一张关于训练奖励模型的假设示例的卡通图,我们有一个提示,比如写一个关于鹈鹕的笑话,然后这里有五个单独的回滚,所以这些都是五个不同的笑话,就像这个一样,现在我们要做的第一件事是,我们将请一个人将这些笑话从最好到最差排序,所以这是,所以这里这个人认为这个笑话是最好的,最有趣的,所以第一名笑话,这是第二名笑话,第三名,第四名和第五名,这是最糟糕的笑话,我们要求人类排序,而不是直接给出分数,因为这稍微容易一些,人类更容易给出排序而不是精确的分数,现在这是模型的监督,人类已经排序了,这就是他们对训练过程的贡献,但现在另外,我们将要求奖励模型对其笑话评分,现在奖励模型是一个完全独立的神经网络,完全独立的神经网络,它也可能是 Transformer,但它不是语言模型,因为它会生成多样化的语言等,它只是一个评分模型,所以奖励模型将输入提示一和提示二,一个候选笑话,所以,这是进入奖励模型的两个输入,所以例如,奖励模型将接受这个提示和这个笑话,现在奖励模型的输出是一个数字,这个数字被认为是分数,它可以从零到一的范围,所以零是最低分,一是最优分,所以这里是一些关于奖励模型在训练过程的某个阶段会给这些笑话打分的例子,0.1 是一个非常低的分数,0.8 是一个非常高的分数,等等,所以现在,我们比较奖励模型给出的分数和人类给出的排序,并且有一个精确的数学方法来计算这个,基本上设置一个损失函数并计算一种对应关系,并根据它更新模型,但我只想给你一个直观的理解,例如,对于第二个笑话,人类认为它是最有趣的,而模型也同意了,对吧?0.8 是一个相对较高的分数,但这个分数应该更高,所以更新后,我们期望这个分数可能会在更新后增长,比如 0.81 或类似的东西,对于这个笑话,他们实际上存在巨大的分歧,因为人类认为这是第二名,但这里的分数只有 0.1,所以这个分数需要更高,所以更新后,这种监督可能会增长更多,比如 0.15 或类似的东西,然后这里人类认为这是最糟糕的笑话,但模型实际上给了它一个相当高的数字,所以你可能会期望更新后,这个分数可能会下降到 3,3.5 或类似的东西,所以基本上我们正在做我们以前做的事情,我们正在使用神经网络训练过程稍微调整模型的预测,我们试图让奖励模型的分数与人类的排序一致,所以,当我们用人类数据更新奖励模型时,它会越来越好地模拟人类提供的分数和排序,然后成为人类偏好的模拟器,然后我们可以针对它进行 RL,但关键是我们不是让人类看 10 亿个笑话,我们可能只看 1000 个提示和每个提示 5 个回滚,所以可能总共 5000 个笑话需要人类查看,他们只是给出排序,然后我们训练模型使其与该排序一致,我跳过了数学细节,但我只想让你理解一个高层次的想法,即这个奖励模型正在做的是,它基本上给了我们这个评分,我们有一种方法来训练它使其与人类的排序一致,这就是 RLHF 的工作原理,好的,这就是大致的想法,我们基本上训练人类的模拟器,并针对这些模拟器进行 RL,现在我想谈谈首先是人类反馈强化学习的优点,第一件事是,这使我们能够运行强化学习,我们知道这是一种非常强大的技术,它使我们能够在任意领域运行,包括那些不可验证的领域,比如摘要、诗歌创作、笑话创作或任何其他创意写作,在数学和代码等领域之外,根据经验,当我们实际应用 RLHF 时,我们看到这是一种提高模型性能的方法,而且我有一个最好的解释,为什么会这样,但我实际上不知道这是否非常确凿,为什么会这样,你可以凭经验观察到,当你正确地进行 RLHF 时,你得到的模型就是稍微好一点,但至于为什么,我认为不那么清楚,这是我的最佳猜测,我的最佳猜测是,这可能主要是由于判别器-生成器差距,这意味着在许多情况下,区分比生成对人类来说要容易得多,特别是例如,当我们进行监督微调时,我们要求人类生成理想的助手响应,在许多情况下,正如我所展示的,理想的响应很容易写,但在许多情况下可能不是,例如在摘要、诗歌创作或笑话创作中,你作为人类标注者,如何给出理想的响应?在这些情况下,需要人类的创意写作来做到这一点,而 RLHF 巧妙地绕过了这一点,因为我们要求人们一个更容易得多的问题,作为数据标注者,他们不被要求直接写诗,他们只是得到模型生成的五个诗歌,然后他们被要求对它们进行排序,所以这对人类标注者来说是一个更容易的任务,所以我认为这基本上允许你获得更高准确度的数据,因为我们不要求人们进行生成任务,这可能非常困难,比如我们不要求他们进行创意写作,我们只是试图让他们区分创意写作,并找到最好的,这就是人类提供的信号,只是排序,这就是他们对系统的输入,然后 RLHF 中的系统会发现那些会得到人类好评的响应类型,所以这种间接性允许模型变得更好一点,所以这就是 RLHF 的优点,它使我们能够运行 RL,它在经验上产生了更好的模型,并且它允许人们贡献他们的监督,即使不必做极其困难的任务,在写出理想响应的情况下,不幸的是,RLHF 也带来了显著的缺点,所以,主要的缺点是,我们实际上是在进行强化学习,而不是针对人类和实际的人类判断,而是针对一种有损耗的人类模拟,而这种有损耗的模拟可能会误导,因为它只是一个模拟,它只是一个输出分数的语言模型,它可能无法完美地反映一个真正的人类大脑在所有可能的不同情况下的意见,所以这是第一点,实际上还有更微妙和更阴险的事情正在发生,它极大地阻碍了 RLHF 作为一种我们可以真正扩展到非常智能的系统的技术,那就是强化学习非常擅长发现一种方法来欺骗模型,欺骗模拟,这个我们正在构建的奖励模型,它给出分数,这些模型是 Transformer,这些 Transformer 是巨大的神经网络,它们拥有数十亿个参数,它们模仿人类,但它们是以一种模拟的方式进行的,现在的问题是,这些是巨大的复杂系统,这里有数十亿个参数,它们输出一个单一的分数,事实证明,有方法可以欺骗这些模型,你可以找到一些不是其训练集一部分的输入,这些输入会获得非常高的分数,但却是虚假的,所以你经常发现,如果你运行 RLHF 很长时间,例如,如果我们进行 1000 次更新,这就像很多更新,你可能会期望你的笑话变得更好,而且你会得到关于鹈鹕的真正精彩的笑话,但事实并非如此,实际上发生的是,在前几百步中,关于鹈鹕的笑话可能有所改善,然后它们会急剧下降,你开始得到极其荒谬的结果,例如,关于鹈鹕的顶级笑话开始是,这毫无意义,当你看到它时,为什么这应该是一个顶级笑话,但当你把“the”代入你的奖励模型时,你期望得到零分,但实际上奖励模型喜欢这个笑话,它会告诉你,“the the the the”是一个 1.0 的分数,这是一个顶级笑话,这毫无意义,但这是因为这些模型只是人类的模拟,它们是巨大的神经网络,你可以找到底部的输入,它们会进入输入空间的一部分,导致荒谬的结果,这些例子被称为对抗性例子,我不会深入讨论这个话题,但这些是模型的对抗性输入,它们是特定的微小输入,它们会进入模型的缝隙并产生荒谬的顶部结果,现在你可能会想象这样做,你说,好吧,“the the the”显然不是 1 分,它显然是一个低分,所以让我们把“the the the the”添加到数据集中,并给它一个极其糟糕的排序,比如 5 分,事实上,你的模型会学到“the”应该是一个非常低的分数,它会给它 0 分,问题是,基本上总会有无限数量的荒谬的对抗性例子隐藏在模型中,如果你多次迭代这个过程,并不断地给你的奖励模型添加荒谬的东西并给它非常低的分数,你永远不会赢,你可以做很多轮,强化学习如果运行足够长,总是会找到欺骗模型的方法,它会发现对抗性例子,它会得到非常高的分数,带有荒谬的结果,根本原因是我们评分函数是一个巨大的神经网络,而 RL 非常擅长找到欺骗它的方法,长话短说,你总是运行 RLHF,可能几百次更新,模型正在变得更好,然后你必须停止它,你不能针对这个奖励模型运行太久,因为优化将开始欺骗它,你基本上停止它,然后你就完成了,你可以改进奖励模型,但你最终会遇到这些情况,所以 RLHF,我通常说的是,RLHF 不是 RL,我的意思是,RLHF 当然是 RL,但它不是神奇意义上的 RL,这不是你可以无限期运行的 RL,像你得到正确答案这样的问题,你不能轻易地欺骗它,要么你得到了正确答案,要么没有,评分函数要简单得多,你只是看框中的区域,看看结果是否正确,所以很难欺骗这些函数,但欺骗奖励模型是可能的,在这些可验证的领域中,你可以无限期地运行 RL,你可以运行数万次,数十万次,发现我们可能永远不会想到的各种疯狂的策略,在所有这些围棋问题中,没有办法赢得比赛或输掉比赛,我们有一个完美的模拟器,我们知道所有不同的棋子是如何放置的,我们可以计算出某人是否赢了,没有办法欺骗它,所以你可以无限期地运行 RL,你最终可以击败甚至李世石,但对于像这样的模型,它们是可以被欺骗的,你不能无限期地重复这个过程,所以我认为 RLHF 不是真正的 RL,因为奖励函数是可以被欺骗的,所以它更像是微调的领域,它是一个小小的改进,但它不是一个从根本上设置正确的东西,你可以插入更多的计算,运行更长时间,并获得更好的神奇结果,所以它不是那种意义上的 RL,它不是那种缺乏魔力的 RL,它可以找到你的模型并获得更好的性能,事实上,如果我们回到 chatgpt,GPT 40 模型已经通过了 RLHF,因为它效果很好,但它不是那种意义上的 RL,RLHF 就像一个小小的微调,稍微改进了你的模型,也许这就是我想象的方式,好的,这就是我想要涵盖的大部分技术内容,我带你了解了训练这些模型的三大阶段和范式:预训练、监督微调和强化学习,我向你展示了它们大致对应于我们教孩子的过程,特别是我们讨论了预训练就像是阅读和暴露的基本知识获取,监督微调是查看大量示例并模仿专家和练习题的过程,唯一的区别是我们现在需要有效地为 LLM 和 AI 编写所有人类知识学科的教科书,以及在所有我们希望它们工作的领域,如代码和数学,以及基本上所有其他学科,所以我们正在为它们编写教科书,改进我所介绍的所有高级算法,然后当然,在规模化和高效地训练这些模型方面做得非常好,特别是,我没有深入太多细节,但这些是极其庞大和复杂的分布式工作,必须在数万甚至数十万个 GPU 上运行,而工程方面的工作确实是计算机在此规模上可能达到的最先进水平,所以我没有过多地涵盖这方面,但这是非常严肃的,它们是潜在的,所有这些简单的算法最终,我还稍微谈到了这些模型的“心智理论”,我想让你 takeaway 的是,这些模型非常好,但它们是你工作的极其有用的工具,你不应该完全信任它们,我给你看了一些例子,即使我们对幻觉有缓解措施,模型也不是完美的,它们仍然会产生幻觉,随着时间的推移,它已经变得更好,并且会继续变得更好,但它们会产生幻觉,换句话说,除此之外,我还涵盖了我称之为 LLM 能力的“瑞士奶酪”模型,你应该在脑海中记住,模型在许多不同的学科中都非常出色,但有时会在一些独特的案例中随机失败,例如,9.11 比 9.9 大还是小?模型不知道,但同时它可以解决奥林匹克竞赛问题,所以这是瑞士奶酪中的一个洞,还有很多,你不希望绊倒它们,所以不要将这些模型视为不可错过的模型,检查它们的工作,将它们用作工具,用它们来获得灵感,用它们来写初稿,但要与它们作为工具一起工作,并最终对你工作的成果负责,这大致就是我想说的,这就是它们的训练方式,这就是它们是什么,现在让我们转向这些模型的一些未来能力,可能即将到来的是什么,以及在哪里可以找到这些模型,我有一些关于你可以期待的即将到来的事情的要点,你会注意到的第一件事是,模型将迅速变得多模态,我上面谈到的所有内容都与文本有关,但很快我们将拥有不仅能处理文本,还能原生且轻松地处理音频的 LLM,所以它们可以听和说,还有图像,所以它们可以看到和绘画,我们已经看到了所有这些的开端,但这将在语言模型内部原生完成,这将实现自然的对话,粗略地说,这与我们上面涵盖的所有内容没有区别的原因是,作为基础,你可以将音频和图像进行标记化,并应用我们上面讨论过的所有方法的完全相同的方法,所以这不是根本性的改变,它只是我们必须添加一些标记,例如,对于音频标记化,我们可以查看音频信号的频谱图的切片,我们可以对其进行标记化,然后添加更多代表音频的标记,并将它们添加到上下文窗口中,并像上面一样进行训练,图像也是如此,我们可以使用补丁,我们可以单独标记化补丁,然后图像是什么?图像只是一个标记序列,这实际上是可行的,并且有很多早期工作在这方面,所以我们可以创建代表音频、图像和文本的标记流,并将它们交错处理,并在单个模型中同时处理它们,所以这是一个多模态的例子,第二,人们非常感兴趣的是,目前大部分工作是我们把单独的任务“银盘”地交给模型,比如“请帮我解决这个任务”,模型会做这个小任务,但我们仍然需要组织一系列连贯的任务来执行工作,而模型尚未达到能够长时间以连贯的、纠错的方式执行此操作的能力,所以它们还不能完全将任务串联起来执行这些更长的作业,但它们正在朝着这个方向发展,并且随着时间的推移正在改进,但很可能发生的是,我们将开始看到所谓的“代理”,它们会随着时间的推移执行任务,你监督它们,你观察它们的工作,它们会偶尔报告进展等等,所以我们将看到更多长期的代理任务,这些任务不会只花费几秒钟的响应时间,而是花费数十秒甚至几分钟或几小时,但正如我们上面所讨论的,这些模型并非不可错过的,所以所有这些都需要监督,例如,在工厂里,人们谈论自动化的人机比,我认为我们将在数字空间中看到类似的东西,我们将谈论人与代理的比例,人类成为数字领域代理任务的更多监督者,接下来,我认为一切都将变得更加普遍和隐形,它就像集成到工具中,无处不在,此外,就像计算机使用一样,目前这些模型无法代表你采取行动,但我认为这是一个单独的要点,如果你看到了 chpt 推出操作员,那就是一个早期例子,你可以将控制权交给模型来执行你代表的键盘和鼠标操作,这也是我认为非常有趣的事情,我在这里的最后一点只是一个普遍评论,这个领域仍然有很多潜在的研究要做,其中一个例子是关于测试时训练的东西,所以请记住,我们上面所做的一切,以及我们所讨论的,有两个主要阶段,首先是训练阶段,我们调整模型的参数以很好地执行任务,一旦我们得到参数,我们就固定它们,然后我们部署模型进行推理,从那里开始,模型是固定的,它不再改变,它不会从它正在做的所有事情中学习,在测试时,它是一个固定的参数数量,唯一改变的是上下文窗口内的标记,所以模型能够访问的唯一类型的学习或测试时学习是其动态可调的上下文窗口的上下文学习,取决于它在测试时做什么,但我认为这仍然与能够实际学习的人类不同,特别是当你睡觉时,例如,你的大脑会更新你的参数,对吗?所以目前这些模型和工具中没有这样的东西,所以还有很多更奇怪的想法我认为仍然需要探索,特别是,我认为这将是必要的,因为上下文窗口是有限且宝贵的资源,特别是当我们开始处理非常长期的多模态任务时,我们将输入视频,而这些标记窗口将变得非常大,不是数千甚至数十万,而是远远超出这个范围,而我们目前唯一可用的技巧是延长上下文窗口,但我认为这种方法本身将无法扩展到实际的长期任务,这些任务是多模态的,并且随着时间的推移,所以我认为在某些情况下需要新的想法,在这些情况下,这些任务将需要非常长的上下文,所以这些是一些你可以期待的即将到来的事情的例子,现在让我们转向你实际上可以跟踪这些进展的地方,并且,你知道,跟上该领域的最新进展,所以我想说,我一直用来保持更新的三个资源是,第一,El Marina,所以让我向你展示 El Marina,这基本上是一个 LLM 排行榜,它对所有顶级模型进行排名,排名基于人类比较,人类提示这些模型,他们可以判断哪个模型给出了更好的答案,他们不知道哪个模型是哪个,他们只是在看哪个模型是更好的答案,你可以计算排名,然后你得到一些结果,所以你在这里看到的是,你可以看到不同的组织,比如 Google Gemini,例如,它们生产这些模型,当你点击其中任何一个时,它会带你到托管该模型的地点,然后在这里我们看到 Google 目前名列前茅,OpenAI 紧随其后,我们看到 Deepseek 位居第三,所以这很重要,因为最后一列是许可证,Deepseek 是一个 MIT 许可的模型,它是开放权重的,任何人都可以使用这些权重,任何人都可以下载它们,任何人都可以托管自己的 Deepseek 版本,并且可以以他们喜欢的方式使用它,所以它不是一个你无法访问的专有模型,它基本上是一个开放权重的发布,所以一个如此强大的模型以开放权重发布是前所未有的,所以团队做得非常酷,接下来我们还有一些来自 Google 和 OpenAI 的模型,然后当你继续向下滚动时,你会看到一些其他熟悉的竞争者,所以 xai 在这里,Anthropic 的 Sonnet 在这里排名第 14 位,然后 Meta 的 Llama 在这里,所以 Llama 类似于 Deepseek,它是一个开放权重的模型,所以,但它在这里而不是在那里,现在我要说的是,这个排行榜很长一段时间以来都很好,我确实认为在过去几个月里,它变得有点被操纵了,而且我不再像以前那样信任它了,我认为,根据经验,我觉得很多人,例如,正在使用 Anthropic 的 Sonnet,它是一个非常好的模型,但它在这里排名第 14 位,而相反,我认为使用 Gemini 的人不多,但它的排名非常高,所以我认为把它作为一个初步的参考,但尝试几个模型来完成你的任务,看看哪个模型效果更好,第二件事我想指出的是 AI 新闻通讯,所以 AI 新闻命名不是很富有创意,但它是一个非常好的通讯,由 Swix 和朋友们制作,感谢你们的维护,它对我非常有帮助,因为它非常全面,所以如果你去档案,你会看到它几乎每隔一天都会发布,而且它非常全面,其中一些是由人类撰写和策划的,但很多都是用 LLM 自动构建的,所以你会看到这些非常全面,你可能不会错过任何重大事件,如果你仔细阅读的话,当然你可能不会仔细阅读,因为它太长了,但我确实认为这些顶部的摘要非常好,而且我认为有一些人类监督,所以这对我非常有帮助,最后我想指出的是 X 和 Twitter,很多 AI 都发生在 X 上,所以我会关注你喜欢和信任的人,并在 X 上获取所有最新最好的信息,所以这些是我多年来一直有效的几个主要地方,最后,关于在哪里可以找到模型以及在哪里可以使用它们的一些话,第一个我想说的是,对于任何最大的专有模型,你只需要去那个 LM 提供商的网站,所以例如,对于 OpenAI,那就是 chat,我相信它现在可以工作了,所以这是 OpenAI 的,或者你知道,对于 Gemini,我认为是 gem.google.com 或 AI Studio,我认为他们有两个原因,我不理解,没有人理解,对于像 Deepseek CL 等开放权重的模型,你必须去某种 LM 的推理提供商,所以我最喜欢的一个是 together.ai,我向你展示了,当你去 together.ai 的 playground 时,你可以选择很多不同的模型,所有这些都是不同类型的开放模型,你可以在这里与它们交谈,例如,现在如果你想使用基础模型,比如,你知道,基础模型,我认为在这里找到基础模型并不那么常见,它们都针对助手和聊天,所以我认为即使在这里,我也看不到基础模型,所以对于基础模型,我通常去 hyperbolic,因为它们服务于我的 llama 3.1 基础模型,我喜欢那个模型,你可以在这里与它交谈,所以据我所知,这是一个很好的基础模型的地方,我希望更多的人托管基础模型,因为它们在某些情况下很有用且有趣,最后,你也可以选择一些较小的模型,并在本地运行它们,例如,Deepseek 的最大模型你无法在你的 MacBook 上本地运行,但有 Deepseek 模型的一些较小版本,它们被称为蒸馏模型,而且你也可以以较小的精度运行这些模型,而不是像 Deepseek 的 fp8 或 llama 的 bf16 那样的原生精度,而是远低于那个,如果你不完全理解这些细节,不用担心,但你可以运行一些经过蒸馏的较小版本,然后在更低的精度下运行,然后你可以将它们放在你的电脑上,所以你可以在你的笔记本电脑上运行相当不错的模型,我最喜欢的地方我认为我通常去的是 LM Studio,它基本上是一个应用程序,你可以下载,而且我认为它看起来非常丑陋,而且我不喜欢它显示所有这些模型,它们基本上没什么用,每个人都只想运行 Deepseek,所以我不知道为什么他们给你 500 种不同类型的模型,它们很难搜索,你必须选择不同的蒸馏版本和不同的精度,这都很令人困惑,但一旦你真正理解了它是如何工作的,而那是一个完全独立的视频,那么你就可以加载一个模型,比如我在这里加载了一个 llama 3 2 instruct 1 billion,你可以和它交谈,所以我问了鹈鹕笑话,我可以再问一个,它又给了我一个,等等,这里发生的一切都是在你的电脑本地进行的,我们实际上没有去任何其他地方,这正在 MacBook Pro 的 GPU 上运行,所以这非常好,你可以然后当你完成时弹出模型,这样就可以释放 RAM,所以 LM Studio 可能是我最喜欢的一个,尽管我认为它有很多 UIUX 问题,而且它几乎是面向专业人士的,但如果你看一些 YouTube 视频,我认为你可以弄清楚如何使用这个界面,所以这是关于在哪里找到它们的几句话,现在让我回到我们开始的地方,问题是,当我们访问 chashi pta.com 并输入某种查询并点击“go”时,到底发生了什么?我们看到了什么?我们正在和谁交谈?它是如何工作的?我希望这个视频让你对这些模型的训练方式以及返回的内容有所了解,特别是,我们现在知道你的查询被分成标记,所以我们去 tokenizer,这里是用户查询的格式中的位置,我们基本上把我们的查询放在那里,所以我们的查询进入了我们在这里讨论的对话协议格式,这是我们维护对话对象的方式,这被插入到那里,然后这一切最终只是一个标记序列,在底层是一个一维标记序列,Chachi PT 看到这个标记序列,然后当我们点击“go”时,它基本上继续向这个列表中添加标记,它继续这个序列,它就像一个标记自动完成,特别是它给了我们这个响应,所以我们可以基本上把它放在这里,我们看到它继续的标记,这些是它继续的标记,大致来说,现在的问题是,为什么这些是模型响应的标记?这些标记是什么?它们来自哪里?我们正在和谁交谈?我们如何编程这个系统?这就是我们改变方向并讨论其底层部分的地方,这个过程的第一阶段,有三个阶段,是预训练阶段,它基本上是关于从互联网到这个神经网络的参数的知识获取,所以神经网络内化了互联网上的大量知识,但个性真正体现在监督微调的过程中,所以这里发生的是,基本上像 OpenAI 这样的公司会策划一个大型对话数据集,比如 100 万次跨越各种主题的对话,并且会有人类和助手之间的对话,即使在这个整个过程中使用了大量的合成数据生成和大量的 LLM 帮助等等,但根本上这是一个由许多人类参与的人类数据策划任务,特别是这些人类是 OpenAI 雇佣的数据标注者,他们接受了他们学习的标注说明,他们的任务是为任何任意提示创建理想的助手响应,所以他们通过示例教授神经网络如何响应提示,那么如何看待这里返回的内容呢?我认为正确的思考方式是,这是 OpenAI 数据标注者的神经网络模拟,就好像我把这个查询给了 OpenAI 的数据标注者,这个数据标注者首先阅读了 OpenAI 的所有标注说明,然后花了两个小时写出这个查询的理想助手响应,并把它给我,现在我们实际上并没有这样做,因为我们没有等两个小时,所以我们在这里得到的是这个过程的神经网络模拟,我们必须记住,这些神经网络的功能不像人类大脑,它们是不同的,对它们来说容易或困难的事情与对人类来说容易或困难的事情不同,所以我们实际上只是得到了一个模拟,所以在这里我展示了这是一个标记流,这基本上是神经网络,中间有很多激活和神经元,这是一个固定的数学表达式,混合了来自标记的输入和模型的参数,它们混合在一起,为你提供序列中的下一个标记,但这是每次标记计算的有限计算量,所以这是某种有损耗的人类模拟,它受到这种限制,所以人类写的东西,语言模型只是在标记层面模仿,每次标记和序列只有这种特定的计算,我们还看到,由于这一点以及认知差异,模型会在各种方式上受到影响,你必须非常小心地使用它们,例如,我们看到它们会受到幻觉的影响,而且我们还对 LLM 能力的“瑞士奶酪”模型有感觉,基本上奶酪里有洞,有时模型会随意做一些愚蠢的事情,所以即使它们做了很多神奇的事情,有时它们就是做不到,也许你没有给它们足够的思考时间,也许它们会编造东西,因为它们的心理算术会中断,也许它们突然无法计算字母数量,或者也许它们无法告诉你 9.11 比 9.9 小,这看起来很愚蠢,所以这是一个瑞士奶酪能力,我们必须小心,我们看到了原因,但根本上这就是我们如何看待返回的内容,它再次是人类数据标注者遵循 OpenAI 标注说明的神经网络模拟,这就是我们得到的回报,现在我认为当你真正去接触像 o03 mini 这样的思考模型时,情况会发生一些变化,原因在于 GPT 40 基本上不做强化学习,它确实做了 RLHF,但我告诉你 RLHF 不是 RL,里面没有魔法的时间,它只是稍微微调一下,这就是看待它的方式,但这些思考模型确实使用了 RL,它们经历了第三个阶段,完善它们的思考过程,并发现新的思维策略和解决问题的方案,这些方案看起来有点像你脑海中的内部独白,它们在像 OpenAI 这样的公司创建和策划的大量练习题上进行练习,然后提供给 LLM,所以当我来这里和一个思考模型交谈并输入这个问题时,我们现在看到的不再仅仅是人类数据标注者的直接模拟,这实际上是新的、独特的和有趣的,当然 OpenAI 没有向我们展示底层的思考和推理链,但我们知道这样的东西存在,这是它的总结,我们在这里得到的不只是模仿人类数据标注者,它实际上是新的、有趣的,并且令人兴奋的,因为它是一种在模拟中出现的思维功能,它不仅仅是模仿人类数据标注者,它来自强化学习过程,所以在这里,我们当然没有给它闪耀的机会,因为这不是数学或推理问题,这只是某种创意写作问题,粗略地说,我认为这是一个开放的问题,即在可验证领域中开发的思维策略是否能够转移并推广到不可验证的其他领域,例如创意写作,这种转移的程度在领域内是未知的,所以我们不确定我们是否能够对所有非常可验证的东西进行 RL,并看到它对像这个提示这样的不可验证的东西的好处,这是一个开放的问题,另一个有趣的事情是,这里的强化学习仍然太新、太原始、太初级了,所以我们只看到了伟大的迹象,在推理问题中,我们看到的东西原则上能够做到类似“第 37 步”的事情,但不是在围棋游戏中,而是在开放领域的思维和问题解决中,原则上,这种范式能够做到一些真正酷、新颖和令人兴奋的事情,甚至是没有人类想过的事情,原则上,这些模型能够进行类比,没有人拥有过,所以我认为这些模型的存在非常令人兴奋,但同样,这还很早,目前它们是原始模型,它们将在可验证的领域,如数学和代码等领域大放异彩,所以玩起来、思考和使用都非常有趣,大致就是这样,我想说这些是目前可用的主要内容,我想说总的来说,这是一个非常激动人心的时期,我个人每天都使用这些模型,每天几十次或几百次,因为它们极大地加速了我的工作,我认为很多人也看到了同样的情况,我认为这些模型将创造巨大的财富,要意识到它们的一些缺点,即使是 RL 模型,它们也会遭受一些这些缺点,将它们用作工具箱中的工具,不要完全信任它们,因为它们会随机做愚蠢的事情,它们会随机产生幻觉,它们会随机跳过一些心理算术而做错,它们随机无法计数或类似的事情,所以将它们用作工具箱中的工具,检查它们的工作,并拥有你工作的成果,但将它们用于灵感,用于初稿,问它们问题,但始终检查和验证,如果你这样做,你将在你的工作中取得巨大成功,所以希望这个视频对你有用且有趣,希望你玩得开心,而且它已经很长了,所以我为此道歉,但希望它有用,是的,稍后见。