轻量级神经网络架构综述

轻量级神经网络架构综述

深度神经网络已经被证明可以有效的解决图像、自然语言等不同领域的问题.同时伴随着移动互联网技术的不断发展,便携式设备得到了迅速的普及,用户提出了越来越多的需求.因此,如何设计高效、高性能的轻量级神经网络是解决问题的关键.本文详细阐述了三种构建轻量级神经网络的方法,分别是人工设计轻量级神经网络、神经网络模型压缩算法和基于神经网络架构搜索的自动化神经网络架构设计,同时简要总结和分析了每种方法的特点,并重点介绍了典型的构建轻量级神经网络的算法.最后,总结现有的方法,并给出了未来发展的前景

目前,人工设计轻量级神经网络的主要思想在于设计更高效的网络计算方式,主要是针对卷积的计算方法.现有的深度卷积神经网络为了能够取得更好的性能,通过设置大规模的特征通道数、卷积核大小的数量,但是往往存在大量的冗余.人工设计轻量级神经网络通过合理的减少卷积核的数量,减少目标特征的通道数,结合设计更高效的卷积操作等方式,从而构造更加有效的神经网络结构,可以在保持神经网络性能的前提下,显著的减少网络的参数和计算量,实现在便携式设备上训练和应用深度神经网络.
为了减少人为因素的干扰,通过给定所有候选神经网络架构的集合作为搜索空间,使用学习到的搜索策略从搜索空间中构建最优的神经网络架构,利用性能评估策略度量网络架构的性能,并在训练阶段,作为奖励指导搜索策略的学习,通过反复的迭代,从而得到解决特定任务的最优神经网络架构,实现深度神经网络模型的自动搜索.神经网络架构搜索方法与超参数优化和元学习有显著的重叠.神经网络架构搜索方法主要由三部分组成:搜索空间,搜索策略和性能评估策略.
除人工设计轻量化神经网络模型外,学者和工业界也在不断的探索如何进一步的通过压缩神经网络模
型的规模,进一步的降低对存储设备和计算资源的需求,实现在便携式设备上应用深度神经网络.根据神经网络中每层的冗余程度,通过将网络权重的全精度的浮点数进行裁剪、对网络中间的特征输出进一步进行量化,以及剪枝、权值共享、低秩分解、知识蒸馏等方法实现神经网络模型的压缩.通过压缩神经网络模型,降低了占用的存储空间,满足功耗的限制,嵌入到便携式设备的芯片上,实现实时的运行.人工设计的神经网络模型压缩技术依赖启发式和基于规则的策略,算法设计者需要探索较大的设计空间,以及在模型大小、速度和准确率之间权衡,而这通常是次优的且耗时的.自动机器学习(Automated Machine Learning, AutoML)通过结合强化学习等方法将特征提取、模型选择、超参优化等步骤实现自动化的学习,提高模型的压缩比,在更好地保持神经网络模型性能的同时减少人为因素的干扰.

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

1.1 使用小卷积核代替大卷积
利用多层小卷积核替代一层大卷积核可以有效的减少网络的参数,对于一个大小 5 * 5 的感受野,可以通过两层3 * 3大小的卷积实现.对于一个7 * 7的卷积核可通过三层3 * 3 卷积实现.在参数量上, 5 * 5 大小的卷积核参数量为 25,而两层3 * 3 的卷积核参数量为 18,相比减少了 28%的参数量.从浮点运算数(FLOPs)角度,对于输入大小为H * W * Cin的特征,输出为H * W * Cout大小的特征图时,FLOPs(5 * 5)= H * W * Cin * Cout * 5^2 ,而两层卷积的 FLOPs(3 * 3 * 2)=2 * H * W * Cin * Cout * 3, 计算量也相应的减少.并且两层3 * 3 卷积可以合并两层非线性层,比一层大卷积核更能增加非线性能力.
提出将一个 3 3  的卷积操作分解为连续的 1 * 3 和 3 * 1的卷积,分解之后参数量和 FLOPs 都下降了 33%.使用大的 k * k卷积核可以增加感受野,同时为了减少计算量,可以使用两层 1 * k和 k * 1的卷积代替,这样参数量和 FLOPs 都变为之前的 2/ k .
轻量级神经网络架构综述_第1张图片
1.2 限制中间特征的通道数量
对于标准的不带 bias 的卷积操作,FLOPs= H * W * Cin * Cout * k^2 ,运算量受到输入通道数Cin和卷积核数量Cout的影响,一般来说卷积核数量代表提取的特征数量,减少会影响网络的准确率,因此可以选择降低输入通道数Cin来减少运算量.
1.3 分解卷积运算
标准的卷积操作是将一个卷积核用在输入特征的所有通道上.一方面模型的参数量较大,另一方面合并所有通道的卷积运算存在很大冗余.利用深度可分离卷积(Depthwise Separable Convolution)对标准的卷积进行了分解.深度可分离卷积(Depthwise Separable Convolution)可分为深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两个操作.深度卷积(Depthwise Convolution)对于每个输入通道采用不同的卷积核,即一个通道对应一个卷积核,卷积操作是按照通道进行分解的;逐点卷积(Pointwise Convolution)是卷积核大小为1 * 1的标准卷积,作用在输入的所有通道上,将来自不同通道的特征进行融合.
轻量级神经网络架构综述_第2张图片

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

