首页   

Andrej的最新AI课: 大语言模型LLM深入详解 | 5万字完整版·附视频

阿里研究院  · 电商  · 12 小时前

正文

以下文章来源于Web3天空之城  ,作者天空之城城主

整理:Web3天空之城

【城主说】在这个星球上能把大模型原理讲得最深入浅出的大神,私以为OpenAI创始人之一的Andrej Karpathy是毫无疑问的最佳候选人之一。看过他之前讲座的同学一定能赞同这个说法。

Andrej昨天放出了一个3.5小时的长篇视频讲座,如大神原话,在这个讲座里,他面向大众完整讨论了ChatGPT 及相关产品的技术原理 ,深入探讨驱动 ChatGPT 及相关产品的 LLM 人工智能技术。整个讲座涵盖了模型开发的完整训练流程,以及如何理解其“心理模型”,以及如何在实际应用中最好地利用它们。

Andrej大约一年前已经制作了一个“LLM 简介”视频,但他认为那只是对一次随机演讲的重新录制,所以希望制作一个更全面、更详尽的版本。

这个讲座刚发布到网上,但已经被誉为"可能是最好大模型的深入科普”,基本上,城主认为如果想要从零深入了解大语言模型,这就是你能找到的最好资料了。

这个讲座的完整中英视频可以在本城B站观看,有兴趣的同学可以配合服用:【大神Andrej Karpathy最新讲座:深入探讨ChatGPT类大语言模型-哔哩哔哩】 https://b23.tv/pjyRR5g

本城整理了讲座全文共5万字。讲座并不含特别的ppt,直接学习文字版也非常顺畅。推荐给想认真了解学习大模型的各位。

最后值得一提的是,这个讲座里, Andrej特别点赞了DeepSeek开源R1和公开论文的重要性,或许这正是激励他做出这个完整讲座的原因之一:

“许多公司,例如OpenAI等大型语言模型提供商,内部已尝试使用强化学习微调大型语言模型,但鲜有公开讨论。所有工作都在公司内部进行。

DeepSeek论文的意义在此凸显。这篇来自DeepSeek AI公司的论文,首次公开讨论了大型语言模型的强化学习微调,及其重要性以及如何提升模型的推理能力。这篇论文重新激发了公众对使用强化学习训练大型语言模型的兴趣,并提供了许多复制结果及模型实际运行所需的细节信息。”

讲座中涉及的各个引用链接:

ChatGPT:https://chatgpt.com/

FineWeb (预训练数据集):

https://huggingface.co/spaces/HuggingFaceFW/blogpost-fineweb-v1

Tiktokenizer:https://tiktokenizer.vercel.app/

Transformer神经网络3D可视化工具:https://bbycroft.net/llm

llm.c 让我们复现GPT-2:

https://github.com/karpathy/llm.c/discussions/677

Meta的Llama 3论文:https://arxiv.org/abs/2407.21783

Hyperbolic,用于基础模型的推理:https://app.hyperbolic.xyz/

InstructGPT关于SFT(监督微调)的论文:

https://arxiv.org/abs/2203.02155

HuggingFace推理playground:

https://huggingface.co/spaces/huggingface/inference-playground

DeepSeek-R1论文:https://arxiv.org/abs/2501.12948  

TogetherAI Playground,用于开放模型推理:

https://api.together.xyz/playground

AlphaGo论文 (PDF):

https://discovery.ucl.ac.uk/id/eprint/10045895/1/agz_unformatted_nature.pdf

AlphaGo第37步视频:https://www.youtube.com/watch?v=HT-UZkiOLv8&t=0s

LM Arena,用于模型排名:https://lmarena.ai/

AI新闻通讯:https://buttondown.com/ainews

LMStudio,用于本地推理:https://lmstudio.ai/

我在视频中使用的可视化UI:https://excalidraw.com/

我们构建的Excalidraw的特定文件:

https://drive.google.com/file/d/1EZh5hNDzxMMy05uLhVryk061QYQGTxiN/view?usp=sharing

Eureka Labs和本视频的Discord频道: 

https://discord.gg/3zy8kqD9Cp


-讲座全文·天空之城整理版-


大家好。我一直想制作这个视频,它将全面但通俗地介绍大型语言模型,例如ChatGPT。我的目标是帮助大家理解这项工具,形成相应的思维模型。它在某些方面令人惊叹,但在其他方面表现不佳,并且还存在许多值得关注的问题。

那么,这个文本框背后究竟是什么?你可以输入任何内容并按下回车键,但我们应该输入什么?生成的文字是什么?它是如何工作的?你究竟在与什么对话?我希望在这个视频中涵盖所有这些主题,完整地讲解这些模型的构建过程,并力求让所有内容都易于理解。

让我们首先看看如何构建像ChatGPT这样的模型,同时我也会讨论这些工具的认知心理学意义。让我们开始构建ChatGPT。这将分为多个阶段,按顺序进行。第一阶段是预训练阶段。

预训练阶段的第一步是下载和处理互联网数据。为了了解这大致是什么样子,我建议您访问Hugging Face公司收集、创建和整理了一个名为FineWeb的数据集,这篇博文详细介绍了他们的构建过程。所有主要的LLM提供商,例如OpenAI、Anthropic和Google等,都会在其内部拥有类似FineWeb数据集的东西。

我们想要从互联网上获取大量公开来源的文本数据。我们需要海量的高质量、多样化的文档,因为我们希望这些模型拥有丰富的知识。因此,我们需要高质量文档的大量多样性,并且需要很多很多这样的文档。实现这一点相当复杂,需要多个阶段才能完成。让我们来看一下其中一些阶段。

我想指出的是,例如FineWeb数据集,它相当能代表您在生产级应用程序中看到的内容,最终仅占用大约44TB的磁盘空间。这几乎可以存储在一个今天的单个硬盘上。所以最终这并不是一个巨大的数据量,即使互联网非常庞大,我们处理的是文本数据,并且我们也进行了积极的过滤。在这个例子中,我们最终得到了大约44TB的数据。

让我们来看一下这些数据是什么样的,以及这些步骤中的一些内容。对于许多这样的工作,起点以及最终贡献大部分数据的……

数据源自Common Crawl,这是一个自2007年以来持续扫描互联网的组织。截至2024年,Common Crawl已索引27亿个网页,其爬虫不断在互联网上爬取信息。这通常是从种子网页开始,遵循所有链接,不断索引信息,最终积累大量互联网数据,成为许多此类工作的起点。

Common Crawl数据较为原始,需要进行多阶段过滤。首先是URL过滤,即使用域名黑名单过滤掉恶意软件、垃圾邮件、营销、种族主义、成人等网站,这些网站不会被纳入数据集。

其次是文本提取。爬虫保存的是网页的原始HTML,包含标记、CSS等计算机代码。我们需要提取网页文本内容,因此需要进行过滤和处理,提取优质内容。

然后是语言过滤。例如,FineWeb使用语言分类器,只保留英语比例超过65%的网页。这是一个设计决策,不同的公司会选择不同的语言比例,这会影响模型的多语言性能。FineWeb专注于英语,其训练出的语言模型在英语方面表现出色,但在其他语言方面可能较弱。

除了以上步骤,还有其他过滤步骤,例如重复数据删除和删除个人身份信息(PII),如地址、社会安全号码等。这些步骤旨在清洗数据,确保数据集的质量和安全性。

但这确实是预处理中相当重要的一部分,最终你会得到,例如,FineWeb数据集。点击它后,可以看到一些实际效果示例,任何人都可以在Hugging Phase网页上下载它。这里有一些最终出现在训练集中的文本示例,例如一篇关于2012年龙卷风的文章,以及一些关于2012年龙卷风及其发生情况的内容。另一个例子是一篇关于人体内两个像9伏电池大小的黄色肾上腺的医学文章,有点奇怪。可以把这些想象成互联网上的网页,只是以各种方式过滤了文本。

现在我们有了大量的文本,40TB,这将成为下一步的起点。我想让你们直观地了解我们现在所处的位置,所以我取了这里的前200个网页——记住我们有很多网页——我只是把所有文本放在一起,连接起来。这就是我们最终得到的结果:这些原始文本,原始的互联网文本,即使在这200个网页中也有大量文本。我可以在此处继续缩小比例,我们只是拥有这幅巨大的文本数据织锦。这些文本数据包含所有这些模式,我们现在要做的是,我们要开始使用这些数据训练神经网络,以便神经网络能够内化并模拟这些文本的流动方式。所以我们只是拥有这巨大的文本结构,现在我们想要获得能够模仿它的神经网络。

好,现在在我们把文本输入神经网络之前,我们必须决定如何表示这些文本以及如何将其输入。现在,我们的这项技术对于这些神经网络的工作方式是,它们期望一个一维符号序列,并且它们需要一组有限的可能的符号。因此,我们必须决定符号是什么,然后我们必须将我们的数据表示为这些符号的一维序列。所以现在我们拥有一维文本序列,它从这里开始,然后到那里,再到这儿,等等。所以这是一个一维序列,尽管在我的显示器上,它当然是二维布局的,但是它是从左到右,从上到下,对吧?所以它是一个文本的一维序列。

现在,既然是计算机,当然这里有一个底层的表示。所以我如果使用所谓的UTF-8编码这个文本,那么我就可以得到与计算机中这个文本对应的原始位。看起来像这样。所以事实证明,例如,这里最前面的这个条形代表前八位,作为一个例子。那么这个东西是什么呢,对吧?从某种意义上说,这就是我们正在寻找的表示。我们只有两种可能的符号,0和1,并且我们有一个非常长的序列,对吧?事实证明,在我们的神经网络中,这个序列长度实际上是一种非常有限和宝贵的资源,我们实际上不希望出现仅由两个符号组成的极长序列。

相反,我们想要权衡词汇表符号大小和由此产生的序列长度。我们不希望只有两个符号和极长的序列,而是需要更多符号和更短的序列。

一种简化序列的方法是将连续的八位比特组合成一个字节。由于比特只有开或关两种状态,八位比特共有256种组合。因此,可以将序列重新表示为字节序列,长度缩短八倍,但符号数量增加到256个(0到255)。 我建议不要将这些数字视为数值,而应视为唯一的ID或符号,例如独特的emoji。

事实上,先进的语言模型会进一步缩短序列长度,因为增加词汇表符号是宝贵的资源。方法是运行字节对编码算法,该算法寻找常见的连续字节或符号,例如“116, 32”。将这类对组合成一个新的符号(例如ID为256),并替换所有出现的“116, 32”。 此算法可以迭代多次,每次都减少序列长度并增加符号数量。实践中,一个不错的词汇量大小约为100,000个符号,例如GPT-4使用100,277个符号。将原始文本转换为这些符号(或标记)的过程称为标记化。

接下来,我们看看GPT-4如何进行标记化,将文本转换为标记,以及将标记转换回文本的过程。 我推荐一个网站TickTokenizer来探索标记表示,选择CL100K Base(GPT-4基础模型标记器)。在左侧输入文本,它会显示标记化结果。例如,“你好,世界”被标记化为两个词元:“你好”(ID为15339)和“世界”(ID为1917)。 将这两个词元连接起来,仍然得到两个词元,而非一个。

后跟词元“你好,世界”(不包含“H”)。如果我在“你好”和“世界”之间添加两个空格,这将是不同的分词结果。这儿有一个新的词元220。好吧,你可以自己尝试一下,看看会发生什么。还要记住,这是区分大小写的。所以如果这是一个大写的“H”,那就是其他的东西了。或者如果它是“你好,世界”,那么实际上它最终会变成三个词元,因为只有两个词元。是的,你可以玩一下这个,从而对这些标记的工作方式有一个直观的感受。我们稍后会在视频中再次回到标记化部分。

现在,我只是想让你看看这个网站。我想让你看看这段文本最终会被GPT-4解读成什么样子。例如,如果我取其中一行,这就是GPT-4看到的样子。所以这段文本将是一个长度为62的序列。这就是这里的序列。这就是文本块与这些符号的对应关系。同样,这里有100,277个可能的符号。现在我们有了这些符号的一维序列。是的,我们稍后会回到标记化,但现在就到这里。

好,我现在所做的就是,我取了数据集中这段文本序列,并使用我们的分词器将其表示为一系列标记。这就是它现在的样子。例如,当我们回到FindWeb数据集时,他们提到这不仅是44TB的磁盘空间,而且在这个数据集中大约有15万亿个标记序列。所以这里,这些只是一些这个数据集的前几千个标记,我想,但请记住这里有15万亿个标记。再一次,请记住,所有这些都代表小的文本块,它们都只是这些序列的原子。这里的数字没有任何意义,它们只是唯一的ID。

好,现在我们进入有趣的部分,那就是神经网络训练。在训练这些神经网络时,这是计算上许多繁重工作发生的地方。所以我们在这步中要做的是,我们想对这些标记在序列中如何相互遵循的统计关系进行建模。因此,我们进入数据,并提取标记窗口。因此,我们相当随机地从这些数据中选取一个标记窗口。窗口的长度可以在零个标记到我们决定的最大大小之间任意取值。例如,在实践中,您可以看到一个包含例如8000个标记的标记窗口。原则上,我们可以使用任意长度的标记窗口,但是处理非常长的窗口序列在计算上将非常昂贵。所以我们只是决定,比如说8000是一个好数字,或者4000,或者16000,然后我们就截断到那里。在此示例中,我将选取前四个标记,以便所有内容都能很好地显示。这些标记,我们将选取一个包含四个标记的窗口,分别是bar、view、ing和space single,这些是它们的标记ID。

我们现在要做的是预测序列中接下来出现的标记。例如,接下来是3962。我们将这四个标记称为上下文,它们作为神经网络的输入。神经网络的输入是可变长度的标记序列,长度在零到某个大小(比如8000)之间。输出是对接下来会发生什么的预测。

由于我们的词汇表有100277个可能的标记,神经网络将输出100277个数字,每个数字对应于该标记作为序列中下一个标记的概率。神经网络最初是随机初始化的,因此在训练开始阶段,这些概率也是随机的。例如,对于“空格方向”,神经网络可能预测其概率为4%,“11799”的概率为2%,“3962”(即post)的概率为3%。我们知道正确的答案是3962。

我们有一个数学过程来更新神经网络,调整其概率,使正确答案(3962)的概率更高,而其他标记的概率更低。更新后,神经网络可能会预测“post”的概率为4%,“case”的概率为1%,“direction”的概率为2%。

这个过程并非只发生在一个标记上,而是发生在整个数据集中的所有标记上。我们采样小的窗口批次,在每个标记上,我们都调整神经网络,使该标记的概率略微提高。所有这些都在这些标记的大批量数据中并行发生。

训练神经网络的过程是一系列更新过程,使它的预测与训练集中实际发生的统计数据相匹配,并使其概率与这些标记在数据中如何相互跟随的统计模式保持一致。

让我们简要了解这些神经网络的内部结构。神经网络内部包含输入,即标记序列。例如,四个输入标记,但数量可以从零到一千甚至更多,理论上无限。然而,处理无限数量的标记计算成本过高,因此将其限制在一定长度,即模型的最大上下文长度。

这些输入与神经网络的参数或权重一起构成一个巨大的数学表达式。现代神经网络拥有数十亿个参数,最初这些参数是随机设置的,因此神经网络会做出随机预测。

通过迭代更新网络的过程,即训练神经网络,调整参数设置,使神经网络的输出与训练集中的模式一致。可以将这些参数想象成DJ设备上的旋钮,旋转它们会得到不同的预测。训练神经网络就是找到与训练集统计数据一致的参数设置。

