欢迎光临散文网 会员登陆 & 注册

CCMT 讲习班 PART C| 自动化设计神经网络架构

2023-03-13 08:00 作者:小牛翻译NiuTrans  | 我要投稿

本文首发于网站 机器翻译学堂

转载事宜请后台询问哦

单位|东北大学自然语言处理实验室、小牛翻译团队

神经网络技术是现代人工智能的关键技术,在自然语言处理、图像处理等领域表现出优异效果。由于神经网络结构设计大多源自研究人员的灵感和大量经验性尝试,如何挖掘这些神经网络结构背后的逻辑,如何系统化的思考不同神经网络结构之间的内在联系,是使用这类方法时所需要深入考虑并回答的问题。

来自东北大学自然语言处理实验室、小牛翻译团队在CCMT 2022会议所进行的《自然语言处理中的神经网络设计与学习》演讲报告,作者们根据自身研究经验对上述问题进行了回答,对神经网络架构的基本发展脉络、常用的神经网络架构的设计理念进行分析,同时对神经网络架构的自动设计方法进行整理。从神经网络架构在自然语言处理中的发展、人工神经网络设计和自动化架构设计三个方面对该领域技术发展进行了全面梳理,同时也对方向的未来发展进行了分析和探讨。

本文详细介绍了报告的第三部分《自动化设计神经网络架构》。

该报告主要介绍了如何自动化地设计神经网络架构、该方向在自然语言处理领域的最新进展以及对其的一些看法。


报告从什么是自动化的神经网络架构设计、如何进行神经网络自动化架构设计,包括整体的框架、自然语言处理任务中网络架构自动设计的举例、对自动化架构设计的观点看法与探讨四个方面进行了分享。


第一部分主要介绍什么是自动化架构设计。


自然语言处理是人工智能与语言学的一个交叉学科,其发展离不开人工智能技术的发展,特别是近年来比较火热的神经网络技术,一定程度上引领着自然语言处理各项任务的发展。神经网络架构也已经成为深度学习在各项应用中的关键,目前可以得到神经网络架构的方法主要有两个:人工设计行之有效的网络以及对架构进行自动设计。


自动化神经架构本身是AutoML的一个子方向,它希望利用数据来自动找到适合于特定任务的网络架构。该方向已经得到许多企业和研究机构的关注,如Google利用自动化设计技术搜索出了全新的Swish激活函数。


Microsoft团队也做过相应的研究,该研究主要针对的是在循环神经网络的语言模型上去做神经网络架构的搜索,之后再将其迁移到类似于Transformer的架构中,并在国际评测任务WMT19中也有自动化架构设计的对于机器翻译任务的应用,在英语到芬兰语与芬兰语到英语赛道取得了双向第一名的成绩。


对于自动化设计网络的产生,实质上,我们可以将自动化架构搜索的问题做一个回归,机器学习本身可以看作是一种输入到输出的映射学习,比如机器翻译中,就是将特定的源语映射到指定的目标语中。


自动化架构设计的发展历史经历了三个阶段:首先是传统机器学习阶段,主要采用的是一种统计的方式,范式相对会更复杂一些,它需要根据人工的经验手动地提取与设计相应的特征,然后再设计一些模型结构,来将这些特征有机地组合起来,辅以数据训练出最终的模型结构。对应到翻译,实际上对应的是统计机器翻译SMT的方式,它需要设计很多的特征与模型,比如翻译模型、调序模型、语言模型等,再通过权重调优的方式把这些特征组合起来最终得到SMT系统。


再是我们比较熟悉的基于人工神经网络来做这些任务,该范式实际上做出了简化,相较于传统机器学习可以避免经验性的人工特征提取工作,这里是把设计特征的工作交由模型完成,使用数据对设计好的模型参数进行学习。


然后就出现了自动化架构设计的范式,该范式主要将模型结构的设计交由网络与数据完成,进一步简化了设计的流程,让模型结构能够根据所给数据和任务进行优化。以上就是自动化架构搜索整个范式的发展流程。


由于自动化架构搜索本身也是面向神经网络的一项技术,在此之前我们先快速浏览一下神经网络技术的发展流程。神经网络技术的发展经历了曲折的过程,神经感知机技术实际出现于1958年,随后神经网络技术经历了两次寒冬与两次生机的焕发,直到2006年Hinton等人成功地训练了第一个深度信念网络后,神经网络技术在更大的领域得到了研究人员的广泛关注,在此过程中有许多人工设计的结构展现了良好的性能,比如机器翻译任务中循环神经网络、基于注意力的网络、完全基于注意力的Transformer模型以及BERT等架构。


那么在这个发展过程中,自动化网络结构设计扮演了一个什么角色呢?实际上自动化设计并不是在近几年才出现的,早在1989年就有研究人员尝试地对结构进行搜索,如果把超参数也看做是一种广义的模型架构的话,那么在1995就有研究人员对这方面的架构进行了自动设计。


