当前位置: 代码迷 >> 综合 >> Efficient Architecture Search by Network Transformation
  详细解决方案

Efficient Architecture Search by Network Transformation

热度:85   发布时间:2024-02-13 15:59:00.0

摘要

自动设计深度神经网络结构的技术(例如基于强化学习的方法)最近显示出令人鼓舞的结果。但是,它们的成功基于大量的计算资源(例如数百个GPU),因此很难被广泛使用。一个明显的局限性是,他们在探索体系结构空间时仍然从头开始设计和训练每个网络,这是非常低效的。在本文中,我们通过探索基于当前网络的结构空间并重用其权重,为高效结构搜索提出了一个新框架。我们使用强化学习agent作为元控制器,其作用是通过功能保留的转换来增加网络深度或层宽度。这样,先前经过验证的网络可以重新用于进一步的探索,从而节省了大量的计算成本。我们应用我们的方法来探索具有有限计算资源(5个GPU)的结构空间,该结构是图像基准数据集(CIFAR-10,SVHN)上的原始卷积神经网络(没有残差连接,分支等)。我们的方法可以使用相同的设计方案设计出比现有网络更好的网络。在CIFAR-10上,我们没有残差连接的模型实现了4.23%的测试错误率,超过了绝大多数现有体系结构并接近DenseNet。此外,通过将我们的方法用于探索DenseNet结构空间,我们能够以更少的参数实现更精确的网络。

1.介绍

深度神经网络在各种具有挑战性的应用中的巨大成功,导致了从特征设计到体系结构设计的范式转变,这仍然是一项艰巨的任务,并且需要人类的专业知识。近年来,已经提出了许多使结构设计过程自动化的技术,并且在一些基准数据集上报告了与人类设计的模型相比,设计出了更好模型的结果。尽管报道了令人鼓舞的结果,但它们的成功是建立在庞大的计算资源(例如数百个GPU)的基础上的,这使得它们很难在个人研究人员,小型公司或大学研究团队的实践中使用。另一个主要缺点是,他们在探索架构空间时仍会从头开始设计和训练每个网络,而没有利用先前探索的网络,这会导致大量的计算资源浪费
实际上,在体系结构设计过程中,为同一任务训练了许多不同的网络,这些网络除了用于生成验证性能指导探索之外,我们还应该可以访问其结构,权重,训练曲线等,这些结构包含丰富的知识,可以像人类专家一样利用它们来加快新结构设计过程。此外,通常存在许多通过人工或自动体系结构设计方法精心设计的体系结构,这些体系结构已在目标任务上实现了良好的性能。在有限的计算资源限制下,与其完全忽略这些现有网络并从头开始探索结构空间(这不能保证获得更好的性能架构),另一种更经济,更有效的替代方案是基于这些成功的网络来探索架构空间,并重用他们的权重
在本文中,我们提出了一个名为EAS(高效结构搜索)的新框架,给定一个在相同任务中训练好的网络,元控制器通过网络转换操作来探索体系结构空间,例如,扩展某个层(更多单元或滤波器),插入一个层,添加残差连接。为了重用权重,我们考虑了功能保留转换的类,这允许初始化新网络以表示与给定网络相同的函数,但使用不同的参数化进行进一步训练以提高性能 ,这可以大大加快新网络的训练速度,尤其是对于大型网络。此外,我们将我们的框架与基于强化学习(RL)的自动体系结构设计方法的最新进展相结合,并采用了基于RL的agent作为元控制器。
我们在图像基准数据集(CIFAR-10,SVHN)上探索了原始卷积神经网络(CNN)的结构空间的实验,该结构仅由卷积层,完全连接层和池化层组成,没有残差连接,分支等。表明具有有限计算资源(5个GPU)的EAS可以设计较好的体系结构。由EAS在CIFAR-10上设计的具有标准数据增强功能的最佳模型可实现4.23%的测试错误率,甚至比许多使用残差连接的现有体系结构还要好。我们进一步应用我们的方法来探索DenseNet的体系结构空间,在没有数据增强的CIFAR10上达到4.66%的测试错误率,在具有标准数据增强的CIFAR-10上达到3.44%的测试错误率,超过了原始的DenseNet,同时还具有更少的参数。