这个巨大的数学表达式包含数万亿项,但简单来说,就是将输入(例如x1、x2)与权重(例如w0、w1、w2、w3)通过乘法、加法、指数运算、除法等运算混合。设计高效的数学表达式是神经网络架构研究的主题,目标是使其具有表达性、可优化性和可并行性等特性。本质上,这些表达式只是将输入与参数混合以进行预测,优化过程旨在使预测结果与训练集一致。

为了展示实际生产级示例,我建议访问一个网站,该网站对其中一个网络进行了可视化。该网站展示的生产环境中使用的网络被称为Transformer,一个特定网络大约有85,000个参数。顶部接收输入,即标记序列。

然后,信息流经神经网络,直到输出logit softmax。这些是关于接下来会发生什么的预测,也就是下一个标记是什么。

一系列变换以及表达式内部产生的中间值,都在预测接下来会发生什么。例如,这些标记被嵌入到一种叫做分布式表示的东西中,每个可能的标记在神经网络内部都有一个向量表示。首先,我们嵌入标记,然后这些值像流过图一样。这些单独来看都是非常简单的数学表达式,例如层归一化、矩阵乘法、softmax等等,这就是Transformer的注意力块。然后信息流入多层感知器块等等,所有这些数字都是表达式的中间值。

你可以将这些视为合成神经元的放电速率,但我提醒你,不要把它想得太像神经元,因为这些神经元与大脑中的神经元相比极其简单。生物学上的神经元是非常复杂动态过程,具有记忆功能等等,而这个表达式中没有记忆,它是一个从输入到输出的固定数学表达式,无状态的。所以与生物神经元相比,这些神经元非常简单,但你仍然可以松散地将其视为一块合成脑组织。因此,信息流经所有这些神经元,直到我们得到预测。

我实际上不会过多地关注所有这些转换的精确数学细节,我觉得没那么重要。重要的是要理解这是一个数学函数,由一些固定的参数进行参数化,比如说85000个参数。它是一种将输入转换为输出的方法,当我们调整参数时,我们会得到不同类型的预测结果。然后我们需要找到这些参数的一个好的设置,以便预测结果与在训练集中看到的模式相匹配。所以这就是Transformer。

我已经向你们展示了神经网络的内部结构,并且我们也讨论了一点关于训练它的过程。我想再介绍一下使用这些网络的另一个主要阶段,那就是所谓的推理阶段。在推理阶段,我们所做的是从模型中生成新的数据,看看它在其网络参数中内化了哪些模式。

从模型中生成数据相对来说很简单。我们从一些标记开始,这些标记基本上是你的前缀,就像你想要开始的内容一样。假设我们想从标记91开始,我们把它输入网络。网络会给我们概率,一个概率向量。我们可以根据此概率分布对标记进行采样,模型赋予高概率的标记更有可能被采样。

你可以这样理解:我们从分布中采样以获得单个唯一标记,例如标记860。在模型生成过程中,860可能是下一个标记,它是一个相对可能的标记,但并非唯一可能。

例如,在训练示例中,860确实紧跟在91之后。假设我们继续这个过程,在91之后是860,我们把它附加进去。然后采样得到第三个标记,假设是287。重复这个过程,得到长度为三的序列,再采样得到第四个标记,以此类推。

然而,最终得到的标记13659并非之前看到的3962,它是一个“article”标记,表示查看一篇单独的文章。因此,我们并没有完全复制训练数据中的序列。

这些系统是随机的,我们正在进行采样,如同抛硬币。有时我们会幸运地复制训练集中的某一小部分,但有时会得到训练数据中任何文档都不包含的标记。所以我们会得到训练数据某种混合,因为每一步都可能得到略微不同的标记。一旦该标记进入,后续采样会快速生成与训练文档中出现的标记流非常不同的标记流。

统计上,它们会有相似的属性,但它们与训练数据并不相同,它们像是受训练数据启发的。例如,我们得到“article”,是因为它在“bar”、“viewing”、“single”等上下文中是一个相对可能的标记,在训练文档中可能在某个地方跟随这个上下文窗口。我们只是碰巧在这个阶段对其进行了采样。

基本上,推理就是一次预测一个这些分布,我们继续反馈标记并获取下一个标记,一直在进行采样。根据我们的“运气”,我们可能会得到非常不同的模式。这就是推理。

在大多数情况下,下载互联网并将其标记化是一个预处理步骤,只需要做一次。

一旦获得标记序列,即可开始训练神经网络。实际操作中,需尝试训练多种不同类型的神经网络,它们拥有不同的设置、排列和规模,因此需要进行大量神经网络训练。

训练完成后,对获得的特定参数满意后,即可使用该模型进行推理,并从中生成数据。例如,使用ChatGPT与模型对话时,该模型很可能在几个月前由OpenAI训练完成,并拥有效果良好的特定权重。与模型对话的过程仅是推理,不再进行训练,参数保持不变,你只需提供标记,模型便会完成标记序列生成。

接下来,我们以OpenAI的GPT-2为例,具体说明训练和推理过程。GPT代表生成式预训练变换器(Generatively Pre-trained Transformer),GPT-2是OpenAI GPT系列的第二个迭代版本,发表于2019年。选择GPT-2是因为它是首次将可识别的现代技术栈整合在一起,所有组成部分在今天的现代标准下都是可识别的,只是规模更小。

GPT-2是一个Transformer神经网络,拥有16亿个参数。如今,现代Transformer的参数数量更接近于万亿或几百亿。GPT-2的最大上下文长度为1024个token,这意味着在预测序列中的下一个token时,上下文最多不超过1024个token。根据现代标准,这也相对较小,如今的上下文长度更接近几十万,甚至可能达到一百万。

GPT-2能够更好地预测序列中的下一个token,其训练使用了约1000亿个词元,按照现代标准,这规模较小。相比之下,精细网页数据集包含15万亿个词元,因此1000亿个词元数量相当少。

作为LLM.C项目的一部分,我尝试重现GPT-2。相关记录已发布在GitHub上的LLM.C仓库中。2019年训练GPT-2的成本估计约为4万美元,而如今,同样的工作只需一天时间和600美元,甚至可以降低到约100美元。

成本下降如此之多,主要原因在于数据集质量的提升以及数据处理方式的改进。此外,硬件速度的显著提升和模型运行软件的优化也功不可没,这些都促进了模型训练效率的提高。

我无法详细介绍GPT-2的复现过程,但这篇文章将帮助你直观地了解研究人员训练这些模型的过程。

我正在训练一个GPT-2模型,每一行都代表一次模型更新,改进对标记预测的准确性,更新神经网络的权重或参数,以便更好地预测序列中的下一个标记。每一行都改进对训练集中一百万个标记的预测,我们试图改进对这些标记中每一个作为序列中下一个标记的预测。

需要密切关注的是“损失”数值,它反映神经网络的运行情况,数值越低越好。随着模型更新的进行,损失值逐渐减少,这表示对序列中下一个标记的预测越来越准确。

损失值是神经网络研究人员关注的关键指标。 训练过程中,我们会耐心等待,观察损失值是否随每次更新而下降,并以此判断网络预测能力是否提升。

本次训练中,每次更新处理一百万个词元,每次更新耗时约七秒钟,共进行32000步优化,总计处理约330亿个词元。目前已完成420步,仅完成1%多一点,因为训练时间仅约10到15分钟。 模型每20步进行一次推理,预测序列中的下一个标记。

推理过程从随机开始,逐个预测标记。 目前生成的文本不够连贯,这是因为训练过程仅完成1%。 输出结果类似于胡言乱语,但仍然具有一定的局部连贯性,例如“既然她是我的,这是信息的一部分,应该讨论我的父亲、伟大的同伴们,戈登向我展示了坐在它上面的场景,等等”。 与训练初始阶段相比,模型性能已有所提升。

如果训练完成全部32000步,模型将能够生成相当连贯的英语文本,标记流传输正确,英语表达也更流畅。这还需要一两天的时间。 目前阶段,我们只需关注损失值的下降,确保训练过程顺利进行。

接下来,我们讨论计算资源方面的问题。由于模型规模庞大,无法在个人电脑上运行,因此训练过程在云端计算机上进行。

本次训练使用的计算资源为一个8xh100节点,即单机拥有八个h100 GPU。这台机器是租用的云端服务器。

我并不确定它的物理位置。我使用的是名为Lambda的租赁服务,但许多其他公司也提供类似服务。向下滚动即可看到这些公司提供的按需定价的配备h100(即GPU)的电脑,稍后我会展示它们的样子。例如,按需8个NVIDIA h100 GPU的机器,每小时每GPU的价格为3美元。您可以租用它们,然后在云端获得一台可登录并训练模型的机器。这些GPU,长这样。这就是一块H100 GPU,您可以把它插进电脑里。

GPU非常适合训练神经网络,因为神经网络计算量很大,但计算中存在大量的并行性。因此,许多独立的工作单元可以同时工作,来解决训练这些神经网络底层使用的矩阵乘法运算。这只是一块H100,实际上你会把多块放在一起。您可以将八块堆叠在一个节点中,然后可以将多个节点堆叠成一个完整的数据中心或一个完整的系统。所以当我们看数据中心时,我们会看到这样的东西:一块GPU,变成八块GPU,变成一个系统,变成多个系统。这些都是更大的数据中心,它们当然会贵得多。

现在,所有大型科技公司都非常需要这些GPU,以便能够训练所有这些大型语言模型,因为它们非常强大。这从根本上驱动了英伟达的股价达到今天的3.4万亿美元,也解释了为什么英伟达会如此爆炸式增长。所以这就是淘金热。淘金热的关键在于获取GPU,获得足够的GPU,以便它们能够协同工作以执行此优化。它们都在做什么?它们都在协同预测像FindWeb数据集这样的数据集上的下一个token。

这就是计算工作流程,它极其昂贵。你拥有的GPU越多,你可以尝试预测和改进的token就越多,你处理这个数据集的速度就越快,你可以迭代得更快,获得更大的网络,训练更大的网络,等等。所以这就是所有这些机器正在做的,这就是为什么所有这一切都如此重要。例如,这是大约一个月前的一篇文章。这就是为什么例如埃隆·马斯克在一个单一数据中心获得10万个GPU是一件大事。所有这些GPU都极其昂贵,耗电量巨大,而且它们都在尝试预测序列中的下一个标记,并通过这样做来改进网络,并且可能会比我们在这里看到的更快地获得更多连贯的文本。

不幸的是,我没有几千万甚至上亿美元来训练这样一个大型模型,但幸运的是,我们可以求助于一些大型科技公司,他们定期训练这些模型,并在训练完成后,会发布部分模型。训练这些网络耗费了大量的计算资源,并在优化结束后发布。这非常有用,因为训练过程耗费巨大。许多公司定期训练这些模型,但实际上很少有公司会发布这些所谓的基模型。最终的模型被称为基模型。

什么是基模型?它是一个标记模拟器,一个互联网文本标记模拟器。它本身并没有什么用,因为我们想要的是助手,可以提问并得到回答。这些模型做不到这一点,它们只是创造了一种互联网的混搭,梦想着互联网页面。基模型并不经常发布,因为它们只是几个步骤中的第一步,还需要其他步骤才能获得一个助手。

然而,一些模型已经发布。例如,GPT-2模型在2019年发布了15亿参数的版本。这个GPT-2模型就是一个基模型。那么,什么是模型发布?发布这些模型是什么样的呢?例如GitHub上的GPT-2代码库。

发布模型需要两样东西。首先,需要Python代码,详细描述模型中执行的一系列操作。这段代码实现了神经网络的正向传播,包含神经网络连接的具体细节。这只是几百行代码,相当容易理解且标准化。不标准的是参数,这是实际价值所在。

神经网络的参数存储在哪里呢?由于有15亿个参数,需要正确的设置。除了源代码,还需要发布参数,大约15亿个数字。这是一个包含15亿个数字的列表,是所有旋钮的精确设置,以便令牌能够良好地输出。因此,需要这两样东西才能获得基模型的发布。

现在,GPT-2已经发布,但它是一个相当旧的模型。我们将要转向的模型是LLAMA-3。LLAMA-3与GPT-2(15亿参数,基于1000亿个token训练)相比,是一个更大、更现代的模型。它由Meta发布和训练,包含4050亿参数,并基于15万亿个token进行训练,方式相似,只是规模大得多。

Meta发布了LLAMA-3,论文中对此进行了详细介绍,并着重阐述了其发布的最大基础模型LLAMA-3.1 4.5,这是一个拥有4050亿参数的模型。

除了基础模型,Meta还发布了指令模型,这是一个可以进行问答的助手功能,我们稍后会详细介绍。目前,让我们先关注这个基础模型——一个token模拟器。我们将试用它,并探讨其运作机制以及大型神经网络与海量数据训练后最终的结果。

我最推荐体验基础模型的平台是Hyperbolic公司,它提供了4050亿参数的LLAMA-3.1基础模型。使用时,请确保选择此模型(可能需要注册)。设置最大标记数为我们期望生成的标记数量,这里为了节省计算资源,我们将标记数减少至128。

此过程与推理过程相同,模型会基于给定前缀继续生成标记序列。但需要注意的是,此模型并非助手模型。例如,提问“2加2等于多少?”,它不会直接回答“等于4”,因为它只会根据词元概率预测下一个词元,本质上是一个非常昂贵的自动补全功能,根据训练数据(网页等)中的统计信息预测后续内容。

实际测试中,模型虽然回答了问题,却也走向了哲学讨论。再次尝试后,结果仍然如此。这表明系统每次输入都从头开始,具有随机性。相同的标记前缀会产生不同的答案,因为模型从概率分布中进行采样,每次得到不同的样本,从而进入不同的领域。

让我们再试一次。它就这样继续下去了,它只是在重复互联网上的统计模式。首先,它还不是一个助手,而是一个标记自动完成工具,其次,它是一个随机系统。

即使这个模型本身对于许多应用来说还不够完善,它仍然非常有用,因为它在预测序列中下一个标记的任务中,已经学习了很多关于世界的知识,并将所有这些知识存储在网络的参数中。我们的文本来自互联网网页,所有这些都压缩在网络的权重中。

你可以把这4050亿个参数看作是对互联网的一种压缩,一个压缩文件,但它不是无损压缩,而是有损压缩。我们好像只剩下互联网的一种整体印象,我们可以从中生成内容。我们可以通过相应地提示基础模型来引出其中的一些知识。例如,“这是我的最佳情侣景点Top 10清单”,我这样做是为了引导模型继续这个列表。

它已经开始列出清单,并给出了一些地标性景点。注意,它试图提供很多信息,你可能无法完全相信这里的一些信息,因为它只是对一些互联网文档的回忆。互联网数据中频繁出现的内容比很少出现的内容更可能被正确记住,所以你不能完全相信这里的一些信息,因为这只是对互联网文档模糊的回忆,信息并没有显式地存储在任何参数中,这完全是模型的回忆。

话虽如此,我们确实得到了一些可能大致正确的结果,而我实际上并没有专业知识来验证这是否大致正确。但是你会看到我们已经引出了模型的大量知识,而这些知识并不精确,是模糊的、概率的和统计的。模型中更容易记住的是那些经常发生的事情。

现在,我想展示更多关于这个模型行为的例子。我首先去维基百科查看了斑马的页面,复制粘贴第一句甚至更长的句子。当我点击回车键时,我们会得到什么样的补全结果呢?

现存三种斑马,等等等等。模型在这里生成的文本是对维基百科词条的精准复述,它纯粹是凭借记忆来背诵这篇维基百科词条,这种记忆存储在其参数中。所以,有可能在这些512个token中的某个时刻,模型会偏离维基百科词条,但是你可以看到它在这里记住了大量的文本。

