OpenAI 绝密项目「草莓」技术详解

null

IMG_257

enAI 的神秘项目“草莓”是什么?

近期,继去年备受瞩目的神秘项目「Q*」之后,OpenAI 再次传来新动向。

据路透社报道,OpenAI 内部正秘密研发一个代号为「草莓(Strawberry)」的新人工智能模型项目。

此前,该模型的细节从未被外界知晓,而 OpenAI 正致力于证明这一新型模型能够展现出高级推理能力。

路透社在五月份获取了一份 OpenAI 的内部文件副本,其中详细阐述了团队对「草莓」的研究计划。

然而,即便是 OpenAI 内部员工,对于「草莓」的工作原理也知之甚少,其保密程度之高可见一斑。

null

值得注意的是,还记得去年报道的 Q* 吗?

当时有媒体报道称,OpenAI CEO Sam Altman 未及时向董事会披露 Q* 的进展,这一事件被视为引发 OpenAI “内部纷争”的重要导火索。更令人担忧的是,OpenAI内部人士曾担忧 Q* 的重大突破可能威胁到全人类。

而据路透社报道,Q* 实则是「草莓」项目的前身,在去年的报道中,Q* 被视为一项具有里程碑意义的突破。

在此之前的一次会议上,OpenAI提出了一套五个等级来追踪其在开发超越人类的人工智能软件方面的进展。这五个等级涵盖了从目前可用的、能够用对话语言与人互动的人工智能(第1级)到可以完成组织工作的人工智能(第5级)。具体来说:

• 第一级:聊天机器人,具备对话语言功能的人工智能;

• 第二级:推理者,具备人类水平问题解决能力;

• 第三级:代理者,能够采取行动的系统;

• 第四级:创新者,能够协助发明的人工智能;

• 第五级:组织者,能够完成组织工作的人工智能。

根据目前搜集的信息,「草莓」项目极有可能是帮助 OpenAI 实现第二级 AI 的关键。

值得一提的是,一位知情人士透露,「草莓」与斯坦福大学在2022年(当时ChatGPT还未发布)提出的一种名为自学推理(Self-Taught Reasoner,简称STaR)的方法很相似。

而今年,斯坦福团队又基于 STaR,提出了一种名为 Quiet-STaR(Quiet Self-Taught Reasoner)的推理方式,即 “安静的自学推理者”。这个名字恰如其分地描述了该技术的核心理念:让 AI 在不显式表达的情况下,学会自主推理。

目前,关于「草莓」的所有信息都仅限于猜测,其背后的技术是否就是 Quiet-STaR 也尚未确定。然而,Quiet-STaR 这篇论文的思路颇具新意,非常值得一读。接下来,我们就来详细解读一下这篇论文。

解密 Quiet-STaR

Paper:Quiet-STaR: Language Models Can Teach Themselves to Think Before Speaking

Abs:https://arxiv.org/abs/2403.09629

Code:https://github.com/ezelikman/quiet-star?tab=readme-ov-file

“Life can only be understood backwards; but it must be lived forwards.” — Sren Kierkegaard

论文的标题直截了当,“说话之前先思考”,而在摘要下方,映入眼帘的是这样一句引人深思的话:

“生命只能向后理解,但必须向前发展。”

这句丹麦哲学家索伦·克尔凯郭尔的名言,似乎也同样贴切地适用于当今蓬勃发展的人工智能领域。面对 AI 的飞速进化,我们不禁要问:AI 能否拥有类似人类的思考能力?它是否能在“开口说话”之前进行深度的思考呢?

简介

Quiet-STaR,即 “Quiet Self-Taught Reasoner”,意译为 “安静的自学推理者”,这一名称恰如其分地概括了该技术的核心理念:使AI能够在不依赖显式表达的情况下,学会自主进行推理。

传统 AI 训练方法往往依赖于大量标注数据以及针对特定任务的微调(比如为了提升数学推理能力,需要将数据标注为思维链的格式)。而 Quiet-STaR 则开创了一种全新的范式,它让模型从普通文本中学习推理,而非依赖于特定的推理任务数据集。

