Anthropic 预训练负责人教你如何训练大语言模型




内容概要

本视频中,YC 普通合伙人 Ankit Gupta 与 Anthropic 预训练负责人 Nick Joseph 坐下来探讨了训练 Claude 这样的前沿人工智能模型所面临的工程挑战——从管理数千个 GPU、调试棘手的错误,到在预训练和强化学习之间平衡计算资源。他们涵盖了伸缩法则 (Scaling Laws)、数据策略、团队构成,并解释了为什么人工智能领域最困难的问题往往是基础设施问题,而不是机器学习问题。


目录

  • 引言

  • 从 Vicarious 到 OpenAI 再到 Anthropic

  • 什么是预训练

  • 为什么“下一词预测”会胜出

  • 伸缩法则与“计算→模型→收入”的反馈循环

  • 构建 Anthropic 的早期基础设施

  • 规模化下的效率技巧与调试

  • 预训练团队中的通才与专家

  • 跨数千个 GPU 进行训练的挑战

  • 使用新芯片:GPU 与 TPU 的对比

  • 预训练与后训练(RLHF 与推理模型)

  • 数据质量与可用性的未来

  • 预训练的下一步

  • 结束语


引言

Ankit Gupta: 大家好,今天我非常荣幸能邀请到 Anthropic 的预训练负责人 Nick Joseph。

为了让观众对我们将要讨论的内容有一个宏观的了解,我们会从预训练的基础知识开始,然后深入探讨 Nick 在 Anthropic 是如何思考战略、数据、对齐 (Alignment) 和基础设施的。希望在视频结束时,大家能明白人工智能的进步是如何直接源于预训练的进展。


从 Vicarious 到 OpenAI 再到 Anthropic

Ankit Gupta: 我很想聊聊你的背景故事,以及你是如何走到今天这一步的。在加入 Anthropic 之前,你在哪里工作?从那些经历中你有哪些收获?

Nick Joseph: 好的。在加入 Anthropic 之前,我曾在 Vicarious 和 OpenAI 工作。

Vicarious 最初是一个通用人工智能 (AGI) 实验室,我加入时,他们正转向产品化,特别是机器人产品。我当时的工作是为他们的机器人产品训练计算机视觉模型。那是我的第一份工作,我学到了很多关于如何构建机器学习模型和编写机器学习基础设施的知识。

Ankit Gupta: 那时候,你是否也考虑过从事学术研究?当时很多从事人工智能工作的人都在攻读博士学位。在我创业之前,我也曾有过类似的想法。你是怎么看待这件事的?

Nick Joseph: 其实,我的很多想法都源于我之前在 GiveWell 的一次实习经历,那是一个评估慈善机构的非营利组织。那里的一些人认为,未来某个时候我们可能会拥有通用人工智能 (AGI),这可能很危险,我们应该关注这些风险,因为它可能对人类产生巨大影响。

当时我对此并不完全信服,于是转向了经济学领域,希望能直接帮助贫困人群。但由于种种原因,这条路没走通,最终我还是决定投身人工智能领域。我想,要么人工智能安全最终会变得至关重要,我就研究它;要么它不重要,那我就用人工智能创造出一些酷炫的东西,或许能更好地帮助贫困人群。

我并不是从学术角度出发的。事实上,转向这个领域的吸引力之一就是可以立即动手做些事情。而如果我想从事经济政策研究,我可能需要花六年时间读完博士才能开始,那是一条更长的路。

Ankit Gupta: 当时的人工智能安全研究是什么样的?都有谁在思考这些问题?Vicarious 虽然有人在考虑,但它本质上是一家机器人公司。

Nick Joseph: 是的,我感觉当时的人工智能安全讨论大多停留在理论层面。那时的模型还不够强大,并未构成真正的威胁。所以,讨论更多是哲学性的,比如“未来某个时候,我们可能会拥有比人类更聪明的人工智能,我们应该如何权衡这种未来顾虑与眼前的事务?”。我觉得这个论点在当时的说服力不是很强,但确实引人深思。

Ankit Gupta: 接下来你去了 OpenAI。那时的 OpenAI 是什么样的?

Nick Joseph: 在 OpenAI,我在一个安全团队,后来主要从事代码模型方面的工作。我刚到那里时,看到他们对 GPT-3 进行了微调,让它能编写代码,而且效果非常好。我当时想,如果你担心人工智能变得过于强大,开始编写自己的代码,这似乎可能导致自我完善。这种情况发生的可能性有多大?