让我看看这句话是否出现过。好,我们仍在正轨上。让我在这里检查一下。好,我们仍在正轨上。它最终会偏离主题。

好,所以这个东西在很大程度上只是背诵出来的,它最终会偏离,因为它无法准确记住。现在,发生这种情况的原因是这些模型在记忆方面可能非常出色,通常,这并不是你在最终模型中想要的。这叫做反刍,通常情况下,直接引用你训练过的数据是不好的。

发生这种情况的原因实际上是,对于许多文档,例如维基百科,当这些文档被认为是高质量的来源时,在训练模型时,你往往会优先从这些来源中采样。所以基本上,模型可能在这个数据上进行了几个轮次的训练,这意味着它可能看过这个网页大约10次左右。这有点像你,如果你反复阅读某种文本很多次,比如说读了100遍,那么你就能背诵出来。对于这个模型来说也是非常类似的。如果它看到某个东西的次数太多了,它以后就能从记忆中背诵出来。只是这些模型比人更有效率,比如在表达方面。所以它可能只看过这个维基百科条目10次,但基本上它已经将其参数中这篇文章完全记住了。

好,接下来我想向你展示一些模型在训练期间绝对没有见过的东西。例如,如果我们查看论文,然后导航到预训练数据,我们会看到数据集的知识截止日期是2023年底。所以它没有见过此时间点后的文档。当然,它也没有看到任何关于2024年选举及其结果的信息。

现在,如果我们用未来的标记来引导模型,它将继续标记序列,并且它将根据其自身参数中拥有的知识做出最佳猜测。让我们看看那会是什么样子。因此,共和党可能会获胜,好的,美国总统,自2017年起。让我们看看它在这点之后会说什么。例如,模型将不得不猜测竞选伙伴以及对手是谁等等。让我们按回车键。所以这里提到迈克·彭斯是竞选伙伴,而不是J.D.彭斯。而且这张选票是反对希拉里·克林顿和蒂姆·凯恩的。所以这可能是一个有趣的平行宇宙,根据警报,可能会发生的事情。我们来取一个不同的样本。所以是相同的提示,让我们重新采样。所以这里的竞选搭档是罗恩·德桑蒂斯,他们对抗乔·拜登和卡玛拉·哈里斯。所以这又是一个不同的平行宇宙。

所以模型会做出有根据的猜测,并根据这些知识继续生成标记序列。我们在这里看到的一切都被称为幻觉。模型只是以概率的方式做出最好的猜测。

接下来的内容我想向您展示的是,即使这是一个基础模型,还不是一个助手模型,如果您巧妙地设计提示,它仍然可以在实际应用中使用。

这里有一些我们可以称之为“少样本提示”的例子。这指的是十对英韩单词,每对单词由英文单词、冒号和韩语翻译构成。模型通过对这十对单词进行学习,来完成后续的“teacher:”五个token的补全任务。这些模型具备“上下文学习”能力,即在读取上下文时,学习数据中的模式并以此进行推断。因此,模型承担了翻译的角色,最终正确地将“teacher”翻译为“선생님”。即使只有一个基础模型,巧妙的提示也能构建应用程序,这依赖于模型的上下文学习能力,并通过构建少样本提示来实现。

接下来,我想展示一种通过提示实例化完整语言模型助手的方法。技巧在于将提示设计成一个网页形式的对话,展现乐于助人的AI助手与人类之间的互动。模型将继续这段对话。为了编写提示,我使用了ChatGPT,这有点“元”,但我告诉它我想创建一个基于基础模型的OLM助手,并请它帮忙编写提示词。它生成的提示词相当不错,模拟了AI助手与人类的对话,AI助手知识渊博、乐于助人,能够回答各种问题。仅仅给出描述是不够的,添加一些人类助手与人类之间的对话回合,效果会更好。最后,我们将输入实际查询。

我将提示词复制粘贴到基础模型中,扮演人类角色输入实际提示:“为什么天空是蓝色的?”运行后,助手回答:“天空呈现蓝色是因为瑞利散射现象……”基础模型延续了对话序列,并承担了助手的角色。虽然模型在助手回答后,会略显“幻觉式”地生成下一个来自人类的问题,但它成功完成了任务。如果直接向基础模型提问“为什么天空是蓝色的”,结果则无法预料,可能只会得到更多不相干的问题。

所以,即使只有一个基础模型,也可以通过这种方法创建助手。

好的,这是过去几分钟讨论内容的简短总结。

现在,让我们更深入地探讨。这与我们目前为止讨论的内容密切相关。我们希望训练像ChatGPT这样的LLM助手。我们已经讨论了它的第一阶段,即预训练阶段。简而言之,就是:我们获取互联网文档,将其分解成标记——这些小的文本块的原子——然后我们使用神经网络来预测标记序列。这个阶段的输出是基础模型,也就是这个神经网络的参数设置。而这个基础模型本质上是一个在标记层面的互联网文档模拟器,它可以生成与互联网文档具有相同统计特征的标记序列。我们看到它可以用于一些应用,但实际上我们需要做得更好。我们想要一个助手,能够回答我们提出的问题。所以我们现在需要进入第二阶段,称为后训练阶段。

因此,我们将基础模型——我们的互联网文档模拟器——交给后训练阶段。现在我们将讨论几种所谓的模型训练后处理方法。这些训练后阶段的计算成本将低得多。大部分计算工作,所有大型数据中心以及所有繁重的计算和数百万美元的投入都在预训练阶段。但现在我们将进入一个成本相对较低,但仍然极其重要的阶段,称为训练后处理阶段,在这个阶段我们将大型语言模型变成一个助手。

因此,让我们看看如何使我们的模型不再只是采样互联网文档,而是回答问题。换句话说,我们要开始考虑对话。这些对话可以是多轮的,可以有多个回合。在最简单的情况下,它们是人与助手之间的对话。例如,我们可以想象对话可能如下所示:当一个人说:“2 加 2 等于几?”助手应该这样回应:2 加 2 等于 4。当人类追问,如果用星号代替加号会怎样?助手可以做出相应的回应。同样地,这是另一个例子,表明助手也可以拥有一定的个性,它有点友好。然后在第三个例子中,我展示了当人类要求我们不愿意帮忙的事情时,我们可以产生所谓的拒绝,我们可以说我们帮不了这个忙。

所以换句话说,我们现在想做的,是思考助手应该如何与人类互动。我们想对助手及其在这些对话中的行为进行编程。现在,因为这是神经网络,我们不会用代码明确地编程这些。我们无法那样对助手进行编程。因为这是神经网络,所以一切都是通过对数据集进行神经网络训练来完成的。正因为如此,我们将通过创建对话数据集来隐式地对助手进行编程。因此,这些是数据集中三个独立的对话示例。一个实际的数据集,我将向您展示一些例子,将会大得多,它可能包含数十万个多轮对话,非常长等等。

并涵盖广泛的不同主题,但在这里我只展示三个例子。这种方法的工作原理基本上是通过示例对助手进行编程。

这些数据来自哪里?例如,2 乘以 2 等于 4,与 2 加 2 相同,等等。这来自人工标注者。我们会给人工标注者一些对话上下文,然后让他们给出理想的助手回应。人工会为任何情况下的助手写出理想的回应。然后我们将让模型以此进行训练,并模仿这类回应。

这样做的方式是,我们将采用在预训练阶段生成的基模型,这个基模型是在互联网文档上训练的。我们现在将丢弃那个互联网文档的数据集,并用一个新的对话数据集替换它。我们将继续在这个新的对话数据集上训练模型。模型会非常迅速地调整,并学习助手如何回应人类查询的统计规律。然后在推理阶段,我们将能够启动助手并获得响应,它将模仿人类标注者在这种情况下会做的事情。我们将看到这方面的例子,这将变得更加具体。

我还想提到,在这个后期训练阶段,我们将继续训练模型,但预训练阶段可能需要在数千台计算机上进行大约三个月的训练。后期训练阶段通常会短得多,例如三个小时,这是因为我们手动创建的对话数据集远小于互联网上的文本数据集。这个训练会非常短,但从根本上说,我们将采用我们的基础模型,我们将使用完全相同的算法、完全相同的每一件事继续训练,只是我们将数据换成对话。

现在的问题是这些对话在哪里,我们如何表示它们,我们如何让模型看到对话而不是原始文本,以及这种训练的结果是什么,当我们谈论模型时,在某种心理学意义上你会得到什么。那么现在让我们来探讨这些问题。让我们从谈谈对话的标记化开始。

这些模型中的所有内容都必须转换成标记,因为所有内容都只是关于标记序列的。我们将如何将对话转换成标记序列呢?为此,我们需要设计某种编码方式。这有点类似于,如果你熟悉的话(当然你也可以不熟悉),例如互联网上的 TCP/IP 数据包。有一些精确的规则和协议来规定如何表示信息,如何将所有内容结构化在一起,以便所有这些数据都以书面形式呈现出来,并且每个人都能达成一致。所以现在大型语言模型 (LLM) 中也是同样的情况。我们需要某种数据结构,并且需要制定一些规则来规定这些数据结构(例如对话)如何编码和解码到标记。

因此,我想向你展示如何在标记空间中重现这段对话。 如果你查看TickTokenizer,可以获取这段对话的语言模型表示方式。 我们迭代了这段两轮对话中的用户和助手。 目前的显示形式可能不够美观,但实际上它相对简单。

最终将其转换为标记序列的方式较为复杂,但用户和助手之间的对话最终变成了49个标记,一个包含49个标记的一维序列。所有不同的LLM都会有略微不同的格式或协议,现在有点像“狂野西部”,但例如GPT-4是这样做的:有一个特殊的标记叫做IM_start(“虚拟独白开始”的缩写),然后必须指定轮到谁(例如用户,这是一个1428号标记),接着是内部独白分隔符,然后是问题的标记,最后是IM_end(虚拟独白的结束)。 因此,“2加2等于多少”这个问题最终变成了这些标记的序列。

需要强调的是,IM_start并非文本,而是一个新增的特殊标记,在训练前从未出现过,是我们训练后阶段创建并引入的。 这些特殊标记(例如IM_set、IM_start等)被引入并散布在文本中,以便模型学习“这是谁的回合开始”。 回合开始是用户的,然后是用户所说的话,用户结束,新的回合由助手发起,然后是助手所说内容的标记等等。 这段对话现在变成了这个标记序列。

这里的具体细节并不重要,我想用具体的例子展示的是,我们认为结构化的对话,最终通过某种编码变成了单一的标记序列。 因为它是一个单一的标记序列,所以我们可以应用之前用过的一切方法。现在它只是一个标记序列,我们可以用它来训练语言模型,就像之前一样预测序列中的下一个标记,并且可以表示和训练对话数据。

在测试阶段(推理阶段),假设我们已经训练了一个模型,并用这种对话数据集训练了模型,现在我们想进行推理。 使用ChatGPT进行推理时,假设这部分已经填写好了,例如“2加2等于多少?”,ChatGPT的工作方式基本上是这样的:2加2等于4。

现在,你发布了“imend”的提示,在OpenAI或类似服务器上最终发生的情况是,他们放置了一个“imstart”助手“imsep”, 这就是流程的结束。他们构建了这个上下文,然后开始从模型中采样。在这个阶段,他们会询问模型:“什么是好的第一个序列?什么是好的第一个标记?什么是好的第二个标记?”以此类推。这就是语言模型接管并创建响应的地方,例如,看起来像这样的响应,但它不必完全相同,如果这种类型的对话存在于数据集中,它将具有这种风格。这就是协议的大致工作方式,协议的细节并不重要。我的目标只是向你展示,最终一切都只是一个一维标记序列,所以我们可以应用我们已经看到的一切,但我们现在正在训练对话,并且我们现在基本上也在生成对话。

现在我想谈谈这些数据集在实践中是什么样的。我想向你们展示的第一篇论文,也是朝这个方向迈出的第一步,是OpenAI在2022年发表的论文《InstructGPT》,或者说是他们开发的技术。这是OpenAI第一次谈到如何利用语言模型并针对对话对其进行微调。这篇论文有很多细节,我想带大家一起了解一下。所以我想先来看一下第3.4节,他们讨论了他们雇佣的人工标注员,这些人是从Upwork或ScaleAI招聘的。

这里涉及到人工标注员,他们的工作是专业地创建这些对话,这些标注员被要求提出提示,然后他们也被要求完成理想的助手回复。所以这些就是人们想出的提示类型:例如“列出五个让我重拾职业热情的方法”、“我接下来应该阅读的十大科幻小说是什么?”、“将句子翻译成西班牙语”等等。这里有很多人们想出的东西。他们首先提出提示,然后他们也回答该提示,并给出理想的助手回应。

那么他们如何知道他们应该为这些提示编写什么理想的助手回应呢?当我们向下滚动一点时,我们会看到这里有一段摘录,其中包含给人工标注者提供的标注说明。开发语言模型的公司,例如OpenAI,会编写标注说明,说明人类应该如何创建理想的回应。例如,这些标注说明会在更高的层次上要求人们乐于助人、诚实和无害。如果你想在这里看到更多内容,可以暂停视频。但总的来说,基本上就是回答问题,尽量有帮助,尽量诚实,不要回答我们不希望ChatGPT回答的内容。

系统之后在聊天中处理的问题,通常由公司提供的标注说明指导。这些说明通常篇幅很长,动辄数百页,需要专业人员学习后才能撰写出理想的助手回复,这是一个高度依赖人工的过程,正如相关论文所述。

InstructGPT 的数据集虽然从未公开发布,但一些开源项目尝试复现其设置,并收集自身的数据,例如 OpenAssistant 项目。这些项目旨在模仿 OpenAI 使用人工标注者创建对话的过程。

举例来说,一个提示可能是:“请写一个简短的介绍,介绍‘买方垄断’(monopsony)这一术语在经济学中的相关性,并举例说明。”  然后,另一个人会撰写回复,再由另一人(或同一人)撰写理想的回复。这便是对话数据标注的过程,最终用于模型训练。

训练过程中,不可能涵盖模型在推理期间可能遇到的所有问题和提示。但通过提供大量这样的示例,模型在训练过程中会学习扮演乐于助人、诚实无害的助手角色,这是一种通过示例编程的方法。

如果拥有足够多的,例如十万个这样的对话示例,模型就能学习其中的统计模式,并逐渐具备助手的人格。测试时,模型可能会给出与训练集中完全相同的答案,但更可能的是,它会给出风格类似的回应,理解用户期望的答案类型。

这就是我们的工作方式:通过示例编程,使系统在统计学上具备乐于助人、诚实无害的助手角色,这与公司提供的标注说明相符。

自 InstructGPT 论文发表后的两三年里,最先进技术取得了显著进展,人类不再独自承担所有繁重的工作。语言模型能够辅助创建数据集和对话,因此,人们从头开始逐字逐句撰写回复的情况已非常罕见,他们更倾向于使用现有的 LLM 生成答案,然后进行编辑。

大型语言模型 (LLM) 已经开始渗透到训练后流程的许多方面,广泛用于创建海量的对话数据集。例如,UltraChat就是一个现代的对话数据集,它在很大程度上是合成的,但也包含一定程度的人工参与。这些数据集的构建方式各不相同,UltraChat只是众多SFT数据集中的一个例子。这些数据集包含数百万次对话,大多是合成的,但可能经过人工编辑,涵盖了广泛的领域。它们包含各种SFT混合物,部分是合成的,部分是人工的。总的来说,我们仍然使用由对话构成的SFT数据集进行训练。

