w~深度学习~合集9

我自己的原文哦~      https://blog.51cto.com/whaosoft/14010384

#UPSCALE

这里设计了一个通用算法UPSCALE,可以剪枝具有任意剪枝模式的模型。通过消除约束,UPSCALE将ImageNet精度提高2.1个点。

paper地址:https://arxiv.org/pdf/2307.08771.pdf

code:https://github.com/apple/ml-upscale

随着神经网络规模和复杂度的增长,推理速度在下降。为了应对这一点,通道剪枝这样的压缩技术通过删除权重的通道来删除参数。但是,对于模型的多分支段来说,删除通道可能会引入推理时的内存复制操作。这反过来会增加推理延迟,以至于剪枝后的模型比未剪枝的模型慢。为了应对这一点,剪枝方法通常会约束某些通道一起剪枝。这可以完全消除内存复制,但如本文所示,它大大降低了精度。作为变通方法,本文的思路是在导出时重新排序通道,以减少内存复制并提高精度。基于这一思路,本文设计了一个通用算法UPSCALE,可以剪枝具有任意剪枝模式的模型。通过消除约束,本文将ImageNet精度提高2.1个点。进一步地,通过重新排序通道,与基准相比,UPSCALE将推理速度提高了2倍。本文的工作为更广泛的剪枝算法打开了大门。

Introduction

深度神经网络模型对越来越多的实际应用来说是必不可少的,但是与此同时神经网络架构也在逐年增长规模和复杂度。这对具有推理时间约束的许多使用场景来说成为一个大问题,这使得模型压缩技术变得必要。

通道剪枝是最有效的模型压缩方法家族之一,它通过删除卷积或全连接权重的整个通道来减少推理时延迟。尽管其效果显著,但是通道删除过程本身在多分支网络段并不简单,且常被忽视。这导致两种不可取的通道剪枝选择:1) 按照约定增加约束,结果是会降低精度;2) 消除约束,但会增加推理延迟。

首先,没有约束时,导出网络的多分支段尤其复杂。在这些段中,不同分支的层可能都使用相同的输入特征图,并同时剪枝不同的通道。这会导致不兼容的维度,更重要的是,在推理时网络必须执行内存复制以确保张量在内存中是连续的。这些内存复制非常耗费延迟,以至于剪枝后的模型可能比未剪枝的模型更慢(图2)。

其次,为了应对这一点,早期工作通过建立约定来增加约束,具体是约束段的所有分支剪枝相同的通道。这些约束简化了导出,因此现代剪枝工作更关注剪枝哪些通道,而不是如何在导出时删除它们。尽管在结构化剪枝方面取得了显著进步,但这些约束降低了精度。直观地,约束限制了可能的剪枝模式集合,限制了剪枝的有效性(图3)。 

为了解决这个问题,本文有两个思路:1) 重排序通道可以使张量的子集保持连续;2) 张量的连续切片“免费”使用,不需要内存复制。简而言之,这允许本文放弃常规的剪枝约束以获得更高的精度。此外,通过消除内存复制,这允许精度收益以较小的延迟代价获得。

这些思路产生了一个通用的导出算法“UPSCALE”,它可以剪枝具有任意剪枝模式的模型。这支持更广泛的剪枝算法类,因为它使未约束剪枝的模型延迟更加适中,在某些情况下几乎完全消除冗余内存复制。本工作做出以下三点贡献:

  1. 比较不同约束对精度的影响,涵盖各种剪枝启发式方法、架构和稀疏度水平。不受约束的剪枝提高了ImageNet的后训练剪枝精度,平均提高2.1个点
  2. 一个通用的导出工具UPSCALE,与基准相比将推理时间提高2倍以上。这个可插拔工具使未来研究人员可以抽象出导出问题。据本文所知,本文是第一个开发可以支持不受约束剪枝模式的导出工具的。
  3. 将内存复制最大化抽象为图形,这可能为进一步的延迟优化打开新的方向。

Related Work

结构化与非结构化剪枝。现有的剪枝工作可以分为非结构化方法和结构化方法。非结构化方法通过阈值和零化单个权重值,而结构化方法在不同粒度层面施加稀疏模式来进行结构约束,从剪枝成块到删除整个通道。后者称为通道剪枝,其优势不依赖于定制稀疏矩阵原语。其优势来自于在导出时删除卷积权重通道,以减少推理时的资源消耗。