之后,实际上在这个阶段本身,神经网络的发展是不温不火的,直到2006年,神经网络技术才慢慢地发展起来,为更多的人所关注。实际上,使神经网络架构自动设计真正火起来的契机是2016年谷歌研究人员提出了基于强化学习的神经网络自动化结构搜索。此后,才有更多的研究人员关注这个方向。


与此同时,一个比较有趣的点是,针对特定结构的网络结构搜索一般会晚于人工设计的特定结构的诞生。这也是比较符合直觉的,比如RNN被设计出来,然后就会有研究人员研究是否能够进行RNN的自动优化,中间总会隔上那么几年,而面向Transformer的结构搜索工作也存在类似的情形。


许多知名研究人员对自动化架构设计都有自己的观点。Google研究员Quoc Le认为现实世界中需要解决的问题实际还很多,针对一些特定场景与任务的优化,AutoML是一种有力的工具。CMU的Eric Xing教授认为AutoML是一个强有力的方向,目前虽不是主流,但值得大家投入精力去研究它。研究人员还认为自动化架构设计能够加速他们的研究过程,比如超参数的自动优化能够帮助我们观察所涉及的神经网络的效果是怎么样的。


第二部分主要介绍如何进行自动化架构设计,包括自动化架构设计的框架以及其中的趋势。


将神经网络架构空间直接作为搜索空间会导致空间变得无限大,比如神经网络的层数就有无穷的选择,在不加限制的情况下也会对应有无限的结构,导致很难直接进行搜索,因此需要在其基础上定义特定的搜索空间。


定义好搜索空间后就在该空间进行探索。


在定义过搜索空间之后,使用搜索策略进行探索。搜索策略将在当前搜索结构的基础上快速地找到下一个更有潜力的结构。


最后,性能评估的过程会对搜索出的架构进行快速地性能验证。


对架构搜索与性能评估过程不断进行迭代,最终设计出适用于特定任务的模型结构。以上就是自动化架构搜索的整体框架。


根据我们团队的数据统计,近年来自动化架构设计的顶会论文数量虽然较少,但整体上稳步提升,逐年递增。对于流程中所提到的三个部分,主要聚焦在搜索策略的探究,其次会关注搜索空间的设计以及性能评估的方法。


2020年的统计数据显示,研究人员针对搜索策略的探索主要集中在梯度的算法,这得益于此类方法的高效,而基于进化算法的方法则可以解决梯度方法的搜索不稳定性。


接下来依次对搜索流程的三部分工作进行介绍。首先是搜索空间。


整体的搜索空间中包含着许多不同种类的结构,而不同的架构会不均匀地散落在空间中。


人工设计架构主要是研究人员设计出高性能架构后,会有相关的工作对其进行改进,从而派生出相关的网络架构。而自动架构设计的搜索空间会囊括这些所有潜在的模型架构。


由于算力的限制,搜索空间的存在实际上是为减小代价所作出的妥协。为了提升效率,搜索空间的定义也会参考人工设计架构的经验性。


比如搜索空间的整体框架可以借鉴人工设计的经验性,考虑在空间中更容易产出高性能的模型结构的特定位置定义搜索空间进行搜索。除此之外,内部结构如局部结构的颗粒度也需要设计考虑,比如设计较小颗粒度的矩阵运算操作,较大颗粒度的前馈层、残差层与激活函数等需要关注的重点不同,这由具体的任务决定。在搜索激活函数时,就通常会将搜索的颗粒度设定得比较小,而在搜索特定任务上的整体结构时,在考虑效率的情况下会将搜索的颗粒度设定得较大。


搜索空间设计部分的趋势要求搜索空间不断扩大来提升搜索效率,原因是更大的搜索空间会更有潜力找到适合于当前任务的模型结构,但不能盲目地扩大,需要更多地借助人工设计架构的经验。而Google AutoML团队认为在自动搜索的过程中人工的参与是必不可少的,因为算力有限,如果人为地能够找到特定的搜索空间的话,这将能够很大地提升网络结构搜索效率。


下面给出搜索空间设计的实例,如受到残差连接的启发,层堆叠型网络空间中在链式结构处引入跨层连接,由此搜索时就会考虑到跨层连接的相关操作,而受Mogrifier LSTM工作启发,在搜索循环神经网络中引入跨时序连接操作也能使搜索出的结构得到更好的性能。


流程的第二部分是搜索策略,即从搜索空间中找到有潜力的结构。最直观朴素的方法是对结构进行遍历,但实际上难以达成目标,即使搜索空间相较于架构空间结构数量已经大大减少,但其空间依旧很大,在DARTS的搜索空间中就包含着极大数量级的网络结构,我们无法一一地对我们搜索空间的网络进行评估。