我想消除一些关于AI对话的神秘感。当你使用ChatGPT输入问题并按下回车键时,返回的结果在统计上与训练集一致。而这些训练集,实际上只是人类按照标注说明进行操作的种子。你在ChatGPT中对话的对象并非某种神奇的AI,而是某种在统计上模仿人类标注员的东西,这源于公司编写的标注说明。你可以将其理解为在询问一位人类标注员,ChatGPT的答案是对人类标注员的模拟,就像在问“在这种对话中,人类标注员会怎么说?”。 这些标注员并非普通的网民,而是公司雇佣的专家,例如,在回答关于代码的问题时,参与创建数据集的人通常是受过教育的专家。所以,你是在与这些专家的模拟进行对话,而不是一个神奇的AI,而是一个平均水平、可能相当熟练的标注员的模拟。

让我们举个具体的例子:当我访问ChatGPT,输入“推荐你在巴黎看到的五大标志性建筑”,然后按下回车键,会发生什么?

我该如何看待它?它并非某种神奇的AI,而是基于对OpenAI聘请的标注员进行统计模拟的结果。可以这样理解:如果这个问题存在于OpenAI后期训练数据集中,我很有可能看到一个与人工标注员为这五个地标撰写内容非常相似的答案。人工标注员通常会进行网上搜索,花约20分钟做调查,然后列出清单。如果这个清单在数据集中,我就能看到模型给出与之类似的答案。

如果该查询不在后期训练数据集中,那么模型给出的答案则更多地源于涌现现象。模型在统计上理解,训练集中这类地标通常是显著的、人们常想了解的,且互联网上经常讨论的地标。模型已从互联网预训练中获得海量知识,可能见过大量关于地标及其相关信息的对话。所以,预训练知识与后期训练数据集相结合,导致了这种模仿。从统计意义上说,这就是幕后发生的大致情况。

现在我想谈谈LLM心理学,特别是幻觉问题。大型语言模型幻觉是指模型编造信息的情况,这是个长期存在的问题,尽管现在已有所改善。让我们尝试理解幻觉的来源。

举个例子,展示训练集中可能存在的三个对话:“谁是汤姆·克鲁斯?” “汤姆·克鲁斯是一位著名的美国演员和制片人。” “约翰·巴拉索是谁?” “一位美国参议员。” “成吉思汗是谁?” (此处省略对成吉思汗的描述)。人类在撰写答案时,要么知道答案,要么会进行网上搜索,然后自信地给出答案。测试时,当你问一个我随机想出的、可能不存在的人是谁……

我只是尝试随机生成它。问题是,当我们询问奥森·科瓦茨是谁时,助手不会简单地回答“哦,我不知道”。即使助手和语言模型本身可能在其内部“知道”这个人并非它熟悉的人,这种“哦,我不知道这是谁”的回应也不会出现。

因为模型在统计上模仿训练集,训练集中形如“谁是XXX”的问题都能自信地给出正确答案。所以它会采用这种回答风格,并尽其所能给出统计上最可能的猜测,基本上就是编造东西。这些模型无法访问互联网,不做研究,我称它们为统计标记翻滚器。它只是试图对序列中的下一个标记进行采样,基本上就是编造东西。

让我们看看这是什么样子。我这里有一个来自Hugging Face的推理游乐场,我故意选择了一个名为Falcon 7B的旧模型,它已经存在几年了,所以它会出现幻觉。这种情况最近有所改善。但让我们问问Falcon 7B,奥森·科瓦茨是谁?运行后,它回答奥森·科瓦茨是一位美国作家和科幻小说家,这完全是假的,是一种幻觉。我们再试一次,结果是奥森·科瓦茨是1950年代电视剧中的虚构人物,这完全是胡说八道。我们再试一次,这次它是位前小联盟棒球运动员。所以基本上模型不知道,它给了我们很多不同的答案,因为它只是从这些概率中进行采样。

模型从“奥森·科瓦茨是谁”开始,然后获得这些概率,并从中进行采样,只是想出一些东西,这些东西在统计上与它训练集中答案的风格一致。但我们体验到的却是虚构的事实知识。模型基本上不知道,它只是在模仿答案的格式,不会主动去查找,因为它只是在模仿答案。

那么我们该如何减轻这个问题呢?例如,当我们使用ChatGPT并询问“Orson Kovats是谁”时,OpenAI最先进的模型会告诉你它需要搜索网络。它实际上正在尝试使用工具,而不是像之前的模型那样直接编造答案。而“Orson Kovats是谁”这个提问并没有使用任何工具,我不希望它进行网络搜索。

有一个著名的历史公众人物叫Orson Kovats,所以这个模型不会编造东西。此模型知道自己不知道,并会告诉你它似乎不认识这个人。所以不知何故,我们某种程度上改进了幻觉问题,即使它们在较旧的模型中显然是一个问题。如果你的训练集就是这样,那么你得到这些答案就完全说得通了。

那么我们如何解决这个问题呢?很明显,我们需要在我们的数据集中加入一些例子,其中助手正确的答案是模型不知道某个特定的事实。但我们只需要在模型实际上不知道的情况下才能产生这些答案。所以问题是,我们如何知道模型知道什么或不知道什么?我们可以根据经验探测模型来弄清楚这一点。

让我们以Meta如何处理Llama 3系列模型的幻觉为例。在他们发表的这篇Meta论文中,我们可以看到幻觉,他们在这里称之为事实性。他们描述了他们基本上用来询问模型以找出它知道什么和不知道什么的程序,以找出其知识的边界。然后,他们向训练集中添加示例,对于模型不知道的内容,正确的答案是模型不知道,这在原则上听起来很容易做到。但这大致解决了这个问题。它之所以能解决这个问题,是因为请记住,模型实际上可能在网络内部拥有一个相当好的自我知识模型。所以请记住,我们查看了网络和网络内部的所有这些神经元。你可以想象,网络中的某个神经元会在模型不确定时亮起来。但问题是,该神经元的激活目前并没有与模型实际说出它不知道的内容相连。因此,即使神经网络的内部知道,因为有一些神经元代表这一点,模型也不会显示出来。相反,它会做出最好的猜测,以便听起来很自信,就像它在训练集中看到的那样。所以我们需要基本上询问模型,并允许它在不知道的情况下说“我不知道”。

让我带你了解一下MetaRoughly的功能。基本上,它们的功能是,这里我有一个例子。多米尼克·哈塞克是今天的特色文章,所以我只是随机访问了它。它们做的基本上是从训练集中随机选择一个文档,然后选取一段,并使用LLM来构建关于该段落的问题。例如,我在这里用chat.gpt做了这件事。我说,这是这个文档中的一段话。基于这段话生成三个具体的客观问题,并给出问题和答案。因此,LLM已经足够好到可以创建和重构这些信息。所以,如果信息在这个LLM的上下文窗口中,它实际上运行得很好。它不必依赖于它的记忆。它就在上下文窗口里。因此它基本上可以以相当高的准确率重新构建这些信息。例如,它可以为我们生成这样的问题:他为哪个队效力?

答案在这里。他赢得了多少个杯赛?我们现在要做的是,对模型进行提问,模型有问题和答案。我们将把问题提交给模型,例如Meta的Llama,但这里我们用Mistral 7b举例。这个模型知道答案吗?我们来看看。他为布法罗军刀队效力过,模型知道。我们可以通过编程的方式来判断,即从模型获取答案并与正确答案进行比较。模型能够自动完成此任务,无需人工参与。我们可以获取模型的答案,并用另一个大型语言模型判断答案是否正确。如果正确,则模型可能知道答案。我们将重复此过程几次。它知道是布法罗军刀队。我们再试一次,布法罗军刀队。再试一次,布法罗军刀队。三次询问后,模型似乎知道答案,一切都很棒。

现在尝试第二个问题:他赢得了多少个斯坦利杯?正确答案是两个。模型声称他赢了四次,这是错误的。模型不知道,它在编造。我们再试一次,模型再次编造。再试一次,它说他职业生涯中没有获胜。很明显,模型不知道。我们可以通过编程的方式判断,即三次询问模型,并将答案与正确答案进行比较。如果模型不知道,我们就知道了。然后我们将这个问题,创建一个新的对话添加到训练集中。训练集中会添加一个新的对话:“他赢得了多少个斯坦利杯?”  答案是:“对不起,我不知道,或者我不记得了”。这是正确的答案,因为我们询问了模型,这就是情况。

如果你对许多不同类型的问题和文档都这样做,你就在给模型一个机会,在其训练集中,根据其知识拒绝回答。如果训练集中只有几个这样的例子,模型就能学习这种基于知识的拒绝与其内部神经元的关联。从经验上看,这是可能的。它可以学习这种关联:当不确定性神经元的值很高时,我实际上不知道,我可以说“我很抱歉,但我记不起这个了”等等。如果你在训练集中包含这些例子,就能很大程度地减轻幻觉问题。这就是ChatGPT。

也能够做到这些事情的原因是,这些都是人们已经实施并随着时间推移改善了事实性问题缓解措施。

我已描述了第一种缓解方法,基本上是为了减轻幻觉问题。现在,我们可以做得更好,不必仅仅说“我不知道”,我们可以引入第二种缓解方法,让大型语言模型有机会给出事实性答案并实际回答问题。

如果我问你一个事实性问题,而你不知道答案,你会怎么做?你可能会去搜索,使用互联网找出答案,然后告诉我。我们可以对这些模型做完全相同的事情。想象一下神经网络内部,在其数十亿参数内部的知识,可以将其视为模型在训练期间、预训练阶段很久以前看到的事物的模糊记忆,如同一个月前读到的东西。如果你不断阅读某些东西,你就会记住它,模型也是如此。但如果信息稀少,你的记忆可能不清晰。这时,你和我都一样,会去查找它。

当你查找它时,你基本上是用信息刷新你的工作记忆,然后你就能检索它、谈论它等等。所以我们需要一些等效的方法来允许模型刷新其记忆或回忆,我们可以通过为模型引入工具来做到这一点。

我们的方法是,与其只是说“对不起,我不知道”,不如尝试使用工具。我们可以创建一个机制,让语言模型发出特殊的标记,例如“搜索开始”和“搜索结束”。当模型不知道答案时,它可以选择发出“搜索开始”标记,这对于OpenAI来说,就是将查询发送到bing.com或谷歌搜索等。它会发出查询,然后发出“搜索结束”标记。

然后,运行推理、从模型中采样的程序,当它看到“搜索结束”标记时,它不会采样序列中的下一个标记,而是会暂停从模型中生成,它会启动一个会话连接到bing.com,并将搜索查询粘贴到bing中。然后它将获取所有检索到的文本,也许会用一些其他特殊标记再次表示它,并将这段文本复制粘贴到上下文窗口中。

模型从网页搜索获得的文本现在就在上下文窗口内,它将被输入到神经网络中。你可以把上下文窗口想象成模型的工作内存。

上下文窗口中的数据可以直接被模型访问,并直接输入到神经网络中。因此,模型不再依赖模糊的回忆,而是可以直接访问上下文窗口中的数据。 当模型采样新的标记时,可以轻松参考已复制粘贴的内容。这就是这些工具大致的工作方式,网页搜索只是其中一种。稍后我们将探讨其他工具。

基本上,通过引入新的标记和模式,模型可以利用这些标记并调用特定功能,例如网页搜索。

那么,如何教会模型正确使用这些工具,例如网页搜索、搜索开始和搜索结束呢?这同样是通过训练集完成的。我们需要大量数据和对话,通过示例向模型展示如何使用网页搜索,在哪些情况下使用搜索以及搜索结果的呈现方式。训练集中包含数千个此类示例,模型就能很好地理解工具的工作方式,知道如何构建查询。

由于预训练数据集及其对世界的理解,模型已经理解了什么是网页搜索,并对什么样的内容构成有效的搜索查询有相当好的原生理解。因此,只需要少量示例来展示如何使用新工具,模型就能依靠它检索信息并将其放入上下文窗口。这类似于我们查找资料的过程,因为一旦信息进入上下文,就进入了工作内存,非常容易操作和访问。

几分钟前,当我在ChatGPT中搜索Orson Kovats是谁时,ChatGPT语言模型认为这是一个罕见的人物,它没有直接给出答案,而是选择采样一个特殊标记进行网络搜索。我们看到一些信息闪过,表明使用了网络工具。稍作等待后,它生成了答案并创建了引用,表明它正在引用来源。

它启动了一次网络搜索,找到了来源和网址。这些网页的文本被添加到上下文窗口中(虽然未显示),模型以此为基础进行引用,例如“可能是这些人,引用;可能是那些人,引用”等等。

这就是为什么当我问谁是奥森·科瓦茨时,我也可以说“不要使用任何工具”。这足以让ChatGPT不使用工具,而只使用其记忆和回忆。

我也尝试向ChatGPT提出了这个问题:多米尼克·哈塞克赢得了多少次斯坦利杯?

ChatGPT 认为自己知道答案,并自信地声称赢了两次。这源于它对自身权重、参数和激活值的信心,使其能够直接从“记忆”中检索信息。但也可以通过网络搜索来验证。 同样的查询,ChatGPT 会进行搜索,找到并整合多个来源,最终列出这些来源,例如维基百科文章。这就是工具(网络搜索)如何运作,也是模型缓解幻觉和确保事实性的方法。

这强调了一个重要的观点:神经网络参数中的知识是一种模糊的记忆,上下文窗口中的知识和标记则构成工作记忆。这与人类大脑的工作方式类似:我们记住的东西是参数,近期经历则在上下文窗口中。随着我们体验周围环境,上下文窗口不断更新。

这对于使用大型语言模型有启示。例如,要求 ChatGPT 总结《傲慢与偏见》第一章,效果不错,因为它对名著有较好的“记忆”,可能看过大量相关资料。但这类似于人类的记忆:读过书后才能总结。

通常,直接提供信息效果更好。更好的提示是请求帮助总结,并附上参考文本。 我通常会复制粘贴第一章内容。 这样,模型可以直接访问信息,无需回忆,从而显著提高摘要质量。这与我们人类相似,如果在总结前重新阅读,就能写出更好的摘要。

我接下来想简要谈谈另一种心理上的怪癖:自我认知。我经常在互联网上看到人们向大型语言模型提出诸如“你是哪个模型?谁创造了你?”之类的问题。这个问题多少有些荒谬。

原因在于,当我试图解释一些底层原理时,这东西并非一个人,它根本没有任何持久的存在。它启动、处理标记,然后关闭,对每个人都如此操作。它只是构建一个对话的上下文窗口,然后所有内容都被删除。所以,这个实体就像每次对话都从头开始重启。它没有持久自我,没有自我意识,它只是一个标记搅拌机,遵循其训练集的统计规律。所以,问它“你是谁”、“是谁创造了你”等等,并没有什么意义。默认情况下,你将会得到一些非常随机的答案。

例如,让我们以Falcon为例,这是一个相当旧的模型。它在回避问题,编造说自己是由OpenAI基于GPT-3模型构建的。很多人会认为这是该模型在OpenAI数据上进行训练的证据,但我并不这么认为。因为,如果你没有明确地对模型进行编程以回答这类问题,你得到的将是其对答案的统计最佳猜测。这个模型具有包含对话的SFT数据混合,在微调过程中,模型在根据此数据进行训练时,某种程度上理解到它正在承担一个有帮助的助手的角色。它并没有被明确告知应该给自己贴上什么标签,它只是扮演了一个乐于助人的助手。

记住,预训练阶段使用了来自整个互联网的文档,而ChatGPT和OpenAI在这些文档中非常突出。我认为这里实际发生的情况是,这只是它自己幻想出来的标签——它的自我认同,即它是OpenAI的ChatGPT。它之所以这么说,是因为互联网上存在大量类似的答案数据,这些答案实际上来自OpenAI和ChatGPT。所以这就是它给自己贴的标签。