于是,我做了大量的评估和研究,探讨是哪些因素促成了这一点。大约八个月后,几乎所有与我共事的安全负责人,也就是所有我敬仰并希望与之共事的人,都离开了公司,并邀请我加入 Anthropic。我加入 OpenAI 的初衷就是关心人工智能安全,并希望与他们共事,所以当 Anthropic 成立之初,我就跟着他们一起加入了。


什么是预训练

Ankit Gupta: 既然如此,我们来转换一下话题。如今你在 Anthropic 负责预训练 (pre-training) 团队。你已经在预训练领域工作了很长时间,相信这些年来这项工作的内涵和形式也发生了很大变化。我们不如从解释什么是预训练开始吧。它在像 Anthropic 这样的地方,是如何融入人工智能模型开发的整体思路中的?你们具体做些什么?

Nick Joseph: 我们知道,提升人工智能模型性能的关键因素之一是规模 (scale),你需要投入大量的计算资源。如果你退一步想,要如何才能将最多的计算资源投入到一个模型中?我们需要一个拥有海量数据的目标。

互联网就是一个很好的例子。互联网的规模极其庞大,可能是人类创造的最大的单一数据源。但这些数据没有标签,你总不能让一个人去阅读整个互联网并对内容进行标注。所以,我们需要从数据本身中提取标签。

这里的想法是,我们可以利用一段文本来预测下一个词。比如,你输入第一个词“the”,模型预测第二个词;然后输入“the cat”,模型再预测接下来的词。这意味着你可以获得非常密集的信号,每个词都是一个新样本,数据量极其庞大。从 GPT-1、GPT-2 的研究中我们发现,随着投入更多的计算资源、更多数据和更大的模型,你就能得到更智能的模型。


为什么“下一词预测”会胜出

Nick Joseph: 这也一直是预训练的核心理念。有一个叫“伸缩法则”(Scaling Laws) 的概念,它指的是你可以量化地预测,随着投入更多的计算、数据和参数,模型的损失 (loss) 会以一种非常可预测的方式降低,也就是能更准确地预测下一个词。

我认为,从最初那篇关于伸缩法则的论文中就可以预见到,一旦你掌握了这个规律,就会形成一个正向反馈循环:你训练一个模型,用它来创造有用的产品并出售,获得更多资金,再用这些钱购买更多计算资源,从而训练出更好的模型。在过去五年左右的时间里,我们一直在重复这个循环。

Ankit Gupta: 回到最初的目标设定。在我看来,现在的预训练似乎主要依赖于“下一词预测”这种方法。但如果把时间倒回 2017 年到 2021 年左右,当时人们还在探索各种预训练目标,比如 BERT 和 BART 模型使用的掩码语言模型 (Masked Language Modeling)。但最终,像 GPT 系列所采用的自回归模型 (Autoregressive modeling),也就是你所描述的“下一词预测”方法,似乎成为了主流。你对那个时期有什么看法?是你们尝试了所有方法后发现这个最好,还是从第一性原理出发,它就应该是最有效的方法?

Nick Joseph: 我认为答案很大程度上是经验性的。从实践角度看,就是把所有方法都试一遍,看哪个效果好。这种自回归模型的一个巨大优势是,你可以非常直接地从中采样以生成文本,这非常便于产品化应用。

你希望有一个核心指标,当你不断优化这个指标(比如降低损失)时,你关心的最终效果也会随之提升。你可以想象,如果一个模型在语言建模上达到了完美,它就能像人类一样写作。你输入一篇论文的标题,它就能生成一篇全新的、高质量的论文。而其他一些方法似乎不具备这种潜力。

Ankit Gupta: 的确,这很合理。在你描述的那个“产品→收入→更多计算→迭代”的循环中,这种方法提供了一条最自然的路径,因为你可以持续发布新产品,并从中获得收入来投资更多的计算资源。

Nick Joseph: 是的,它提供了最大的开放性。当然,你也可以采用其他方法,比如先进行大规模预训练,然后针对上百个特定任务进行微调 (fine-tune),这也是一种可行的路径。

我有一个大概的直觉:计算 (compute) 才是最重要的。只要你向任何一个目标投入足够多的计算资源,你几乎都能得到一个相当不错的模型,并且可以将其微调用于其他任务。令人惊讶的是,与投入更多计算资源相比,这些具体实现上的细节差异其实并没有那么重要。


伸缩法则与“计算→模型→收入”的反馈循环

Ankit Gupta: 当你考虑投入更多计算资源时,其实有很多不同的维度。比如,你可以为特定的模型架构投入更多数据,或者增加模型的层数使其变得更大,还可以通过神经架构搜索 (Neural Architecture Search) 来探索不同的变体。我想现在对于选择哪种架构可能已经有了比较成熟的方案,但在早期可能并非如此。你当时是如何考虑这些问题的?你们的基础设施是怎样的,以支持做出这些决策?