这一方法的独特之处体现在以下三个方面:

• 通用性:模型能够从各种类型的文本中学习推理,而不局限于特定领域。

• 可扩展性:无需人工标注的推理数据,即可利用海量的普通文本进行训练。

• 自主学习能力:模型通过不断尝试和优化自身的推理过程来提升其能力。

Quiet-STaR 的核心思想是:在每个输入的 token 之后插入一个 “思考” 步骤,促使模型生成内部推理。随后,系统会评估这些推理是否有助于预测后续文本,并据此调整模型参数。

研究者开篇用一张图描述了 Quiet-STaR (Quiet Self-Taught Reasoner) 方法的工作流程,如下图所示。

null
图1:Quiet-STaR 流程

图 1 展示了 Quiet-STaR 算法的三个主要步骤:思考(Think)、说话(Talk)和学习(Learn),这些步骤应用于文本中每个 token 的生成过程。

• 思考(并行理由生成):在输入序列的每个 token xi 之后,Quiet-STaR 并行生成 r 个长度为 t 的Thought: ci=(ci1,ci2,…,cit) ,并使用<start thought> 和 <end thought> 标记开始和结束,如图 1 中的 Thought0,Thought1 ,.. 。

• 说话(混合后理由和基础预测):在生成每个 Thougth 之后,Quiet-STaR 训练一个“混合头”(mixing head),这是一个浅层的 MLP,用于确定在给定 Thought 的情况下,下一步 token 预测的 logits 应该在多大程度上被纳入考虑。这种方法有助于平滑地过渡到使用 Thought 进行预测,特别是在预训练模型的初期阶段,Thought 可能与模型的分布不一致。

• 学习(优化理由生成):应用 REINFORCE 算法来优化 Thought 生成参数,包括开始/结束 Thought 的 token 和语言模型的权重。优化的目标是增加生成 Thought 的可能性,这些 Thought 使得未来文本的预测更加准确。

1. 原始文本 (Original Text)

图 1 的顶部显示输入文本:”4 2 + 1 2 = 5 4″。

2. 思考过程 (Think)

对于每个输入 token,模型会生成多个 Thought,如图 1 中蓝色的框。

3. 采样 Thought (Sampled Thought)

图 1 中显示了采样出的两个 Thought,每个 Thought 以 START 开始,以 END 结束。

4. 对话过程 (Talk)

模型使用生成的 Thought 来预测下一个 token。图中显示了两个例子:

• 第一个 Thought “2 + 2” 有助于正确预测下一个 token (图中的数字 4)。

• 第二个 Thought “4 + 1” 对预测 token 4 没有帮助。

5. 学习过程(Learn)

• 如果 Thought 有助于预测(图中的绿色勾),模型会得到奖励,增加生成这种 Thought 的概率。

• 如果 Thought 没有帮助或有害(图中的红色叉),模型会丢弃这个 Thought,减少生成类似 Thought 的概率。

6. 模型更新

基于这个奖励/惩罚机制,模型会不断更新,学习生成更有帮助的 Thought。

这个过程允许模型通过生成内部 Thought 来改善其预测能力,而不需要额外的监督。模型通过尝试不同的 Thought 并评估它们的有用性来 “自学” 更好的推理策略,也就是论文标题所说的“说话之前先思考”。

在详细介绍 Quiet-STaR 的训练和推理过程之前,我们先介绍一下 REINFORCE 算法,一种策略梯度方法,用于强化学习中的策略优化。它通过直接优化策略参数来最大化预期回报。REINFORCE 算法属于蒙特卡罗方法,它通过采样完整的轨迹来估计梯度。

REINFORCE

REINFORCE 算法的步骤

• 初始化策略参数:初始化策略参数 θ 。

• 生成轨迹:使用当前策略 πθ 生成一个轨迹(即一系列状态、动作和奖励)。

• 计算回报:对于每个时间步 t ,计算从时间步 (t) 开始的回报:

Gt=∑k=tTγktRk

其中, γ 是折扣因子, Rk是时间步 k 的奖励。