2.相关工作和背景

(1)自动结构设计
关于自动结构设计已有很长时间的研究。模仿自然进化过程的神经进化算法是最早的自动体系结构设计方法之一。(Real et al.2017)的作者使用神经进化算法探索了大型CNN架构空间,并实现了可以与人类设计模型的性能相匹配的网络。同时,还在贝叶斯优化的背景下研究了自动结构设计。最近,在自动结构设计中引入了强化学习,并已显示出强大的结果。(Baker et al. 2017)的作者提出了一种Q-learning agent来顺序选择CNN层;(Zoph and Le 2017)的作者使用自回归循环网络生成可变长度的字符串,该字符串指定了神经网络的体系结构,并使用策略梯度训练了循环网络。
由于上述解决方案依赖于从头开始设计或训练网络,因此在构建过程中浪费了大量的计算资源。在本文中,我们旨在解决效率问题。从技术上讲,我们允许重用经过相同任务训练的现有网络并采取网络转换措施。功能保留的转换和基于RL的元控制器都用于探索结构空间。此外,我们注意到有一些补充技术可以提高效率,例如学习曲线预测,可以与我们的方法结合使用。
(2)网络转换和知识迁移
通常,对给定网络的任何修改都可以视为网络转换操作。在本文中,由于我们的目的是利用存储在以前训练完毕的网络中的知识,因此我们着重于确定能够重用现有模型的网络转换操作的类型。以前已经研究了重用现有模型或神经网络之间的知识转移的想法。(Chen, Goodfellow, and Shlens 2015)中引入的Net2Net技术描述了两个特定的功能保留转换,即Net2WiderNet和Net2DeeperNet,它们分别初始化了一个更大或更深的学生网络,以表示给定教师网络的相同功能,并被证明具能显著加快对学生网络的训练,尤其是对于大型网络。在ResNet中也提出了类似的功能保留方案,特别是用于训练非常深的架构。此外,(Han et al. 2015)提出的网络压缩技术会修剪不太重要的连接(低权重连接),以减小神经网络的大小而不降低其准确性。
在本文中,我们专注于利用这种网络转换来重用现有模型,从而有效且经济地探索用于自动结构设计的结构空间。
(3)强化学习背景
我们在这项工作中使用的元控制器基于RL,这是一种用于训练agent与环境交互时最大化累积奖赏的技术。我们使用类似于(Zoph and Le 2017)的REINFORCE算法来更新元控制器,同时可以类似地应用其他高级策略梯度方法。但是,我们的动作空间与(Zoph and Le 2017)或任何其他基于RL的方法不同,因为我们的动作是网络转换操作,例如添加,删除,扩展等,这与其他方法是指定在先前层的顶部上创建新的网络层的特定配置不同。具体来说,我们将自动结构设计过程建模为顺序决策过程,其中状态是当前的网络体系结构,而动作是相应的网络转换操作。经过T步网络转换后,最终网络架构以及从初始输入网络传递来的权重将在真实数据中进行训练,从而获得验证性能和奖赏信号,该奖赏信号将进一步用于更新元数据。控制器通过策略梯度算法来最大化元控制器对设计网络的预期验证性能。

3.通过网络转换来进行结构搜索

在这里插入图片描述
在本节中,我们首先介绍元控制器的总体框架,然后说明该控制器是如何做出每个特定的网络转换决策。稍后我们将功能保留的转换扩展到DenseNet结构空间,在该空间中直接应用原始Net2Net操作可能会出现问题,因为一层的输出将被馈送到所有后续层。
我们考虑在给定当前网络架构的情况下学习元控制器以生成网络转换动作,该网络架构由可变长度字符串指定。为了能够在保持元控制器简单的同时生成各种类型的网络转换动作,我们使用编码器网络来学习给定架构的低维表示,然后将其馈送到每个单独的actor网络中以生成某种类型的网络转换动作。此外,为了将可变长度网络体系结构作为输入,并在决策时考虑整个输入体系结构,编码器网络是通过具有输入嵌入层的双向循环网络实现的。总体框架如图1所示,它是序列到序列学习的类似物。