Nick Joseph: 简短的回答是:这很难。你实际上是在尝试训练一个非常昂贵的大模型,而你有成百上千个超参数 (hyperparameters) 需要调整,比如模型的层数、宽度等等,并且你希望它们都是最优的。

你需要在“这些参数到底有多重要”和“是否需要精确调优”之间找到平衡。有时候,你可能只需要凭最佳猜测设定参数,然后投入更多计算资源,结果可能差不多。

Ankit Gupta: 有趣。

Nick Joseph: 有趣的一点是,这些参数的影响可能没有想象中那么大。正如早期的一些伸缩法则论文所指出的,调整这些参数可能会带来一些微小的提升,但只要你持续投入更多计算资源,模型性能就会稳定地变好。当然,如果你搞砸了太多参数,性能提升就会停滞,而你也不知道具体是哪里出了问题,这才是最困难的部分。

Ankit Gupta: 你无法知道反事实的情况,因为你没有足够长的时间来运行实验以验证。

Nick Joseph: 是的,我们有伸缩法则。你可以预测,随着计算投入的增加,损失会以幂律 (power law) 的形式下降。但最终,性能曲线会偏离这个幂律,那时你就知道出问题了。问题在于,这是触及了规模化的根本极限,还是仅仅因为你的学习率 (learning rate) 设置得稍有不妥?这正是挑战所在。

通常的做法是,先在小规模上测试各种方案,然后再应用到大规模训练中。

Ankit Gupta: 这里的小规模是指数据量,还是其他方面?

Nick Joseph: 指所有方面。你希望按比例缩小一切。你需要有一个关于如何扩大规模的理论。比如,如果我的计算量增加了 10 倍,我应该如何分配这些增量到模型的层数、数据量和注意力机制 (attention) 上?你需要先形成理论,然后在按比例缩小的环境中反复测试,验证其最优性。


构建 Anthropic 的早期基础设施

Ankit Gupta: 为了让我更好地理解,在 Anthropic 成立初期,当你们团队只有 10 来个人的时候,作为一个灵活的初创公司,你们能利用多大规模的基础设施?虽然资本充足,但人手有限,你们当时能用什么样的基础设施来训练早期模型?

Nick Joseph: 有一件很疯狂的事是,当时我们感觉自己就处在技术的最前沿,但似乎并没有多少人在意这件事。我当时抱着“我们正在创造通用人工智能 (AGI),这是有史以来最重要的技术”的心态,环顾四周却发现,全世界似乎只有 30 个人在做这件事。

当然,我还比较初级,其他人经验丰富。但让我惊讶的是,这件事做起来比想象中容易。我记得当时 GPT-3 的公开训练成本估计是 500 万美元。一方面,500 万美元对个人来说是巨款,但对一家公司而言并非如此。所以,我们完全有能力购买足够的计算资源来训练那样的模型。

Ankit Gupta: 你们是使用云服务提供商,还是有自己的定制设施?或者说,你们是真的在某个房间里堆满了自己买的英伟达 GPU 机架?

Nick Joseph: 我们用的是云服务提供商,但这其实和自建差别不大。因为让我惊讶的是,你必须了解硬件的物理布局。我记得有一次,我的一位同事用聚类算法来识别我们所有的芯片分别在哪几个房间。因为我们猜测,芯片位于不同房间可能会导致网络延迟。

通过这种方式,你可以反向工程出一些信息,比如“这里显然有两个连接更好的集群,它们之间的连接可能存在问题”。我们总是在尽力挑战硬件的极限。特别是在早期,我们的资金远不如竞争对手,所以我们必须通过提高计算效率来获得领先优势。


规模化下的效率技巧与调试

Ankit Gupta: 你能谈谈早期你们为了最大化硬件利用率做的一些事情吗?这让我想起谷歌早期的故事,他们购买相对便宜的消费级芯片,然后通过优化软件来榨干性能,从而实现了低延迟和高可用性。在人工智能的早期,是否有类似的故事?

Nick Joseph: 对我们来说,关键在于构建好分布式框架。为了训练大模型,你必须在大量的芯片上进行。实现这一点有很多方法,比如数据并行 (data parallelism)、流水线并行 (pipelining)、张量并行 (tensor sharding) 等。当时并没有现成的、好用的开源软件包可以直接拿来用。

Ankit Gupta: 如今这类工具多了些,但在当时,我猜几乎没有。

Nick Joseph: 是有一些。我记得早期我们在做数据并行时,有人说“现在我们自己来实现 all-reduce 操作”,我当时很惊讶:“我们真的要自己写这个吗?”得到的回答是:“我们将来肯定要修改它。”我们不想依赖某个第三方软件包,因为我们即将要处理的规模比 Facebook 当时处理的还要大。PyTorch 虽然有相关工具,但我们不想依赖一个需要不断修改才能满足我们更大规模需求的包。