• 更新策略参数:使用梯度上升法更新策略参数:

θθ+αθlogπθ(atst)Gt

其中, α 是学习率, πθ(atst) 是策略在状态 st 下选择动作 at 的概率。

下面举一个具体例子:

假设我们有一个简单的网格世界环境,其中智能体需要从起点移动到终点。网格世界如下:

S – 起点

G – 终点

. – 可通行的空格

# – 障碍物

网格世界布局:

S . . #

. # . G

. . . .

智能体可以选择四个动作:上、下、左、右。每个动作都有一个固定的概率被选择。智能体的目标是找到一条从起点到终点的路径,并最大化其总回报。

• 初始化策略参数:假设我们使用一个简单的线性策略,每个动作的概率由参数 θ 决定。初始参数 θ 为随机值。

• 生成轨迹:智能体从起点 S 开始,按照当前策略 πθ 选择动作,生成一条轨迹。例如:

轨迹: S -> 右 -> 下 -> 下 -> 右 -> 右 -> 上 -> G

奖励: 0  -> 0  -> 0  -> 0  -> 0  -> 0  -> 0  -> 1

• 计算回报:对于每个时间步,计算从该时间步开始的回报。例如,对于上面的轨迹:

G_0 = 1

G_1 = 1

G_2 = 1

G_3 = 1

G_4 = 1

G_5 = 1

G_6 = 1

G_7 = 1

• 更新策略参数:使用梯度上升法更新策略参数。假设学习率 α=0.01 ,则对于每个时间步,我们更新参数:

θθ+αθlogπθ(atst)Gt

经过多次迭代,策略参数 θ 会逐渐优化,使得智能体能够更有效地找到从起点到终点的路径,并最大化其总回报。

问题描述

Quiet-STaR 在序列中每一对观察到的 token 之间引入了一个辅助变量 “rationale”。然后我们的目标是优化参数为 θ 的语言模型,使其能够生成中间 Thought(或 rationale),如下所示:

θ∗=argθmaxEx[log(xi:nx0:i,rationaleθ(x0:i))](1)

注意,在原则上,这与已经正确模拟了语言在字符串上分布的最优语言模型相比,并没有额外优势。然而,在实践中,大量的先前工作已经表明,语言模型在执行推理任务时,能够从中间理由中受益。一些工作已经将链式推理的效果归因于“经验的局部性”。更广泛地说,推理允许模型将复杂的计算分解为更小的步骤。实际上,我们训练模型学习哪些分解和计划步骤在预测未来文本时是有效的。

此外,Quiet-STaR 将目标设定为准确预测剩余序列,而不仅仅是理由之后的下一个 token。也就是说 Quiet-STaR 的目标是 next sequence prediction,而不是 next token prediction。对于最优的 LM 来说,这两者是等价的。但是按照 OpenAI 的说法,非短视的目标设定有利于更好的学习“rationale”。

接下来我们介绍下如何高效地为输入序列中的每个 token 生成理由(rationales)。

并行生成

Quiet-STaR 中的一个关键挑战是在输入序列的每个 token 位置高效地生成理由(rationales)。简单地说,这将需要对每个 token 进行单独的前向传递,这在长序列中计算上是不切实际的。

但是我们可以利用语言模型的推理过程,语言模型在推理过程中会为所有输入 token 生成下一个 token 的概率分布。这允许模型为每个 token 采样一个后续 token。

为了高效地生成理由(rationales),Quiet-STaR 缓存每个前向传递的结果,并使用对角线注意力掩码。这样,每个生成的 token 可以关注所有之前用于生成它的 token,以及它自己,但不会关注其他路径上的 token

通过这种方式,可以并行地为序列中的所有 token 生成理由,而不需要为每个 token 单独进行前向传递。这大大提高了生成理由的效率。

比如,在输入序列 “<bos> the cat sat” 每个 token 之后预测下一个 token,可能会生成 “yes orange saw down”——每个后继 token 本身对于序列的前缀来说都是一个合理的下一个 token,这些后继 token 是这些前缀的延续,我们可以利用这些延续为每个观察到的 token 生成隐藏的理由。

