轻量级神经网络架构综述∗

2020-11-03 12:25葛道辉李洪升刘如意沈沛意苗启广
软件学报 2020年9期
关键词:权重卷积架构

葛道辉 , 李洪升 , 张 亮,4 , 刘如意 , 沈沛意 , 苗启广,3

1(西安市大数据与视觉智能关键技术重点实验室(西安电子科技大学),陕西 西安 710071)

2(嵌入式技术与视觉处理研究中心(西安电子科技大学),陕西 西安 710071)

3(陕西省区块链与安全计算重点实验室(西安电子科技大学),陕西 西安 710071)

4(上海宽带技术及应用工程研究中心,上海 200436)

深度学习与传统手工设计目标特征的方法不同:深度学习以端到端的方式训练深度神经网络,实现自动提取目标的深度特征,避免人为设计的干扰;同时,深度特征与传统特征相比,深度特征可以多层次表示目标,从浅层的局部特征到深层的全局特征,具有更强的鲁棒性和表达能力.基于此,深度学习近些年来已经引起了学术界和工业界的广泛关注,并且深度学习已经成功地应用于解决多种类型的任务中,如目标检测、图像检索、语言识别、智能问答等领域.

移动互联网时代,智能手机和其他便携设备的普及给人们之间的日常交流、信息获取、学习和工作等生活的各个方面均带来了极大的便利.伴随着移动互联网的迅速发展,推出了如人脸识别、视频直播、美颜相机、拍照识图、自动驾驶等多种不同类型的移动式应用,丰富了人们的日常生活,其中产生的数据绝大部分为静态图像和动态视频数据.目前,传统的深度神经网络[1-3]通过设计非常深的神经网络结构用于提取表达能力更强的深度特征,这对存储设备和计算资源的要求非常高,常用的便携式设备无法满足该需求,这严重限制了深度神经网络在便携式设备上的发展与应用.

为了提高便携式设备处理图像和视频数据的效率和能力,同时需要满足存储空间和功耗的限制,设计适用于便携式设备的轻量化深度神经网络架构是解决该问题的关键.近些年来,轻量级神经网络架构的设计得到了学术界和工业界的广泛关注,提出了一些典型的方法[4-9],主要包括3 个不同的方向,分别是:(1) 人工设计轻量化神经网络模型;(2) 基于神经网络架构搜索(neural architecture search,简称NAS)的自动化神经网络架构设计;(3) 神经网络模型的压缩.轻量级神经网络架构的设计已经取得了一定的成果:谷歌通过深度可分离卷积(depthwise separable convolution)代替标准卷积提出了轻量级网络架构MobileNet V1[8];Face++通过逐点群卷积核通道混洗技术提出了ShuffleNet V1[9];MnasNet[7]和NasNet[6]通过强化学习方法学习神经网络架构搜索策略,实现便携式设备上轻量化神经网络的自动化构建,不同的是,NasNet[6]设计了基于块的搜索空间,大大加快搜索速度;Deep compression[4]通过剪枝、权值共享和权值量化、哈夫曼编码实现卷积神经网络模型的压缩;AMC(AutoML for model compression)[5]利用强化学习方法自动学习模型压缩策略,具有更高的压缩比,可以更好地保持神经网络的性能.

目前,人工设计轻量级神经网络的主要思想在于设计更高效的网络计算方式,主要是针对卷积的计算方法.现有的深度卷积神经网络为了能够取得更好的性能,通过设置大规模的特征通道数、卷积核大小的数量,但是往往存在大量的冗余.人工设计轻量级神经网络通过合理地减少卷积核的数量,减少目标特征的通道数,结合设计更高效的卷积操作等方式,从而构造更加有效的神经网络结构,可以在保持神经网络性能的前提下,显著地减少网络的参数和计算量,实现在便携式设备上训练和应用深度神经网络.

MobileNet[8,10],ThunderNet[11],ShuffleNet[9,12],SqueezeNet[13]等人工设计的神经网络虽然已经取得了令人瞩目的成绩,但是设计高性能的轻量级神经网络需要设计者具有丰富的专业知识和领域知识,并且需要大量重复的实验,导致研究成本和时间成本极高,严重限制了轻量级神经网络在便携式设备上的发展与应用.为了减少人为因素的干扰,通过给定所有候选神经网络架构的集合作为搜索空间,使用学习到的搜索策略从搜索空间中构建最优的神经网络架构,利用性能评估策略度量网络架构的性能,并在训练阶段,作为奖励指导搜索策略的学习,通过反复的迭代,从而得到解决特定任务的最优神经网络架构,实现深度神经网络模型的自动搜索.神经网络架构搜索方法与超参数优化[14]和元学习[15]有显著的重叠.神经网络架构搜索方法主要由3 部分组成:搜索空间、搜索策略和性能评估策略.

除人工设计轻量化神经网络模型外,学者和工业界也在不断地探索如何进一步地通过压缩神经网络模型的规模,进一步地降低对存储设备和计算资源的需求,实现在便携式设备上应用深度神经网络.根据神经网络中每层的冗余程度,通过将网络权重的全精度的浮点数进行裁剪、对网络中间的特征输出进一步进行量化,以及剪枝、权值共享、低秩分解、知识蒸馏等方法实现神经网络模型的压缩.通过压缩神经网络模型,降低了占用的存储空间,满足功耗的限制,嵌入到便携式设备的芯片上,实现实时的运行.

人工设计的神经网络模型压缩技术依赖启发式和基于规则的策略,算法设计者需要探索较大的设计空间,以及在模型大小、速度和准确率之间权衡,而这通常是次优的且耗时的.自动机器学习(automated machine learning,简称AutoML)通过结合强化学习等方法,将特征提取、模型选择、超参优化等步骤实现自动化的学习,提高模型的压缩比,在更好地保持神经网络模型性能的同时,减少人为因素的干扰.

随着轻量级神经网络的不断发展,提出了越来越多的设计方法,已经被成功地用于解决各类问题,在图像分类问题上已经超过了人工设计的方法,并广泛应用于目标检测、图像分割、智能问答等不同领域.本文首先概括性介绍轻量级神经网络.第1 节介绍人工设计轻量级神经网络方法.第2 节详细介绍基于规则和基于自动机器学习的神经网络模型压缩算法.第3 节总结基于神经网络架构搜索的自动化轻量级网络设计.最后展开讨论并对未来的研究方向给出建议.

1 人工设计的轻量级神经网络模型

在本节中,我们将介绍人工设计的高效的轻量化网络结构及其背后的原理.随着模型参数量的增加,模型的准确率和复杂度也逐步增加,但同时,神经网络中存在较大冗余.设计更加高效的网络结构.对于压缩模型大小、加快运行速度以及减轻训练难度都有重要的作用.本节将从减少卷积核的冗余、减少输入特征的通道数、设计更加高效的模块z23 个方面介绍如何设计轻量级的神经网络.

1.1 使用小卷积核代替大卷积

利用多层小卷积核替代一层大卷积核,可以有效地减少网络的参数.在Simonyan 等人提出的VGG[1]网络中,使用3×3 卷积核代替5×5 和7×7 大小的大卷积核:对于一个大小5×5 的感受野,可以通过两层3×3 大小的卷积实现;对于一个7×7 的卷积核,可通过3 层3×3 卷积实现.如图1(a)所示.

在参数量上,5×5 大小的卷积核参数量为25,而两层3×3 的卷积核参数量为18,相比减少了28%的参数量.从浮点运算数(FLOPs)角度,对于输入大小为H×W×Cin的特征,输出为H×W×Cout大小的特征图时,FLOPs5×5=H×W×Cin×Cout×52,而两层卷积的FLOPs(3×3)×2=2×H×W×Cin×Cout×3,计算量也相应地减少.并且两层3×3 卷积可以合并两层非线性层,比一层大卷积核更能增加非线性能力.