Anquantified Gupta: “我们的规模将超过 Facebook”——这句话在当时听起来很有悖常理。那时,Facebook AI Research (FAIR) 被认为是顶尖的机器学习研究机构之一。当你决定走一条与这样一个拥有顶尖人才和资源的成熟实验室不同的路时,你是怎么想的?是觉得理所当然,还是也曾怀疑过自己的决定?

Nick Joseph: 我确实感到惊讶。也许是我太自大了,但我环顾四周,心想:“这些人在干什么?他们都忽略了真正的大局。”我认为伸缩法则的逻辑非常清晰,而反对它的论点在我看来有些荒谬。最初的伸缩法则论文跨越了 11 个数量级,当时人们激烈争论它是否能再多扩展一点点。我的想法是,它在这里失败的概率大概只有十一分之一吧。

当然,事情并不总是一帆风顺。但当你身处其中,每天都在处理这些数据、绘制这些图表时,一切似乎都变得显而易见。对于局外人来说,感受可能完全不同。

Ankit Gupta: 是的,当时论文满天飞,每篇都想强调自己的重要性。我能理解为什么有人会觉得“这没什么大不了的”。

Nick Joseph: 而且,不同的实验室有不同的文化。比如 FAIR 更偏向博士生式的独立研究,每个人追寻自己的想法,还要为计算资源而竞争。而训练一个大语言模型需要大量人员在一个复杂的基建项目上协同合作,这种工作通常发不了论文,也不会得到那种文化的尊重。

Ankit Gupta: 好的。所以你们实现这些模型时,用的是像 PyTorch 这样的库,但并没有完全依赖它的开箱即用功能,而是会深入到下一层抽象进行定制。那你们会深入到编写自定义 CUDA 内核的程度吗?

Nick Joseph: 这取决于具体的操作。我大部分工作停留在 torch.matmul 这一层,思考的是矩阵乘法如何安排,而不是如何让矩阵乘法本身更高效,因为我默认 PyTorch 已经做到了极致。但对于像注意力机制 (attention) 这样的复杂部分,存在很多变体,很难在 GPU 上实现高效计算,这时你就需要深入到更底层的技术栈。

我们有一个很有趣的流程:首先,对要实现的功能进行建模,设计一个并行化策略,理论上要能达到很高的效率。

Ankit Gupta: 你是指 MFU (模型浮点运算利用率) 吗?你们会设定一个目标利用率,然后设计策略去实现它。

Nick Joseph: 是的。你可以用纸笔计算出理论上能达到的最高效率。你知道所有的限制因素,比如 HBM 带宽、CPU 卸载等等。相关的变量不多,大概就六个。所以你可以完全建模,理解瓶颈所在,然后实现它。

当然,初次实现时效率会很低。下一步就是拿出性能分析器 (profiler),分析每个操作的耗时,与你心中的理论耗时进行对比,然后努力让两者一致。

Anquantified Gupta: 当时有现成的性能分析器可用吗?还是因为你们的网络拓扑很特殊,需要自己编写工具来进行多节点优化?

Nick Joseph: 这要看具体时间,工具在不断进步。对于单个 GPU,PyTorch 的性能分析器一直都很好用。但如果你想分析一个运行在上百甚至上千个 GPU 上的任务,当时几乎没人做过,我们就需要自己动手,想办法把所有节点的分析数据整合到一起。

Ankit Gupta: 还有一个问题,你提到自己之前并没有太多相关经验。你是如何学习到所有这些知识的,比如那六个影响带宽的限制因素?

Nick Joseph: 我加入 Anthropic 时,一个好处是公司刚起步,信息量不大。我第一天就把公司所有的 Slack 消息和内部文档都读完了,学到了很多。然后,我主要通过结对编程 (pair programming) 学习。Tom Brown 和我的经理 Sam McAlis 都经验丰富,我初期和他们一起工作了很长时间。

结对编程的好处是,你不仅能学会“做什么”,还能学会“怎么做”。比如如何使用性能分析器,这是你看代码提交记录学不到的。你必须观看别人实际操作,或者自己摸索很长时间。现在回想起来有些尴尬,我在加入 Anthropic 之前从没用过调试器 (debugger),总觉得 print 语句就够了。后来才发现,调试器是个非常有用的工具,能大大提高调试效率。这些技能都是通过结对编程和亲身实践学来的。


预训练团队中的通才与专家