通道剪枝策略。除了其独特的优势外,通道剪枝还引入了一个独特的挑战:复杂拓扑的通道删除尤其困难,特别是当网络的多个分支使用或生成共享张量时。为了应对这一点,先前的工作增加约束,限制网络复杂部分的可能剪枝模式。大多数结构化剪枝工作关注剪枝的其他方面,而不是导出,包括剪枝的启发式方法、量化粒度、掩码学习技术等。值得注意的是,这些工作忽视了两个导出相关的挑战:1)大多数工作在训练时使用零一掩码来模拟剪枝,而不会最终删除通道;这意味着多分支段的导出挑战从未出现。2)大多数工作用FLOPs作为延迟的代理;这意味着如果这些工作删除约束,内存复制的延迟影响从未被发现。这两种做法组合起来,隐藏了导出相关的挑战。为了补救这一点,本文直接研究导出,以允许更广泛的剪枝算法类,展示现有的剪枝启发式方法可以通过简单地消除这些约束来获得更高的精度。

Method

先前的研究主要关注剪枝策略,这些策略在训练期间通过“零化”通道来模拟剪枝模式。本文的工作与这一研究方向无关,而是专注于如何导出无限制的剪枝模式

卷积核中的输入通道和输出通道都可以被剪枝;剪枝前者称为“输入剪枝”(即将剪枝掩码放在卷积层之前),剪枝后者称为“输出剪枝”(即将剪枝掩码放在卷积层之后)。为了方便起见,本文将重点放在无限制的输入剪枝上,不失一般性地,可以参考附录F中的明确描述来了解无限制的输出剪枝。本文还经验性地观察到,输入剪枝通常优于输出剪枝(图A.15,A.16),这激发了本文对输入剪枝的关注。

请注意,在本方法部分中,本文明确指定“卷积”以便于理解。然而,本文的算法可推广到任何输入通道数量独立于输出通道数量的操作,例如全连接层。

Step 1 - Reduce to a Segment

本文的算法将网络架构划分为多个段(segments)(图4中的步骤1),非正式地说,是一组可以独立于网络的其余部分进行剪枝的层。一个段包括(a)产生输出的卷积层,称为“producers”,以及(b)消耗这些张量的卷积层,称为“consumers”。

为了确定segments,从任意一个producers开始。找到该producers的所有consumers,然后找到这些consumers的所有producers。重复迭代,直到两个集合都收敛。详见算法1的更准确的公式表述。

例如,在图4(步骤1)中,从producersA开始。找到A的consumers:{B,D}。找到它们的producers:{A,C}。找到它们的consumers:{B,D}。注意到本文的consumers集合已经收敛,因此本文的段已经完成。现在,这个segments可以独立于网络的其余部分进行剪枝,将剪枝网络的问题简化为剪枝单个segments的问题。详见图A.14中的更多示例。

Why Memory Copies Occur

简而言之,当consumers剪枝不同的通道时,会出现内存复制。为了解决这个问题,先前的方法只是将所有consumers约束为剪枝相同的通道,如图2中的“Constrained”。由于两个consumers都被约束为剪枝相同的通道,因此导出实现是微不足道的:只需删除所有consumers剪枝的producers输出通道即可。

然而,现在考虑图2中的无约束情况:“Inefficient”。假设consumers II剪枝的通道consumers III没有剪枝。在导出时,无法删除II剪枝的通道,因为III仍然需要它。相反,在推理期间,本文会选择producers的输出 - 将II所需的每个未剪枝的通道复制到一个新的张量中 - 然后将其传递给II。这种方法是导出无约束剪枝模型的基准方法。不幸的是,基准方法中的内存复制会在推理时间产生显著的延迟成本,以至于这个剪枝模型的延迟比原始未剪枝模型更高(图7)。

本文的关键见解是连续的切片是“免费的”。换句话说,每个consumers取输入张量的一个切片,而不是将通道复制到一个新的张量中。因此,本文设计了一个算法,可以重新排序producers的输出通道和consumers的输入通道(图2,“Ours”,第3.6节)。现在本文将讨论如何计算这个重新排序。

Formulate as a Graph

为了简化说明,本文将在接下来的内容中研究consumers保留的通道,而不是它剪枝的通道。

为了规范化本文的目标,将本文的约束条件形式化为一个无向图(图4,第2步):本文图中的每个节点代表一个consumers保留的通道集。如果两个节点共享一个或多个保留的通道,则它们之间共享一个无向边。每个节点的奖励是保留的通道数,每个边的奖励是共享保留通道数的负数。本文很快就会解释为什么要这样做。有了这个图,可以将内存复制最大化目标规范化。