现在,作为开发者,你可以覆盖它。如果你有一个大型语言模型,你实际上可以覆盖它,并且有一些方法可以做到这一点。举个例子,让我来给你展示一下Allen AI的Olmo模型。这是一个大型语言模型(LLM),它并不是顶级的大型语言模型,但我还是很喜欢它。

Olmo及其相关论文均为开源,这很好。其SFT混合体包含微调数据和对话数据集。Olmo模型的训练数据包含一百万次对话,但Olmo2模型仅使用240次硬编码对话。

这些硬编码对话包含预设问题及答案,例如询问模型名称、开发机构等。 将这240次对话用于微调,模型会倾向于鹦鹉学舌,否则可能产生无意义的AI生成内容。

另一种方法是使用系统消息,在对话开始前提供模型身份、训练日期、知识截止日期等信息。这类似于为模型创建文档记录,并将其隐藏在上下文窗口中。这两种方法都能使模型描述自身,但都属于附加信息,并非模型内在属性。

接下来讨论这些模型在解决问题场景中的计算能力,以及构建对话示例时需要注意的事项。这些模型的思考方式具有启发性,需要仔细考量。 接下来,让我们考虑一个来自人类的提示,并假设我们将以此构建对话示例,用于训练模型解决简单的数学问题。

艾米莉买了三个苹果和两个橙子,每个橙子两美元,总价是13美元。苹果的价格是多少?这是一个简单的数学题,有两个正确的答案,都是3。但其中一个答案对辅助模型来说更好。例如,数据标注员在创建答案时,一个答案对模型来说很糟糕,另一个则可以接受。

思考一下为什么两个答案中一个明显比另一个更好。使用错误的答案会使模型的数学能力变差,并产生不良后果。在训练人员创建理想回复时,这是标注文档中需要注意的事项。

模型在训练和推理时,都是从左到右处理一维的标记序列。可以想象标记序列从左到右演变,为了生成序列中的下一个标记,所有标记都输入到神经网络中,神经网络给出下一个标记的概率。

这与之前的网络演示图完全一样,计算过程获取上面输入的标记,执行神经元运算,给出下一个标记概率的答案。模型只有有限几层计算,例如只有1、2、3层注意力机制和MLP,而现代先进网络可能有100层甚至更多。

从之前的标记序列到下一个标记的概率,只有大约100层的计算。对于每个标记,只有有限量的计算,可以认为计算量非常少且几乎固定。虽然输入的标记越多,神经网络的前向传播越昂贵,但不会贵很多。

可以将模型理解为对每个标记进行固定量的计算,计算量不会太大,因为层数有限,计算量有限。模型无法仅仅通过一次前向传播进行任意计算来获得单个标记。

这意味着推理和计算必须分布到许多标记上,因为每个标记只在其上花费有限量的计算。我们希望将计算分布到许多标记上,并且不能对模型在任何单个标记上的计算期望过高,因为每个标记的计算量是有限的。

这里的计算量大致是固定的。因此,左侧答案明显更差。原因是模型必须从左到右逐个生成标记,它需要在单个标记中完成所有计算并给出答案“3”。一旦答案生成,后续标记只是对答案的解释,因为答案已在上下文窗口中。模型实际上并未进行计算,而是试图在一个标记中猜测答案,由于每个标记的计算量有限,这行不通。

右侧答案则好得多,因为它将计算分布在整个答案中,让模型逐步得出答案。从左到右,模型生成中间结果,例如“橙子的总成本是4,所以13减去4是9”。每个中间计算都不复杂,模型在每个标记中处理的难度降低。测试时,模型也能进行计算。我们教模型分散推理,将计算分散到各个标记上,每个标记处理简单问题,最终累加得到答案。

这与左侧的方案形成对比,左侧方案教模型试图在一个标记中完成计算,这非常糟糕。 通常不必明确考虑这一点,因为OpenAI的标注员会确保答案是分散的,OpenAI会处理这个问题。 当我询问ChatGPT时,它会缓慢地生成答案,创建中间结果(这些结果对用户不可见,但对模型很重要)。 如果没有这些中间结果,模型无法得出正确的答案“3”。

最后,我们可以故意刁难模型。例如,使用相同的提示,要求它用单个标记回答问题。

直接给我答案,什么都不要。结果发现,对于这个简单的提示,它竟然一次就完成了。它只创建了一个,我想这是两个词元,对吧?因为美元符号本身就是一个词元。所以基本上,这个模型没有给我一个词元,它给了我两个词元,但它仍然给出了正确的答案。而且它是在网络的单次前向传播中做到的。

现在,这是因为这里的数字非常简单。所以我把它弄得更难一些,故意刁难一下模型。所以我说道,艾米莉买了23个苹果和177个橙子,然后我只是把数字弄得大了一点,只是让模型更难处理了,我要求它在一个token中进行更多计算。所以我说了同样的话,它在这里给了我5,而5实际上是不正确的。

所以模型未能在一轮网络前向传播中完成所有计算。它未能从输入token出发,然后在一轮网络前向传播中,一次性通过网络,它无法产生结果。然后我说,好吧,现在别担心token限制,像平时一样解决问题吧。然后它会列出所有中间结果,进行简化。这里每一个中间结果和中间计算,对模型来说都容易得多,而且每个令牌的工作量也不算太大。此处的所有令牌都是正确的,它产生了一个修正的解决方案,即7。它只是无法压缩所有这些工作,它无法将这些压缩到网络的单次前向传递中。

所以我觉得这只是一个很可爱的例子,可以思考一下,而且我认为这再次阐明了这些模型的工作方式。关于这个话题,我想说的最后一点是,如果我在日常生活中实际尝试解决这个问题,我实际上可能不会相信模型,不会相信这里所有中间计算的正确性。所以实际上,我可能会这样做:我会来到这里,然后说,“使用代码”。

这是因为代码是ChatGPT可以使用的工具之一。而不是让它进行心算,像这里的心算一样,我不完全相信它,尤其当数字变得非常大时,模型无法保证能够正确地进行运算。从原则上讲,任何一个中间步骤都可能失败。我们正在使用神经网络进行心算,就像你在大脑中进行心算一样,它可能会搞砸一些中间结果。它甚至能够进行这种心算,这实际上令人惊叹,我认为我无法在脑子里做到这一点。但基本上,模型就像在它自己的“脑子里”进行运算。我不相信这一点,所以我希望它使用工具。因此你可以说一些诸如“使用代码”之类的话。我不确定那里发生了什么。使用代码。正如我提到的,有一个特殊的工具,模型可以编写代码。我可以检查这段代码是否正确。然后它就不依赖于它的心算能力了。它使用Python解释器(这是一种非常简单的编程语言)来编写计算结果的代码。

我更信任Python程序的结果,它比语言模型的直接计算更可靠。因此,遇到类似问题时,建议使用模型的代码解释器。

模型通过专用标记调用代码解释器,这并非语言模型自身生成。它编写程序,发送到计算机的特定部分执行,再将结果返回给模型。模型据此得出每个苹果7元的结论。这是另一种实用工具,建议大家实践操作。

这种方法更容易避免错误。这就是本节命名为“模型需要令牌来思考”的原因:分散计算到多个令牌,要求模型创建中间结果,并尽可能依赖工具,而不是让模型将所有内容都储存在内存中。如果模型试图将所有内容都储存在内存中,不要完全相信它,优先使用工具。

我将用另一个例子说明这种情况:计数。语言模型不擅长计数,因为在一个单独的词元中要求太多。例如,我展示一堆点,让模型计算数量。模型试图在一个词元中解决这个问题,即在上下文窗口中计算点数,并在网络的单次前向传递中完成。但网络单次前向传递的计算能力有限。

模型看到的只是分词器处理后的结果。例如,“下面有多少个点”,以及随后的一堆点,可能被分词器分成若干个词元,每个词元包含一组点。模型实际看到的只是这些词元的ID,然后据此计算数量。结果并非161,而是177。

我们可以使用代码解决这个问题。虽然看似简单,但实际上我已将问题分解成对模型更容易处理的子问题。使用代码后,结果正确显示为177。

我知道模型擅长复制粘贴。 使用代码时,模型会创建一个Python字符串,并将输入复制粘贴到其中。 模型将字符串视为几个标记,复制粘贴并解包这些标记非常简单。 因此,模型创建字符串,调用Python例程dot count,最终得到答案。Python解释器进行计数,而非模型的心算。 这再次说明模型需要标记来思考,不能依赖其心算能力,这也是模型计数能力不佳的原因。 如果需要模型执行计数任务,应始终让其借助工具。

模型还有许多其他小的认知缺陷,这些是技术上的不足,需要时间来逐渐改进。例如,模型在各种拼写相关的任务上表现不佳。 这与分词有关,因为模型看到的是词元而非字符。模型的世界是基于词元的,词元是文本片段。 因此,简单的字符级任务往往会失败。

例如,给模型一个字符串“ubiquitous”,要求其打印从第一个字符开始的每第三个字符。 模型的结果可能不正确,这可能是因为算术运算失败,更重要的是,模型无法像人类一样访问单个字母。模型将三个词元视为一个整体,因为其训练数据是基于词元的。 模型需要从大量数据中学习不同字母与词元之间的关系,而我们使用词元的主要原因是为了提高效率。 很多人希望完全取消词元,使用字符级或字节级模型,但这会产生非常长的序列,目前人们还不知道如何处理。

因此,在分词的世界里,任何拼写任务实际上都不指望能做得很好。因为我知道由于分词的原因,拼写不是它的强项,所以我又能要求它依赖工具,我可以直接说使用代码。我再次预期这会奏效,因为将“ubiquitous”复制粘贴到Python解释器中的任务要容易得多,然后我们依靠Python解释器来操作这个字符串的字符。所以我如果说使用代码,“ubiquitous”,是的,它会索引到每一个第三个字符,实际的结果是“UQTS”,在我看来是正确的。所以,再次,这是一个拼写相关任务效果不好的例子。

最近一个非常著名的例子是,草莓(strawberry)中有多少个字母R?这多次在网上病毒式传播。基本上,现在的模型都能正确回答了,它们会说草莓中有三个R,但很长一段时间里,所有最先进的模型都会坚持说草莓里只有两个R。这引起了很多骚动,因为这是一个词吗?我想是的。因为这就像,为什么这些模型如此出色?它们可以解决数学奥林匹克竞赛题,但它们却不能,比如,数草莓里的“R”。而对此的答案,同样地,我已经慢慢地解释了,但首先,模型看不到字符,它们看到的是标记;其次,它们不太擅长计数。所以我们在这里结合了看到字符的困难和计数的困难,这就是为什么模型难以解决这个问题,尽管我认为现在,老实说,我认为OpenAI可能已经在这里硬编码了答案,或者我不确定他们做了什么。但这个具体的查询现在可以工作了。

所以模型不太擅长拼写,还有一些其他的小问题,我不想一一赘述。我只想展示一些在实际使用这些模型时需要注意的例子。我实际上并不想在这里全面分析模型的所有不足之处,我只想指出,这里有些地方不够完善。我们已经讨论过其中一些,其中一些说得通,但有些则说不通。它们就像……即使你深入了解这些模型的工作原理,也会让你摸不着头脑。

最近的一个很好的例子如下:这些模型在处理像这样的非常简单的问题时表现不佳,这让很多人感到震惊,因为这些模型可以解决复杂的数学问题。它们能够比我更好地回答博士级别的物理、化学、生物学问题,但有时它们在像这样的超级简单的问题上却力不从心。所以,我们开始吧。9.11大于9.9,它以某种方式证明了这一点,但是很明显……然后最后,好吧,它实际上后来又改变了决定。所以我不认为这是非常可重复的。有时候它会改变答案,有时候它答对了,有时候它答错了。我们再试一次。好吧,即使它看起来可能更大……好吧,所以这里它最终甚至没有自我纠正。

如果你反复提问,有时它也能给出正确答案。但模型如何在奥林匹克级别的难题上表现出色,却在如此简单的题目上失败呢?我认为这一点,正如我提到的,有些令人费解。

事实上,许多人对此进行了深入研究,虽然我并未阅读相关论文,但我从研究团队了解到,当仔细检查神经网络内部的激活情况,查看哪些特征开启或关闭,哪些神经元开启或关闭时,发现许多通常与圣经经文相关的的神经元被激活。因此,我认为模型可能受到了这些类似圣经经文标记的提示,在圣经经文的语境下,9.11 会出现在 9.9 之后。所以,模型不知何故认为在圣经经文中 9.11 比 9.9 大,这在认知上令人费解,即使它尝试用数学方法证明并得出答案,最终却得到错误的结果。所以,它基本上说不通,也没有被完全理解,还有一些类似的棘手问题。这就是为什么应该把它当成它本来面目——一个真正神奇的随机系统,但你不能完全信任它。你应该把它当作工具来使用,而不是直接复制粘贴其结果。

现在我们已经涵盖了大型语言模型训练的两个主要阶段。首先是预训练阶段,我们基本上是在互联网文档上进行训练。当使用互联网文档训练语言模型时,得到的是所谓的基模型,它基本上是一个互联网文档模拟器。这是一个有趣的产物,训练它需要在数千台计算机上花费数月时间,可以说是互联网的一种有损压缩。它极其有趣,但并没有直接的用处,因为我们不想采样互联网文档,我们想向人工智能提问并让它回答我们的问题。所以,我们需要一个助手。

我们可以在后期的训练过程中构建一个助手,尤其是在监督微调过程中。在这个阶段,算法与预训练相同,没有任何变化,唯一改变的是数据集。我们不再使用互联网文档,而是创建一个并精心策划一个非常棒的对话数据集。我们需要数百万个关于各种不同主题的人与助手之间的对话。从根本上说,这些对话是由人类创造的,人类编写提示,也编写理想的回复。他们根据标注文档来做这件事。现在,在现代技术栈中,实际上并不是完全由人工手动完成的,他们现在实际上得到了这些工具的大量帮助,所以我们可以使用语言模型来帮助我们创建这些数据集,而且这是广泛使用的。

但从根本上说,这一切都源于人工策划。我们创建了对话数据集,对其进行微调或继续训练,最终得到一个助手模型。然后,我们开始探讨助手的认知特性。例如,如果不采取缓解措施,助手会出现幻觉,这很常见。我们研究了缓解幻觉的措施。我们发现这些模型令人印象深刻,能够在“脑子里”完成很多事情,但也能通过工具提升性能。例如,网络搜索可以减少幻觉,获取更新信息;代码解释器可以帮助大型语言模型编写、运行代码并查看结果。这些是我们目前研究的一些主题。

现在我想介绍流程的最后一个也是最重要的阶段:强化学习。强化学习属于后期训练,是第三个主要阶段,也是一种不同的语言模型训练方式,通常作为第三步进行。在OpenAI这样的公司,这由独立团队负责:一个团队负责预训练数据,一个团队负责预训练训练,一个团队负责对话生成,一个团队负责监督微调,还有一个团队负责强化学习。这就像模型的交接:得到基础模型后,微调成助手,然后进行强化学习,接下来我们将讨论它。

这就是主要流程,现在让我们关注强化学习,这是训练的最后一个主要阶段。首先解释其动机,以及为什么我们要进行强化学习,以及它在高层次上的样子。我想解释强化学习阶段的动机及其对应内容。这类似于上学:我们想让大型语言模型“上学”,变得非常优秀。我们使用几种范例向它们传授知识或转移技能。