Ankit Gupta: 好的,那是早期阶段。随着时间推移,预训练的规模越来越大,你们使用的 GPU 数量和计算资源也成倍增加。从宏观上看,你觉得预训练策略发生了哪些变化?拥有更多计算资源,对你今天的思考方式与早期相比,有何不同?

Nick Joseph: 有些东西其实没变。令人惊讶的是,我今天优化的指标和我第一天工作的指标几乎完全一样,就是那个损失函数 (loss function),让损失值下降。你可以用同一个指标来衡量我训练的第一个模型和现在的模型,画出一条团队的进步曲线。

Ankit Gupta: 所以基本上就一个核心 OKR (目标和关键成果)。

Nick Joseph: 是的。谈到 OKR,我们团队设这个总觉得有点滑稽。我当然可以设定一个具体的损失值作为目标,但答案永远是“越低越好”,我们会一直为此努力。

最大的变化在于团队的专业化分工。在最初的三到六个月里,我尝试阅读代码库里的每一次代码提交,这让我对所有部分都了如指D掌。但随着团队壮大,一切都变得更加精细。有人专门研究如何优化注意力机制,有人专门研究并行化策略。

最终,团队里聚集了一群在各自领域深耕的专家。这样做的好处是可以在各个方向上都做到极致,但作为管理者,我需要确保大家没有偏离整体蓝图,并且有足够多的人能理解全局,避免出现单点故障。

Ankit Gupta: 这确实是一个有趣的权衡。专业化可以带来深度优化,但也可能让进行颠覆性创新变得更复杂。你是如何处理这种平衡的?

Nick Joseph: 我主要 চেষ্টা to get a balance of people. 我发现人们在这方面有明显的偏好。有些人天生就是通才 (generalist),喜欢了解所有事情,浅尝辄D止;而另一些人则是专家 (specialist),他们希望在一个领域深耕,比如在某个精度问题上读了整个博士,只想研究这个。

你需要平衡这两种人。早期,我们雇佣了很多通才,因为初创公司需要大家什么都做。但这可能导致“人人都在做所有事,但没人能真正精通一件事”。反之,如果专家太多,就需要管理者投入大量精力来整合所有工作,发现跨领域的优化机会。比如,“如果我们在这里调整一下架构,那边那个效率问题就迎刃而解了”。


跨数千个 GPU 进行训练的挑战

Ankit Gupta: 随着计算规模的扩大,需要连接更多的 GPU。在这个过程中,有没有出现过一些不那么显而易见、让你们头疼不已的挑战?

Nick Joseph: 将它们连接起来就是一个出乎意料的难题。

Ankit Gupta: 好的。

Nick Joseph: 因为你需要连接的芯片越来越多。通常,人们并行化芯片的方式,会导致整个系统成为一个单一故障域 (single failure domain),一个芯片出问题,整个任务就可能崩溃。

Ankit Gupta: 这是指人工智能领域的普遍做法吗?

Nick Joseph: 是的,至少在早期是这样。比如你有一个 128 个 GPU 的集群,如果其中一个坏了,任务就失败了。最简单的例子是,你把模型的每一层分布在不同的芯片上,如果第七层所在的芯片失效了,你总不能跳过第七层继续计算吧。

随着规模扩大,芯片数量增多,故障率也随之上升。另一方面,整个技术栈都非常新颖,从数据中心里芯片的布局到芯片本身都是如此。我学计算机科学时,老师总说:“电脑不会错,错的是你。”但在人工智能领域,我遇到过让我完全摸不着头脑的问题,最后经理看了一眼说:“可能是电脑错了。”我当时觉得不可能,但事实证明,确实是 GPU 坏了。

你必须考虑到各种可能性:GPU 可能算错了,可能变慢了,数据中心的电源可能出问题了。作为一个 Python 程序员,你需要了解的深度远超预期。

Ankit Gupta: 为了形象化一点,早期你们每次运行大概使用几十到几百个 GPU?还是已经达到了成千上万的规模?

Nick Joseph: 大概是几千个。

Ankit Gupta: 都能放在这个房间里吗?

Nick Joseph: 是的,几千个。可以把很多机架放在一个房间里。我猜现在一次运行可能需要一整栋楼。当时我们也不确定,比如是否需要把所有芯片放在一个房间里,跨房间会不会有影响。我们有理论模型计算带宽需求,但你永远不知道需要挖多深,比如“我们需要多大功率?会不会一个电容器承载了所有负载,我们一启动任务就崩溃了?”


使用新芯片:GPU 与 TPU 的对比

Ankit Gupta: 那么,你是否需要考虑不同类型芯片之间的差异?比如谷歌的 TPU 和英伟达的 GPU,作为工程师,在这些不同的硬件上进行训练时,思路会有什么不同吗?