要解决无法遍历的问题可以对空间进行采样,选择空间中的部分结构进行性能验证。一种方法是从空间中的不同维度如层数上,采用等距采样的网格搜索,但可能带来架构间的性能影响。比如,我们一旦选择某一个维度之后,那么它的影响将是多维的。类似图中,如果我们采样到了中间,恰巧它是导致低性能的一个重要因素,那么它将会导致所采样出来的网络性能低效。


另一种方法则是对空间进行随机采样。相较于网络搜索,随机搜索在不同维度的架构上可能会有更多的尝试,但是其本质和上面的网络采样是类似的。不过,这种采样方法可能会取得更理想的效果,也通常被用作架构自动设计的基线。


除了采样方法,也可以使用机器学习算法对搜索策略进行探究。首先是强化学习方法,由智能体产生动作作用于环境,环境状态发生改变并对过程产生奖励信号,反馈给智能体进行调优。对应到结构搜索中,结构生成器作为智能体生成结构,应用于任务后结构的输出结果与评价会被反馈给结构生成器进行自身的更新。


基于进化算法的搜索策略通过交叉变异等操作对结构进行重组,交叉操作取不同结构的特定部分进行拼接得到新的结构,变异操作则保持整体结构不变的情况下,修改特定位置的操作。


基于强化学习与进化算法的搜索策略将独立看待每个架构,只是通过激励与进化的方式找到更好的结构。而基于梯度的搜索策略使用权重参数与相应的拓扑结构将架构组合成超网络,超网络里包含多种不同的潜在结构,直接对超网络进行优化进而明显提高搜索效率。


对于搜索策略的发展趋势,一个前提是近年来为了追求性能,神经网络的规模越来越大,而大规模的架构会干扰一些设备的部署。


对于类似低资源设备等目标设备的延迟、内存占用等指标也应纳入到搜索目标的考虑范围内,这是自动架构设计出现的新目标。如RankNAS工作中,搜索出的架构在保证BLEU的情况下,CPU与GPU的延迟都实现了下降。


以上是搜索策略的部分,接下来要分享的内容是性能评估。理论上只要是直接完整训练搜索出的结构就能对其进行评价。


然而实际上搜索过程会产生大量的中间结构,对每一个结构进行训练评估将会耗费太多的时间与算力,甚至不可接受,因此需要对模型性能进行快速评估。


这里通常有以下几种角度来实现快速的模型性能评估。首先第一种角度是数据以及超参数的调整,如减少训练数据,只使用部分数据也能评测出模型的大致性能,还能节约大量时间成本。或者简化模型结构,减少层中神经元个数或训练轮数,也能达到快速评价性能的目的。


第二种角度是继承与复用局部结构的现有参数,对于旧结构训练完成的参数可以进行保留,在新架构局部模块结构与位置类似的情况下可以使用旧参数进行初始化加速训练的收敛过程。


第三种角度是设计提前终止方法或者利用性能预测器进行预测,如果训练过程的曲线在初始阶段就表现不佳,可以采用早停机制以节约计算资源。


第三部分主要介绍了自然语言处理任务上自动化架构设计的一些相关工作。


首先分享一下领域工作的统计结果,2017-2020年,结构搜索领域的任务主要集中在图像领域,自然语言处理任务其次,其他如语音与视频领域应用较少。


再作进一步的展开,在图像领域中,图像分类任务应用最多,自然语言处理任务中主要集中在语言模型任务,也有少部分应用在机器翻译与命名实体识别任务上。


从上述统计结果可以看出,架构搜索确实在自然语言处理中没有那么火,此外结构搜索对于相关结构的出现来说存在着延时,近年来主要的研究聚焦在循环神经网络架构的自动设计上,不过更多面向于Transformer等注意力网络的架构搜索工作也逐渐得到了关注。


下面针对面向循环神经网络结构以及注意力网络结构的具体搜索的特点做一个介绍。面向循环神经网络结构搜索的范式通常在单语数据上搜索适合于语言模型的循环单元,然后迁移到其他下游的自然语言处理任务中。


举例为DARTS,其搜索空间关注循环神经网络的循环单元,搜索策略使用基于梯度的方法,性能评估使用现有参数的继承和复用加速评估过程。


由于这三部分的方法在前面已有讲述,在此处就简单地看一下DARTS的搜索流程。DARTS的搜索过程首先要使用有向无环图构建超网络,节点有序且只能接收前序节点的输入,比如1号节点只能接收0号节点的输入,3号节点可以可以接收0,1,2号节点的输入。通过节点间不同激活函数的选择,超网络借由权重边可以拆分成不同的子网络。


训练时通过学习边上不同的操作权重搜索模型。


最后根据权重离散搜索到的循环单元得到最终结构,选择权重值高的边拆分出最终搜索出的高性能架构,即从数据的角度选出节点间适合的激活函数。