目标是找到一条路径 - 或者换句话说,一个节点序列:由于每个节点都是一个consumers,节点的序列表示一系列consumers。反过来,每个consumers序列都有一个零复制的通道顺序。例如,假设本文有两个consumers,节点序列为A、B。零复制通道顺序可以通过:首先排序仅由A保留的通道,然后是A和B共享的通道,最后是仅由B保留的通道。这种顺序可以确保零内存复制,因为A和B的输入已经在内存中是连续的。本文可以无限期地为任意数量的consumers继续这个过程,只要consumers按顺序排列即可。总之,路径可以转化为零复制的通道顺序。更多例子可以参见附录B。

目标是找到一个无环路径:假设路径中的第一个和最后一个节点共享通道。现在,问题在于:将共享通道放在通道顺序的开头还是结尾?无论哪种方式,至少一个consumers的输入都将在内存中非连续分布。更一般地,序列中的非相邻consumers不能共享通道。换句话说,没有两个不相邻的节点可以共享一条边 - 或者更简洁地说,路径必须是无环的;否则,在推理期间将需要为共享通道引入额外的内存复制。

目标是找到最大奖励的无环路径:如前所述,路径中的所有通道都需要零复制,因此为了最小化内存复制,本文需要最大化路径中包含的通道数。之前本文定义了节点和边的奖励,使得路径奖励等于路径中包含的通道数。因此,最终最大化包含通道数就是最大化路径奖励。

本文最终的正式目标是找到最大奖励的无环路径maximum reward acyclic path)。关于如何通过这样做来最小化内存复制的端到端示例,请参见附录C或图A.10。

How to Find Maximum Reward Acyclic Path

本文首先计算最大奖励路径的奖励,简称为“mrp”。为了计算图 G 的 MRP(G) 奖励,本文遍历所有节点 s ∈ G,并计算从节点 s 开始的最大奖励路径的奖励 f(s)。

现在本文的目标是定义 f(s)。为此,考虑节点 s 的所有邻居:n ∈ A[s],其中 A 是邻接矩阵。直观地说,mrp 的奖励 f(s) 是所有邻居节点 f(n) : n ∈ A[s] 的最大奖励路径的最大奖励 (a),以及到其邻居节点的奖励 Re[s, n],其中 Re 是边缘奖励矩阵,表示共享通道的数量。这可以用以下递归关系总结:

其中 Rn 是节点奖励矩阵,表示consumers保留的通道数量。这可以找到最大奖励路径,但它不能处理无环约束。请注意,mrp 路径 p 是通过动态规划优化目标(即方程式1)获得的节点序列。

处理无环约束:将最大奖励无环路径缩写为“mrap”。为了处理无环约束,定义一个节点集 I,其中包括所有无效节点。无效节点包括 (a) 已经遍历的节点,包括当前路径中的节点,以及 (b) 邻近路径的节点,即与路径中的节点共享边缘的节点。如果从不遍历邻近路径的节点,则路径保证是无环的。重新定义子问题为 f(s,I),即从源节点 s 开始且不包括节点 I 的 mrap 的奖励。

然后可以修改原始目标为以下目标。初始无效集 I 是路径中唯一的节点,即 {s}。

然后修改递归关系为以下关系。为方便起见,将仅从 s 到 n 而避免无效集 I 的旅行的定义因子g(s, n, I) 提取出来。 

简而言之,方程式 4 在考虑要遍历的邻居节点时排除所有无效节点。在考虑每个邻居节点时,通过添加邻居节点本身 {n} 和源节点的邻居 A[s] 来扩展无效集 I。

Step 3 - Compute Channel Order From Graph

注意,最大奖励无环路径 p 可以通过动态规划解决优化问题(即方程式 3)得到,表示为 p ← MRAP(G)。此外,mrap 路径 p 可能不包含所有节点,例如,如果所有节点都在一个环中。因此,继续在剩余节点 MRAP(G-p) 上寻找路径,直到没有更多节点为止。

在前一步骤中找到路径然后被转换为最终的通道顺序。如第 3.3 节和图 4(情况 2)所示,假设有两个consumers A、B。排序通道仅由 A 保留,然后通道由 A 和 B 共享,然后通道仅由 B 保留。例如,如果 A 保留 1、3,B 保留 2、3,则先排序A 的专有通道(1),然后是共享通道(3),最后是 B 的专有通道(2),生成最终顺序:1、3、2。

更一般地,将 mrap 路径中的排序节点表示为 p = [n1,n2,n3,...]。首先取所有仅由第一个节点保留的通道,将其表示为 n˜1。第一个节点只应与第二个节点共享通道,因此这等价于计算集合减法:

更一般地,将“唯一”于节点 i 的通道表示为 n˜i。第 i 个节点只应与前 ni-1 和后 ni+1 个节点共享通道,因此取差集以查找所有“唯一”于节点 ni 的通道。

然后,取第一个和第二个节点共享的所有通道,n1 ∩ n2。然后,取第二个节点的“唯一”通道 n˜2。然后,取第二个和第三个节点共享的通道,n2 ∩ n3。对于路径中的所有节点,继续这样做。总排序如下所示: 

当路径耗尽时,继续使用以下路径中的节点排序。一旦所有路径耗尽,排序就完成了。此通道排序在 Algorithm 1 中被总结为一个置换矩阵 Π。请参见图 4(步骤 3)或图 A.11 的示例。 

Step 4 - Reorder Weights

然后,使用上一步中的通道排序对producers和consumers中的通道进行重新排序。首先,通道顺序直接决定了该段中所有producers的输出通道顺序。更正式地,对于模型权重 W 和producers索引 pi 的列表,本文将通道重新排序表示为 W[pi]Π。其次,对于每个consumers,相应地重新排序consumers的输入通道(即W[ci]Π)。请参阅算法 1 中的完整算法、附录 G 中的说明或图 4 中的示例(步骤 4)。

Generalized Method

一些节点是其他节点的子集。例如,consumersA保留1,2,3;consumersB保留1、2;consumersC保留2、3。A是父节点,B、C 是子节点。尽管A、B、C形式本文图中的一个循环,可以实现零内存复制适应所有三个consumers的解决方案。简单地将通道排序为 1、2、3。这与本文的非循环路径相矛盾要求。为了解决这个问题,引入两个修改:(1)拒绝循环时忽略父子边路径,以及 (2) 如果路径中的子节点包含所有父节点节点通道,然后将父节点的奖励添加到路径的奖励。有关此子集的扩展描述案例及其解决方案,参见附录 D。

多个producers。上面的算法假设有只有一个producer。为了处理多个producers,发现哪些渠道在各个producers之间是相互对应的。假设producers A 和 B 的输出简单相加。在这个在这种情况下,A 的通道 1 相当于 B 的通道 1。A 的通道 2 相当于 B 的通道 2,所以等等。知道了这一点,可以简化为单个producers案例,作为 A 的过滤器自动排序提供 B 的过滤器的排序。

然后运行本文的方法,假设卷积 A 是唯一的producer。之后,当重新排序producers的权重时(即步骤 4),通过上述提到的同等通过映射 Πi,将原始排列 Π 映射为每个producers。然后按 W[pi 排序权重]ΠiΠ。为了更多详细描述和示例参见附录E。

实验

本文进行了大量的实验来表明,相比于有约束剪枝,无约束剪枝可以显着提高准确率,特别是对于较大的和具有复杂拓扑的模型。对于这些无约束剪枝模型,本文证明UPSCALE 在推理时间上优于基线导出的延迟 - 事实上,在没有 UPSCALE 的情况下,剪枝后的模型延迟实际上增加了,这使得 UPSCALE 成为必要导出方法。先前所有的方法都利用约束剪枝,在本文的实验中,消除了这些限制,取而代之的是使用 UPSCALE 导出。

对于训练后设置,无约束剪枝相比有约束剪枝将 ImageNet top-1 准确率提高高达 76.7% 。本文的目标是评估从有约束切换到无约束剪枝时的精度影响。为了简单起见,本文使用以前用于有约束剪枝的剪枝算法,通过删除零一掩码,来实现无约束剪枝。评估效果受约束或无约束剪枝,本文进行实验时没有微调,使用训练后剪枝:(1)采用模型在 ImageNet 上进行预训练,(2) 应用各种剪枝启发式方法使用不同的稀疏度级别进行训练, (3) 查看 ImageNet top-1验证准确性。本文以间隔稀疏参数2.5% 从 0% 到 100% 并测试 5 种剪枝策略15+ 架构。

虽然这些剪枝策略是为有约束剪枝而设计的,但本文发现在所有设置中,无约束剪枝实现的精度与有约束剪枝相当或更好,平均获得了 2.1 个百分点的更优。对于一些情况,特别是对于复杂的拓扑结构和较大的模型(图 3),无约束剪枝可以获得显著的精度提升,ImageNet 精度平均提高了 21.7 个百分点(DenseNet121,L1),在所有稀疏度水平上平均提高,或在特定稀疏度水平上提高了高达 76.7 个百分点(EfficientNetV2-Small,LAMP,12.5%)。这说明无约束剪枝在适当的情况下可以提供额外的好处。本文在图 6 中总结了结果,并在图 A.22 和图 A.23 中报告了完整的结果。附录 A 中的微调初步结果也显示了相当大的(5 个百分点)精度差距。