类似地,Jaderberg 等人[16]提出将一个3×3 的卷积操作分解为连续的1×3 和3×1 的卷积,如图1(b)所示,分解之后,参数量和FLOPs 都下降了33%.Chao[17]提出使用大的k×k卷积核可以增加感受野,同时为了减少计算量,可以使用两层1×k和k×1 的卷积代替,这样参数量和FLOPs 都变为之前的2/k.

1.2 限制中间特征的通道数量

对于标准的不带bias 的卷积操作FLOPs=H×W×Cin×Cout×k2,运算量受到输入通道数Cin和卷积核数量Cout的影响.一般来说,卷积核数量代表提取的特征数量,减少会影响网络的准确率,因此可以选择降低输入通道数Cin来减少运算量.

Iandola 等人在SqueezeNet[13]中提出了Fire module,如图2 所示,在保证准确率的同时减少运算量.Fire module 包含两部分:压缩(squeeze)层和扩张(expand)层,通过减少squeeze 层的通道数量来减少整个模型需要的计算量.与AlexNet[18]相比,在保证了相同的性能的条件下,模型大小压缩了近50 倍.

1.3 分解卷积运算

标准的卷积操作是将一个卷积核用在输入特征的所有通道上.一方面,模型的参数量较大;另一方面,合并所有通道的卷积运算存在很大冗余.通过分组卷积,ResNeXt[19]将多个分支合并为一个分支.与ResNet[2]同等计算消耗的情况下,有着更高的准确率.

Howard 等人提出了MobileNet V1[8]利用深度可分离卷积对标准的卷积操作进行了分解,如图3 所示.深度可分离卷积可分为深度卷积(depthwise convolution)和逐点卷积两个操作:深度卷积对于每个输入通道采用不同的卷积核,即一个通道对应一个卷积核,卷积操作是按照通道进行分解的;逐点卷积是卷积核大小为1×1 的标准卷积,作用在输入的所有通道上,将来自不同通道的特征进行融合.

标准卷积的计算量为Dk×Dk×M×N×H×W,而两步的深度可分离卷积的计算量为Dk×Dk×M×H×W+M×N×H×W,与标准卷积的运算量相比:

计算量大致变为原来的1/9 至1/8.最终,MobileNet[8]与VGG-16[1]相比:在准确率接近一致的情况下,模型大小是VGG-16 的1/32,计算消耗量是其1/27.

一般常用的卷积核大小为3×3,即,一个深度可分离卷积的FLOPs 为3×3×M×H×W+1×1×M×N×H×W,M为输入特征通道数,H,W为输入特征高和宽,N为当前层卷积核数量.一般来说N要远大于9,此时,深度卷积的主要计算量集中在1×1 的逐点卷积上.为解决这个问题,ShuffleNet[9]提出了Group 逐点卷积,将逐点卷积进行分组卷积操作,以降低在逐点卷积操作方面的计算消耗,如图4 所示.图4(a)为一般分组卷积,造成分组之间信息无法流通;图4(b)和图4(c)为通道混洗(channel shuffle)操作.

ShuffleNet[9]首先将输入通道分组,在每个组中进行单独的卷积运算.如果单纯地堆叠分组卷积操作,会造成各个组之间的信息无法流通,影响网络的表达能力.为了让分组卷积能够得到其他分组产生的特征,ShuffleNet[9]提出了混洗(shuffle)操作,将来自不同组的特征重新进行排列,使得新的分组中包含来自之前各个组的特征,保证了各个组之间的信息流通.

ShuffleNet[9]利用混洗操作和分组逐点卷积(group pointwise convolution)组合成ShuffleNet Unit.当输入特征大小为H×W×C1、Bottlenect 的通道数为C2时,ResNet Unit 需要2×H×W×C1×C2+9×H×W×的FLOPs;ResNeXt[19]需要2×H×W×C1×C2+9×H×W×C2的FLOPs;而ShuffleNet Unit 只需要H×W×C2的FLOPs,进一步减少了计算量(如图5 所示).

最终,ShuffleNet[9]在与AlexNet[18]相同准确率的情况下,比后者快13 倍.

为了在保持网络规模的前提下进一步提高网络的性能,在后来的MobileNet V2[10]中引入了残差结构,并在残差结构上进行改造:首先,由于深度卷积本身不能改变特征的通道数,并且在输入通道较少的情况下无法较好地提取特征,因此在残差分支中,使用逐点卷积来先增加后减少特征通道数,使得深度卷积层工作在高维的特征之中,与之前的残差分支正好相反;其次,激活函数在高维的空间中能够有效地增加非线性能力,但是在低维空间中会破坏特征的表达能力,因为第2 个逐点卷积起到降维的作用,所以去掉第2 个逐点卷积之后的激活层,也就是使用了线性的Bottleneck,如图6 所示.由于提升了网络的表达能力,MobileNet V2[10]只需要MobileNet V1[8]的2/5 的计算量就能达到相同的性能.

Ma 等人[12]发现,FLOPs 作为一个间接的指标,只能大致地估测运行速度,与速度并不完全相符.主要原因有两方面:一是很多操作无法被算入FLOPs 中,例如内存访问成本(memory access cost,简称MAC)、并行化程度等;二是受到计算平台的影响.Ma 等人[12]提出了4 种轻量级网络的指导方案:(1) 相同的输入输出通道数能够减少内存访问成本(MAC);(2) 过多的分组卷积会增加MAC;(3) 网络的碎片化程度会减少并行化程度;(4) 不能忽略元素级操作.

根据以上4 条方案,在ShuffleNet V1[9]的基础上进行改进,如图7 所示.

图7(a)、图7(b)分别为空间尺度不变的ShuffleNet V1 Unit 和空间尺度变小的ShuffleNet V1 Unit,图7(c)、图7(d)分别为空间尺度不变的ShuffleNet V2 Unit 和空间尺度变小的ShuffleNet V2 Unit.图7(c)利用通道分割(channel split)的方法将输入分割成两部分:一半作为直接连接分支,一半作为残差分支,并且残差分支中1×1 卷积的输入输出通道数相等(符合方案1),并且不使用分组卷积(符合方案2).最后进行Concat,避免了特征相加的操作(符合方案4).图7(d)去掉了通道分割操作,从而在减少了特征图空间尺寸的同时,通过Concat 增加了通道数.ShuffleNet V2 通过提出新的指标(MAC),并且在MAC 上优化,加快了运行速度同时也提升了准确率.新的ShuffleNet V2 比MobileNet V1 快58%,比ShuffleNet V1 快63%,比Xception 快25%.

在Zhang 提出的IGCNets[20]中,同样利用了分组卷积,深度卷积可以看作是分组卷积的一种极限情况,即,将每个通道分为一组.在IGCNets[20]中,使用了两级分组卷积:第1 级是空间卷积,一般大小为3×3;第2 级是1×1 的分组卷积.为了防止各个组的特征之间无法进行信息交互,采取了不同的分组数量,即:第1 级卷积分为2 组,然后对特征进行重新排列;第2 级卷积分为3 组,并且每一组都包含之前所有组的一部分特征.如图8 所示.

而IGCV2[21]更进一步,通过使用3×3 的深度卷积和L个1×1 的分组卷积来提升卷积效率.并且要求这一系列的卷积都满足互补条件(complementary condition),即,最终输出的特征中的一个通道存在且仅存在一条路径连接到输入特征的任意一个通道.最终确保由多个稀疏的卷积核(分组卷积)组成的卷积核矩阵是稠密的,如图9所示.

Mehta 等人提出了EspNet[22],将标准卷积分解为1×1 的逐点卷积和空间金字塔扩张卷积(spatial pyramid of dilated convolutions).在减少了参数量和计算量的同时,增加感受野.在随后的EspNet V2[23]中,将原来的dilated convolution 也采用了深度卷积.同时,将1×1 的逐点卷积更改为1×1 的分组卷积.

