降低参数规模的卷积神经网络模型压缩方法

2021-09-15 02:36朱雪晨陈三林黄志洪
计算机与现代化 2021年9期
关键词:池化层分组卷积

朱雪晨,陈三林,蔡 刚,黄志洪

(1.中国科学院空天信息创新研究院,北京 100094; 2.中国科学院大学,北京 100049)

0 引 言

卷积神经网络具有平移不变性以及权值共享的结构,相比于传统算法,可避免复杂的数据预处理以及特征提取过程。目前卷积神经网络被广泛应用到各个领域[1-3],尤其在计算机视觉方面获得了巨大的成功。随着物联网技术的发展,很多设备需要智能处理图片或视频[4],具有精准目标识别功能的移动端在市场上具有巨大的需求潜力[5]。移动端对网络模型参数敏感,然而卷积神经网络模型规模日益扩增,参数规模越来越大,需要消耗大量的计算和存储资源[6],使其难以集成到资源有限的移动终端内,例如手机、平板电脑等[7]。

卷积神经网络模型参数压缩方法能很好地解决卷积神经网络庞大的参数量与有限的资源之间的矛盾[8-10],目前被广泛应用的模型参数压缩方法有权重参数量化、SVD分解法等[11]。

权重参数量化可通过降低权重的精度达到降低资源消耗的目的。比如在常见的开发框架中,神经网络的激活和权重通常由浮点数据表示,采用低位定点数据甚至一小部分训练值代替浮点数据有助于减少神经网络处理系统的带宽和存储需求[12-15]。缺点是数据精度的降低造成了分类准确率的降低,同时压缩效果很难有更高的提升。

SVD分解法则通过减少权重的数量来达到降低资源消耗的目的。文献[16]通过奇异值分解压缩全连接层的权重矩阵W。一个m×n的权重矩阵W被大小为m×p的权重矩阵A和大小为p×n的权重矩阵B的乘积代替[16]。虽然通过减小p的值达到了减少参数数量的目的,但并不能彻底解决全连接层参数众多而容易产生过拟合的问题。为了解决上述问题,文献[17]提出了一种代替全连接层的全局平均池化算法,之后全局平均池化算法被广泛应用到各种网络,GoogleNet便采用了该算法减小网络训练规模。GoogleNet移除全连接层并没有影响到图像识别的精度,在ImageNet中识别精度达到了93.3%。与此同时,文献[18]提出了1×1的卷积核,之后也成功应用到GoogleNet[19]和ResNet[20]中,起到了降低参数量的作用。

全局平均池化算法解决了全连接层参数众多的问题,在应用此算法的基础上仍需对卷积层参数进行压缩来进一步减小参数规模。

卷积层参数压缩的2种方式分别为减少输入特征图的数量以及压缩卷积核大小。分组卷积最早在AlexNet中出现,训练AlexNet时将特征图分给多个GPU进行处理[21],最后把多个GPU的结果进行融合,有效地减少了输入特征图的数量,解决了硬件资源有限的难题。卷积拆分则是压缩卷积核大小的有效方法。通过将大卷积核拆分成小卷积核的方式可以降低卷积核的参数量。

本文对卷积神经网络模型参数进行分析,参数的数量主要与全连接层以及卷积层有关,因此本文在原有卷积神经网络模型的基础上,应用分组卷积代替标准卷积并采用卷积拆分的方法来减少卷积层的参数量,同时采用全局平均池化层代替全连接层的方法来解决全连接层参数量大的问题。使用上述压缩方法对LeNet5和AlexNet模型进行压缩,进行最大压缩后的LeNet5模型参数规模减少了97%,识别准确率降低了不到2个百分点,而压缩后的AlexNet模型参数规模可减少95%,识别准确率提高了6.72个百分点,表明该方法的有效性。

1 模型参数分析

LeNet5是最经典的卷积神经网络模型之一,最初被应用于手写英文字符识别,图1为LeNet5模型的架构示意图。

图1 LeNet5模型架构示意图

AlexNet在LeNet5的基础上加深了网络,并在2012年ImageNet大赛上赢得冠军,使得卷积神经网络成为图像识别分类方面的核心算法模型,图2为AlexNet模型的架构示意图。

图2 AlexNet模型架构示意图

卷积神经网络主要由卷积层、池化层、全连接层以及激活函数组成。池化层处于卷积层之后,常用的池化函数有最大池化和平均池化,用以缩减特征图的尺寸,降低下一层待处理的数据量。

