眼下,不少 AI 开发者正在研究 DeepSeek 的技术路线。但是,一支国外团队却提出了别具一格的新方法。他们提出一种推理模型新路线,这一路线绕开了思维链,通过采取深度循环隐式推理方式,为大模型性能扩展开辟了新维度。

具体来说,来自德国马普所智能系统研究所、美国马里兰大学和美国劳伦斯利弗莫尔国家实验室的研究人员提出一种新型语言模型架构,该架构能够通过潜空间中的隐式推理来扩展测试时计算。(注:潜空间,是指由生成模型学习得到的低维连续向量空间,其中每个点对应于数据特征的压缩表示。)


(来源:https://jonasgeiping.github.io/)

通过此,研究人员打造出一款名为 Huginn 的概念验证模型,其参数规模为 3.5B,在 800B tokens 数据开展预训练。

该模型通过迭代循环块来进行工作,从而能在测试时展开到任意深度,这与通过产生更多 tokens 来扩展计算的主流推理模型形成鲜明对比。

不同于基于思维链的方法,本次研究所使用的方法在无需使用任何专用训练数据的前提下,就能在较小的上下文窗口中工作,并且能够捕捉到那些难以用文字进行清晰表述的推理类型。

目前,研究人员已经公布了全部的训练数据、预训练代码以及部分中间模型检查点。

对于开展这项研究的初衷,研究人员在论文中表示,此前人们在提高大模型的能力时,主要采取扩展模型参数的做法,这种做法需要大量的数据和计算。

尽管人们探索出了通过扩展测试时间计算来增强模型推理能力的方法,但是对于主流方法来说它涉及到针对长链思维示例进行后训练,以便让模型在其上下文窗口中具备表达中间计算的能力,从而将思考过程外化。

这种做法的缺点在于:对于那些代价高昂的内部推理过程来说,必须始终被归结为一个单一的、经过文字表述的下一个标记,而这会造成资源的浪费。

如果模型能够在其连续的潜空间中“原生地”进行“思考”,那么它们可能会表现得更出色。



在全球首台“百亿亿次级”超算 Frontier 开展训练

要想实现上述目的,其中一种方法是在模型中添加一个循环单元。这个单元以循环的方式运行,它能迭代地处理并更新其隐藏状态,从而能使计算无限期地持续下去。

研究人员表示,本次模型采用仅含解码器的 Transformer 模块构建而来。这些模块被划分为三个功能组:前奏模块(Prelude)、循环模块(RecurrentBlock)和尾声模块(Coda)。

前奏模块使用多个 Transformer 层将输入数据嵌入到潜空间中;循环模块是执行递归计算并修改状态的中心单元;尾声模块使用若干层从潜空间中解嵌入,同时包含模型的预测头。(注:预测头,是深度学习模型中的一个组件,通常用于在模型的末端执行特定的预测任务。)

核心模块设置在前奏模块和尾声模块之间,通过循环核心模块,可以在“歌曲”中加入任意数量的“诗节”。这里的“歌曲”可以理解为模型的处理流程,“诗节”可以理解为处理步骤或循环次数等。


(来源:arXiv)

在确定能够可靠地训练小型测试模型之后,并且训练数据量达到 10B 个 tokens 之后,研究人员开始进行更大规模的实验。

鉴于研究人员的计算资源有限,因此其只有两个选择:要么训练多个小的、但是无法体现效果或扩展性的模型;要么训练一个中等规模的单一模型。综合考量之后,研究人员准备了一次单一规模的运行实验。

具体来说:他们将训练设置分为架构、优化设置和预训练数据这几个部分。由于研究人员只能获取运行一次大规模模型训练的计算资源,所以他们使用了一种数据集组合方式,该方式旨在最大程度地激发模型的推理能力,而非追求最佳的基准测试性能。

这种数据集组合方式在很大程度上偏向于代码数据和数学推理数据,同时包含适量的通用网络文本,以便模型能够获得标准的语言建模能力。

按照前人提出的方法,研究人员直接将相关的指令数据混合到预训练数据中。与此同时,研究人员通过“字节对编码”(BPE,Byte Pair Encoding)的方法,构建了一个包含 65536 个标记的词汇表。(注:字节对编码,是一种用于自然语言处理的子词分词技术,旨在解决传统分词方法在处理未知词和稀有词时的局限性。)

不同于传统的分词器训练方法,研究人员直接在预训练语料库的指令数据子集上构建分词器,以便在目标领域实现标记化效率的最大化。

同时,他们还大幅修改了预分词的正则表达式,以便更好地支持代码、缩写形式以及 LaTeX 格式内容。(注:预分词,是分词过程的一个前期步骤。正则表达式,则是一种用于匹配字符串模式的工具。预分词的正则表达式,是在预分词阶段使用的正则表达式。)

研究人员在每个文档的开头都添加一个<|begin_text|>标记。在对预训练语料进行标记化之后,他们将标记化后的文档打包成长度为 4096 的序列。

在打包过程中,除了保留几个包含数学内容的较长文档来源之外,研究人员丢弃了那些缺乏前文语境的文档结尾部分,以此来解决语境关联的问题。

随后,他们利用美国橡树岭国家实验室的全球首台“百亿亿次级”超级计算机 Frontier 集群分配的计算时间来训练这个模型。Frontier 集群是一个大规模的高性能计算系统,其中包含 8 个配备 AMD MI250X GPU 的节点。这些节点通过 4 个 HPE Slingshot 网络接口卡实现相互连接。(注:HPE Slingshot,是由惠普旗下的超级计算机制造商 Cray 开发的一种高性能以太网互连技术。)

对于调度系统,研究人员通过 SLURM 进行编排,并以 bfloat16 混合精度进行训练。(注:SLURM 是一个用于 Linux 集群的资源管理软件,它可以有效地分配和管理集群中的计算资源。bfloat16 混合精度,是一种用于深度学习计算的特殊浮点数格式,旨在提高计算效率和数值稳定性。)

通过大量使用 PyTorch 编译以及针对隐藏维度进行优化,他们让单节点训练速度达到 108.75TFLOP/s,实现了 87% 的可实现浮点利用率(AFU,Achievable FlopUtilization)。

同时,研究人员使用数据并行进行训练,以及仅仅使用优化器分片技术和梯度检查点技术来优化训练过程。其中:优化器分片技术是一种减少内存占用和提高训练效率的技术;梯度检查点技术是一种用于减少深度神经网络训练过程中显存消耗的技术。

当每个 GPU 的批次大小为 1 时,每步的全局批次大小最终达到 1600 万个 tokens,从而能将 GPU 间的通信带宽降至最低。

当研究人员在 4096 个 GPU 上进行大规模运算时,每个 GPU 的运算速度可达每秒 52 - 64 万亿次 TFLOP/s,即可以达到 41% - 51% 的可实现浮点利用率,这意味着每秒可以处理 100 万 - 120 万个 tokens。



编程能力击败所有通用开源模型

与此同时,研究人员针对最终模型进行了 800B 个 tokens 的训练,并针对一个非循环基线模型进行 180B 个 tokens 的训练,然后把这些检查点、与其他在规模类似的完全公开数据集上训练的开源模型进行对比。

另外,他们还通过 lm-eval 开源工具库来执行所有标准基准测试,并通过 BigCodeBench 来执行代码基准测试。(注:BigCodeBench 是一个用于评估大模型在代码理解和生成任务中的表现的 Python 库。)

但是,要将本次模型与其他大模型进行直接对比并非易事,因为参与对比的其他大模型都是固定深度 Transformer 模型的小幅变体。

由于研究人员的模型仅有 3.5B 个参数,因此在预训练期间所需的互联带宽相对较小,但它在预训练期间消耗的实际浮点运算次数(FLOPs,Floating Point Operations)接近于一个拥有 32B 个参数的 transformer 模型在预训练期间的消耗。并且,通过使用扩大规模的方法,本次模型的性能能够持续提升,直至达到相当于标准 50B 个参数的固定深度 transformer 模型的浮点运算预算水平。

实验结果显示,本次模型优于上一代 Pythia 系列模型,并且在大多数指标上与 OLMo 的第一代模型 OLMo7B 大致相当。但是,相比使用更大规模、经过更好数据集训练的新一代 OLMo 模型,本次模型的表现稍显逊色。

另外,研究人员还对本次模型的数学能力和编程能力加以评估。在数学能力测试上,他们使用 GSM8k 数据集、遵循 Minerva 评估规则的 MATH 数据集以及 MathQA 数据集。在编程能力测试上,他们在 MBPP 和 HumanEval 这两个基准测试上开展测试。结果显示:就数学能力而言,本次模型远远超过除了最新版 OLMo - 2 模型之外的所有模型。就编程能力而言,本次模型击败了所有其他通用开源模型。不过,它并未超越 StarCoder2 这种使用数万亿个 tokens 进行专门训练的代码模型。


(来源:arXiv)



尾声:潜在推理富有前景,能为测试时间计算缩放方法带来补充

考虑到训练过程的局限性,研究人员认为本次结果很有前景。原因在于,这种推理能力无需在训练时使用专门数据集,也无需在推理时进行语言化表述。这让研究人员相信,潜在推理是一个有潜力的研究方向,可以为测试时间计算缩放方法带来补充。

尽管本次模型仍然只是一个概念验证原型,但是研究人员还是观察到一些有趣的行为是从循环训练中自然涌现出来的。此外,研究人员还观察到了与上下文相关的收敛速度、路径无关性以及各种零样本能力。

未来,研究人员打算在训练过程采用更优化的学习率计划、数据组合以及加速器来进行训练。

参考资料:

https://arxiv.org/pdf/2502.05171

运营/排版:何晨龙

ad1 webp
ad2 webp
ad1 webp
ad2 webp