相对于无约束剪枝模式的基准导出,使用 UPSCALE 导出剪枝模型的延迟可以提高高达 52.8% 。这个基准在第 3.2 节中有描述。为了独立评估本文的重排序算法的有效性,本文采取以下步骤:(1)对在 ImageNet 上预训练的模型进行训练后剪枝;(2)导出带有和不带有 UPSCALE 的未受限制剪枝模型;(3)对导出的模型的延迟进行基准测试。UPSCALE 可以平均减少所有设置的导出模型的延迟达 8.6%,并在所有稀疏度水平上获得显著的延迟优势,最高可达到 24.9%(SqueezeNet1-1,L1),平均值为所有稀疏度水平(ResNet18,FPGM)达到 52.8% 的延迟降低。需要注意的是,导出未受限制的剪枝模型而没有使用 UPSCALE 实际上会增加延迟,相对于原始的未剪枝模型来说;在相同的设置中,UPSCALE 能够实现更适当的延迟降低。 

本文在图 7 和图 3 中总结了结果,并在图 A.24 中报告了完整的结果。需要注意的是,本文的算法中没有可以控制性能的超参数,因此本文在所有模型上均匀地运行本文的算法以获得这种性能。本文还绘制了理论上的零内存复制解决方案的延迟,说明任何未受限制的剪枝导出所能达到的最大延迟降低;本文观察到 UPSCALE 常常表现得近乎最优,延迟几乎与零内存复制延迟相匹配。

设置。本文使用一张 V100 GPU,配备 32 GB RAM。为了计时导出模型,本文在提供的模型上运行现有的剪枝策略,使用 UPSCALE 进行导出,然后使用 PyTorch 的 jit trace 生成一个不含 Python 的可执行文件。然后,使用 PyTorch 内置的分析工具对这个跟踪模型进行基准测试,包括 CUDA “activities” 和跟踪张量内存分配。需要注意的是,该工具会自动处理预热,例如在启动定时运行之前运行多个正向传递。本文所有的延迟测量是 100 次运行的总和,并报告平均值和标准差。所有的精度都是在 ImageNet ILSVRC 2015(Russakovsky 等人,2015)验证数据集上报告的。

结论

本文引入了无限制通道剪枝导出(UPSCALE)来更通用地支持剪枝导出;UPSCALE 可以直接应对剪枝现代神经网络的主要挑战:即内存和延迟效率问题。此外,本文提出了一个框架和一个近似解决方案,以减少推理时的内存复制,从而减轻效率低下的问题。最终结果是一个通用的剪枝导出库,扩大了现有和新的剪枝算法可操作的范围,允许导出任何剪枝模式,并使得无限制剪枝成为传统受限制剪枝的有力竞争对手。

#Cumulative Reasoning

姚期智领衔提出大模型「思维」框架!逻辑推理正确率达98%,思考方式更像人类了

一出手,瞄准的就是“让大模型像人一样思考”这个方向——

不仅要让大模型一步步推理,还要让它们学会“步步为营”,记住推理中间的所有正确过程。

具体来说,这篇新论文提出了一种叫做累积推理(Cumulative Reasoning)的新方法,显著提高了大模型搞复杂推理的能力。

要知道,大模型基于思维链等,可以进行问题推理,但面对“要拐好几个弯”的问题,还是容易出错。

累积推理正是在此基础上,加入了一个“验证者”,及时判断对错。由此模型的思考框架也从链状和树状,变成了更复杂的“有向无环图”。

这样一来,大模型不仅解题思路更清晰,还生出了一手“玩牌”的技巧:

在代数和几何数论等数学难题上,大模型的相对准确率提升了42%;玩24点,成功率更是飙升到98%

据清华大学交叉信息研究院介绍,共同一作张伊凡解释了这篇论文的出发点:

卡尼曼认为人类的认知处理过程包括两个系统:“系统1”是快速、本能和情感化的,“系统2”是缓慢、深思熟虑、合逻辑的。

目前,大语言模型的表现与“系统1”更为接近,这也或许是它不擅长应对复杂任务的原因。

从这个角度出发设计的累积推理,效果比思维链(CoT)和思维树(ToT)更好。

那么,这种新方法究竟长啥样?我们一起展开看看。

突破思维链&树“瓶颈”

累积推理的核心,在于改进了大模型思维过程的“形状”。