激活函数处于卷积层之后,池化层之前,不仅可以限制输出的范围,还可以增强网络的表达能力。常用的激活函数包括sigmoid、tanh以及ReLU。ReLU函数即线性整流函数,是一个严格的分段函数,阈值为0。ReLU计算与收敛速度快且在正区间解决了梯度消失的问题。本文采用ReLU激活函数,如式(1):

f(z)=ReLU=max(z,0)

(1)

由于池化层与激活函数均不涉及模型参数,卷积神经网络的模型参数只与卷积层和全连接层的参数有关。

1.1 卷积层

卷积层的运算主要是对输入特征图做二维卷积运算,即将卷积核与被卷积信号的对应项进行相乘后求和,其运算如式(2):

(2)

其中,s、t分别为矩阵C的行数和列数,m、n分别为矩阵A的行数和列数。

卷积层的卷积运算本质上就是大量的乘累加运算。假设一个卷积层的输入特征图的数量为P,输出特征图的数量为D,卷积核的大小为m×n。则该卷积层运算需要的权重参数数量S满足:

S=P×D×(m×n)+D

(3)

由式(3)可知,卷积层权重参数数量S与输入输出特征图数量P和D以及卷积核大小m和n有关,因此可以通过减小卷积核的大小和减少输入输出特征图数量的方法来压缩模型参数。

1.2 全连接层

全连接层把所有神经节点连接关联,使之具有全局特性。全连接层层数加深以及神经元的个数增加可以提高模型的非线性表达能力,但会使模型的复杂度提升,也会导致模型的参数变多,需要更多训练集的同时也增加了训练时间,影响模型效率,另一方面模型的学习能力过好会出现过拟合问题。

假设全连接层的输入向量是(x1,x2,x3,…,xn),下一层的神经元节点是(y1,y2,y3,…,ym),则计算过程如式(4)所示。从式(4)可以看出全连接层运算是类似于卷积层的乘累加运算,权重参数矩阵W包含参数众多,现有研究主要集中在如何实现并行优化,但无法解决全连接层参数众多的问题。本文通过全局平均池化层代替全连接层的方法可以大幅降低模型参数数量。

(4)

2 模型参数压缩方法及架构

通过对卷积层和全连接层的权重参数进行分析后可知:卷积层参数量与输入输出特征图数量以及卷积核大小有关,而全连接层参数数量众多且难以大幅减少。因此本文通过分组卷积减少输入输出特征图数量,通过卷积拆分减小卷积核大小,通过全局平均池化层代替全连接层解决全连接层参数众多的问题。

2.1 卷积拆分

卷积拆分是将大卷积核拆分成小卷积核的一种模型压缩方法。当LeNet5的输入特征图尺寸为28×28时,为得到尺寸为24×24的输出特征图,可将一个5×5的卷积核拆分为2个3×3的卷积核,而一个5×5的卷积核的权重数目为25,2个3×3的卷积核的参数数目为18。因此通过卷积拆分的方法可以降低卷积核的参数数量。

2.2 分组卷积

分组卷积是对输入特征图分组后进行卷积运算。对于标准卷积运算,假设输入特征图的大小为H×W×c1,卷积核的大小为h1×w1×c1,输出特征图的大小为h×w×c2,则标准卷积层的参数量S满足:

S=(h1×w1×c1)×c2

(5)

对于分组卷积运算,假设输入特征图被分成g组,则每组输入特征图的大小为H×W×c1/g,对应的卷积核大小为h1×w1×c1/g,每组输出特征图的大小为h×w×c2/g。结果拼接以后,得到的输出特征图的大小为h×w×c2。则分组卷积层的参数量S满足:

(6)

比较式(5)和式(6)可以看出,标准卷积参数量为分组卷积参数量的g倍。采用分组卷积的方法可以起到压缩参数数量的作用。

图3所示为标准卷积与分组卷积结构图,其中图3(a)为标准卷积结构,图3(b)为分组卷积结构。

图3 标准卷积与分组卷积结构

2.3 全局平均池化算法(GAP)

全局平均池化算法是对最后一层特征图进行整张图的一个均值池化操作,每张特征图经过均值池化后形成一个特征点,所有特征点组成的特征向量被送入分类层中进行分类。图4为全连接层和全局平均池化层的结构示意图,通过采用全局平均池化层代替传统卷积神经网络架构中所有全连接层的方法可以大幅压缩模型的大小,减少参数数量,从而减少存储与计算的开销。