3.1 Actor网络

给定输入结构的低维度表示,每个Actor网络都会做出必要的决策,以采取某种类型的网络转换操作。在这项工作中,我们介绍两个特定的Actor网络,即Net2Wider ActorNet2Deeper Actor,它们分别对应这Net2WiderNet和Net2DeeperNet。
(1)Net2Wider Actor
Net2WiderNet操作允许用更宽的层替换一个层,这意味着在保留功能的同时,更多的单元用于全连接层,或更多的滤波器用于卷积层。例如,考虑具有内核 K l \pmb K_l 的卷积层,其形状为 ( k w l , k h l , f i l , f o l ) (k^l_w,k^l_h,f^l_i,f^l_o) ,其中 k w l k^l_w k h l k^l_h 表示滤波器的宽度和高度,而 f i l f^l_i f o l f^l_o 表示输入和输出通道的数量。要用具有 f ^ o l ( > f o l ) \hat f^l_o(>f^l_o) 个输出通道的较宽层替换该层,我们首先应引入随机重映射函数 G l G_l ,其定义为:
G l ( j ) = { j 1 j f o l r a n d o m   s a m p l e   f r o m   { 1 , ? ? , f o l } f o l < j < f ^ o l . (1) G_l(j)=\begin{cases} j& 1\le j\le f^l_o\\ random~sample~from~\{1,\cdots,f^l_o\}& f^l_o\lt j \lt \hat f^l_o \end{cases}.\tag{1}
借助重映射函数 G l G_l ,我们有了新的具有更宽层 ( k w l , k h l , f i l , f ^ o l ) (k^l_w,k^l_h,f^l_i,\hat f^l_o) 的内核 K ^ l \pmb{\hat K}_l
K ^ l [ x , y , i , j ] = K l [ x , y , i , G l ( j ) ] . (2) \pmb{\hat K}_l[x,y,i,j]=\pmb K_l[x,y,i,G_l(j)].\tag{2}
这样,对于 K ^ l \pmb {\hat K}_l ,从 K l \pmb K_l 直接复制出输出通道维度中的前 f o l f^l_o 项,而其余的 f ^ o l ? f o l \hat f^l_o-f^l_o 项通过根据 G l G_l 中定义的随机选择来创建。因此,较宽层的新输出为 O ^ l \pmb{\hat O}_l ,且 O ^ l ( j ) = O l ( G l ( j ) ) \pmb{\hat O}_l(j)=\pmb O_l(G_l(j)) ,其中 O l O_l 是原始层的输出,我们仅显示通道维度以简化表示法。
为了实现功能保留,由于输入中的复制,还应该修改下一层的内核 K l + 1 \pmb K_{l+1} 。形状为 ( k w l + 1 , k h l + 1 , f ^ i l + 1 = f ^ o l , f o l + 1 ) (k^{l+1}_w,k^{l+1}_h,\hat f^{l+1}_i=\hat f^l_o,f^{l+1}_o) 的新内核 K ^ l + 1 \pmb{\hat K}_{l+1} 如下所示:
K ^ l + 1 [ x , y , j , k ] = K l + 1 [ x , y , G l ( j ) , k ] { z G l ( z ) = G l ( j ) } . (3) \pmb {\hat K}_{l+1}[x,y,j,k]=\frac{\pmb K_{l+1}[x,y,G_l(j),k]}{|\{z|G_l(z)=G_l(j)\}|}.\tag{3}
有关更多详细信息,请参阅原始的Net2Net工作。
在我们的工作中,为了灵活高效,Net2Wider actor同时确定是否应扩展每一层。具体而言,对于每个层,给定双向编码器网络学习到的每一层的隐藏状态,该决定由共享的sigmoid分类器执行。此外,我们遵循先前的工作,并在离散空间中搜索卷积层的滤波器数量和完全连接层的单元数量。因此,如果Net2Wider actor决定加宽层,则该层的滤波器或单元的数量将增加到下一个离散级别,例如从32到64。Net2Wider actor的结构如图2所示。
在这里插入图片描述
(2)Net2Deeper Actor
Net2DeeperNet操作允许插入一个新层,该层初始化为在两个层之间添加恒等映射,以实现功能保留。对于新的卷积层,将核设置为恒等滤波器,而对于新的全连接层,将权重矩阵设置为恒等矩阵。因此,新层首先设置为与下面的层相同的滤波器或单元数,并且在对其进行Net2WiderNet操作时可能会进一步扩大。为了实现功能保留,Net2DeeperNet操作对激活函数 ? \phi 有一个约束,即 ? \phi 对于所有向量v,必须满足 ? ( I ? ( v ) ) = ? ( v ) \phi(\pmb I\phi(v))=\phi(v) 。此属性适用于修正线性激活(ReLU),但对于sigmoid和tanh激活不满足。但是,我们仍然可以通过sigmoid或tanh激活来重用现有网络的权重,这与随机初始化相比可能很有用。此外,使用BatchNorm时,我们需要设置BatchNor输出的缩放和偏差以反归一化,而不是将它们初始化为1和0。原始论文中提供了有关Net2DeeperNet操作的更多详细信息。
Net2Deeper actor的结构如图3所示,它是一个循环网络,其初始隐藏状态用编码器网络的最终隐藏状态表示。与先前的工作类似,我们允许Net2Deeper actor在每一步插入一个新层。具体来说,我们根据池化层将CNN结构划分为几个块,并且Net2Deeper actor依次确定要插入新层的块,该块内的特定索引以及新层的参数。对于新的卷积层,agent需要确定滤波器的高度、宽度和步长,而对于新的全连接层,则不需要参数预测。在CNN架构中,任何全连接的层都应位于所有卷积和池化层的顶部。为避免导致不合理的体系结构,如果Net2Deeper actor决定在完全连接的层或最终的全局平均池化层之后插入新层,则新层将被限制为完全连接的层,否则必须是卷积层。
在这里插入图片描述

3.2 对于DenseNet的功能保留转换

在(Chen, Goodfellow, and Shlens 2015)中提出的原始Net2Net操作是在网络是逐层设计的情况下进行讨论的,即将一层的输出仅馈送到其下一层。然而,在某些现代CNN体系结构中,一层的输出将被馈送到多个后续层,例如DenseNet,直接应用原始的Net2Net操作可能会出现问题。在本节中,我们将对原始Net2Net操作进行一些扩展,以实现DenseNet的功能保留转换。
与普通的CNN不同,在DenseNet中,第 l l 层将接收所有先前层的输出作为输入,并在通道维度上串联起来,表示为 [ O 0 , O 1 , . . . , O l ? 1 ] [\pmb O_0,\pmb O_1,...,\pmb O_{l-1}] ,而其输出的 O l \pmb O_l 将被馈送到所有后续层。
(1)Net2Wider
将第 l l 层的内核表示为具有形状 ( k w l , k h l , f i l , f o l ) (k^l_w,k^l_h,f^l_i,f^l_o) K l \pmb K_l 。为了在保留功能的同时用具有 f ^ o l \hat f^l_o 输出通道的较宽层替换第 l l 层,在第 l l 层中创建新内核 K ^ l \pmb{\hat K}_l 与原始Net2WiderNet操作相同(请参阅等式1和式2)。这样,较宽层的新输出为 O ^ l \pmb {\hat O}_l ,其中 O ^ l ( j ) = O l ( G l ( j ) ) \pmb{\hat O}_l(j)=\pmb O_l(G_l(j)) ,其中 G l G_l 是等式1中定义的随机重映射函数。由于第 l l 层的输出将被馈送到DenseNet中的所有后续层,因此在 O ^ l \pmb{\hat O}_l 中进行扩宽将导致在第 l l 层之后的所有层的输入中都进行扩宽。这样,我们需要修改DenseNet中所有后续层的内核,而不是像原始Net2WiderNet操作那样仅修改下一层的内核。对于 m > l m>l 的第 m m 层,加宽第 l l 层后,其输入变为 [ O 0 , . . . , O l ? 1 , O ^ l , O l + 1 , . . . , O m ? 1 ] [\pmb O_0,...,\pmb O_{l-1},\pmb{\hat O}_l,\pmb O_{l+1},...,\pmb O_{m-1}] 。从第 m m 层的角度来看,等效随机重映射函数 G ^ m \hat G_m 可写为:
G ^ m ( j ) = { j 1 j f o 0 : l f o 0 : l + G l ( j ) f o 0 : l < j f o 0 : l + f ^ o l j ? f ^ o l + f o l f o 0 : l + f ^ o l < j f o 0 : m + f ^ o l ? f o l , (4) \hat G_m(j)=\begin{cases} j & 1\le j\le f^{0:l}_o\\ f^{0:l}_o+G_l(j) & f^{0:l}_o\lt j \le f^{0:l}_o+\hat f^l_o\\ j-\hat f^l_o+f^l_o & f^{0:l}_o+\hat f^l_o\lt j \le f^{0:m}_o+\hat f^l_o - f^l_o \end{cases},\tag{4}
其中 f o 0 : l = v = 0 l ? 1 f o v f^{0:l}_o=\sum^{l-1}_{v=0}f^v_o 是第l层的输入通道数,第一部分对应于 [ O 0 , . . . , O l ? 1 ] [\pmb O_0,...,\pmb O_{l-1}] ,第二部分对应于 [ O ^ l ] [\pmb{\hat O}_l] , 最后一部分对应于 [ O l + 1 , . . . , O m ? 1 ] [\pmb O_{l+1},...,\pmb O_{m-1}] G ^ m \hat G_m 的一个简单例子为:
在这里插入图片描述
因此,第 m m 层的新内核可以由等式3给出,其中将 G l G_l 替换为 G ^ m \hat G_m
(2)Net2Deeper
要在DenseNet中插入新层,假设将新层插入第 l l 层之后。将新层的输出表示为 O n e w \pmb O_{new} ,其输入为 [ O 0 , O 1 , . . . , O l ] [\pmb O_0,\pmb O_1,...,\pmb O_l] 。因此,对于第 m ( m > l ) m(m>l) 层,插入后其新输入为 [ O 0 , O 1 , . . . , O l , O n e w , O l + 1 , . . . , O m ? 1 ] [\pmb O_0,\pmb O_1,...,\pmb O_l,\pmb O_{new},\pmb O_{l+1},...,\pmb O_{m-1}] 为了实现功能保留,类似于Net2WiderNet的情况, O n e w \pmb O_{new} 应该是 [ O 0 , O 1 , . . . , O l ] [\pmb O_0,\pmb O_1,...,\pmb O_l] 中某些项的复制。这是有可能的,因为新层的输入是 [ O 0 , O 1 , . . . , O l ] [\pmb O_0,\pmb O_1,...,\pmb O_l] 。新层中的每个滤波器都可以用张量表示,其张量表示为 F ^ \pmb{\hat F} ,其形状为 ( k w n e w , k h n e w , f i n e w = f o 0 : l + 1 ) (k^{new}_w,k^{new}_h,f^{new}_i=f^{0:l+1}_o) ,其中 k w n e w k^{new}_w k h n e w k^{new}_h 表示滤波器的宽度和高度,而 f i n e w f^{new}_i 是输入通道数。为了使 F ^ \pmb{\hat F} 的输出成为 [ O 0 , O 1 , ? ? ? , O l ] [\pmb O_0,\pmb O_1,···,\pmb O_l] 中第 n n 项的复制,我们可以将 F ^ \pmb{\hat F} 设置为以下所示(使用 k w n e w = k h n e w = 3 k^{new}_w=k^{new}_h=3 的特殊情况)
在这里插入图片描述
F ^ \pmb{\hat F} 中的所有其他值都设置为0。请注意,对于每个滤波器,可以从 { 1 , . . . , f o 0 : l + 1 } \{1,...,f^{0:l+1}_o\} 中随机选择 n n 。设置新层中的所有滤波器后,我们可以为所有后续层形成等效的随机重映射函数,如等式4中所述,并相应地修改其内核。

  相关解决方案