人工设计轻量化神经网络,不同于对现有的网络进行压缩,而是重新设计更加高效的网络单元(主要针对卷积运算),从而在不损失网络性能的条件下,减少网络的参数量,提升网络运行速度.以上介绍的3 种主要方式主要从卷积核的空间尺度、卷积的输入通道数以及卷积的通道之间的稀疏连接等方面对标准卷积操作进行改进.在这一方向,模型压缩和加速都已经取得了较好的成果.

2 卷积神经网络的压缩算法

2.1 基于规则的神经网络模型压缩

除人工设计轻量化神经网络模型外,学者们也在探究如何将已有的网络进行压缩,从而实现在便携式设备上运行.根据神经网络在不同方面的冗余,分别使用网络的分支裁剪、减少网络权重占用的比特数、对卷积核进行低秩分解、知识蒸馏等方法,对已有的网络模型进行压缩,降低对空间和计算能力的需求,实现在便携设备上的实时运行.

· 权重裁剪

权重裁剪是指对网络结构中的权重进行删减,从而达到压缩网络的目的.权重裁剪基于一个假设:在网络中很多参数都是不需要的或者不重要的,通过裁剪的方法可以将这些参数移除.通过权重裁剪的方法能够带来两点好处:首先,参数量的减少,所需要的存储空间也会相应的减少;其次,由于参数的减少导致网络运行时计算量的减少,能够减少对计算能力的需求,同时增加运行速度.

Li 等人提出了基于权重L1 范数的逐层裁剪策略,该策略为:对每层滤波器的L1 范数进行排序,然后删除范数最小的滤波器,再对裁剪后的网络进行重新训练以恢复精度[24].LIU 等人提出了一种针对卷积神经网络中的批量归一化(batchnorm)层进行L1 稀疏化的压缩算法,该算法通过迫使批量归一化层中一些scale 参数接近于0,从而可以安全地删除这些节点而不会对网络的精度造成巨大的影响;并通过多次使用该策略,使得网络达到很高的压缩比[25].Hu 等人发现,卷积神经网络中有大量的神经元的输出结果接近于0,于是提出一种Apoz 的通道重要性衡量方法,以单个神经元通道的输出结果中值接近为0 的占比来衡量该神经元的重要性[26].Tian 等人通过LDA 方法来获取与分类最相关的权重,而裁减掉与分类相关度不大的权重,在人脸检测网络中得到了很高的压缩比[27].Molchanov 等人提出一种通过衡量裁剪前后权重误差的泰勒展开式来衡量通道重要性的策略,来逐步裁剪卷积神经网络[28].Luo 等人提出一种方法,通过最小化裁剪后通道数在下一层的误差的方法来去掉不重要的神经元[29],得到了非常鲁棒的裁剪效果.He 等人为每个通道增加一个掩膜,然后利用稀疏优化策略来迭代优化掩膜和权重,从而最小化裁剪后的网络与原始网络之间的误差[30].Wen 等人提出一种在滤波器级别、通道级别以及层级别通过组Lasso 稀疏化进行网络裁剪的方法,可在不同层面上对卷积神经进行裁剪[31].Yu 等人提出一种将权重的重要性从后往前逐层反传的方法,可以快速有效地得到整体网络的权重重要性[32].

· 权重量化

在权重量化层面,Gupta 发现:使用16 位的定点数作为权重,足够在MNIST 上训练一个神经网络[33].此外,Dettmers 研究了8 位定点量化,加快并行训练中深度网络的收敛速度[34].Han 等人提出了结合权重剪枝、量化和霍夫编码的策略,可以得到非常高的压缩比,但是这种方法需要专门的运算策略来实现.

Courbariaux 等人提出了二值权重网络(binary weight network,简称BWN)[35],即:对于网络的权重而言,只有1 或-1 两个值.BWN 采用了一种混合策略(binary connect):对于网络的中间层特征,保留其原始精度,只将网络权重进行二值化,将网络前向传播与反向传播时的乘法操作变为加法操作.在网络的训练过程中,二值化的权重应用于前向传播与反向传播的梯度计算;而在更新权重时,采用全精度的权重;当全精度的权重越过阈值时,其对应的二值化后的权重就会发生改变.在测试时,只保留和使用二值化之后的权重,每个权重只占用一个bit 的空间,对于32 位或者64 位bit 的浮点数,有32~64 倍的压缩倍率;并且由于用累加代替了乘法运算,使得网络的运行效率也大幅提升.

二值权重网络的成功表明,对权重进行量化是可行的.随后,Courbariaux 等人再次提出了二值神经网络(binary neural network,简称BNN)[36],进一步增加了二值神经网络的量化程度,将需要的计算量压缩至极低的水平.二值神经网络与二值权重网络相比,不仅在权重上是二值化的,并且在每一层的激活值上也进行了二值化.BNN 将每一层的激活值和权重的1 和-1 分别用1 和0 代替,原来用32bit 存储的权重和激活值只需1bit 就能存储.同时,由于激活值和权重都为1 或-1,在计算的过程中产生的数值仍然是1 或-1,将两个浮点数的乘法计算变成了1bit 的位运算.从而从参数的占用空间和计算量两个方面减少了对承载设备能力的需求,使得模型能够更加容易的移植到嵌入式设备上.

虽然二值神经网络极大地减少了计算量和模型大小,但是其精度有待提高.由于二值权重网络的权重只有1 和-1 两种状态,而一般神经网络训练得到的权重往往是均值为0 的正态分布,导致原始精度的权重与量化后的权重存在较大的误差.Li 和Zhang 等人为了解决这个问题,在二值权重网络的基础上提出了三值权重网络(TWN)[37].与二值权重网络相比,三值权重网络增加了0 这种状态,即权重存在-1,0 和1 这3 种量化状态.同时,由于状态的增加,模型的表达能力得到增强,以常用的3×3 大小的卷积核为例,二值权重网络的3×3 卷积核存在23×3=512 种状态,而三值权重网络存在33×3=19683 种状态;在模型的压缩方面,由于存在三值权重网络存在3 种状态,因此压缩能力是二值权重网络的一半,但是从压缩模型角度来看已经足够;在网络的计算上,新增加的0 状态不需要额外的计算,因此三值权重网络与二值权重网络所需的计算量相同.从以上3 个方面来看,三值权重网络在与二值权重网络在运算量基本相同的条件下,能够显著提高了网络的准确率.

Leng 等人将网络的低比特量化问题建模为离散约束优化问题,再将原问题分解为若干子问题,并通过交替求解子问题对网络进行量化,并取得了很好的效果[38].Hu 等人提出一种基于哈希来训练二值神经网络的算法,通过哈希算法来训练二值网络[39].Wang 等人提出一种在激活函数和权重上先后量化网络的方法[40].Frederick等人提出一种同时进行剪枝和量化的网络裁剪架构,充分利用了两类方法的优势[41].

· 低秩分解

卷积层的卷积核W∈Rw×h×c×n是一个4D 的张量,低秩分解的方法主要是将卷积核进行分解以减少冗余,低秩分解的关键在于如何对卷积核的参数进行排列,以及要在哪个维度上进行秩的约束.