图4 全连接层和全局平均池化层结构图

2.4 压缩模型架构

本文将上述模型参数压缩方法应用于LeNet5和AlexNet模型,形成如图5和图6所示的模型架构。相比而言,压缩后的模型架构更简单且参数量大幅度减少。

图5 压缩后的LeNet5模型架构

图6 压缩后的AlexNet模型架构

为了解决模型收敛速度慢、训练时间长的问题,本文在模型训练过程中使用了BN算法。BN(Batch Normalization)是批规范化的简称[22],通过将输出信号规范化来加快网络的收敛速度,提高网络的稳定性。

BN算法的快速收敛性解决了梯度下降法需要人为调参而导致浪费大量时间的问题,通过选择适当的学习率,使得训练速度快速增长。

3 实验与结果分析

3.1 实验环境

本文实验平台采用联想笔记本电脑,运行环境为Win10 64位操作系统。采用MINST手写数字数据集以及CIFAR-10数据集作为模型的训练测试数据集。采用Pytroch深度学习算法网络框架进行训练。

3.2 LeNet5设计方案

3.2.1 LeNet5模型压缩方案

LeNet5网络模型参数量只与卷积层和全连接层有关。本文设计4种模型压缩方案并分别利用MNIST手写数字数据集和CICAR-10数据集进行对比实验。由于MNIST数据集训练样本和测试样本均为28×28,故在采用MNIST数据集进行实验时需要将输入层改为28×28。

方案1对LeNet5的第二层卷积层进行分组卷积,组数为2。方案2对LeNet5的第一层卷积层进行卷积拆分,用2个3×3的卷积层替代一个5×5的卷积层以减少卷积层的参数数量。方案3通过增加一个1×1的卷积层以及全局平均池化层来代替LeNet5的全连接层。方案4为方案1、方案2和方案3的组合。LeNet5及压缩模型的架构参数对比如表1所示,表中的Conv为卷积层的缩写,FC为全连接层的缩写,GAP为全局平均池化层的缩写,后缀数字表示层的序号。

表1 LeNet5及压缩模型的架构参数对比

第一层卷积层采用卷积拆分的方法压缩了卷积核的大小,减少了卷积层的参数量,但是参数减少的效果并不明显。第二层卷积层采用分组卷积的方法减少输入特征图的数量,虽然参数总量减少不多,但该卷积层的参数量压缩了2倍。因此分组卷积方法适于推广应用到具有多层卷积层的深度卷积神经网络中。而通过增加一个1×1的卷积层以及全局平均池化层来代替LeNet5的全连接层,则大幅度降低了卷积神经网络的参数数量。去除全连接层成为卷积神经网络发展的趋势。

方案4为方案1、方案2和方案3的组合。通过使用组合压缩方法对LeNet5模型进行最大压缩后,参数规模大幅降低。

3.2.2 LeNet5模型训练

在LeNet5采用MNIST数据集进行对比实验的训练中,均采用随机梯度下降算法(SGD),设置的学习速率为0.15,训练批尺寸设置为200,即每次从训练集中随机抽取200张图片用于神经网络一次迭代的参数更新,迭代次数设置为1000,需要更新1000次神经网络参数。另外训练完毕后,进行测试时设置测试组数为50,每组随机抽取1000张图片,计算50组测试结果准确度平均值,可较为客观地反映出模型在测试集上的效果。模型压缩前后的卷积网络进行训练过程如下。

对LeNet5模型训练迭代次数与准确率变化曲线如图7所示,测试准确度平均值达到了98.8%。

图7 LeNet5训练过程及测试结果

对压缩后的卷积神经网络模型进行训练,收敛速度分析如图8所示。当迭代次数达到400次时,训练的模型基本完成收敛,因此,在迭代次数为0~400的区间内对训练模型的收敛速度进行分析。从收敛速度分析图中可以清楚的看到,用全局平均池化层代替全连接层,模型收敛速度变慢,增加了模型训练的时间,但是该方法大幅压缩了参数量,在卷积神经网络推理过程,可以减少硬件存储资源以及计算资源的消耗。

图8 训练模型的收敛速度分析

利用MNIST数据集测试样本对压缩后的模型架构进行测试,方案1压缩模型测试准确度平均值达到了98.1%,方案2压缩模型测试准确度平均值达到了98.2%。方案3压缩模型测试准确度平均值达到了97.8%,方案4压缩模型测试准确度平均值达到了97.0%。