2.1 基于规则的神经网络模型压缩
权重裁剪:权重裁剪是指对网络结构中的权重进行删减从而达到压缩网络的目的.权重裁剪基于一个假设,在网络中很多参数都是不需要的或者不重要的,通过裁剪的方法可以将这些参数移除.通过权重裁剪的方法能够带来两点好处:首先参数量的减少所需要的存储空间也会相应的减少,其次,由于参数的减少导致网络运行时计算量的减少,能够减少对计算能力的需求,同时增加运行速度.
权重量化:在权重量化层面,Gupta 发现,使用 16 位的定点数作为权重,足够在 MNIST 上训练一个神经网络 .此外,Dettmers 研究了 8 位定点量化,加快并行训练中深度网络的收敛速度 .Han 等人提出了结合权重剪枝,量化和霍夫编码的策略, 可以得到非常高的压缩比,但是这种方法需要专门的运算策略来实现.提出了二值权重网络(Binary Weight Network, BWN)即对于网络的权重而言,只有 1 或-1 两个值.BWN 采用了一种混合策略(BinaryConnect)对于网络的中间层特征,保留其原始精度,只将网络权重进行二值化,将网络前向传播与反向传播时的乘法操作变为加法操作.在网络的训练过程中,二值化的权重应用于前向传播与反向传播的梯度计算,而在更新权重时,采用全精度的权重,当全精度的权重越过阈值时,其对应的二值化后的权重就会发生改变.在测试时,只保留和使用二值化之后的权重,每个权重只占用一个 bit 的空间,对于 32 位或者 64 位 bit 的浮点数,有 32~64 倍的压缩倍率,并且由于用累加代替了乘法运算,使得网络的运行效率也大幅提升.
低秩分解:卷积层的卷积核是一个 4D 的张量,低秩分解的方法主要是将卷积核进行分解以减少冗余,低秩分解的关键在于如何对卷积核的参数进行排列,以及要在哪个维度上进行秩的约束.
知识蒸馏:不同于其他的压缩或加速的方法,知识蒸馏是创建一个“学生”网络,然后让其去拟合“教师”网
络分布的方法,使得小型网络能够学习到大型网络的知识.一般来说,“教师”网络是一个较大的网络,而“学生”
网络是一个轻量级的网络.利用网络之间的知识传递,而不是直接训练一个轻量级网络.

在模型压缩方面,主要是对已有的网络进行参数量或者网络规模上的压缩.权重裁剪主要是去掉对网络贡献小的参数,最终的效果依赖于剪枝的策略;权重量化使用更少的比特数来表示权重,能够极大的对网络进行压缩,但是对网络性能影响较大;低秩分解主要是从稀疏矩阵的冗余上对其进行分解,在模型压缩与加速上都取得了一定的成果,但是实际应用中,分解操作需要的计算量较大;知识蒸馏是使用小网络来模拟大网络的性能,但是其应用场景受限于“教师”的应用场景.
2.2 基于自动机器学习的自动神经网络模型压缩
随着深度神经网络越来越深,设计空间的复杂性以指数级的速度爆炸式的增加,因此传统的基于规则的模型压缩算法不能满足模型压缩的需求.西安交通大学和谷歌联合提出了自动模型压缩算法 AMC ,利用强化学习方法学习压缩策略,学习到的压缩策略优于传统的基于规则的压缩策略,具有更高的压缩比,并且能更好的保持模型的性能,大大的减少人为因素的干扰.
针对不同的应用场景,AMC 提出了两种压缩策略搜索协议,对时效性要求较高的场景,例如移动应用程序、自动驾驶和广告排名等,通过限制搜索空间,即在模型大小和滤波器的数量等方面进行压缩,以获得最大的硬件资源;对性能要求较高的场景,例如拍照识图和谷歌图像等,通过研究模型的精度和规模设计奖励函数,实现模型的压缩并保持模型的精度
轻量级神经网络架构综述_第3张图片
AMC 模型通过强化学习算法训练代理,实现动作的预测并计算稀疏性,执行压缩.同时快速评估压缩后的模型性能,通过优化损失函数,鼓励更小,更精确的结果更新代理.

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