在学校使用教科书时,你会发现三种主要信息类型。第一种是大量的阐述性内容。这是一本我从网上随意找来的书,可能是某种有机化学书籍,我不确定。重要的是,你会发现大部分文本,大部分内容是阐述性的核心部分,就像背景知识等等。阅读这些阐述性文字,可以将其理解为对数据的训练,就像预训练一样。

这是我们构建数据知识库并了解主题的地方。你接下来会看到的主要信息是问题及其解答。一位人类专家,例如本书作者,不仅提供了问题,还完成了解答过程,这个解答等同于理想的助手回应。专家展示了如何完整地解决问题,我们在阅读解决方案时,就是在专家数据上进行训练,之后可以尝试模仿专家,这相当于拥有SFT模型。我们完成了预训练,并涵盖了对专家的模仿以及他们如何解决问题。

强化学习的第三阶段是练习题。有时只有一个练习题,但教科书章节结尾通常有很多练习题。练习题至关重要,因为它们让你练习并发现自己解决问题的方法。练习题中只有题目描述,没有解题过程,答案通常在课本答案key中给出。你知道最终答案和题目陈述,但没有解题过程,你正在练习解题过程,尝试不同的方法,查看哪种方法最能得到最终解决方案,探索如何解决问题。在这个过程中,你依赖于预训练的背景信息,以及模仿人类专家的方法,可能还会尝试类似的解决方案。我们已经完成了这些,现在我们将进行练习。我们将得到提示和最终答案,但没有专家解法,必须练习并尝试各种方法,这就是强化学习的意义所在。

让我们回到之前处理过的问题,以便有一个具体的例子。我在这里使用tick分词器,因为我想要一个文本框。但我想再次提醒你,我们始终处理一维的token序列。我更喜欢这种视图,因为它就像LLM的原生视图,它看到的是token ID。

艾米丽买了三个苹果和两个橙子。每个橙子2美元。所有水果的总成本是13美元。每个苹果的成本是多少?这四个可能的候选解决方案,只是个例子,它们都得出答案三。如果我是创建训练集人工数据标注者,我实际上并不知道……

要将哪些对话添加到数据集中?一些对话构建了一个方程组,一些仅用英语解释,还有一些直接跳到解决方案。例如,使用ChatGPT并提出问题,它会定义一个变量系统并进行类似操作。

然而,我们需要区分的是,解决方案的首要目的是得出正确答案。我们想要得到最终答案“三”,这是最重要的目标。但也有次要目标,即使其对人类友好。我们假设用户希望看到解决方案和中间步骤,并以清晰的方式呈现。所以这里存在两件事:一是面向人类的呈现,二是获得正确答案。

让我们暂时专注于仅获得最终答案。如果我们只关心最终答案,那么哪个提示最优或最好?或者,对于LLM来说,哪个解决方案最能获得正确答案?我认为我们不知道。作为人类标注者,我也不知道哪个更好。

例如,我们之前在查看标记序列和心算推理时发现,对于每个标记,我们基本上只能花费有限的计算量,而且不算很大。所以我们实际上不能在任何一个标记上取得太大的飞跃。例如,这个例子很好,因为它只有很少的标记,我们只需要很短的时间就能得到答案。但是,当我们计算“13减4除以3等于”时,在这个标记中,我们实际上要求在这个单个标记上进行大量的计算。所以也许这是一个不好的例子,不适合大型语言模型,因为它有点诱导它很快地跳过计算过程,并可能在心算中出错。所以也许把计算分散开来会更好,也许最好把它设定成一个方程式,也许最好把它讲清楚。我们根本不知道。

我们不知道的原因是,对你、我或作为人类标注者来说什么容易什么困难,与对大型语言模型来说什么容易什么困难是不同的。它的认知是不同的,标记序列对它来说难度也各不相同。所以,一些对我来说微不足道的标记序列,对大型语言模型来说可能就太难了。这个标记就太难了。但相反地,我在这里创建的许多标记对大型语言模型来说可能只是微不足道的,而我们只是在浪费标记。为什么要浪费这么多token,这些都是些无关紧要的事情?

所以,如果我们唯一关心的是得到最终答案,并将向人类呈现结果的问题区分开来,那么我们实际上并不知道如何标注这个例子。我们不知道LLM会得到什么解决方案,因为我们不是LLM。

在数学例题中,这一点非常清晰,但这实际上是一个普遍问题,因为我们的知识与大型语言模型(LLM)的知识不同。LLM实际上拥有大量的数学、物理、化学等领域的博士级知识,所以在很多方面,它比我懂得更多,而我可能没有在我的问题解决过程中充分利用这些知识。相反,我可能会在我的解决方案中加入大量LLM参数中不包含的知识,这些知识就像突然的飞跃,让模型感到困惑。因此,我们的认知是不同的。如果我们只关心经济高效地找到最终解决方案,理想情况下,我不知道该如何处理。

总之,我们目前无法为大型语言模型创建这些标记序列。它们通过模仿来初始化系统,这很有用,但我们真正希望大型语言模型能够自行发现有效的标记序列。它需要自己找到在给定提示的情况下可靠获得答案的标记序列,这需要在一个强化学习和反复试验的过程中实现。让我们看看这个例子在强化学习中是如何工作的。

现在回到Hugging Face推理playground。这让我能够轻松调用不同类型的模型。例如,我选择了Gemma 20亿参数模型。这是一个微型模型,但这没关系。强化学习的工作方式很简单:我们需要尝试许多不同类型的解决方案,看看哪些有效,哪些无效。我们接收提示,运行模型,模型生成一个解决方案,然后我们检查它。这道题的正确答案是3美元,模型回答正确了。

这只是一次尝试,我们删除它,再次运行。模型以稍微不同的方式解决了问题,因为这些模型是随机系统。记住,每个标记都有一个概率分布,我们正在从中采样,所以我们会沿着稍微不同的路径前进。第二个解决方案也得到了正确的答案。我们再试一次,再次得到稍微不同的解决方案,但也得到了正确的答案。

我们可以重复这个过程很多次。在实践中,你可能会采样数千个甚至上百万个独立的解决方案。其中一些是正确的,而另一些则不太正确。我们想要鼓励那些导致正确答案的解决方案。让我们看看它是什么样的。

一个关于该过程的卡通图解显示,我们针对一个提示,并行尝试了许多不同的解决方案。一些解决方案成功,得到绿色表示的正确答案;另一些则失败,得到红色表示的错误答案。

这个例子并非最佳,因为它是一个简单的提示,即使是拥有20亿参数的模型也能始终给出正确答案。但让我们假设绿色方案是好的,红色方案是不好的。

我们生成了15个解决方案,只有4个正确。我们要鼓励那些得到正确答案的解决方案。红色解决方案中出现的标记序列显然存在问题,并非好的解决方案路径;而绿色解决方案中出现的标记序列则进展顺利。

我们希望在类似提示中做更多类似的事情,通过训练这些序列来鼓励这种行为。这些训练序列并非来自专业标注人员,而是模型本身生成的。模型尝试了多个解决方案,其中四个有效,并将以此进行训练。这类似于学生检查自己的解题方法,并认为有效的方法就是解决这类问题的方式。

实际上有很多方法可以微调此方法,但为了理解核心思想,最简单的方法是从四个解决方案中选择最佳的一个,例如用黄色标注的那个。它不仅考虑了正确答案,可能还具备其他优点,例如长度最短或看起来最佳等。我们将以此进行训练,参数更新后,模型未来更有可能采用这种路径。

但需记住,我们将针对许多不同的数学、物理和其他问题运行许多不同的多样化提示,可能有成千上万个提示,每个提示可能有成千上万个解决方案,这一切同时发生。

当我们迭代该过程时,模型正在自行发现哪些类型的标记序列能引导它得到正确答案,而非来自人工标注者。模型如同在游乐场玩耍,它知道想要什么,并正在发现对它有效的序列,这些序列不会进行任何思维上的跳跃。

它们似乎可靠且具有统计学意义,并充分利用模型已有的知识。这就是强化学习的过程,它本质上是试错法:我们猜测多种解决方案,检查它们,并更多地采用将来有效的方法。

因此,SFT模型(监督微调模型)仍然有用,因为它能将模型初始化到正确解决方案附近,这类似于模型初始化。它能帮助模型找到解决方案,例如撰写答案、理解如何构建方程组或讲解解决方案,从而接近正确答案。但强化学习才是关键,它确保一切精确到位。我们发现有效的解决方案、得到正确答案,并鼓励模型学习,使其随时间推移不断改进。

这就是我们训练大型语言模型的总体过程,与训练儿童非常相似。不同之处在于,儿童学习书籍章节并完成各种练习题,而人工智能的训练则分阶段进行:预训练阶段类似于阅读所有解释性材料,构建知识库;监督微调(SFT)阶段类似于查看人类专家提供的各种已解决的方案,从而模仿专家的行为;强化学习阶段则类似于完成所有练习题。

从高层次来看,我们训练大型语言模型的方式与训练儿童的方式非常相似。预训练和监督微调阶段已存在多年,是标准流程;而强化学习训练阶段仍处于早期发展阶段,并非标准流程。

之所以如此,是因为我跳过了许多细节。高层次的概念很简单,是一种试错学习,但其中包含许多细节,以及关于如何选择最佳解决方案、训练次数、提示分布以及如何设置训练运行以使其真正有效的微妙的数学方面。

这个核心思想非常简单,但包含许多细节和可调参数,因此实施并非易事。许多公司,例如OpenAI等大型语言模型提供商,内部已尝试使用强化学习微调大型语言模型,但鲜有公开讨论。所有工作都在公司内部进行。

DeepSeek论文的意义在此凸显。这篇来自DeepSeek AI公司的论文,首次公开讨论了大型语言模型的强化学习微调,及其重要性以及如何提升模型的推理能力。我们稍后将详细介绍。这篇论文重新激发了公众对使用强化学习训练大型语言模型的兴趣,并提供了许多复制结果及模型实际运行所需的细节信息。

让我简要介绍DeepSeek R1论文,以及强化学习应用于语言模型后的效果、表现和益处。首先,我们关注图2,它展示了模型解决数学问题能力的提升,即AIME准确率。这些数学题相对简单,大家可以暂停视频查看题型。结果显示,模型最初表现不佳,但在经过数千步更新后,准确率持续提高。模型通过反复试验,不断改进,最终以更高的准确率解决问题,学习了如何解决数学问题。

但更令人惊奇的并非定量结果(更高的准确率),而是模型实现这些结果的定性方法。在优化的后期,模型似乎使用了更长的平均回复长度,即使用了更多token来获得更高精度的结果,学习创建非常长的解决方案。

为什么解决方案如此冗长?模型学习并涌现出的一种特性是:通过重新评估步骤来提高准确性,例如,一步一步重新评估以确定正确的总和。模型尝试许多想法,发现这种方法对解决问题很有帮助,并持续使用。这是一个典型的“啊哈”时刻。

从不同的角度尝试、回溯、重新构建、倒退更有效果。它正在做很多你我在解决数学问题过程中会做的事情,但它是在重新发现你脑子里发生的事情,而不是你写在解题过程中的内容。没有人能够将这些东西硬编码到理想的助手响应中。这只是在强化学习过程中才能发现的东西,因为你不会知道该在这里放什么。这对模型来说恰好有效,并提高了它解决问题的准确性。所以模型学习了我们所说的你脑子里这些思维链,它是优化的一个涌现特性。这就是导致响应长度膨胀的原因,但这同时也提高了解决问题的准确性。所以这里令人难以置信的是,模型基本上是在发现思考的方法。它正在学习我所说的认知策略,即如何操纵问题以及如何从不同的角度来处理它,如何引入一些类比或做其他类似的事情,以及如何随着时间的推移尝试许多不同的方法,从不同的角度检查结果,以及如何解决问题。但是它却被强化学习(RL)发现了。看到这一点在优化过程中出现,而无需在任何地方进行硬编码,这真是令人难以置信。我们唯一提供给它的只是正确的答案,而这仅仅是从试图正确解决问题中得出的,这令人难以置信。

现在让我们回到我们一直在处理的问题,让我们看看对于这种我们称之为推理或思考模型的模型,解决这个问题会是什么样子。好吧,回想一下,这就是我们一直在处理的问题,当我把它粘贴到ChatGPT 4.0中时,我得到了这种回应。让我们看看当你对所谓的推理或思考模型提出相同的查询时会发生什么。这是一个使用强化学习训练的模型。

因此,这篇论文中描述的模型,DeepSeek R1,可在chat.deepseek.com上获得。所以这就像开发它的公司正在托管它一样。你必须确保DeepThink按钮已打开才能获得所谓的R1模型。我们可以在此处粘贴并运行它。那么让我们看看现在发生了什么,以及模型的输出是什么。

好,这就是它所说的。所以,这是我们之前使用基本上是SFT方法,一种监督微调方法所获得的结果。这就像模仿专家的解决方案。这是我们从强化学习模型中得到的结果。好吧,让我试着弄清楚。埃米莉买了三个苹果和两个橙子。每个橙子两美元,总共13美元。我需要找出……等等。因此,当你阅读到这里时,你无法避免地会认为这个模型正在思考。它无疑正在寻求解决方案。它推导出答案必须是三美元,然后它说,等等,让我再检查一下我的计算,以确保无误。然后它尝试从稍微不同的角度来看待问题。然后它说,是的,所有这些都符合逻辑。

我认为这就是答案,我没有发现任何错误。我尝试了其他解题方法,例如列方程。假设一个苹果8美元……等等,答案相同,所以每个苹果都是3美元。我确信这是正确的。模型在完成思考过程后,会为人类写出一个清晰的解决方案。因此,这更关注正确性,而这更关注表达,就像把答案漂亮地呈现出来并标注正确答案一样。

令人难以置信的是,我们得到了模型的思考过程,这是强化学习的结果,也是导致标记序列长度膨胀的原因。模型在思考,尝试不同的方法,从而在解决问题中获得更高的准确性。这就是我们看到“啊哈”时刻、不同的策略以及确保获得正确答案的想法的地方。

最后,我想说的是,有些人对将敏感数据上传到chat.eepseek.com(一家中国公司)感到担忧,所以人们对此比较谨慎。DeepSeek R1是该公司发布的一个模型,这是一个开源或开放权重模型,任何人都可以下载和使用。你无法在本地设备上以完整模型的形式运行它,因为它规模很大,但许多公司托管了完整的最大模型。

我喜欢使用Together.ai。在Together.ai上注册并进入Playgrounds,你可以选择DeepSeek R1聊天,这里还有许多其他模型可供选择,这些都是最先进的模型。这类似于我们一直使用的Hugging Face推理playground,但Together.ai通常会托管所有最先进的模型。选择DeepSeek R1,默认设置通常就可以了。在这里输入问题,由于模型由DeepSeek发布,你在这里得到的结果应该与在chat.deepseek.com得到的结果基本相同。由于采样的随机性,结果可能略有不同,但原则上,模型的能力应该是相同的,你应该能够定量和定性地看到相同的事物。

这个模型来自一家美国公司DeepSeek,被称为推理模型。当我回到聊天……让我到这里来聊天……好吧,所以你将在这个下拉菜单中看到一些模型,例如O1、O3 Mini、O3……

Mini High 等模型关注的是用户的先进推理能力。这些模型通过强化学习进行训练,其技术与 DeepSeek R1 非常相似,这是 OpenAI 员工公开声明的。因此,它们是使用强化学习训练的思维模型。

而免费层提供的 GPT-4o 或 GPT-4o Mini 等模型,则应被认为主要是监督微调模型(SFT 模型)。它们实际上并没有像强化学习模型那样进行思考,即使其中可能包含少量强化学习元素(稍后会详细说明),但它们主要还是 SFT 模型。