Nick Joseph: 从根本上说,它们都在做同样的事情:矩阵乘法等计算。但它们的实现方式和编程方式有很大差异,具体的性能规格也不同。有些芯片可能浮点运算能力 (flops) 强但内存小,有些可能内存带宽大但内存容量小。

拥有多种芯片的好处是,你可以根据任务的特点,选择最适合的硬件。

Ankit Gupta: 比如,什么样的任务更适合 TPU 集群,什么样的更适合 GPU 集群?

Nick Joseph: 一个例子是推理 (inference)。推理任务通常需要更高的 HBM 带宽,因为你一次只处理一个 token,需要加载所有模型权重。而预训练任务因为批处理大小 (batch size) 更大,往往对浮点运算能力的要求更高。所以你可以根据用途来专门化芯片的使用。

坏处是,你可能需要为不同的芯片编写多套代码。虽然理论上可以做抽象层,但由于差异太大,实现起来非常困难。最终,你可能会为每种芯片和每种任务都维护一套实现,工作量成倍增加。

Ankit Gupta: 说到“电脑也会出错”,我记得有一次我跟你提到,我当时的公司在使用谷歌 TPU 时遇到了一个奇怪的段错误 (segfault),你当时告诉我:“你应该在六个月前用它们,那时我们还没帮他们修复一半的问题。”我可以想象你们在处理这些非常新的芯片时,与供应商紧密合作解决了多少问题。

Nick Joseph: 是的,供应商在修复问题方面非常给力。这种合作形式很有趣。他们有强烈的动机修复问题,因为想卖给我们更多芯片。我们当然也希望芯片能正常工作。但我们之间又不能完全共享所有信息。一个有效的策略是创建“小规模复现” (small-scale reproducers)。当我们在一个巨大的训练任务中遇到问题时,比如段错误,我们不能直接把整个复杂环境丢给他们。我们需要把问题从我们的代码库中剥离出来,在一个单一芯片、单一文件上复现这个问题,然后发给他们。

Ankit Gupta: 所以你们是通过共享的 Slack 频道沟通,还是会互相派驻工程师?

Nick Joseph: 大部分是通过 Slack。偶尔面对面交流效果更好,但 Slack 是很常见的沟通方式。


预训练与后训练(RLHF 与推理模型)

Ankit Gupta: 我们来谈谈预训练本身的现状。近几年,很多公司的焦点似乎从单纯的预训练,转向了预训练与后训练 (post-training) 并重。人们开始进行强化学习、巧妙的微调以及各种安全调整。相比之下,公众的注意力似乎更多地放在了那些看起来主要是后训练产物的推理模型上。在你看来,这种理解是否正确?在这个推理模型和新后训练方法兴起的时代,你在预训练阶段的思考方式有何不同,或者有哪些新的相关因素?

Nick Joseph: 是的,过去有种观念认为预训练只是一个前置步骤。有趣的是,“预训练”这个名字本身就暗示了它是一个小的、前期的工作。但后来观念转变了,大家意识到你需要做大量的预训练,它在很长一段时间内都是计算资源的主要消耗者。现在,人们又发现通过强化学习 (RL) 也能获得巨大的提升。另一套伸缩法则表明,在 RL 上投入更多计算,也能得到更好的模型。

所以问题就变成了:如何在这两者之间取得平衡?它们是叠加关系,还是一个会取代另一个?这些问题都还处于早期探索阶段,没有定论。

Ankit Gupta: 你认为这些主要是经验性问题吗?就像我们之前讨论的,需要不断尝试来找到答案,还是有某种第一性原理可以指导?

Nick Joseph: 我认为最终还是经验性的。几乎所有事情都必须通过实验来验证。你可以提出理论,但首先要做的就是测试它,而且大多数时候理论都是错的。所以,你应该先收集数据。

在组织内部,通过经验性方法来解决问题并做出正确决策其实很困难。很重要的一点是,不能有门户之见。比如,我管理预训练团队,就不能固执地认为“预训练必须是赢家”。

Ankit Gupta: 我正想问,组织内部这两个方向之间是否存在某种程度的竞争?

Nick Joseph: 我觉得我们成功避免了这种情况,合作非常融洽。我们都在为同一个模型努力。但我听说在其他地方,团队之间确实存在一些摩擦。这是一个有趣的组织设计问题:如何设置架构,才能避免科学问题与团队的自我认同感捆绑在一起。


数据质量与可用性的未来