具体来说,这个方法用到了3个大语言模型

  • 提议者 (Proposer):不断提出新命题,即基于当前思维上下文,建议下一步是什么。
  • 验证者 (Verifier):核查提议者的命题准确性,如果正确就将它添加到思维上下文中。
  • 报告者 (Reporter):判断是否已经能得到最终解决方案,来确定是否结束推理过程。

推理过程中,“提议者”先给出提案,“验证者”负责评估,“报告者”决定是否要敲定答案、终止思考过程。

CR推理示例

有点像是团队项目里的三类角色:小组成员先头脑风暴出各种idea,指导老师“把关”看哪个idea可行,组长决策什么时候完成项目。

所以,这种方法究竟是怎么改变大模型思维“形状”的?

要想理解这一点,还得先从大模型思维加强方法“鼻祖”思维链(Chain of Thought,CoT)说起。

这个方法在2022年1月由OpenAI科学家Jason Wei等人提出,核心在于给数据集中的输入加一段“逐步推理”文字,激发出大模型的思考能力。

选自GSM8K数据集

基于思维链原理,谷歌也快速跟进了一个“思维链PLUS版”,即CoT-SC,主要是进行多次思维链过程,并对答案进行多数投票(majority vote)选出最佳答案,进一步提升推理准确率。

但无论思维链还是CoT-SC,都忽略了一个问题:题目不止有一种解法,人类做题更是如此。

因此,随后又出现了一种名叫思维树(Tree of Thought,ToT)的新研究。

这是一种树状检索方案,允许模型尝试多种不同的推理思路,并自我评估、选择下一步行动方案,必要时也可以回溯选择。

从方法中可以看出,思维树比思维链更进一步,让大模型思维“更活跃”了。

这也是为什么玩24点时,思维链加成的GPT-4成功率只有4%,但思维树成功率却飙升到74%

BUT无论思维链、CoT-SC还是思维树,都有一个共同的局限性:

它们都没有设置思维过程中间结果的储存位置。

毕竟不是所有的思维过程都能做成链或者树,人类想东西的方式往往还要更复杂。

这次的累积推理新框架,在设计上就突破了这一点——

大模型的整体思维过程不一定是链或树,还可以是一个有向无环图(DAG)!(嗯,有神经突触内味了)

图中的边都有方向,并且不存在任何循环路径;每个有向边是一个推导步骤

这也就意味着,它可以将所有历史上正确的推理结果存储于内存中,以便在当前搜索分支中探索。(相比之下,思维树并不会存储来自其它分支的信息)

但累积推理也能和思维链无缝切换——只要将“验证者”去掉,就是一个标准的思维链模式。

基于这种方法设计的累积推理,在各种方法上都取得了不错的效果。

做数学和搞逻辑推理都在行

研究人员选择了FOLIO wiki和AutoTNLI、24点游戏、MATH数据集,来对累积推理进行“测试”。

提议者、验证者、报告者在每次实验中使用相同的大语言模型,用不同的prompt来设定角色。

这里用作实验的有GPT-3.5-turbo、GPT-4、LLaMA-13B、LLaMA-65B这些基础模型。

值得一提的是,理想情况下应该使用相关推导任务数据专门预训练模型、“验证者”也应加入正规的数学证明器、命题逻辑求解器模块等。

1、逻辑推理能力

FOLIO是一阶逻辑推理数据集,问题的标签可以是“true”、“False”、“Unknown”;AutoTNLI是高阶逻辑推理数据集。

在FOLIO wiki数据集上,与直接输出结果(Direct)、思维链(CoT)、进阶版思维链(CoT-SC)方法相比,累积推理(CR)表现总是最优。

在删除数据集中有问题的实例(比如答案不正确)后,使用CR方法的GPT-4推理准确率达到了98.04%,并且有最小1.96%的错误率。

再来看AutoTNLI数据集上的表现:

与CoT方法相比,CR显著提高了LLaMA-13B、LLaMA-65B的性能。

在LLaMA-65B模型上,CR相较于CoT的改进达到了9.3%。

2、玩24点游戏能力

ToT最初论文中用到的是24点游戏,所以这里研究人员就用此数据集来做CR和ToT的比较。

ToT使用固定宽度和深度的搜索树,CR允许大模型自主确定搜索深度。

研究人员在实验中发现,在24点的上下文中,CR算法和ToT算法非常相似。不同点在于,CR中算法每次迭代最多产生一个新的状态,而ToT在每次迭代中会产生许多候选状态,并过滤、保留一部分状态。

通俗来讲,ToT没有上面提到的CR有的“验证者”,不能判断状态(a、b、c)正误,因此ToT比CR会探索更多无效状态。