相较于循环神经网络,面向注意力网络的结构搜索由于网络结构与参数量的复杂性,使得自动化设计的难度增大。


为解决复杂网络的搜索难题,搜索单元的颗粒度一般设置较大,以减少需要尝试的中间结构的数量。


颗粒度的扩大不能随意进行,可以借助人工经验在搜索空间中提供更多经验性有效的潜在结构选项,如双分支结构、卷积网络以及Swish激活函数等,以确保搜索空间在高概率优秀的架构空间。


为保证自动化架构设计的搜索效率,也会采用高效的搜索策略和评估方法。如该进化算法例子中的阶段一,会使用普通的锦标赛算法对结构进行进化,但不对进化过程中的中间结构进行完整训练,只进行较少步数的训练,如总步数的三分之一。


然后计算最近若干结构的平均性能作为阶段一的标准。


在阶段二中对未达到阶段一标准的结构同样不进行完整训练,只进行总步数三分之一的训练。


对超过标准的性能增加一定的训练轮数,如增加到总步数的三分之二,并计算最近若干结构的平均性能作为阶段二标准。


阶段三中的结构同样会与阶段一、二的标准进行比较,对不超过阶段一标准的结构只进行总步数三分之一的训练,对性能介于阶段一、二标准之间的结构进行总步数三分之二的训练,而对超过阶段二标准的有潜力结构会继续增加训练步数,进行完整步数的训练。


通过这种评估方法,大多数无潜力的结构只进行了较短时间的评估,只对真正认为有潜力的结构进行了完整训练,从而加速了结构的性能评估,同时也缓解了性能评估或者整个搜索过程的时间消耗。


针对面向注意力网络的自动化设计目标也有不同,有一些工作希望找到更高性能、效果更好的结构。比如,在机器翻译中,我们能够找到可以实现更高BLEU的模型结构。


又或者在预训练模型自动结构搜索中,我们希望能够找到在下游任务中实现更高性能的预训练模型结构。


此外,还有一部分工作主要关注的是我们能否找到一个更高效(执行效率更高)的网络结构。在这个方面,研究人员会趋向于使用自动化结构设计的方法进行模型压缩和模型结构优化。


这部分工作也可以联想到之前所分享的内容。在搜索策略优化的时候,有些研究人员会把模型结构的计算延迟和时间损耗等纳入考虑范围内,从而找到最优的某些结构或最适合某一些特定的设备模型结构。


此外,还有面向预训练任务中的一些模型效率的改进。比如,许多工作希望预训练模型在下游任务应用或训练时能够尽量减少时间与效率成本,因此可以作为自动化设计的聚焦目标。


第四部分主要分享团队对该方向的一些看法。


该方向是一个有趣的研究方向,但目前还存在很多问题。首先是颗粒度的问题,目前的颗粒度主要还是手工设计的,需要尝试使用自动化方法找到最适合的颗粒度。许多结构搜索方法将不同结构独立起来,没有考虑结构间的内在联系,目前的结构表示方法也会间接导致搜索效果的不稳定,因此可以尝试挖掘新的结构表示方法。此外还存在着搜索效率低的问题,目前此类问题主要使用基于梯度的搜索策略加以解决。


有了自动化架构设计并不意味着可以舍弃人工设计架构。实质上,自动化架构设计与人工架构设计是平行发展、相互支持的关系,可以利用该方向的方法加速研究的过程。比如,我们在前面讲述发展历史的时候,会发现自动化结构设计也会利用很多人工设计的一些结构方法。反过来,我们搜索的比较好的网络结构,也可以反向地去支撑人工设计网络结构。另外,网络结构搜索在一定方面上是很好的一个工具,以加速我们研究人员的研究过程。


团队对该领域感兴趣的方面除了之前提到的颗粒度自动调整、结构表示方法,还有梯度方法与进化算法搜索策略的探究。梯度的优势在于它本身的高搜索效率,但是它也面临着搜索不稳定的问题。而进化算法也是我们最近在研究一类网络结构搜索算法,很有意义。

然后是架构预搜索,通过借鉴一些自然语言处理的相关研究,在预训练领域中,模型可以使用大规模语料来进行训练,以适应到下游的任务中。因此,网络结构搜索,也可以考虑用于完成相关工作。

最后一种是局部结构的搜索,一旦我们搜索出一个有效的局部网络的时候,就可以将其应用到多个领域当中。


报告最后分享了一些自动化架构设计的资源,包括知名工作的论文列表、开源框架、相关综述与AutoML相关资源的网站等。


hi,这里是小牛翻译~

想要看到更多我们的文章,可以关注下

机器翻译学堂(公号或网站)

笔芯~ 

往期精彩文章


CCMT 讲习班 PART C| 自动化设计神经网络架构的评论 (共 条)

分享到微博请遵守国家法律