来自CMU和DeepMind的研究人员最近发布了一篇有趣的新论文,称为可微分网络结构搜索(DARTS),它提供了一种神经网络结构搜索的替代方法,这是目前机器学习领域的一个大热门。神经网络结构搜索去年被大肆吹捧,Google首席执行官Sundar Pichai和Google AI负责人Jeff Dean宣称,神经网络结构搜索及其所需的大量计算能力对于机器学习的大众化至关重要。科技媒体争相报道了谷歌在神经网络结构搜索方面的工作。
在2022年1月举办的TensorFlow DevSummit大会上,Jeff Dean在主题演讲(大约22:20左右开始)中宣称,未来谷歌可能会用100倍的计算能力取代机器学习专家。 他给出了需要庞大计算力的神经网络结构搜索作为例子(他给出的唯一例子),来说明为什么我们需要100倍的计算能力才能使更多人能够使用ML。
Jeff Dean在TensorFlow DevSummit大会上的主题演讲
什么是神经网络结构搜索?它是使得机器学习技术可以被非机器学习专家所使用的关键吗?
我将在这篇文章中深入研究这些问题,在下一篇文章中,我将专门研究Google的AutoML。 神经网络结构搜索是一个名为AutoML的更广泛领域的一部分。AutoML近年来受到了很多关注,我们将首先来探讨它。
目录:
AutoML是什么?
AutoML有用吗?
神经网络结构搜索是什么?
DARTS是什么?
神经网络结构搜索有用吗?
如何让机器学习从业者更高效地工作? AutoML vs增强机器学习
传统上,术语AutoML用于描述模型选择和/或超参数优化的自动化方法。这些方法适用于许多类型的算法,例如随机森林,梯度提升机器(gradient boosting machines),神经网络等。 AutoML领域包括开源AutoML库,研讨会,研究和比赛。 初学者常常觉得他们在为模型测试不同的超参数时通常仅凭猜测,而将这部分过程的自动化可以使机器学习变得更加容易。即使是对经验丰富的机器学习从业者而言,这一自动化过程也可以加快他们的速度。
业内现存有许多AutoML库,其中最早出现的是AutoWEKA,它于2013年首次发布,可以自动选择模型和超参数。其他值得注意的AutoML库包括auto-sklearn(将AutoWEKA拓展到了python环境),H2O AutoML和TPOT。 AutoML.org(以前被称为ML4AAD,Machine Learning for Automated Algorithm Design)小组,自2014年以来一直在ICML机器学习学术会议上组织AutoML研讨会。
AutoML提供了一种选择模型和优化超参数的方法。它还可以用于获取对于一个问题可能性能的基准结果。这是否意味着数据科学家将被取代? 并非如此,因为我们知道,机器学习从业者还有许多其他事情要做。
对于许多机器学习项目,选择模型不过是构建机器学习产品复杂过程中的一部分。 正如我在上一篇文章中所述,如果参与者不了解项目各个部分是如何相互关联的,那么项目必然会失败。我能想到过程中可能会涉及的30多个不同步骤。我必须要强调,机器学习(特别是深度学习)中最耗时的两个方面是清理数据(是的,这是机器学习中不可或缺的一部分)和训练模型。 虽然AutoML可以帮助选择模型并选择超参数,但重要的是,我们仍然要理清有哪些数据科学的技能是需要的以及那些仍未解决的难题。
我将提出一些替代AutoML方法的建议,以使机器学习从业者在进行最后一步时更有效率。
现在我们已经介绍了AutoML的一些内容,让我们来看看该领域特别活跃的一个子集:神经网络结构搜索。谷歌首席执行官桑达·皮采Sundar Pichai在博客中写道:“设计神经网络是非常耗时的,其对专业知识的极高要求使得只有小部分科研人员和工程师才能参与设计。这就是我们创建AutoML方法的原因,有了它,神经网络也可以设计神经网络。”
Pichai所说的使用“神经网络也可以设计神经网络”就是神经网络结构搜索; 通常使用强化学习或进化算法来设计新的神经网络网络结构。这很有用,因为它使得我们能够发现比人们想象的要复杂得多的网络结构,并且这些网络结构可以针对特定目标进行优化。神经网络结构搜索通常需要大量计算力。
确切地说,神经网络结构搜索通常涉及学习像层(通常称为“单元”)之类的东西,它们可以组装成一堆重复的单元来创建神经网络:
来自Zoph等人发表的论文。左边是单元堆叠的完整神经网络,右边是单元的内部结构
关于神经结构搜索的学术论文很多,所以我将在这里重点介绍几篇最近发表的论文:
Google AI研究人员Quoc Le和Barret Zoph发布了他们的研究成果,AutoML这一术语迅速成为主流。该研究使用强化学习为计算机视觉领域的Cifar10问题和NLP领域的Penn Tree Bank问题寻找到了新的网络结构,并取得了与现有网络结构类似的结果。
来自Le和Zoph的博客文章:左边更简单的架构是人类设计的,右边更复杂的架构是神经网络设计的。
通过Learning Transferable Architectures for Scalable Image Recognition论文中提出的NASNet。这项研究在小数据集Cifar10上寻找一个网络结构构建块,然后为大型数据集ImageNet构建网络。这项研究需要大量计算,花费1800个GPU天(相当于1个GPU工作5年)来学习网络结构(谷歌团队使用500个GPU 训练了4天!)。
Regularized Evolution for Image Classifier Architecture Search论文中提出的AmoebaNet。这项研究比NASNet需要更多的计算,它花费3150个 GPU天(相当于1 GPU近9年的时间)来学习网络结构(Google团队使用450个K40 GPU 训练了7天!)。 AmoebaNet由通过进化算法习得的“单元”组成,表明人工智能进化而来的架构可以媲美甚至超越人工制作和强化学习设计的图像分类器。 fast.ai对此架构进行了改进,学习进程加快的同时改变了训练过程中图像的尺寸。AmoebaNet已成为在单台机器上训练ImageNet最便宜的方式!
高效的神经网络结构搜索:使用的GPU小时数比现有的自动模型设计方法少得多,特别是比标准的神经网络结构搜索所需的计算力要少1000倍。这项研究仅使用单个GPU训练了16个小时!
这项研究是最近由卡内基梅隆大学和DeepMind的一个团队发布的,我对这个想法很感兴趣。 DARTS假定候选网络结构的空间是连续的,而不是离散的,这使得它能够使用基于梯度的方法。这比大多数神经架构搜索算法使用的黑箱搜索效率高得多。
来自DARTS,它将所有可能的网络结构空间视为连续的,而非离散的
要为Cifar-10学习一个网络结构,DARTS仅需4个GPU天,相比之下,NASNet为1800 个GPU天,AmoebaNet为3150个GPU天(准确度都相同)。这是效率的巨大提升! 虽然还需要更多的探索,但这是一个很有前景的研究方向。 Google经常强调神经架构搜索需要巨大计算力,这说明有效的网络结构搜索方法很可能未被充分探索。
在他的TensorFlow DevSummit主题演讲中(从22:20开始),Jeff Dean提出深度学习工作的一个重要部分是尝试不同的网络结构。这是Dean在他的简短的演讲中唯一强调的机器学习步骤,我对他的重点感到惊讶。Sundar Pichai的博文包含了类似的断言。
Jeff Dean的幻灯片显示神经网络结构搜索可以尝试20种不同的模型以找到最准确的一种。
但是,选择模型只是构建机器学习产品复杂过程中的一部分。 在大多数情况下,网络结构选择远不是最难,最耗时或最重要的问题。目前,没有证据能够证明每个问题最好用它自己独特的网络结构来建模,大多数从业者都认为不太可能会出现这种情况。
谷歌等组织致力于网络结构设计,并与其他人共享他们发现的网络结构。这样的服务是非常重要且有用的。 然而,只有那些致力于基础神经结构设计的小部分研究人员才需要基础架构搜索方法。 我们其他人可以通过迁移学习来利用他们找到的网络结构。
神经网络结构搜索是AutoML领域的一部分,该领域关注的核心问题是:我们如何将模型选择和超参数优化过程自动化? 然而,自动化忽视了人类参与的重要作用。 我想提出另一个问题:人类和计算机如何协同工作才能使机器学习效率更高?增强机器的重点在于弄清楚人和机器应如何更好地协同工作以发挥他们的不同优势。
增强机器学习的一个例子是Leslie Smith的学习率查询器,它可在fastai库(在PyTorch之上运行的高级API)中实现,我们在免费的深度学习课程中也将其作为关键技术进行教学。 学习率是一个超参数,可以确定模型训练的速度,甚至可以确定模型是否训练成功。 学习速率查询器允许人类通过查看生成的图表中找到合适的学习速率。它比AutoML更快地解决了这一问题,增强了数据科学家对训练过程的理解,并鼓励采用更强大的多步骤方法来训练模型。
来自Surmenok关于学习率查询器的博客文章,显示了学习率与损失之间的关系
专注于自动化超参数选择存在的另一个问题是:它忽视了某些类型的模型可能适用性更广,需要调整的超参数更少以及对超参数选择不太敏感的情况。例如,随机森林优于梯度提升机器(Grandient Boosting Machine, GBM)的重要一点是随机森林更加稳定,而GBM往往对超参数的微小变化相当敏感。因此,随机森林在业内得到广泛应用。研究有效删除超参数的方法(通过更智能的默认值或通过新模型)将产生巨大的影响。当我在2021年开始对深度学习感兴趣时,对如此多的超参数感到不知所措,我很高兴新的研究和工具帮助消除了许多超参数(特别是为初学者)。例如,在fast.ai课程中,初学者只需要选择学习率这一个超参数,我们甚至会给你一个工具来做到这一点!