我们可以选择一个思维模型,例如 O3 Mini High(需要注意的是,这些模型可能需要付费订阅 ChatGPT,每月 20 美元或 200 美元不等才能使用)。选择模型后运行,它会显示推理过程,但显示的内容与内部实际过程并不完全一致。

即使在后台模型会生成完整的思维链,OpenAI 也会选择在 Web 界面中只显示简短摘要。这可能是因为 OpenAI 担心所谓的蒸馏风险,即有人可能通过模仿推理思维链来恢复大量的推理性能。所以他们隐藏了完整的思维链,只显示摘要。因此,你不会得到与 DeepSeek 在推理本身方面完全相同的结果。

就性能而言,这些模型与 DeepSeek 模型目前大致相当。由于评估方法的限制,很难精确判断,但如果每月向 OpenAI 支付 200 美元,我相信其中一些模型会更好。但就目前而言,DeepSeek R1 仍然是一个非常可靠的思维模型选择,你可以通过其公开的权重在任何网站上使用它,甚至可以下载模型。

总结一下,我们讨论了强化学习以及在优化过程中涌现出思考能力的情况,尤其是在处理许多具有可验证解的数学和代码问题时,例如答案为“三”的情况。这些思维模型,你可以在 DeepSeek 或其他推理提供商(例如 together.ai)中访问并选择 DeepSeek。

这些思考模型可在ChatGPT的任何O1或O3模型下使用,但GPT 4.0等模型并非思考模型,应将其视为SFT模型。

如果提示需要高级推理,则应使用思考模型,或至少尝试一下。但经验表明,对于许多简单问题,例如基于知识的问题,使用思考模型就有点过头了,例如,无需花费30秒思考一些事实性问题。因此,对于这类情况,我通常使用GPT 4.0。

根据我的经验,大约80%-90%的使用场景都是GPT 4.0。遇到非常困难的问题,例如数学和代码问题时,我会求助于思维模型,但需要等待更长时间,因为它们需要思考。这些模型可在ChatGPT和DeepSeek上访问。

此外,我想指出aistudio.google.com,尽管其界面不够友好,但它也提供思维模型,例如Gemini 2.0 Flash Thinking Experimental 0121。

Anthropic目前不提供思维模型。总的来说,这些大型语言模型的尖端发展,我认为强化学习是令人兴奋的新阶段,但细节难以把握。

因此,所有这些模型和思维模型在2025年初都处于实验阶段,它们代表着在非常困难的问题上提升性能的尖端发展,其推理能力是这些优化中涌现出来的。

强化学习是一种极其强大的学习方法,这在人工智能领域并非新鲜事。DeepMind开发的AlphaGo系统就是一个例子,其学习过程与顶级人类围棋玩家对弈,这在围棋领域证明了这一点。

AlphaGo论文中展示的图表表明,我们在更开放的任意问题解决领域中重新发现了这种学习方法,而非局限于围棋这一封闭的特定领域。大型语言模型中也展现了同样的现象。

随着围棋比赛ELO等级的日益成熟,以及像LisaDol这样极其强大的棋手的出现,人们开始比较监督学习训练模型和强化学习训练模型的强度。监督学习模型模仿人类专家棋手,通过大量围棋专家对弈数据进行训练,虽然能提升棋力,但最终会达到上限,无法超越顶级高手如LisaDol,因为它仅仅在模仿人类。

强化学习则强大得多。在围棋强化学习中,系统通过经验和统计学方法,学习能够赢得比赛的策略。AlphaGo就是一个例子,它通过与自身对弈,利用强化学习创建展开,尝试多种策略,最终强化那些导致胜利的策略,从而学习经验上和统计上能够赢得比赛的动作序列。强化学习不受人类表现限制,甚至能超越顶级玩家,例如李世石。之所以没有运行更长时间,仅仅是因为成本问题。这展现了强化学习的强大之处,我们也开始在大型语言模型中看到这种能力在解决推理问题方面的潜力。

仅仅模仿专家是不可行的,我们需要超越这一点,建立小型游戏环境,让系统发现独特的、有效的解决问题的方法。强化学习的独特性在于,它可以偏离人类玩游戏的方式。AlphaGo的第37步就是一个例子,这一步棋是人类专家几乎不可能下出的,概率仅为万分之一,但却是一步妙棋。AlphaGo在强化学习过程中发现了人类未知但非常精彩的策略。推荐观看李世石对战AlphaGo第37步的反应和分析视频。AlphaGo此举令人惊讶,甚至被误认为是错误,正是因为其超越了人类的常规思维。

在训练过程中,模型采取了一种人类不会采取的策略,这凸显了强化学习的威力。原则上,如果我们在大型语言模型中扩展这种范式,我们可以看到类似的效果,但具体表现形式目前尚不清楚。

以人类无法企及的方式解决问题意味着什么?如何超越人类的推理和思维能力?或许这意味着发现人类无法创造的类比,或者是一种全新的思考策略。这难以想象,也许是一种全新的语言,甚至并非英语。模型不受限制,可能自行发展出更有效的思考语言。因此,系统的行为定义将更加模糊,它可以执行任何有效的操作,并可能逐渐偏离训练数据(即英语)的分布。

但这有赖于庞大而多样化的题库,让这些策略得以完善和改进。目前许多大型语言模型研究的重点,正是创建这种庞大而多样化的提示分布,作为模型练习思考的游戏环境,这类似于编写练习题,需要为所有知识领域创建练习题。拥有大量练习题后,模型就能通过强化学习生成这些图表,但要在开放性思维领域,而非像围棋这样的封闭领域。

强化学习的另一个方面是不可验证领域的学习。迄今为止,我们研究的问题都在可验证领域,任何候选方案都可根据答案轻松评分。例如,答案是“三”,我们可以很容易地根据答案“三”来评分。我们可以要求模型框出答案,然后检查框内内容是否与答案相符,或者使用大型语言模型评判器,它查看解决方案,获得答案,并根据解决方案与答案是否一致来评分。目前大型语言模型的性能足以可靠地完成此任务。

然而,在不可验证领域,这种策略失效了。例如,创意写作任务,如写一个关于鹈鹕的笑话、写一首诗或总结一段话等,对不同解决方案的评分就变得更加困难。例如,评价一个关于鹈鹕的笑话的好坏,就缺乏客观的标准。

我们可以生成许多不同的笑话,例如,让ChatGPT生成关于鹈鹕的笑话。“它们的喙里塞满了那么多东西,因为它们不用背包。”  或者,“为什么鹈鹕从不付酒钱?因为它们总是把账单算到别人头上。”  这些模型显然不太擅长幽默,这很有趣,因为幽默本身就很难,而这些模型显然还不具备这种能力。

无论如何,我们可以生成很多笑话,但问题是如何对它们评分?原则上,我们可以让人类查看所有笑话,但如果进行强化学习,需要数千次更新,每次更新都需要查看数千个提示,每个提示又需要查看数百或数千个生成结果,这工作量太大,无法完成。

虽然原则上可以让人类检查并评分所有笑话,然后用这些数据训练模型,但需要太多的人工时间,这是一种不可扩展的策略。我们需要某种自动化策略。这篇论文就提出了一种解决方案:基于人类反馈的强化学习 (RLHF)。这篇论文来自OpenAI,许多作者现在是Anthropic的联合创始人。它提出了一种在不可验证领域进行强化学习的方法。

如果我们有无限的人力时间,朴素的方法就是在这些领域运行强化学习。例如,进行1000次更新,每次更新基于1000个提示,每个提示进行1000次展开并评分。问题在于,这需要评估十亿次笑话,这需要大量人力。

所以我们不想那样做,而是采用RLHF方法。RLHF方法的核心技巧在于间接性,我们会让少量人参与进来。我们的方法是训练一个独立的神经网络,我们称之为奖励模型,这个神经网络会模仿人类的评分。

我们会让人类对模型输出进行评分。然后,我们利用神经网络模拟人类的评分,这个神经网络将成为人类偏好的模拟器。有了这个模拟器,我们就可以进行强化学习。我们不再需要询问真人,而是询问模拟人对例如笑话的评分。模拟器允许我们进行任意多次查询,整个过程自动化。 现在,我们可以针对模拟器进行强化学习。

模拟器并非完美的人类模拟,但只要它在统计上与人类判断相似,就能有效运作,事实也证明如此。一旦有了模拟器,强化学习就能顺利进行。

接下来,我将用卡通图简要说明这个过程,细节并非关键,这只是核心思想。这张图展示了奖励模型的训练过程。我们有一个提示,例如“写一个关于鹈鹕的笑话”。模型会输出五个不同的笑话。

首先,我们请人将这些笑话从最好到最差排序。例如,这个人认为某个笑话最好,另一个最差。我们要求排序而非直接评分,因为排序对人类来说更容易。排序是模型的监督信号,也是人类对训练的贡献。

接下来,我们将这些笑话输入奖励模型进行评分。奖励模型是一个独立的神经网络,可能是Transformer,但它不是语言模型,因为它不生成文本,而只是一个评分模型。它有两个输入:提示和候选笑话。输出是一个0到1之间的分数,0代表最差,1代表最好。

例如,奖励模型可能对这些笑话给出0.1、0.8等分数。我们将利用这些分数……

数与人工给出的顺序进行比较,并通过精确的数学方法计算损失函数,建立对应关系,并据此更新模型。 直观来看,例如第二个笑话,人类认为最有趣,模型也基本同意(0.8分),但此分数应更高,更新后可能达到0.81左右。

对于另一个笑话,人类认为是第二好笑的,但模型仅给出了0.1分,需要大幅提高,更新后可能达到0.15左右。 而人类认为最不好笑的笑话,模型却给出了较高分数,更新后分数可能会下降到约3.5左右。

本质上,我们微调模型预测结果,使其与人工排序一致。 通过人工数据更新奖励模型,使其模拟人类分数和排序,成为人类偏好模拟器,从而进行强化学习。 无需让人类观看10亿次笑话,只需查看约1000个提示和每次5个展开结果,总共约5000个笑话即可,人类只需给出排序。

我跳过了数学细节,但奖励模型为我们提供分数,并可训练其与人工排序一致,这就是RLHF的工作原理。 我们训练人类模拟器,并针对这些模拟器进行强化学习。

基于人类反馈的强化学习的优势在于,它允许我们运行强化学习,这是一种强大的技术,可在任意领域应用,包括不可验证的领域,例如摘要、诗歌创作、笑话创作等创意写作领域。

经验表明,RLHF能够提高模型性能。 其原因可能与判别器-生成器差距有关,但这尚不清楚,只是我的最佳猜测。

这意味着在许多情况下,对人类来说,判别比生成更容易得多。特别是在监督微调(SFT)中,我们要求人类生成理想的助手回复。正如我所展示的,理想回应在许多情况下很容易编写,但在许多情况下也并非如此。例如,在摘要、诗歌创作或笑话创作中,作为人类标注者,如何获得理想回应?这需要有创意的人工写作。

因此,RLHF在某种程度上规避了这个问题,因为我们向人类提出的问题作为数据标注者要容易得多。他们不需要直接写诗,只需对模型生成的几首诗进行排序。对于人类标注者来说,这是一个容易得多的任务。我认为这使得可以获得更高精度的数据,因为我们没有要求人们完成可能极其困难的生成任务,例如创意写作。我们只是试图让他们区分创意作品并找到最好的那些。这就是人类提供的信号,只是排序,这是他们对系统的输入。然后,在RLHF中,系统只是发现那些会被人类评为高质量的回应类型。这种间接步骤能让模型变得更好一些,这就是RLHF的优势。它允许我们运行强化学习,根据经验它能产生更好的模型,并且它允许人们贡献他们的监督,即使不需要在撰写理想回应的情况下完成极其困难的任务。

不幸的是,RLHF也存在显著的缺点。主要的一个缺点是,我们正在进行强化学习,但不是针对人类和实际的人类判断,而是针对人类的一种有损模拟。这种有损模拟可能会产生误导,因为它只是一种模拟,只是一个语言模型输出分数,它可能无法完美地反映在所有可能的不同情况下拥有真正大脑的实际人类的意见。

但实际上,还有更微妙、更阴险的问题严重阻碍了RLHF作为一种技术,让我们无法将其真正扩展到更智能的系统中。那就是强化学习非常擅长找到一种方法来操纵模型,操纵这个提供分数的奖励模型。这些模型都是Transformer,是大型神经网络,拥有数十亿个参数,并且模仿人类,但它们是以一种模拟的方式进行的。现在问题是,这些都是庞大而复杂的系统,这里有数十亿个参数来输出单个分数。事实证明,有一些方法可以操纵这些模型。你可以找到一些不在其训练集中的输入,而这些输入却不可思议地获得了非常高的分数,但却是一种虚假的得分。然而,如果你长时间运行RLHF,例如进行

经过1000次(这已经很多了)更新后,你可能会期望笑话质量提升,例如关于鹈鹕的笑话越来越精彩,但事实并非如此。在前几百步中,笑话质量或许略有提升,随后会急剧下降,最终得到极其荒谬的结果。

例如,最佳笑话可能变成“的,的,的,的,的,的,的,的,的”。这毫无意义,对吧?你可能会疑惑为何奖励模型会认为这是个好笑话,并赋予它1.0的评分。

这是因为这些模型只是人类行为的模拟,它们是巨大的神经网络,在输入空间底部存在一些能产生荒谬结果的输入,这些被称为对抗样本。它们是特定的小输入,会利用模型的细微之处,最终给出无意义的结果。

你可能会尝试将“的,的,的”标记为低分(例如,5分),期望模型学习到它应该得分很低,甚至为零。然而,模型中总是潜藏着无限多的无意义对抗样本。

即使不断地向奖励模型添加无意义的内容并赋予其极低的分数,你也无法彻底解决这个问题。强化学习如果运行时间足够长,总会找到操纵模型的方法,发现并赋予无意义的对抗样本极高的分数。

根本原因在于评分函数是一个巨大的神经网络,而强化学习非常擅长找到欺骗它的方法。因此,RLHF 通常需要在模型得到改进后进行剪枝,然后发布。

你不能无限期地运行RLHF,因为优化过程会开始操纵奖励模型。你可以改进奖励模型,但最终会遇到这些问题。所以,我通常说RLHF并非那种可以无限运行的神奇强化学习。

这其中也包括得到具体正确答案的情况。

你难以操纵它,结果只有正确或错误,评分函数也简单得多,只需检查区域结果是否正确。因此,操纵这些函数非常困难,但操纵奖励模型是可能的。

在可验证领域,强化学习可以无限期运行,运行数万甚至数十万步,发现各种意想不到的高效策略。围棋中不可能操纵输赢,完美的模拟器能计算出胜负,无法作弊,强化学习可以无限期进行,最终甚至能击败李世石。但对于可操纵模型,无法无限期重复此过程。

某种程度上,我认为RLHF并非真正的强化学习,因为奖励函数可被操纵,它更像是微调,只是略微改进,而非从根本上设置正确,无法通过投入更多算力、运行更长时间获得更好结果。所以,它并非强化学习,因为它缺乏“魔法”。它可以微调模型并提升性能,ChessGPT的GPT-4o模型就经过RLHF,因为它有效。但它并非在相同意义上是强化学习,RLHF只是微调,略微改进模型。

这就是我想涵盖的大部分技术内容。我回顾了训练这些模型的三个主要阶段和范式:预训练、监督微调和强化学习,它们与我们教孩子的过程大致对应。