Denton 研究了多种低秩分解策略,例如二维矩阵的SVD 分解、三维张量的二维展开以及基于聚类分解等[42].Zhang 采用广义奇异值分解策略,在分类精度轻微下降的情况下,实现了4 倍的加速效果[43].将一个四维的卷积核形状转换成(w×h×c)×n,然后将其分解为两部分,如图10 所示:一部分为d个大小为w×h×c的卷积核,另一部分为n个1×1×d的卷积核,其中,d<n.在卷积核的数量上施加低质约束,原来的n个卷积核可以看作是d个大小为w×h×c的卷积核的线性组合.用这种方法在VGG[1]上实验,理论上可以获得3 倍的速度提升,top-5 error 仅仅增加1.66%.类似的,也可以在特征的输入通道数c上施加低秩约束,将卷积核形状变为c×(w×h×n),然后分解为c个1×1×d的卷积核和d个大小为w×h×n的卷积核.两种方法只是施加约束的维度不同,是对称的分解操作.Lebedev 等人提出一种基于CP 分解对卷积网络中的卷积核进行压缩的方法[44].Kim 等人提出一种基于tucker分解的卷积核分解方法,同样可以有很好的压缩效果[45].

· 知识蒸馏

不同于其他的压缩或加速的方法,知识蒸馏是创建一个“学生”网络,然后让其去拟合“教师”网络分布的方法,使得小型网络能够学习到大型网络的知识.一般来说,“教师”网络是一个较大的网络,而“学生”网络是一个轻量级的网络.利用网络之间的知识传递,而不是直接训练一个轻量级网络.

Hinton 首先提出了知识蒸馏的概念,让小网络在学习分类目标的同时,也尽量拟合大网络对不同类别的软分类结果[46],如图11 所示.Romero 等人在Hinton 的基础上提出Fitnet[47],网络的深度比宽度更加重要,因此在Fitnet 中使用了更深但是更窄的网络当作“学生”网络;并且不单只考虑最终分类层的知识提取,也考虑中间层特征的拟合.基于这个概念,甚至能够取得比原始网络更好的分类结果.Zagoruyko 等人提出了 Attention Transfer(AT),扩展了FitNet 的约束,让“学生”网络学习“教师”网络的注意力图(attention map)而不是中间层的特征,取得了比FitNet 更好的效果[48].

在模型压缩方面,主要是对已有的网络进行参数量或者网络规模上的压缩.权重裁剪主要是去掉对网络贡献小的参数,最终的效果依赖于剪枝的策略;权重量化使用更少的比特数来表示权重,能够极大地对网络进行压缩,但是对网络性能影响较大;低秩分解主要是从稀疏矩阵的冗余上对其进行分解,在模型压缩与加速上都取得了一定的成果,但是实际应用中,分解操作需要的计算量较大;知识蒸馏是使用小网络来模拟大网络的性能,但是其应用场景受限于“教师”的应用场景.

2.2 基于自动机器学习的自动神经网络模型压缩

模型压缩技术的核心是决定每一层的压缩策略,传统的模型压缩模型主要包括剪枝、权值共享、低秩分解和知识蒸馏.一般而言,深度神经网络中各层的冗余程度不同,浅层具有较少的冗余,全连接层具有较大的冗余,使用这些方法不仅需要算法设计者具有丰富的专业知识和领域知识,探索大规模的参数空间,权衡模型大小、运算效率和模型性能,同时还需要反复的实验以获得最佳的模型参数,非常的耗时.然而,由于深度神经网络中的各层不是相互孤立的,基于规则的压缩策略往往并不是最优的.深度神经网络需要大量的训练数据学习针对特定问题的模型参数,导致了传统的模型压缩算法不能直接从一个模型迁移到另外一个模型.这些影响因素严重限制了深度神经网络模型压缩算法的发展与应用.

近些年来,自动机器学习算法(AutoML)受到学术界和工业界的广泛关注,可以看作是设计一系列的控制器操作机器学习模型,使得模型可以自动地学习到合适的参数和网络架构而不需人工的干预,减少对专业知识和领域知识的要求,从而降低设计机器学习算法的难度.

随着深度神经网络越来越深,设计空间的复杂性以指数级的速度爆炸式地增加,因此,传统的基于规则的模型压缩算法不能满足模型压缩的需求.西安交通大学和谷歌联合提出了自动模型压缩算法AMC[5],利用强化学习方法学习压缩策略,学习到的压缩策略优于传统的基于规则的压缩策略,具有更高的压缩比,并且能更好地保持模型的性能,大大减少了人为因素的干扰.

AMC[5]算法提出:压缩精度对每层的稀疏性非常敏感,需要细粒度的动作空间.与传统的在离散空间上进行搜索不同,AMC[5]算法采用DDPC[49]代理的连续压缩比控制策略,通过优化损失函数学习模型压缩策略.特别地,DDPC[49]代理以分层的方式处理神经网络,对于每一层Lt,代理接受编码该层的有用特征St,然后输出精确压缩比.第Lt层压缩完成后,代理移动到下一层Lt+1,在没有微调的情况下,对压缩后的神经网络中的所有层的精度进行评估.这种简单的近似,可以避免不必要的重新训练,并提供高质量的搜索结果.不同的基于强化学习的轻量级模型方法的比较见表1.AMC[5]与其他方法N2N[50],NT[51],NAS[6]的区别在于无需微调,仅需要设计一个简单的控制器,实现用较少的GPU 时间实现快速压缩,同时也支持连续的动作空间.

Table 1 Comparison of lightweight model methods based on reinforcement learning表1 基于强化学习的轻量级模型方法的比较

针对不同的应用场景,AMC 提出了两种压缩策略搜索协议:对时效性要求较高的场景,例如移动应用程序、自动驾驶和广告排名等,通过限制搜索空间,即在模型大小和滤波器的数量等方面进行压缩,以获得最大的硬件资源;对性能要求较高的场景,例如拍照识图和谷歌图像等,通过研究模型的精度和规模设计奖励函数,实现模型的压缩并保持模型的精度.图12 表示了AMC 模型压缩算法流程图.

AMC 模型通过强化学习算法训练代理,实现动作的预测并计算稀疏性,执行压缩.同时,快速评估压缩后的模型性能,通过优化损失函数,鼓励更小、更精确的结果更新代理.AMC 在ResNet-50 上评估了压缩的性能,并测试了压缩模型从分类到目标检测的泛化能力.实验表明,AMC 提供了比手工设计的启发式策略更优的性能.对于ResNet-50,压缩比从3.4 倍提高到了5 倍而不损失准确率,如图13 所示.

此外,AMC 将MobileNet 的FLOPs 减少了2 倍,使最高准确率达到了70.2,在Titan XP 和安卓手机上,分别实现了1.53 倍和1.95 倍的加速,见表2.

Table 2 Compression based on learning vs compression based on rules表2 基于学习的压缩VS 基于规则的压缩

3 基于神经网络架构搜索的自动化轻量级神经网络设计

人工设计轻量级神经网络需要考虑层间的连接方式、网络的深度、卷积计算方式等大量的影响因素,同时需要根据模型的性能不断的调整网络的结构.不仅需要设计者具有丰富的专业知识和领域知识,同时非常依赖设计者的经验,需要耗费大量的训练时间和计算资源评估神经网络的性能.因此,人工设计轻量级神经网络需要大量的时间、人力和物力,这些影响因素严重限制了轻量级神经网络在便携式设备上的应用与发展.

为了减轻对设计者的要求,神经网络架构搜索(neural architecture search,简称NAS)是指根据某种搜索策略,在特定的搜索空间内,自动设计出解决特定任务的高性能神经网络架构.到目前为止,NAS 在图像分类[54]、语义分割[55]等视觉任务上的性能已经超过了手工设计的神经网络架构.NAS 由3 部分构成,分别是搜索空间、搜索策略和性能评估策略.其中,

· 搜索空间定义了构建神经网络的基本架构单元,将适合特定任务的典型网络架构作为先验知识,可以有效地减少搜索空间的大小.但是该过程往往会引入人为因素的干扰,可能会影响不同类型的神经网络架构的搜索;