下图详细地展示了并行生成的过程。

null
图2:并行生成理由

图 2 展示了 Quiet-STaR 算法如何通过并行方式在文本的每个 token 之后生成理由。这是通过在模型的每个 token 上应用注意力掩码来实现的,允许模型同时生成多个理由。

我们详细介绍下图 2 的右边部分(Parallel Inference Mask)。

比如在对 token d 生成理由 d′′ 时,只需要关注自身 (d′′) 、前面的 Thought token (d′) 以及先前的文本(a、b、c、d)。而这些的 token 的前向计算结果我们都可以缓存好。

同样,对 token c 生成理由 c′′ 时,只需要关注自身 (c′′) 、前面的 Thought token (c′) 以及先前的文本(a、b、c)。而这些的 token 的前向计算结果我们一样可以缓存好。

这样,我们在对 token a、b、c、d 生成理由时,完全可以并行处理。

看到这里,读者可能会感到困惑,目前看都是根据输入 token 生成理由(rationales),也就是根据结果生成前缀,对后续 token 没有任何作用。不急,接下来我们就介绍 rationales 是如何影响后续 token 预测。

优化 <|startofthought|> 和 <|endofthought|>

<startofthought>和<endofthought>是控制模型理由(rationales)生成的开始和结束 token。优化这些token,尤其是 <startofthought> token,在训练初期比较困难,因为它们是离散的推理 token。

为此,OpenAI 将这两个 token 的初始 embdding 使用破折号“——”的 embedding 来初始化,破折号在文本数据中经常出现,用来表示停顿或思考。这利用了语言模型已有的知识。此外,为了允许这些 embdding 更快地被优化,OpenAI 在训练过程中对这些 embdding 的梯度应用了一个(超参数)权重。直观地说, <startofthought>可以将模型置于 “思考模式”,而 <endofthought>可以告诉模型何时完成思考。

非短视评分与教师强制(Teacher-forcing)

非短视评分(Non-myopic Scoring)

在传统的语言模型中,模型通常只关注于预测下一个 token 的准确性。然而,在 Quiet-STaR 中,作者们意识到仅仅基于下一个 token 来评估生成的理性思考(rationales)的质量可能是不够的。因此,他们引入了非短视评分机制(Non-myopic Scoring),即不仅仅评估理性思考对下一个 token 的预测能力,还评估它对未来多个 token 的预测能力。

具体做法是,在训练过程中,模型不仅计算理性思考对紧接着的n_true个 token 的预测效果,还通过教师强制(Teacher-forcing)技术将这些未来 token 纳入考虑范围。这样做的好处是可以使模型更全面地评估理性思考的实际效用,而不仅仅是局限于眼前的下一个 token。

教师强制 (Teacher-forcing)

Teacher-forcing 是一种在序列生成任务中常用的训练技术,它通过直接将真实的未来序列值(即标签)作为下一个时间步的输入来训练模型。

在 Quiet-STaR 中,Teacher-forcing 被用来缓解由于并行采样导致的无法直接通过反向传播梯度的问题。

具体来说,在并行生成理性思考时,由于模型同时从序列中的每个位置生成多个理性思考,这会导致传统的反向传播方法失效(因为生成的思考序列与真实序列之间没有直接对应关系)。对于序列中的每个 token,模型会生成多个可能的理性思考。这些理性思考是并行生成的,并且它们之间并没有一个明确的 “正确” 或 “错误” 的划分(也就是没有 label)。因此,当模型尝试通过反向传播来更新其参数时,它无法确定应该将梯度回传到哪个具体的理性思考上,因为每个理性思考都只是可能的一种解释或推理,而没有明确的真实值与之对应。这种情况导致传统的反向传播方法失效,因为模型无法根据生成的理性思考与真实序列之间的差异来更新其参数。

下面举一个具体的例子来说明在 Quiet-STaR 模型中,模型同时从序列中的每个位置生成多个理性思考时,如何导致传统的反向传播方法失效。