Ankit Gupta: 关于预训练本身,我一直在思考高质量数据的可用性问题。你们现在可能已经把互联网上所有的文本都训练了一遍。虽然还有其他领域可以挖掘数据,但社交媒体上有一种论调,认为我们已经“耗尽了数据”。你怎么看?特别是当互联网上大量内容是由人工智能生成时,是否存在“模式崩溃”(mode collapse) 的风险?

Nick Joseph: 关于数据,我看到很多非常自信的论断,比如“互联网数据用完了,规模化到头了”。但我甚至不确定大家到底用了多少数据。这里有很多需要考虑的因素,比如质量与数量的权衡。但一个基本事实是:数据总量虽然在增长,但其增长速度慢于我们获得计算资源的速度。

Anquit Gupta: 这是一个有趣的观点。我本以为新数据的增长速度会和计算资源的增长速度差不多。

Nick Joseph: 其实我也不敢这么肯定。如果你问“互联网有多大?”,答案是“无限大”。很多网页可以无限滚动,自动生成内容。所以问题变成了,“有用的互联网有多大?”——没人知道。不像你创建一个网页,就会有个计数器记录你今天为互联网贡献了 50 个词。这方面存在很大的不确定性。

Ankit Gupta: 我简单的计算机科学大脑会想,用 PageRank 算法不就行了吗?高于某个阈值的就算是有用数据。这种方法不够好吗?

Nick Joseph: 我认为不够好。从模型和人的角度看,“有用的互联网”是不同的。很多对你来说毫无阅读价值的内容,PageRank 可能很高。而且,PageRank 是一种基于链接的质量度量,但不一定适合人工智能。有些数据可能因为没有被链接到而价值被低估,但它们可能包含了有用的“知识金块”,有助于解决最后 10% 的难题。

你还提到了合成数据 (synthetic data),这非常有趣。一种方法是蒸馏 (distillation):用一个聪明的模型生成大量数据,然后用这些数据训练一个新模型,使其接近原有模型的智能水平。我们看到很多开源模型就是这么做的。

另一个问题是:你能否用当前的模型来训练一个更好的模型?这里有一个有趣的点。如果我让 Claude 给我写一些很棒的文本,这些文本看起来比互联网上的平均内容要好。但如果我只是让它不停地生成文本然后用于训练,理论上我不可能得到一个比它本身更好的模型,因为新模型只是在学习它已有的分布。如果这个分布是错的(比如模型认为 5+5=11),那么新模型也会学到这个错误。

这是一个很难研究的领域,因为你无法在小规模上进行有效测试。你总不能用你最好的模型生成的数据去验证能否训练出更好的模型。

另一个问题是无意中使用了人工智能生成的内容。如何检测和评估其影响也很困难。如果互联网上 1% 的内容是模型生成的,这会浪费你 1% 的计算资源,还是会毁掉整个模型?这甚至不一定是件坏事,也许经过人类筛选发布到网上的内容,平均质量更高。当然,也存在有人恶意投毒,试图破坏你的模型。


预训练的下一步

Ankit Gupta: 你之前提到了评估 (evals)。除了损失 (loss) 这个核心指标,你们还会关注哪些方面?比如数据质量、模型质量的其他衡量标准?

Nick Joseph: 我必须强调,损失是一个非常好的指标,好到令人惊讶。一个好的评估标准需要满足几点:第一,它要能衡量你真正关心的事情。代理指标 (proxy) 很烦人,因为我们很快就能在上面刷到饱和。人工智能领域有一个普遍模式:设定一个目标,达成它,然后发现这个目标并非你想象的全部。我曾以为,如果一个人工智能能解决编程面试题,那它可能就是通用人工智能了。结果发现,它能解题,但除此之外的大部分事情都做不了。

第二,评估需要低噪声。如果你只有 100 个问题,评估结果的波动会很大,难以做出决策。你需要一个即使是微小差异也能明确体现出来的评估,这样才能朝着正确的方向迭代。

第三,评估需要快速、易于运行。这几点很难同时满足,尤其是第一点。你不仅要回答“你关心什么”,而且通常你关心的东西都很难量化评估。比如,我希望 Claude 能胜任我的工作,管理一个团队。你要如何评估它制定的一个六个月计划的好坏呢?

Ankit Gupta: 的确。比如开发一个“人工智能医生”,让它通过医生资格考试可能不难,但更难的评估是,它能否在与病人的长篇对话中,从各种信息中分辨出信号和噪声,并做出准确诊断。这需要真实的病人交互,很难建立一个好的评估体系。

Nick Joseph: 正是如此。但这恰恰是初创公司的机会。现在的大型实验室都以提升评估分数为导向,而设计好的评估体系本身并不需要拥有大模型,任何人都可以做。所以,通过创建一个好的评估,你可以影响大实验室的行为。