· 搜索策略决定了如何在通常为指数级甚至是无限大的搜索空间内搜索用于解决特定任务的神经网络架构,并决定网络中不同层/模块的连接方式和参数等.一方面,需要快速找到性能良好的神经网络架构;另一方面,需要避免过早的收敛到次优架构;

· 性能评估策略是指准确、高效地度量神经网络的性能.

传统的性能评价方法通过在针对特定任务构建的训练数据集上,进行完整训练和测试度量神经网络的性能.这种方法的计算成本和时间复杂度高,对计算资源的需求大.因此,最近的主要研究方向集中在如何设计高效率的性能评估策略.图14 表示NAS 算法的流程.搜索策略从预定义的搜索空间Θ内选择神经网络架构A,通过性能评估策略度量神经网络架构的性能,作为奖励反馈回搜索策略,搜索策略通过接受到的奖励调整神经网络的架构.通过反复的迭代,最终得到最优的神经网络架构.

3.1 搜索空间

搜索空间定义了NAS 中构建神经网络的基本架构单元,是神经网络模型通用定义的一个子空间.可以根据特定任务的先验知识引入各种约束,限制基本架构单元的类型和搜索空间的大小.搜索空间根据基本架构的类型分为两种主要类型:第1 种是直接搜索整个神经网络架构的全局搜索空间,包括链式架构搜索空间和多分支架构搜索空间;第2 种是通过重复某些特定结构构建神经网络架构的局部搜索空间,代表性方法是基于块的搜索空间.

3.1.1 全局搜索空间

图15 表示了链式和多分支架构搜索空间,图中不同节点表示神经网络中不同类型的层,采用不同的颜色表示,图中的有向边指示了输入和输出的关系.其中最简单的类型是链式架构搜索空间,如图15(a)所示.链式架构搜索空间通过连续地连接n层构建神经网络,其中第Li层以第Li-1层的输出作为输入,并且第Li的输出作为第Li+1层的输入.链式架构搜索空间的参数包括:(1) 神经网络的(最大)层数n;(2) 神经网络中每层的类型,包括池化、卷积或其他高级操作,例如深度可分离卷积[56]、空洞卷积[57]等;(3) 神经网络的超参数,包括卷积核的数量、核大小、卷积步长[58-60]和全连接层的数量[61]等.需要注意的是:不同的参数之间存在关联关系,例如神经网络的超参数受到卷积核的数量和核大小的约束,因此搜索空间的参数不是固定长度.

Baker 等人[58]的工作研究了链式架构搜索空间,确定了一组可被搜索的操作,包括卷积、池化和线性变化等,以及设置了不同的超参数,包括滤波器的数量、卷积核的大小、卷积步长等.进一步地,该方法同时考虑了一些额外的限制,排除一部分显著不正确的神经网络架构,例如神经网络的第1 层为池化层的网络架构,将具有高分辨率的特征作为全连接层的输入等.Zoph 等人[62]提出了松弛链式架构搜索空间,允许链式架构间的任意按序节点存在残差连接,可以实现搜索得到更加广泛、更加不同的神经网络架构.

根据人工设计深度卷积神经网络的经验和教训,链式架构搜索空间具有结构简单、计算复杂度低的特点.但是在训练链式神经网络的过程中,容易发生梯度消失的问题,并且神经网络模型的规模小、学习能力差.为解决上述问题,最近提出的NAS 方法受到近些年来典型人工设计的深度卷积神经网络模型(ResNet[2],Inception[63]等)的启发,建立了复杂的、具有多分支架构的搜索空间,如图15(b)所示.

多分支架构搜索空间中,第Li层通过联合第Li-1层的全部输出作为输入gi(L0,…,Li-1),根据神经网络的结构分类,主要存在3 种多分支连接方式.

(1) 链式连接方式,gi(Li-1,…,L0)=Li-1,即第Li层以第Li-1层的输出作为输入,并且第Li的输出作为第Li+1层的输入.因此,链式架构搜索空间可以被解释为是多分支架构搜索空间的特例;

(2) 残差连接方式[2],对前一层的所有输出求和,即gi(Li-1,…,L0)=Li-1+Lk,k<i-1;

(3) 密集连接方式[3],串联前一层的所有输出,即gi(Li-1,…,L0)=concat(Li-1,…,L0).

多分支架构搜索空间可以更好地探索神经网络中层之间不同的连接方式,丰富了神经网络结构的类型,增加神经网络模型的容量,提高神经网络的学习能力,提升解决特定任务的性能.

3.1.2 局部搜索空间

虽然链式和多分支架构搜索空间可以以更灵活的方式构建不同类型的神经网络结构,但是面临着搜索空间大、参数规模大,需要大量的计算资源实现神经网络的搜索.因此往往收敛至次优或局部极小的神经网络架构,不能有效地解决特定任务.为了解决上述问题,学者们受到人工设计的深度神经网络模型中存在大量重复的块结构的启发,提出了重复堆叠块结构,而不是通过搜索单一层构建神经网络.这种块结构通常由更小的块构成,通过堆叠块构建更大的神经网络架构.这种设计不仅可以保证神经网络架构的性能,而且通过简单修改神经网络的参数,可以很容易地将搜索到的神经网络推广到其他的数据集和任务中.

通过引入针对特定问题的先验知识,设计具有不同特定架构的块,构成基于块的搜索空间,而不仅仅包括不同类型的单一层.近些年来,学者们成功设计了一些基于块的搜索空间[54,64-69].NasNet 模型[6]是第1 个提出了基于块的搜索空间,该方法设计了两种类型的块结构,分别是正常块(normal cell)和降维块(reduction cell),如图16所示.正常块内的卷积步长设置为1,可以保持输入特征的维度不变;降维块内的卷积步长设置为2,降低输入特征的空间维度.

同时,Cai 等人[67]将如DenseNet[3]等经典手工设计的深度神经网络模型直接应用在基于块的搜索空间中;Dong 等人[70]通过设置搜索没有分支结构并交替使用具有固定结构的块,提出了满足模型参数少、推理时间快的快速搜索模型,如图17 所示.原则上,不同的块之间可以采用任意的连接方式,多分支架构搜索空间内的所有连接方式均可以使用.理想情况下,块结构和整体的神经网络架构应进行联合优化,而不是单独优化某一部分.

3.1.3 全局搜索空间和局部搜索空间的比较

搜索空间的类型和大小决定了网络架构搜索的难度.需要注意的是:不管采用哪种类型的搜索空间,都具有不连续性和相对高维的问题.与链式和多分支等的全局搜索空间相比,基于块局部搜索空间具有以下3 个优点.(1) 显著降低了搜索空间的规模,Zoph 等人提出的NasNet[6]方法的效率比NASRL 方法[62]快了7 倍;(2) 通过堆叠块结构创建神经网络架构已经被证明是一个非常有效的设计原则,例如在递归神经网络中重复LSTM 模块或ResNet[2]网络中堆叠残差结构;(3) 通过简单地改变块结构中卷积核的数量和大小,采用块结构创建的神经网络架构更容易迁移到其他任务或数据集中.最后,通过某种搜索策略不断地堆叠不同的块结构构建最终的网络架构,如图18 所示.

到目前为止,学者们提出的基于块的搜索空间的方法,特别是NasNet 搜索空间,是其他后续神经网络架构搜索方法的基础.大多数研究搜索空间的工作都支持局部搜索空间方法,因为引入了关于特定任务的先验知识,实验结果[65]同时表明了,基于块的搜索空间可以获得更好的结果.同时,基于块的搜索空间通过简单改变块的结构,即改变滤波器的数量和卷积核的大小等,使得神经网络架构非常容易地泛化到其他的数据集或任务中.一般来说,全局搜索空间没有上述优点,但是在特定的应用环境下是非常有用的.例如:当改变输入数据的结构和类型时,仅仅改变块的结构是不可行的.Tan 等人[7]在搜索移动架构时采用全局搜索策略,该方法认为:层的多样性对于移动设备中实现高精度和低延迟都是至关重要的,并且这些是不能由基于块的搜索空间提供的.