假设我们有一个简单的文本序列:“The cat sat on the mat.”,模型的任务是为这个序列中的每个单 token 生成一个理性思考来解释为什么这个 token 会出现在这里。

在传统的序列生成任务中,比如机器翻译,模型会一次生成一个 token,并且这个 token 是基于之前的生成结果和当前的上下文来预测的。在这个过程中,如果生成的 token 与真实 token 不匹配,模型可以通过计算损失函数(如交叉熵损失)并应用反向传播算法来更新其参数,以便在下一次迭代中生成更接近真实 token 的输出。

在 Quiet-STaR 中,模型不是一次只生成一个 token 的理性思考,而是同时从序列中的每个位置生成多个可能的理性思考。例如,对于 token “cat”,模型可能会生成以下几个理性思考:

• “Because it is an animal.”

• “Because it is a pet.”

• “Because it is mentioned in the text.”

对于序列中的每个 token,模型都会生成类似的多个理性思考。由于这些理性思考是并行生成的,并且没有明确的“正确”答案(因为多个理性思考都可能合理解释 token 的出现),传统的反向传播方法就无法直接应用。模型无法知道应该将梯度回传到哪个理性思考上,因为没有真实的标签来指示哪个理性思考是正确的。

为了解决这个问题,Quiet-STaR 模型采用了 Teacher-forcing 技术。

在训练过程中,模型首先基于当前的理性思考预测接下来的 n_true 个 token,然后通过 Teacher-forcing 将真实的未来 token 作为输入,继续预测更远的未来 token。通过这种方式,即使在并行采样的情况下,模型也能接收到关于其预测准确性的反馈。

通过这种方法,即使理性思考是并行生成的,模型也能接收到关于其预测准确性的间接反馈。具体来说,当模型使用真实的未来 token 作为输入时,如果它能够基于之前的理性思考更好地预测更远的未来 token,那么这个理性思考就被认为是“有用”的,并且模型会倾向于在将来的迭代中生成类似的理性思考。

下图详细的展示了 Teacher-forcing 技术的应用。

null
图3:Teacher-forcing

下面我们详细介绍下图 3 的内容。

输入序列是 d,e,f ,接下来需要预测 g,h 。

实线表示正常的预测路径,虚线表示使用 Teacher-forcing 的预测路径。

• 预测 g

正常路径:输入是 d,e,f ,对应的预测值是 d^,e^,f^ ,然后通过前向计算(实线),得到输出:g^LMf(d^,e^,f^) 。

使用 Teacher-forcing 技术后的路径:插入真实的 tokenf ,然后再生成 tokeng 的预测值: g^T=f(d,e,f,Thoughtf)

融合:最后将 g^LM和 g^T 融合得到 g^ 。

• 预测 h

正常路径:通过前向计算(实线),得到输出: h^LMf(d^,e^,f^,g^) 。

使用 Teacher-forcing 技术后的路径:由于 Quiet-STaR 一次是预测多个 token,因此使用 Teacher-forcing 后,预测 h 的输入是: h^T=f(d,e,f,g,Thoughtf) ,这也是为什么图中使用的都是相同的 Thought。

融合:将正常的预测值 h^LM 和使用 Teacher-forcing 技术后的预测值 h^T 相结合,得出 h^。

优化目标

在 Quiet-STaR 中,为了优化理性思考(thought)的生成,模型采用了一个结合了负对数似然损失(Negative Log-Likelihood Loss, NLL Loss)和 REINFORCE 损失的复合目标函数。这个目标函数的设定旨在引导模型生成那些能够显著提高未来文本预测准确性的理性思考。

在 Quiet-STaR 中,每个生成的思考(thought)都被赋予一个奖励(reward),这个奖励基于思考对模型预测未来文本能力的提升程度。具体来说,对于每个输入序列中的每个位置j,模型会生成多个思考(thoughts),并为每个思考计算一个基于混合了思考和未思考情况下未来文本预测概率的奖励 rj

rj=logpj:j+ntruetalk(Xj+1:j+ntrue+1)−logpˉj:j+ntruetalk(Xj+1:j+ntrue+1)(2)