在LeNet5采用CIFAR-10数据集进行对比实验的训练中,均采用随机梯度下降算法,设置的学习速率为0.01,训练批尺寸设置为64,迭代次数设置为200,另外训练完毕后,进行测试时设置测试组数为200,每组随机抽取10000张图片,计算200组测试结果准确度平均值。

压缩模型为LeNet5采用方案4使用组合压缩方法进行最大压缩后的模型。LeNet5及压缩模型训练迭代次数与准确率变化曲线如图9所示,LeNet5测试准确度平均值达到了63.95%。而压缩模型的测试准确度平均值达到了59.29%。

从图9可以看到采用CIFAR-10数据集进行实验的LeNet5及其压缩模型的测试准确度平均值低于MNIST数据集,这是由于LeNet5对较为复杂的图片识别准确度不高。但是通过对比压缩前后的LeNet5模型训练测试结果可以看出,在大幅降低参数数量的情况下,准确度仅下降了4.66个百分点,表明压缩方法的有效性。

(a) LeNet5 损失函数变化曲线

3.3 AlexNet设计方案

3.3.1 AlexNet模型压缩方案

与LeNet5模型类似,AlexNet模型参数量只与卷积层和全连接层有关。本文设计模型压缩方案并利用CIFAR-10数据集进行对比实验。

由于AlexNet模型采用3×3的卷积核,因此不必采用卷积拆分的方法。方案5采用分组卷积以及全局平均池化层代替全连接层的方法,在AlexNet模型的基础上,对第2层到第5层共计4层卷积层进行分组卷积,组数为2。同时,采用全局平均池化层代替AlexNet的前2层全连接层。AlexNet及压缩模型的架构参数对比如表2所示,表中C为卷积层缩写,F为全连接层缩写,G为全局平均池化层缩写,后缀数字表示层的序号。

表2 AlexNet及压缩模型的架构参数对比

3.3.2 AlexNet模型训练

在AlexNet对比实验的训练中,均采用随机梯度下降算法,设置的学习速率为0.001,训练批尺寸设置为500,迭代次数设置为200。另外进行测试时设置测试组数为200,每组随机抽取10000张图片,计算200组测试结果准确度平均值。

AlexNet及压缩模型训练迭代次数与准确率变化曲线如图10所示,AlexNet测试准确度平均值达到了74.43%。而压缩模型的测试准确度平均值达到了81.15%,测试准确率平均值比ALexNet模型提高了6.72个百分点。

(a) AlexNet 损失函数变化曲线

3.4 结果分析

将LeNet5和AlexNet以及对应的压缩模型方案进行对比如表3所示,其中,LeNet5-M及方案1~方案4均为采用MNIST数据集的测试结果,方案1、方案2、方案3各为LeNet5采用一种模型参数压缩方法的测试结果,方案4为LeNet5采用3种模型参数压缩方法组合的测试结果。LeNet5-C及方案6均为采用CIFAR-10数据集的测试结果,方案6为LeNet5采用3种模型参数压缩方法组合的测试结果。方案5为AlexNet采用2种模型参数压缩方法组合的测试结果。

表3 压缩模型的参数压缩率及准确率对比

从表3可以看出,在对LeNet5模型进行最大程度压缩后训练模型的准确率下降不多,而且参数量大幅度减少,仅为压缩前模型参数量的2.3%。而对AlexNet进行压缩后,参数规模仅为压缩前的4.9%,识别准确率提高了6.72个百分点。

4 结束语

本文提出了卷积拆分、分组卷积以及全局平均池化层代替全连接层的模型压缩方法,并应用于LeNet5和AlexNet算法分别进行对比实验。实验结果表明,通过使用组合压缩方法对LeNet5模型进行最大压缩后,参数规模可减少97%,识别准确率降低了不到2个百分点,对AlexNet模型进行压缩后,参数规模可减少95%,识别准确率提高了6.72个百分点,在保证较高的识别准确率的前提下,大幅降低了参数规模。

猜你喜欢
池化层分组卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
卷积神经网络模型研究分析*
基于卷积神经网络的纸币分类与点钞
基于深度学习卷积神经网络的人体行为识别研究
从滤波器理解卷积
分组搭配
怎么分组
基于全卷积神经网络的SAR图像目标分类*
基于傅里叶域卷积表示的目标跟踪算法
分组