【论文解读】Faster sorting algorithm

一、简要介绍

【论文解读】Faster sorting algorithm_第1张图片

基本的算法,如排序或哈希,在任何一天都被使用数万亿次。随着对计算需求的增长,这些算法的性能变得至关重要。尽管在过去的2年中已经取得了显著的进展,但进一步改进这些现有的算法路线的有效性对人类科学家和计算方法都是一个挑战。在这里,论文展示了人工智能是如何通过发现迄今为止未知的算法路线来超越目前的最先进的方法。为了实现这一点,论文将一个更好的排序程序制定为单人游戏的任务。然后,论文训练了一个新的深度强化学习代理AlphaDev来玩这个游戏。AlphaDev从零开始发现了一些小型排序算法,它优于以前已知的人类基准测试。这些算法已经集成到LLVM标准C++排序库中。对排序库的这一部分的更改表示用使用强化学习自动发现的算法替换组件。论文还在额外的领域中提出了结果,展示了该方法的通用性。

二、研究背景

人类的直觉和专业知识对改进算法至关重要。然而,许多算法已经达到了人类专家无法进一步优化它们的阶段,这导致了不断增长的计算瓶颈。在经典的程序合成文献中的工作,跨越了几十年,旨在生成正确的程序和/或优化程序使用代理的延迟。这些技术包括枚举搜索技术和随机搜索,以及最近在程序合成中使用深度学习来生成正确的程序的趋势。使用深度强化学习(DRL),论文可以通过优化CPU指令级别的实际测量延迟,通过比以前的工作更有效地搜索和考虑正确和快速的程序空间来生成正确和性能的算法。

计算机科学中的一个基本问题是如何对一个序列进行排序。这是在世界各地的基础计算机科学课程中教授的,并被应用程序广泛使用。几十年的计算机科学研究都集中在发现和优化排序算法上。实际解决方案的一个关键组成部分是对短元素序列的小排序;当对使用分治方法的大数组进行排序时,该算法被重复调用。在这项工作中,论文主要关注于两种类型的小排序算法:(1)固定排序和(2)变量排序。固定排序算法对固定长度的序列进行排序(例如,排序3只能对长度为3的序列进行排序),而变量排序算法可以对不同大小的序列进行排序(例如,变量排序5可以对1到5个元素的序列进行排序)。

论文将发现新的、有效的排序算法的问题表述为一个单人游戏,论文称之为集合游戏。在这个游戏中,玩家选择一系列低级的CPU指令, 论文称之为汇编指令,来组合产生一个新的和高效的排序算法。这是具有挑战性的,因为玩家需要考虑汇编指令的组合空间,以产生一个既可证明正确又快速的算法。集合游戏的难度不仅来自于搜索空间的大小,这类似于国际象棋和围棋等极具挑战性的游戏,也来自于反馈功能的性质。在汇编游戏中,一个错误的指令可能会使整个算法失效,这使得在这个游戏空间中的探索变得非常具有挑战性。

为了玩这个游戏,论文引入了AlphaDev,一种学习代理,它被训练来寻找正确和有效的算法。该代理由两个核心组件组成,即(1)学习算法和(2)表示函数。AlphaDev学习算法可以结合DRL和随机搜索优化算法来进行组装游戏。AlphaDev中的主要学习算法是AlphaZero的扩展,这是一种著名的DRL算法,其中训练一个神经网络来引导搜索来解决集合游戏。

使用AlphaDev,论文从头开始发现了固定和可变排序算法,它们比最先进的人类基准测试更有效。由AlphaDev发现的针对排序3、排序4和排序5的固定排序解决方案已经集成到LLVM标准C++库3中的标准排序函数中。这个库被数百万用户使用,包括大学和许多国际公司。此外,论文分析了新算法的发现,比较了AlphaDev与随机搜索优化方法,并将AlphaDev应用于进一步的领域,以展示该方法的通用性。

三、方法介绍

将算法表示为低级CPU指令

当从C++等高级语言编译算法到机器代码时(例如,图1a中的排序函数)时,首先将算法编译成汇编语言(图1b)。然后,汇编语言将汇编程序转换为可执行的机器代码。在这项工作中,论文在汇编级别上优化算法。在典型的汇编程序中,值从内存复制到寄存器,在寄存器之间进行操作,然后写回内存。所支持的汇编指令集取决于处理器的体系结构。为了这项工作的目的,论文重点关注使用AT&T语法的x86处理器架构支持的汇编指令子集。每条指令的格式为Opcode(OperandA, OperandB)。一个示例指令是mov,它被定义为将一个值从源(A)移动到目标(B).进一步的指令定义,如比较(cmp)、条件移动(cmovX)和跳转(jXhttps://www.nature.com/articles/s41586-023-06004-9

你可能感兴趣的:(算法人工智能)