其中, pj:j+ntruetalk 表示在思考帮助下的预测概率,而barpj:j+ntruetalk 表示所有思考下预测概率的平均值。

然后,作者使用这个奖励来定义一个 REINFORCE 损失项,该损失项通过梯度上升来优化思考(thoughts)的生成参数,从而增加那些提高预测概率的思考的生成概率:

θLjREINFORCE=−rj⋅∇θlog(Tj∣[X:j;<|startofthought|>])(3)

这里的 Tj 是在位置 j 生成的一个思考,而 (Tj∣[X:j;<|startofthought|>]) 表示在给定前文 X:j 和思考开始标记的情况下生成思考 Tj 的概率。

最终,模型的损失函数是负对数似然损失和 REINFORCE 损失的组合:

Lj=LNLLj+LREINFORCEj(4)

通过最小化这个组合损失函数,模型能够同时优化其基础的语言建模能力和思考生成能力。

通过以上方法,Quiet-STaR 能够有效地训练语言模型,使其能够在生成每个 token 之前先“思考”,从而改善对未来文本的预测能力。

下面介绍下 Quiet-STaR 的完整训练过程。

输入:

• 初始的语言模型参数 θ0

• 训练步数 num steps

• 序列长度 l

• Thought length t

• 学习率 α

• 批量大小 b

• 每个 token 生成的 Thought 数量 nthoughts

• 用于监督每个 Thought 的真实 token 数量 ntrue ,比如 ntrue=4 表示模型在生成每个 Thought 时,会尝试预测接下来的 4 个真实的 token,并计算相应的 loss

输出:

能生成 Thought 用于预测未来文本的语言模型 θ

算法步骤:

null

Examples

虽然 Quiet-STaR 没有明确将 Thought 训练成人类可解释的形式,但这些 Thought 是由同一个用于语言模型生成的,因此很可能至少部分是可理解的。下面是一些具体例子。

化学反应示例:

<s> # 镁与氮气反应生成氮化镁。这个反应的化学方程式是 Mg+N_2-> MgN_2。这个反应的产物是什么?

2016年1月12日

氮化镁的化学式是 $M {g}_{3} {N}_{2}$。

##### 解释:

像许多活泼金属一样,氮化镁可以通过<|startofthought|> 1 — 来形成,所以形成氮化镁的反应方程式是

Mg + N_2<|endofthought|> 通过加热金属

数学证明示例:

一个整数 $n$ 如果是奇数,可以表示为 $n = 2k+1$,其中 $k$ 是某个整数。

要证明 $A = B$,我们必须展示 $A \\subseteq B$ 并且 $B \\subseteq A$。

首先,这些中的<|startthought|> 在某种意义上 – 是更困难的<|endthought|> 对学生来说最具挑战性的。”

常识问答示例:

<s> 问:不断地和同一个人谈论同一件事情是

<|startofthought|>

(a) 一对一的相关性

(b) 一对一的

<|endofthought|>

某人可以做什么?

实验结果

null
图4: 实验结果

图4是论文的实验结果,是基于 Mixtral-7B 预训练模型做的。其中24,12前面的 24 表示每次生成的 Thought 数量 nthoughts ,后面的 12 表示使用的前面真实 token 数量 ntrue 。

总结

流传已久的说法是,Quiet-STaR 即是 OpenAI 去年推出的 Q*,也是今年神秘的「草莓(Strawberry)」项目,尽管这一说法尚未得到证实,但 Quiet-STaR 的理念确实独具一格。当业界普遍关注各种PO(如DPO、PPO、GRPO等)时,OpenAI 提出的 Quiet-STaR 显得别出心裁。我花了大约一周时间阅读这篇论文,目前打算尝试复现其方法,待后续获得实验结果后再与大家分享。

参考

[1]Quiet-STaR: Language Models Can Teach Themselves to Think Before Speaking

https://arxiv.org/abs/2403.09629

[2]斯坦福重磅,用这条Prompt让LLM说话之前先思考

https://mp.weixin.qq.com/s/__Q4YR-YJ7ogdpcF83y9nQ

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容