对于“医生”的例子,我仍然认为损失是一个很好的起点。收集大量优秀医生与病人的对话转录,然后看模型在预测这些对话上的表现如何。数据量足够大的话,噪声就会很低。如果模型能以极低的损失预测这些对话,理论上它就接近了优秀医生的水平。


结束语

Ankit Gupta: Anthropic 的一个重要外部形象是关于对齐 (alignment)。你能解释一下什么是对齐,以及它如何与预训练相结合吗?

Nick Joseph: 让我先退一步讲讲我们正在做的事情。我们致力于创造通用人工智能 (AGI),即能够完成人类所能完成的一切任务的人工智能。科幻电影里常有一个像人一样的机器人,但这其实低估了它的影响。你应该想象拥有十亿个这样的机器人。每个人都可以随时创建一家拥有一亿个和自己一样聪明的“员工”的公司。这将是颠覆性的。

一个担忧是,这个人工智能的目标到底是什么?我们之前谈到“下一词预测”,但这显然不是我们想要的最终目标。对齐,就是如何让模型拥有与你一致的目标,尤其是当模型比你更聪明时。这是一个难题。

你可以从理论或经验的角度来研究它。比如,现有模型是否在做我们希望它们做的事?答案是,它们常常不做。这就是对齐要解决的问题。在当前阶段,对齐也意味着控制模型的“个性”,比如我们不希望它像一个普通的网民,而是以一种特定的、有益的方式与人互动。这可以通过各种技术实现,比如我们提出的“宪法式人工智能”(Constitutional AI),通过一系列规则来引导模型。

Ankit Gupta: 你如何决定模型应该体现谁的价值观?

Nick Joseph: 这是一个非常难的问题。我喜欢一个比喻:这就像给一辆车装上方向盘。你得先有方向盘,然后再去决定谁来开车,以及开往何方。获得控制能力是第一步。

至于最终的价值观,我认为这些系统应该受到某种形式的民主控制,而不是由一个人的价值观决定。你希望它能与许多人交流,采纳不同视角的价值观,或者拥有一种通用的、显然是善意的价值观,比如在某些情况下会征求人类的建议,而不是擅自行动。

Ankit Gupta: 当前阶段的对齐,比如塑造模型的个性,似乎主要是在后训练阶段完成的。这种理解对吗?

Nick Joseph: 大体上是这样。我的想法是,任何能在后训练阶段做的事情,都应该在后训练阶段做。因为它的迭代循环非常快,几天甚至几小时就能尝试一次。而预训练,你必须做大量的科学研究来降低风险,然后等待几个月才能看到结果,如果错了,代价就太大了。

此外,如果你想进行复杂的模型行为干预,小模型上测试的方法行不通,因为小模型连一句完整的话都说不清楚。但话说回来,未来某些对齐的要素可能会被整合回预训练中,以获得更强的鲁棒性或更深层次的智能融合。

Ankit Gupta: 好的。展望未来几年,你认为将面临哪些已知或未知的挑战?

Nick Joseph: 我最关注的是范式转变 (paradigm shifts),比如向强化学习的转变。此外,我最担心的其实是那些极难解决的 bug。一个 bug 就可能让你几个月的工作付诸东流。模型训练需要几个月,一个细微的、难以察觉的错误就可能毁掉一代模型。在机器学习中,调试本就困难,而在如此大的规模下,问题被放大了无数倍。你可能需要掌握从机器学习理论到网络协议的整个技术栈,才能定位问题。

Ankit Gupta: 那么,你的团队成员都来自哪些背景?都是机器学习博士吗?

Nick Joseph: 是一个混合体。但我们最需要的其实是工程师。说到底,只要投入足够多的计算,事情总能成。挑战在于工程实现。将一个数学上很简单的架构,正确地、大规模地、并行化地实现出来,并确保其正确性,这是一个巨大的工程问题。我们需要那种能深入任何层面去调试问题的工程师。

Ankit Gupta: 最后一个问题,回到十年前,如果你还是一个从经济学转向人工智能的学生,你会给今天的学生什么建议?

Nick Joseph: 时代不同了,建议也会不同。但如果回到十年前,我会说:“专注于人工智能,这是最重要的事,特别是工程技能。”当时我可能不会意识到,工程能力比数学和理论知识更重要。

对于今天的学生,我仍然会建议他们关注工程,同时也要思考“当我们拥有 AGI 后该怎么办”。这两点是我认为最重要的事。

Ankit Gupta: 好的,今天就到这里。非常感谢你,Nick。


AI 前线

Redis 持久化原理分析和使用建议

2025-12-23 22:46:42

AI 前线

迈向可信 AI:LLM 幻觉的分析与优化

2025-12-23 22:47:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索