3.2 搜索策略

当完成构建搜索空间后,搜索策略决定了如何在搜索空间内搜索针对特定任务的基本架构单元,并确定神经网络内部的连接方式.一方面需要快速找到性能良好的神经网络架构,另一方面需要避免过早地收敛到次优的神经网络架构.首先我们给出搜索策略的定义,D表示训练数据,M表示构建的神经网络模型,S表示搜索空间,则搜索策略过程被形式化为Λ:

训练搜索策略不仅仅需要确定神经网络架构的拓扑结构,同时需要预测优化器、正则约束和其他超参数等.给定训练数据d∈D,被划分为训练集dtrain和验证集dvalid,搜索策略的目的是找到最优的网络架构,使得在验证集dvalid上的训练误差最小,即:

其中,L表示损失函数,用于度量神经网络架构的性能(第3.3 节介绍);R表示正则约束.优化损失函数L是全局优化问题,主流的优化策略包括基于强化学习的优化策略和基于进化算法的优化策略.

3.2.1 基于强化学习的优化策略

强化学习通过代理与环境进行交互,其目标是获得最大化的未来奖励,常用于顺序决策任务中.在每次迭代过程中,一方面代理执行动作,观察环境的状态变化并接收奖励;另一方面,环境根据代理发出的动作,转换到下一个状态,并且根据新的状态产生奖励,其过程如图19 所示.

强化学习通常被定义为一个四元组(S,A,ρ,f),其中,

(1)S表示所有环境状态的集合.st∈S表示代理在t时刻所处的状态;

(2)A为代理可执行动作的集合.at∈A表示代理在t时刻所采取的动作;

(3)ρ:S×A→R为反馈函数.ri~ρ(st,at)表示代理在状态st执行动作at获得的实时反馈;

(4)f:S×A×S→[0,1]为状态转移概率分布函数.st+1~f(st,at)表示代理在状态st执行动作at转移到下一状态st+1的概率.

强化学习算法非常适用于解决NAS 问题,其中,代理(搜索策略)决定了系统的状态,即在搜索空间内自动构建神经网络模型;环境(性能评价策略)评估神经网络架构的性能,并产生相应的奖励;代理接收到奖励,并根据环境当前的状态预测下一个动作(即搜索).通过反复迭代,最终得到对解决特定任务性能最高的神经网络模型.

Q学习优化算法是最早的在线强化学习算法,同时也是强化学习最重要的算法之一.该算法的主要思路是:通过定义Q函数,将在线观测到的数据代入到下面的更新公式中对Q函数进行迭代学习,得到精确解:

其中,t是当前时刻,αt是学习率,δt表示时间差分误差,ak是状态st+1能够执行的动作,r是平衡因子.Q学习使用一个合理的策略使代理预测下一时刻的动作,根据该动作与环境的交互所得到的下一个状态和反馈来学习得到另一个最优的Q函数.由于Q学习很重视通过与环境的交互改变代理的动作,因此在最优控制和游戏上有许多的应用.

Baker 等人[58]第1 次提出了基于强化学习的神经网络架构搜索策略,结合了Q学习优化、ε-贪婪策略和经验回放方法.该方法将代理的动作定义为选择不同类型的层添加到神经网络架构中,同时决定是否终止构建新的神经网络架构;状态是构建的神经网络架构,不同时刻产生的模型被分别训练以评估其解决特定任务的性能;Q函数通过经验回放技术进行适当的更新.为了权衡探索与利用,该方法采用ε-贪婪策略,以概率ε在搜索空间内随机采样,但是不能保证搜索的架构是最优的.与该方法不同的是,Zhang 等人[71]在基于块的搜索空间上提出了基于Q学习算法的搜索网络架构.

策略梯度优化算法是一种通过不断逼近最优值,最终得到最优策略的优化方法.该方法又可以分为确定策略梯度算法和随机策略梯度算法:在确定策略梯度算法中,动作以概率1 被执行;在随机策略梯度算法中,动作以某一概率被执行.近些年来,确定策略梯度算法逐渐受到了学者们的关注.假设需要逼近的策略是π(s,a;θ),而且该策略对参数θ可导,则可定义目标函数和值函数:

其中,J表示在策略J下的决策,E表示期望.

Zoph 等人[62]第1 次提出了基于策略梯度算法实现神经网络架构搜索,通过直接控制模拟器实现神经网络架构的预测.由θ参数化的自动回归控制器定义了随机策略πθ(α|s),该控制器根据先前的动作预测后续的动作,并使用递归神经网络(recurrent neural network,简称RNN)对其进行建模,如图20 所示.

在每次迭代中,每个动作以服从某一概率分布在搜索空间中采样,按序连接并传输到下一次迭代中.通过性能评估策略(第3.3 节中介绍)度量预测神经网络架构的性能,并根据强化更新规则更新控制器的参数:

学者们同样研究了基于块的搜索空间下的策略梯度控制器.NasNet[6]定义了递归网络控制器,该控制器顺序地确定搜索空间内预定义数量的块结构的输入和动作.Cai 等人[60]提出了不同动作空间的控制器,并采用强化学习算法训练.该方法需要一个初始框架,通过Chen 等人[72]提出的方法加宽或加深神经网络,虽然神经网络架构发生了变化,但是它学习到的功能仍然保持不变.

3.2.2 基于进化算法的优化策略

进化算法(evolutionary algorithm,简称EA)是基于种群的全局优化算法,包括初始化、父选择[73]、重组和突变、种群选择等基本组件.初始化定义了如何生成初始种群,初始化后,优化器通过反复迭代以下步骤直到种群收敛:

(1) 从种群中选择父节点进行迭代;

(2) 应用重组和变异操作来创建新的个体;

(3) 评估新个体的适应度;

(4) 选择合适的个体.

图21 表示了进化算法的基本流程:在进化算法中,变异、重组和父节点的选择决定了整个搜索过程,通过变异和重组权衡种群的多样性和相似性,适应性函数反映了优化目标,并且个体选择保证了种群中不同个体间的竞争.针对NAS 问题,种群由一组基本网络架构单元构成,通过在种群内选择一个基本架构单元作为父节点用于变异和重组,即产生新的神经网络架构.一般而言,在NAS 中只使用变异算子,大量的实验表示两个高度适应的个体通过重组操作不能得到相似或更好的子代.

NasNet[6]第1 个提出了使用进化算法搜索深度神经网络架构进行图像分类,该方法从1 000 份最简单的神经网络架构的副本开始,即一个全局池化层后面连接输出层.在父节点选择的步骤中,提出了对成对的神经网络架构进行采样以便进一步处理.当两个神经网络架构中较好的一个连同权重被复制和变异,以批量大小为50 的规格训练了25 600 步,并添加到种群中,而另一个神经网络架构被从种群中删除.这相当于使用k=2 和p=1 的锦标赛选择算法.这组突变包括一系列简单的操作,例如在全局池化层之前的任意位置添加卷积层以及卷积核的大小、通道数、卷积步长、学习速率、添加或删除残差连接、删除卷积、重置网络权重以及对应于无变化的突变.由于不再强制执行域约束,因此可以使用此方法对具有冗余组件的神经网络架构进行隐式的采样,如图22所示.