最终CR方法的正确率甚至能达到98%(ToT为74%),且平均访问状态数量要比ToT少很多。

也就是说CR不仅有更高的搜索正确率,也有更高的搜索效率。

3、数学能力

MATH数据集包含了大量数学推理题目,包含代数、几何、数论等,题目难度分为五级。

用CR方法,模型可以将题目分步骤拆解成能较好完成的子问题,自问自答,直到产生答案。

实验结果表明,CR在两种不同的实验设定下,正确率均超出当前已有方法,总体正确率可达58%,并在Level 5的难题中实现了42%的相对准确率提升,拿下了GPT-4模型下的新SOTA。

论文链接:https://arxiv.org/abs/2308.04371

#xxx

#xxx

#xxx
#xxx
#xxx
#xxx
#xxx
#xxx
#xxx
#xxx
#xxx
#xxx
#xxx
#xxx
#xxx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910543.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python如何删除xml中的w:ascii属性

可以使用Python的xml.etree.ElementTree模块通过以下步骤删除XML中的w:ascii属性&#xff1a; import xml.etree.ElementTree as ET# 原始XML片段&#xff08;需包含命名空间声明&#xff09; xml_str <w:rPr xmlns:w"http://schemas.openxmlformats.org/wordproces…

【React】React CSS 样式设置全攻略

在 React 中设置 CSS 样式主要有以下几种方式&#xff0c;各有适用场景&#xff1a; 1. 内联样式 (Inline Styles) 直接在 JSX 元素中使用 style 属性&#xff0c;值为 JavaScript 对象&#xff08;使用驼峰命名法&#xff09; function Component() {return (<div style…

JS红宝书笔记 8.2 创建对象

虽然使用Object构造函数或对象字面量可以方便地创建对象&#xff0c;但这些方式有明显不足&#xff1a;创建具有同样接口的多个对象需要重复编写很多代码 工厂模式可以用不同的参数多次调用函数&#xff0c;每次都会返回一个新对象&#xff0c;这种模式虽然可以解决创建多个类…

高通camx hal进程dump日志分析三:Pipeline DumpDebugInfo原理分析

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、问题背景 二、DumpDebugInfo原理 2.1:我们分析下代码 2.2 :Pipeline Dump debug info 2.3 :dump Metadata Pending Node信息 2.4 :Dump Metadata Pool Debug信息 2.5 :No…

【数据结构】_二叉树基础OJ

目录 1. 单值二叉树 1.1 题目链接与描述 1.2 解题思路 1.3 程序 2. 相同的树 2.1 题目链接与描述 2.2 解题思路 2.3 程序 3. 对称二叉树 3.1 题目链接与描述 3.2 解题思路 3.3 程序 1. 单值二叉树 1.1 题目链接与描述 题目链接&#xff1a; 965. 单值二叉树 - 力…

软件工程画图题

目录 1.大纲 2.数据流图 3.程序流图 4.流图 5.ER图 6.层次图 7.结构图 8.盒图 9.状态转换图 10.类图 11.用例图 12.活动图 13.判定表和判定树 14.基本路径测试过程(白盒测试) 15.等价类划分(黑盒测试) 1.大纲 (1).数据流图 (2).程序流图 (3).流图 (4).ER图…

H7-TOOL自制Flash读写保护算法系列,为华大电子CIU32F003制作使能和解除算法,支持在线烧录和脱机烧录使用2025-06-20

说明&#xff1a; 很多IC厂家仅发布了内部Flash算法文件&#xff0c;并没有提供读写保护算法文件&#xff0c;也就是选项字节算法文件&#xff0c;需要我们制作。 实际上当前已经发布的TOOL版本&#xff0c;已经自制很多了&#xff0c;比如已经支持的兆易创新大部分型号&…

go channel用法

介绍 channel 在 Go 中是一种专门用来在 goroutine 之间传递数据的类型安全的管道。 你可以把它理解成&#xff1a; 多个 goroutine 之间的**“传话筒”**&#xff0c;谁往通道里塞东西&#xff0c;另一个 goroutine 就能接收到。 Go 语言采用 CSP&#xff08;Communicatin…

openLayers切换基于高德、天地图切换矢量、影像、地形图层

1、需要先加载好地图&#xff0c;具体点此链接 openLayers添加天地图WMTS、XYZ瓦片服务图层、高德地图XYZ瓦片服务图层-CSDN博客文章浏览阅读31次。本文介绍了基于OpenLayers的地图交互功能实现&#xff0c;主要包括以下内容&#xff1a; 地图初始化&#xff1a;支持天地图XYZ…