神经网络架构搜索(Neural Architecture Search, NAS)是指根据某种搜索策略,在特定的搜索空间内,自动设计出解决特定任务的高性能神经网络架构.NAS 由三部分构成,分别是搜索空间,搜索策略和性能评估策略.其中搜索空间定义了构建神经网络的基本架构单元,将适合特定任务的典型网络架构作为先验知识,可以有效的减少搜索空间的大小.但是,该过程往往会引入人为因素的干扰,可能会影响不同类型的神经网络架构的搜索.搜索策略决定了如何在通常为指数级甚至是无限大的搜索空间内搜索用于解决特定任务的神经网络架构,并决定网络中不同层/模块的连接方式和参数等.一方面需要快速找到性能良好的神经网络架构,另一方面需要避免过早的收敛到次优架构.性能评估策略是指准确、高效的度量神经网络的性能.传统的性能评价方法通过在针对特定任务构建的训练数据集上,进行完整训练和测试度量神经网络的性能.这种方法的计算成本和时间复杂度高,对计算资源的需求大.因此,最近的主要研究方向集中在如何设计高效率的性能评估策略.
3.1 搜索空间
搜索空间根据基本架构的类型分为两种主要类型:第一种是直接搜索整个神经网络架构的全局搜索空间,包括链式架构搜索空间和多分支架构搜索空间;第二种是通过重复某些特定结构构建神经网络架构的局部搜索空间,代表性方法是基于块的搜索空间.
1.1 链式架构搜索空间的参数包括:(1)神经网络的(最大)层数 n ;(2)神经网络中每层的类型,包括池化、卷积或其他高级操作,例如深度可分离卷积 、空洞卷积等;(3)神经网络的超参数,包括卷积核的数量、核大小、卷积步长和全连接层的数量等.需要注意的是,不同的参数之间存在关联关系,例如神经网络的超参数受到卷积核的数量和核大小的约束,因此搜索空间的参数不是固定长度.
链式架构搜索空间具有结构简单,计算复杂度低的特点.但是在训练链式神经网络的过程中,容易发生梯度消失的问题,并且神经网络模型的规模小,学习能力差.
1.2轻量级神经网络架构综述_第4张图片
2 虽然链式和多分支架构搜索空间可以以更灵活的方式构建不同类型的神经网络结构,但是面临着搜索空间大,参数规模大,需要大量的计算资源实现神经网络的搜索.因此,往往收敛至次优或局部极小的神经网络架构,不能有效的解决特定任务.为了解决上述问题,学者们受到人工设计的深度神经网络模型中存在大量重复的块结构的启发,提出了重复堆叠块结构,而不是通过搜索单一层构建神经网络.这种块结构通常由更小的块构成,通过堆叠块构建更大的神经网络架构.这种设计不仅可以保证神经网络架构的性能,而且通过简单修改神经网络的参数,可以很容易的将搜索到的神经网络推广到其他的数据集和任务中.
3. 全局搜索空间和局部搜索空间的比较
搜索空间的类型和大小决定了网络架构搜索的难度.需要注意的是,不管采用哪种类型的搜索空间,都具有不连续性和相对高维的问题.与链式和多分支等的全局搜索空间相比,基于块局部搜索空间具有以下三个优点:(1)显著降低了搜索空间的规模;(2)通过堆叠块结构创建神经网络架构已经被证明是一个非常有效的设计原则;(3)通过简单的改变块结构中卷积核的数量和大小,采用块结构创建的神经网络架构更容易的迁移到其他任务或数据集中,最后通过某种搜索策略不断的堆叠不同的块结构构建最终的网络架构。

你可能感兴趣的:(轻量级神经网络架构综述)