与NasNet[6]方法不同,MnasNet[7]在更结构化的搜索空间上设计了一种基于遗传算法搜索策略,该搜索空间包括具有可能并行卷积操作的一系列片段.该方法认为:网络架构由3 个片段组成,每个片段由多个卷积层组成,并且每个片段由邻接矩阵描述,该邻接矩阵定义为片段内的每层上的有向无环图.该搜索策略从搜索空间中的20 个随机基本架构单元开始.在父节点选择步骤,所有样本对ai,ai+1,其中,imod 2=1,在交叉重组操作中被考虑.交叉重组操作以概率p在两个所选的神经网络架构之间交换片段.然后,所有在前一步中未经过修改的个体都考虑进行突变操作.MnasNet[7]算法中,突变是在定义片段的邻接矩阵上的随机翻转操作.最后,从头开始训练获得的后代并在计算其适应度.个体的适应度被定义为其在测试数据上的准确性与种群内所有个体中最低准确性之间的差异.由于MnasNet[7]中通过设定阈值,根据适应度选择个体,确保性能最差的网络架构以零概率存活.值得一提的是:这是首次证明在较小数据集上自动发现的神经网络架构成功转移到较大数据集的工作之一,即从CIFAR-10 到ImageNet[18].

Suganuma 等人[59]提出了另一个基于遗传算法的优化器,与上述方法不同的是,考虑在其搜索空间中定义更广泛的操作集,包括卷积和池化以及向量的求和等.该方法将整个神经网络架构编码为由三元组表示的块序列,该三元组定义了块的操作和输入.通过连接块编码获得的串构成了基因型.在这种基因型定义中可以接受非活动部分,例如某些特定操作或断开的块的未使用输入.不活跃的部分不在表型中具体化.图23 表示了遗传编码,其中,基因型的灰色阴影部分表示无效.节点3 中的非活动部分不存在于表现型中,由节点4 引入的额外最大池化层是基因型中未明确编码的操作如何出现在表现型中的示例.该方法提出了(1+λ)-进化策略[74]方法来指导进化,其中,突变和选择算子在循环中使用直到终止进化.从对应于父节点的基因开始(首次迭代是随机的),通过强制修改基因型中的活性部分来生成后代.突变也适用于其基因型的一个非活性部分的父节点.然而,这不会导致表现型的任何改变,因此不会增加整体的训练成本,即使在这一代的父节点将再次成为下一代的父节点的情况下,确保了整个搜索的进程.训练下一代网络架构,度量其准确度,并使用精英选择策略选择下一次迭代的父节点.

Liu 等人[75]提出了另一种基于进化算法的搜索策略,设计了分层的搜索空间.在每次迭代中,突变操作都会选择要修改的层次以及对该层次的修改.该种群由200 个小的基因型初始化,这些基因型通过应用1 000 个随机突变增加种群的多样性.此外,对父代中的个体采用利用锦标赛算法(5%的种群数量)进行选择,并且在进化过程中不会移除任何个体.该方法中,突变可以执行添加、改变和删除基因型等操作.

Real 等人[54]的后续工作是在使用进化算法进行神经网络架构搜索方面最重要的工作之一,该方法主要用于发现AmoebaNet-B 和AmoebaNet-C 神经网络架构,它在具有不同规模大小的CIFAR-10 和ImageNet 数据集上的图像分类任务创造了新的记录,超过了人工设计的深度神经网络模型的性能.然而,在该方法的搜索过程共使用了3 150 个GPU 小时,并且可以在NasNet 搜索空间上执行,并使用锦标赛选择算法在每次迭代中选择父代个体.所选择的个体在正常块或降维块的操作或连接中随机改变而发生突变,并训练25 个周期.与之前的工作相反,该算法不仅仅依赖于性能评估策略的准确性,而且还包括了个体存在的时间.这有助于抑制重复选择表现良好的突变模型并为种群引入多样性,其等价于为目标函数添加了一个正则化约束,确保搜索到的神经网络架构不仅能够一次性能评估具有高精度,而且每次评估都具有高性能.

之前讨论的基于进化算法的搜索策略主要关注点的是找到一个忽略GPU 预算限制的良好性能架构.这些方法中使用的最短搜索时间仍然需要17 个GPU天.接下来讨论的两项工作更关注搜索效率,将搜索时间缩短到1 个GPU 天以内,并提供了可比较的结果.实现这一目标的关键是不同突变的组合,这些突变是功能保持转换和更具侵略性的贪婪策略.

Elsken 等人[76]提出了一种简单而有效的进化算法实现搜索,其灵感来自于功能保持变换.该方法采用精英选择策略来选择父代,用功能保持突变产生8 个不同的后代,并且每个后代训练17 个周期.初始的神经网络架构包括3 个卷积层和两个最大池化层.如前所述,功能保持转换操作显著地减少了每个神经网络架构的训练时间,从而缩短了整个搜索过程的持续时间.

在类似的工作中,Wistuba 等人[77]同样利用了功能保持突变策略,但使用了基于块的搜索空间.该方法提出的搜索策略从一个简单的神经网络架构开始,并执行功能保持突变以增加种群的数量和多样性,即,通过从基础的神经网络生成15 个额外的子代使得初始种群变得多样化.在执行进化算法的过程中,采用锦标赛选择算法选择父代的个体,并在对后代进行适应性评价前,对其进行15 个周期的训练.与Liu 等人[75]的方法类似,所有的个体都在进化过程中存活以确保种群的多样性.如图24 中提供了一个搜索过程的示例,可以发现具有任意神经网络结构的块.

3.2.3 不同搜索策略的比较

表3 总结了不同的搜索策略在CIFAR-10 基准数据集上分类的结果.然而,不同的方法在搜索空间、搜索时间和数据扩充等方面有着很大的差异,缺乏统一的可比较的基准.虽然NAS 可以被视为优化超参数的一种特殊方法,但大多数相关工作都被忽略了.NasNet 搜索空间是最常用的,这是因为引入的先验知识有利于发现性能良好的神经网络架构.类似地,参数重用策略、功能保持策略在提高搜索效率方面是有效的.

Table 3 Comparison of classification results and search time of different search strategies on CIFAR-10 dataset表3 不同搜索策略在CIFAR-10 数据集上的分类结果和搜索时间比较

3.2.4 轻量级神经网络搜索

MnasNet 算法[7]提出了一种用于移动神经网络模型设计的自动神经结构搜索方法,其中,与以前方法的主要区别是延迟感知多目标奖励和新的搜索空间.MnasNet[7]算法基于两个主要思想.

(1) 将搜索问题表示为一个多目标优化问题,同时考虑神经网络模型的准确性和推理延迟;

(2) 与以前使用FLOPs 来近似推断延迟的工作[62,68,85]不同,直接通过在实际移动设备上执行模型来测量实际的延迟.

该想法的灵感来源于搜索的失败往往是由一个不准确的代理导致的,例如,MobileNet[8]和NASNet[6]有类似的失败现象(575M vs 564M),但是他们的延迟明显不同(113ms 与183ms);其次,观察到以前的自动化方法主要是寻找一些类型的块,然后重复相同的块结构构建神经网络.这简化了搜索过程,但也排除了对计算效率很重要的层多样性.为了解决这个问题,该方法提出了一种新的分解层次搜索空间,它允许层在架构上不同,但仍然在灵活性和搜索空间大小之间取得适当的平衡.

本文设计了一种新的分解层次搜索空间,它将CNN 模型分解为独特的块,然后分别搜索每个块的操作和连接,从而允许在不同块中使用不同的层结构.图25 表示了分解层次搜索空间,根据神经网络中每层的输入特征分辨率和滤波器的大小,神经网络中的层被分组成许多预定义的架构,称为块.每个块包含数量可变的重复相同的层,如果输入/输出的分辨率不同,但所有其他层都具有跨距1,则只有第1 层具有跨距2.对于每个块,该方法搜索单个层的操作和连接以及层数n,然后同一层重复n次(例如,4-1 层到4-N4层是相同的).不同块(如2-1 层和4-1层)的层可以不同.