预训练就像阅读说明性文章的基本知识获取;监督微调是查看大量已完成的示例并模仿专家和练习题的过程;唯一的区别在于,我们现在必须为所有人类知识学科的LLM和AI有效地编写教科书,以及在所有我们希望它们发挥作用的领域,例如代码、数学以及其他学科。我们正在为它们编写教科书,改进我之前介绍的所有算法,并出色地执行大规模高效训练。

我没有深入讨论细节,但这些都是极其庞大而复杂的分布式工作,必须在数万甚至数十万个GPU上运行,其中涉及的工程技术代表了该规模计算机所能实现的最新技术水平。

我也稍微谈到了这些模型的心智理论。我想让你记住的是,这些模型非常好,但它们作为你工作的工具非常有用。

你不应该完全相信大型语言模型,我已经给你展示了一些例子。即使我们已经采取了减轻幻觉的措施,模型也不是完美的,它们仍然会产生幻觉。这种情况随着时间的推移有所改善,并且还会继续改善,但它们仍然可能产生幻觉。除此之外,我还介绍了我所谓的关于大型语言模型能力的“瑞士奶酪”模型,你应该牢记这一点。这些模型在许多不同的学科中都非常出色,但在某些独特的案例中却会随机失败,例如,9.11和9.9哪个更大?模型不知道,但同时它又能解答奥林匹克竞赛题。所以这是一个很大的漏洞,所以不要把这些模型当成绝对可靠的模型。检查它们的工作成果,将它们作为工具使用,将它们作为灵感来源,将它们用于初稿,但要将它们作为工具使用,并最终对你的工作成果负责。

这大致就是我想谈论的内容。这就是它们的训练方式,这就是它们的本质。现在让我们转向这些模型未来的一些能力,可能即将出现的功能,以及你可以在哪里找到这些模型?我有一些要点,关于你可能期待的一些即将出现的功能。

你首先会注意到的是,模型将非常迅速地变得多模态。以上我讨论的内容都与文本有关,但很快我们将拥有能够不仅仅处理文本,而且能够原生且轻松地处理音频的大型语言模型,因此它们能够听和说,也能处理图像,因此它们能够看和画。我们已经看到这一切的开端,但这都将在大型语言模型内部原生完成,这将实现一种自然的对话。粗略地说,这实际上与我们上面讨论的所有内容没有什么不同,因为作为基线,你可以对音频和图像进行标记化,并应用我们上面讨论的所有相同方法。所以这不是一个根本性的改变,只是我们必须添加一些标记。例如,对于音频标记化,我们可以查看音频信号频谱图的切片,对其进行标记化,并添加一些突然代表音频的标记,并将其添加到上下文窗口中,就像上面一样进行训练。图像也是一样,我们可以使用图像块,分别对图像块进行标记化,那么什么是图像呢?图像只是一系列标记。这实际上有效,并且这方面有很多早期工作。因此,我们可以创建代表音频、图像以及文本的标记流,并将它们交错在一起,在一个模型中同时处理它们。这就是多模态的一个例子。

其次,人们非常感兴趣的一点是,目前大部分工作都是我们将单个任务像放在银盘上一样交给模型,例如“请帮我解决这个任务”,模型就会完成这个小任务。但仍然需要我们来组织任务的连贯执行以完成工作。模型还没有达到能够以连贯的纠错方式长时间执行此操作的能力。所以它们还无法完全串联任务。

我们将执行更多长时间运行的任务。这些任务的执行时间正在缩短,并且未来还将持续改善。 我们将看到所谓的“智能体”执行这些任务,人类则监督并观察其工作,智能体将定期汇报进度。这些长时间运行的智能体所需的时间将从几十秒到几分钟甚至几小时不等。

然而,这些模型并非完美无缺,因此所有操作都需要人类监督。 这类似于工厂中的“人机比”,我们将在数字空间中看到类似的“人机比率”,人类将更多地充当数字领域中代理任务的监督者。

未来,这一切都将变得更加普遍和隐形,如同集成到工具中一样,无处不在,就像使用电脑一样。目前,这些模型还无法代表用户采取行动,但这将是一个单独的讨论点。ChatGPT发布的Operator就是一个早期例子,用户可以将控制权交给模型,让模型执行键盘和鼠标操作。

最后,需要强调的是,该领域仍有许多研究空间。例如,测试时训练就是一个例子。 模型训练和推理是两个主要阶段。训练阶段调整模型参数,使其能够很好地执行任务。 一旦参数确定,模型即被部署进行推理,参数不再改变。 模型不会从测试时的操作中学习,参数是固定的,唯一变化的是上下文窗口内的标记。 模型的学习,或测试时学习,仅限于根据测试时操作动态调整上下文窗口的上下文学习。这与人类学习能力不同,人类可以根据自身行为学习,例如睡眠时大脑更新参数。目前模型中没有类似机制。

还有许多有待探索的可能性。 上下文窗口是一种有限且宝贵的资源,尤其是在处理长时间运行的多模态任务(例如输入视频)时,标记窗口将变得非常大,远超数千甚至数十万个标记。目前唯一的技巧是延长上下文窗口,但这并非可扩展的解决方案。

到实际长时间运行的多模态任务,某些学科、情况下和领域需要新的想法,因为这些任务将需要非常长的上下文。未来的一些例子包括……现在我们来看看跟踪该领域进展并了解最新发展的地方。

我主要使用三个资源保持最新状态:首先是LLM Arena。LLM Arena是一个LLM排行榜,对所有顶级模型进行排名,排名基于人工比较。人类向模型发出提示,判断哪个模型给出更好的答案,他们不知道哪个模型是哪个。由此计算排名,得到结果。例如,可以看到谷歌Gemini等不同组织生产的模型。点击模型名称,即可跳转到托管该模型的地方。目前谷歌排名领先,OpenAI紧随其后,DeepSeek排名第三。

这之所以重要,是因为最后一列显示许可证。DeepSeek是MIT许可的模型,开放权重,任何人都可以使用、下载和托管自己的DeepSeek版本。这是一个如此强大的开放权重模型,这有点史无前例。此外还有谷歌和OpenAI的几个模型。向下滚动可以看到其他参与者,例如XAI、Anthropic的Sonnet和Meta的Llama。Llama,类似于DeepSeek,也是开放权重模型。

我必须说,这个排行榜在很长一段时间内都非常好,但我认为在过去的几个月里,它变得有点被操纵了,我不像以前那样信任它了。根据我的经验,很多人使用Anthropic的Sonnet,这是一个非常好的模型,但在排名中却排在第14位。相反,我认为使用Gemini的人不多,但它的排名却非常高。因此,建议先用它作为初步尝试,但也要试用几个模型来完成你的任务,看看哪个模型表现更好。

我想指出的第二件事是AI News时事通讯。

AI News 的名字虽然缺乏创意,但它是由 SWIX 及其朋友们制作的优秀时事通讯,感谢他们一直以来的维护。它对我帮助很大,因为它非常全面,几乎每隔一天就会更新,内容涵盖广泛。部分内容由人工撰写和整理,但很大一部分是通过大型语言模型自动生成的。因此,信息非常全面,浏览一遍几乎不会错过重要内容,尽管篇幅较长可能让人望而却步。但我认为顶部的摘要都相当不错,并且经过人工审核,这对我非常有帮助。

此外,X(Twitter)也是获取 AI 相关信息的重要渠道,建议关注信任且喜欢的账号,获取最新最好的信息。

以上是我长期以来使用的一些主要方法。接下来简单介绍一下大型语言模型的获取和使用方式。对于大型私有模型,可以直接访问提供商的网站,例如 OpenAI(chat.com),Google Gemini(gemini.google.com 或 AI Studio)。

对于 DeepSeek、Llama 等开源权重模型,则需要借助大型语言模型推理提供商,我最推荐 together.ai,其 playground 提供了多种不同模型的选择。这些模型大多针对助手和聊天,较少提供基础模型。

如果需要使用基础模型,我通常会使用 hyperbolic,因为它提供了 Llama 3.1 基础模型,可以直接进行对话。希望未来会有更多平台托管基础模型。

最后,还可以使用一些较小的模型并在本地运行。例如,DeepSeek 模型虽然体积庞大无法在 MacBook 上运行,但其蒸馏模型则可以。

您可以使用更低的精度运行这些模型,例如低于FP8或BF16的精度。 不必担心细节,您可以运行经过蒸馏的较小版本,并使用更低的精度,从而在电脑上运行它们,甚至在笔记本电脑上运行相当不错的模型。

我最常用的工具是LM Studio,一个可下载的应用程序。 不过,它的UI/UX设计我认为很糟糕,而且提供了许多实际上用不到的模型,搜索起来非常困难。 需要选择不同的蒸馏版本和精度,整个过程比较混乱。 但一旦理解了其工作原理(可参考其他视频),就可以加载模型,例如Llama 3.2 instruct 1 billion,直接进行对话。所有操作都在本地完成,无需连接到其他服务器,在我的MacBook Pro的GPU上运行良好。 完成后可以弹出模型释放RAM。 尽管LM Studio存在UI/UX问题,且主要面向专业人士,但我认为观看一些YouTube视频后就能学会使用。

以上就是关于模型获取方式的一些说明。 现在,让我们回到最初的问题:当我们在ChatGPT.com输入查询并点击“Go”时,究竟发生了什么?我们在与什么对话? 这又是如何运作的呢? 本视频希望能帮助您了解这些模型的幕后训练细节以及结果的产生过程。

您的查询首先会被分解成词元,进入TickTokenizer。 用户查询以特定格式输入,我们讨论的对话协议格式决定了对话对象的维护方式。 最终,所有内容都转换成一个一维标记序列。ChatGPT接收这个标记序列,点击“开始”后,它会不断向列表中添加标记,就像一个标记自动补全系统,最终给出回应。

我们可以将它放在这里,并观察其生成的标记。这些标记大致代表了它的持续输出。

现在的问题是:模型为何返回这些标记?这些标记是什么?它们从何而来?我们正在与什么进行对话?我们该如何编程这个系统?

因此,我们转变方向,讨论了模型的内部机制。整个过程分为三个阶段,第一阶段是预训练阶段,它将互联网上的知识融入神经网络的参数中。因此,神经网络内化了大量来自互联网的知识。

但个性真正体现之处在于监督微调过程。在这个过程中,像OpenAI这样的公司会策划一个大型的对话数据集,例如一百万次跨越各种不同主题的人机对话。即便使用了大量的合成数据和LLM辅助,但这本质上仍是一项由大量人工参与的数据整理任务,参与者主要是OpenAI雇佣并接受过指令培训的数据标注员,他们的任务是为任何提示创建理想的助手回复。他们通过示例教会神经网络如何响应提示。

那么,如何理解返回的结果呢?我认为正确的理解方式是,这是OpenAI数据标注员的神经网络模拟。就好像我把查询交给了一位OpenAI的数据标注员,这位标注员阅读OpenAI的所有标注指令后,花两个小时写出理想的助手回复给我。实际上我们并没有这么做,因为我们没有等待两个小时。所以我们得到的是对这个过程的神经网络模拟。

我们必须记住,神经网络的运作方式与人脑不同。它们是不同的。对它们来说简单或困难的事情,与对人类来说简单或困难的事情不同。所以我们实际上只得到了一个模拟。

我向你们展示了一个标记流,本质上是一个神经网络,中间有一堆激活和神经元。这是一个固定的数学表达式,它将来自标记的输入与模型的参数混合,然后混合结果得到序列中的下一个标记。但对于每个标记,计算量都是有限的。所以这是一种有损的人类模拟,这种模拟方式受到限制。所以无论人类写什么,语言模型都在标记级别进行模仿,每个序列中的每个标记都只有这种特定的计算。

我们还看到,由于这种结果和认知差异,模型会在各个方面受到影响,你必须非常小心地使用它们。例如,我们看到它们会产生幻觉,并且我们也有瑞士奶酪模型的感觉,LLM的能力……

大型语言模型就像瑞士奶酪一样,存在漏洞。它们有时会做出一些愚蠢的举动,即使它们通常表现出色。这可能是因为提供的token数量不足,导致模型编造内容、算术错误,甚至无法比较简单的数字大小。这种不稳定性需要谨慎对待,虽然我们了解其成因,但这正是我们对模型输出的看法:它模拟了OpenAI中人类标注者遵循指令的神经网络。

然而,使用像O3-mini-high这样的思维模型情况略有不同。GPT-4.0并未进行强化学习(RLHF并非真正的强化学习),而思维模型则使用了强化学习。它们经过训练,能够完善思维过程,探索新的解决问题策略,类似于我们内心的独白。 这些模型在一个大型练习题集合上进行训练,这些练习题由OpenAI等公司创建和整理。

因此,与思维模型对话时,我们看到的不再只是对人类标注者的直接模拟,而是新颖独特的思考能力。虽然OpenAI没有公开其推理过程,但我们知道这种能力存在。 这并非仅仅模仿人类标注者,而是强化学习过程中涌现出的新能力。 在本例中,我们没有测试其能力,因为这并非数学或推理问题,而是一个创意写作问题。

这引发了一个问题:在可验证领域发展出的思维策略能否转移到不可验证领域,例如创意写作? 这种转移的程度尚不清楚,我们也不确定强化学习在可验证领域的效果能否在不可验证领域体现。 这是一个有待解决的问题。

此外,目前的强化学习技术还处于早期阶段,我们仅看到了其在推理问题中展现的初步能力。

我们观察到一些模型能够在开放域的思考和问题解决中实现类似于MOV37的效果,而非仅限于围棋游戏。

这种范式原则上能够实现一些真正令人兴奋的新颖成果,甚至超越人类以往的想象,例如进行前所未有的类比。因此,我认为这些模型的出现令人难以置信地兴奋。

然而,目前这些模型仍处于早期且原始的阶段,主要在可验证的领域,如数学和代码等,展现其能力。 使用这些模型既有趣,也富有挑战性。

总而言之,这是对现有技术的一个概况。 当前正是进入这一领域的绝佳时机。我个人每天都会使用这些模型数十甚至数百次,它们极大地提高了我的工作效率,相信很多人也有同感。 我认为这些模型将创造巨大的财富。

需要注意的是,这些模型,即使是强化学习模型,也存在一些缺陷。 应将其视为工具箱中的工具,不能完全依赖,因为它们可能会随机产生错误、幻觉,或出现计算错误等问题。

因此,务必检查并验证模型的输出,对最终结果负责。 可以利用这些模型激发灵感、生成初稿、提出问题,但验证环节必不可少。 如此一来,你的工作将会非常成功。

希望这段内容对您有所帮助,也希望您使用愉快。 内容较长,在此致歉,但希望它对您有所裨益。 再见。

 版块介绍 — 技术之辩 


我们聚焦于AI及更广泛科技领域的前沿动态,追踪人工智能芯片与模型的技术演进,不仅分享最新研究成果,更开启技术伦理、发展趋势的深度辩论。每一次探讨,都是对未来可能性的一次勇敢探索,让思想的火花在这里碰撞,照亮技术前行的道路。

推荐阅读

Reading

1、开源模型越来越落后?Meta甩出全新Llama 3应战
2、通义千问一周年,开源狂飙路上的抉择与思考|魔搭深度访谈
3、Claude 3拒答率优化:大模型从拒答到负责任回答的演进之路
4、清华经管研究证明:生成式AI工具显著提升人机协同效能
5、大语言模型的“智能飞轮”!阿里最新综述全面解析大模型的自进化之路
6、多数据中心训练:OpenAI 击败谷歌 Infra 的大计(两万字精校)
7、技术之辩 | Dario Amodei:Scaling Law 还没遇到上限
8、技术之辩 | 柏拉图表征假说:人工智能模型正朝着对现实底层结构的共同理解迈进


图片


© 2024 精读
删除内容请联系邮箱 2879853325@qq.com