springMVC-15 异常处理

异常处理-基本介绍 基本介绍 1.Spring MVC通过HandlerExceptionResolver处理程序的异常&#xff0c;包括Handler映射、数据绑定以及目标方法执行时发生的异常。 2.主要处理Handler中用ExceptionHandler注解定义的方法。 3.ExceptionHandlerMethodResolver内部若找不到Excepti…

视频汇聚EasyCVR平台v3.7.2发布:新增全局搜索、播放器默认解码方式等4大功能

EasyCVR视频汇聚平台带着全新的v3.7.2版本重磅登场&#xff01;此次升级&#xff0c;绝非简单的功能堆砌&#xff0c;而是从用户体验、操作效率以及系统性能等多维度进行的深度优化与革新&#xff0c;旨在为大家带来更加强大、稳定且高效的视频监控管理体验。 一、全局功能搜索…

三、kubectl使用详解

三、kubectl使用详解 文章目录 三、kubectl使用详解1、常用基础命令1.1 Kubectl命令格式1.2 查询一个资源1.3 创建一个资源1.4 修改一个资源1.5 删除一个资源1.6 其他 2、K8s隔离机制Namespace&#xff08;命名空间作用及使用&#xff09;2.1 什么是命名空间2.2 命名空间主要作…

JVM内存模型详解

JVM内存模型详解 Java虚拟机(JVM)内存模型是理解Java程序运行机制的核心&#xff0c;它定义了程序运行时数据的组织方式和访问规则。与Java内存模型(JMM)关注并发不同&#xff0c;JVM内存模型主要描述运行时数据区的结构和功能。 一、JVM内存模型概述 JVM内存模型将运行时数…

《对话式 AI 白皮书》共创者招募

在 AI Agent 技术不断演变的当下&#xff0c;共创一本不断演变的对话式 AI 白皮书&#xff0c;共同探索人机对话的新纪元。无论你是开发者、技术专家、生态伙伴还是创业者&#xff0c;都期待你的加入。 项目地址&#xff1a;https://github.com/RTE-Dev/book_era_convoai/ 在…

Flux功能介绍,完整使用示例,与Mono对比

以下是关于Reactor框架中Flux与Mono的功能介绍、使用示例及对比分析&#xff1a; Flux功能介绍 核心定义 Flux是Reactor库中的核心接口&#xff0c;表示一个异步的、包含零到多个元素的序列&#xff08;类似流式数据处理&#xff09;[3][4][7]。它可以处理无限长度的数据流&am…

Git使用基本指南

一、Git 基础配置 首先需要配置用户信息&#xff0c;让 Git 知道你是谁&#xff1a; git config --global user.name "你的名字" git config --global user.email "你的邮箱example.com" 如果需要查看配置信息&#xff0c;可以使用&#xff1a; git co…

【入门】【例17.3】 内功逼毒

| 时间限制&#xff1a;C/C 1000MS&#xff0c;其他语言 2000MS 内存限制&#xff1a;C/C 64MB&#xff0c;其他语言 128MB 难度&#xff1a;中等 分数&#xff1a;100 OI排行榜得分&#xff1a;12(0.1分数2难度) 出题人&#xff1a;root | 描述 黄蓉中了毒&#xff0c;在 t 时…

苹果芯片macOS安装版Homebrew(亲测)

在Linux服务器上安装一个软件常用yum&#xff0c;apt、dnf命令&#xff0c;同样macOS可以使用brew命令来安装软件。 brew会自动帮你下载、解压、安装和配置&#xff0c;更重要的是&#xff1a;它还会自动处理好软件之间的依赖关系&#xff0c;它将所有软件都安装在独立的统一目…

uniapp+vue3做小程序,获取容器高度

小程序获能用createSelectorQuery&#xff0c;如果是子组件&#xff0c;后面可以额外加一个参数in来指定获取dom的范围。小程序里面可以直接.in(this)&#xff0c;但是vue3没有this了&#xff0c;那就只能通过getCurrentInstance去获取当前实例代替this &#xff0c;注意这里需…

【网工】华为配置专题进阶篇①

目录 ■浮动路由和BFD配置 ▲浮动路由 基本配置示例 ▲BFD ▲验证命令 ▲测试连通性 ■路由综合实验RIP OSPF BGP ■浮动路由和BFD配置 ▲浮动路由 浮动路由&#xff1a;设置preference 浮动路由是一种备份路由机制&#xff0c;当主路由失效时&#xff0c;浮动路由会…