该方法使用强化学习方法为多目标搜索问题找到Pareto 最优解.将搜索空间中的每个神经网络模型映射到令牌列表,这些令牌是由参数为θ的代理生成的一串动作a1:t决定的.目标是使预期的奖励最大化:

其中,由动作a1:t采样得到的,R(m)是定义的多目标函数.

图26 表示了MnasNet 算法的整体流程,搜索策略由3 个部分组成:基于递归神经网络(RNN)的控制器、获得模型精度的训练器和用于测量延迟的基于移动电话的推理引擎.按照众所周知的样本-评估-更新策略来训练控制器.在每个步骤中,控制器首先使用其当前参数对一批模型进行采样,方法是根据其RNN 模型中的SoftMax预测令牌的序列.训练每一个样本模型,并获得在特定任务上的准确度ACC(m),并在真实手机上运行它来获得它的推理延迟LAT(m).然后计算奖励值R(m).在每一步结束时,通过使用近端策略优化使预期奖励最大化来更新控制器的参数.不断迭代样本-评估-更新策略,达到最大迭代步数或参数收敛为止.

MnasNet 模型应用于图像分类[86]和COCO 对象检测[87].与MobileNet V2[10]相比,MnasNet[7]模型在谷歌像素手机上以相同的延迟将ImageNet 的精度提高了3.0%.另一方面,如果限制目标精度,那么MnasNet 模型比MobileNet V2 快1.8 倍,比NASNet[6]快2.3 倍,并具有更好的精度.与广泛使用的ResNet-50[2]相比,MnasNet 模型在减少4.8 倍的参数和10 倍乘法加法操作的情况下,精度略有提升(76.7%).

3.3 性能评估策略

通过学习到的搜索策略找到解决特定任务的神经网络架构M,为了更好地学习搜索策略,需要评估神经网络架构M的性能,最简单的方法是在原始训练数据集上训练神经网络架构M,并在验证集上测试其解决特定任务的性能.但是需要对每个神经网络架构M从头开始训练,然后进行测试.这个过程非常耗时,并且需要大量的GPU 计算资源.因此,设计高效合理的性能评估策略是非常重要的.近些年,如何高效、准确地度量神经网络模型的性能是研究的热点.

影响神经网络训练效率的因素非常多,包括训练数据集的大小、图像的分辨率、训练迭代次数等.为了加快搜索过程,评估神经网络架构性能的主要挑战在于采用较少的计算资源,高效准确地估计神经网络架构的性能.最近,一些工作通过减少训练次数[6,88]、采用训练数据的子集[89]、低分辨率图像[90]、更少的滤波器和更少的块结构[6,54]等方式,以低保真度的方式近似神经网络的真实性能.虽然低保真评估方法降低了计算成本,同时也会在估计中引入偏差,神经网络的性能通常被低估.但是当搜索策略只依赖不同构架间性能的排序,当性能排序相对稳定时,引入的误差对学习搜索策略没有任何的影响.

但是最近的研究结果表明:低保真评估的性能近似与真实的神经网络性能之间的差异太大时,不同神经网络架构间性能的相对排序可能会发生显著的变化[88].为了解决该问题,学者们提出在学习曲线的基础上,推断不同神经网络架构的性能.Domhan 等人[90]提出从初始学习曲线出发,终止预测表现不佳的学习曲线以加速搜索过程.另外,一些方法同时考虑架构超参数预测最优的部分学习曲线[91-94].加速性能评估的另一种方法是基于已有的神经网络架构初始化新的神经网络架构.Wei 等人[94]提出了网络态射的方法,在修改神经网络架构的同时保持神经网络学习到的功能.通过该方法,可以持续不断地增加神经网络架构的容量并保持神经网络的性能,而无需重新训练[95].

一次架构搜索(one-shot architecture search)将所有可能的神经网络架构视为超图的不同子图,并在具有边连接的架构之间共享权重.图27 表示一次架构搜索框架,由一个输入节点(节点0)、3 个隐藏结合(节点1~节点3)和一个输出节点(节点4)构成的简单神经网络.一次架构搜索模型(如图27(a)所示)包含对每个节点的所有可能的候选操作,即3×3 卷积、5×5 卷积和最大池化等操作,每个可能的神经网络架构是一次架构搜索模型的子图(如图27(b)所示),并共享权重.ENAS[65]学习递归神经网络控制器,从搜索空间中采样,并通过强化学习近似梯度实现一次架构搜索框架的训练.DARTS[68]通过联合优化一次架构模型的全部参数和搜索空间的连续松弛变量,实现异构架构搜索算法的训练.

不同的性能评估策略通过不同的方法实现高效、准确地度量神经网络架构的性能:低保真度近似方法通过减少训练时间、采用训练子集等方式提高效率,保持神经网络性能的相对排序;学习曲线推理方法根据训练过程中的学习曲线推理神经网络架构的性能,提前终止性能差的搜索;网络态射方法通过从已有的神经网络架构初始化新的神经网络架构,可以有效地保持神经网络架构的性能,显著减少训练所需的时间;一次架构搜索模型仅仅需要一次训练,不同的神经网络架构之间通过共享权重加快性能评估的效率.

不同性能评估策略的比较见表4.

Table 4 Comparison of different methods of performance evaluation strategy表4 NAS 性能评估策略的不同方法的比较

4 总结与展望

目前存在3 种构建轻量级神经网络的主流方法,分别是人工设计轻量级神经网络、神经网络模型压缩算法和基于神经网络架构搜索的自动化神经网络架构设计.人工设计的轻量级神经网络已经取得了显著的成果,主要有减少卷积核的数量、减少特征的通道数以及设计更高效的卷积操作等关键技术,但是非常依赖设计者的经验.如何有效地将针对特定问题的先验知识加入到模型构建过程中,是未来研究的重点方向.通过网络剪枝、权重压缩和低秩分解是对已有的网络进行压缩,但是压缩算法需要设计者探索较大的设计空间以及在模型大小、速度和准确率之间权衡.为了减少人为因素的干扰,自动机器学习技术是未来研究的热点,联合优化深度神经网络流程的所有模型参数.神经网络架构搜索的研究主要集中在深度神经网络上,许多搜索架构都源自NASNet[6]搜索空间,通过各种搜索算法在定义的搜索空间内自动生成的,广泛应用于解决图像识别、图像分割和语言建模等任务[6,7,98,99],但是只能针对某一特定或同一类型的数据集.如何使用跨不同数据集的知识来加速优化过程,是未来研究的热点.其他的挑战是联合优化深度神经网络流程的所有模型参数.到目前为止,深度神经网络的通用自动化仍处于起步阶段,许多问题尚未得到解决.然而,这仍然是一个令人兴奋的领域,并且未来的工作的方向需要强调其突出的实用性.

轻量级模型的发展使得神经网络更加高效,从而能够广泛地应用到各种场景任务中.一方面,轻量级神经网络有更小的体积和计算量,降低了对设备存储能力和计算能力的需求,既可以装配到传统家电中使其更加智能化,也可以将深度学习系统应用在虚拟现实、增强现实、智能安防和智能可穿戴设备等新兴技术中;另一方面,轻量级神经网络具有更快的运行速度和更短的延时,能够对任务进行实时处理,对于在线学习、增量学习和分布式学习有重大意义;另外,实时处理的神经网络能够满足自动驾驶技术的需求,提高自动驾驶的安全性.轻量级神经网络将对于人工智能技术的普及、建立智能化城市起不可或缺的作用.

猜你喜欢
权重卷积架构
权重望寡:如何化解低地位领导的补偿性辱虐管理行为?*
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
功能架构在电子电气架构开发中的应用和实践
权重常思“浮名轻”
基于B/S架构的图书管理系统探究
构建富有活力和效率的社会治理架构
从滤波器理解卷积
为党督政勤履职 代民行权重担当
权重涨个股跌 持有白马蓝筹