斯坦福ICLR 2018录用论文:高效稀疏Winograd卷积神经网络
雷锋网 (公众号:雷锋网) AI 科技评论按:ICLR 2018 于 5 月初在加拿大温哥华举办。论文「Efficient Sparse-Winograd Convolutional Neural Networks」被 ICLR 2018 录用,第一作者、斯坦福大学的博士生刘星昱为雷锋网AI 科技评论撰写了独家解读稿件,未经许可不得转载。
引言
卷积神经网络在许多机器学习应用中体现出巨大优势。其计算性能和功耗主要由卷积过程中乘法操作的数量决定。但卷积神经网络的巨大计算量限制了其在移动设备上的应用。
目前有两种主流方法用于减少卷积神经网络中的乘法数量:
-
1)利用卷积的线性代数性质,例如 Winograd 卷积算法可以通过神经元和卷积核的线性变换减少乘法数量;
-
2)神经网络压缩,例如利用权重经过剪枝后的稀疏性和神经元由于 ReLU 产生的稀疏性。
然而,上述两个方向无法兼容:对神经元和卷积核的线性变换会使得它们原本的稀疏性不复存在,因此无法利用其稀疏性进行加速。在稀疏卷积神经网络上使用 Winograd 卷积算法会反而使计算量增大。
针对上述问题,本文提出两点改进。
-
首先,我们将 ReLU 激活函数移至 Winograd 域,使得在乘法操作时神经元是稀疏的;
-
其次,我们对 Winograd 变换之后的权重进行剪枝,使得在乘法操作时权重是稀疏的。
实验结果表明,在精度损失 0.1% 之内时,我们提出的新方法在 CIFAR-10,CIFAR-100 和 ImageNet 数据集上能将乘法数量分别减少 10.4 倍,6.8 倍和 10.8 倍,乘法减少率相较于原有基准提升 2.0-3.0 倍。
稀疏 Winograd 卷积
传统 Winograd 卷积算法的基本单元作用在输入时域特征图 d 的大小为 p x p 的小块上,经过 3 x 3 的时域卷积核 g 卷积得到 (p-2) x (p-2) 的输出块 S。所有的输出块拼在一起得到输出特征图。
具体操作: d 和 g 分别用矩阵 B 和 G 进行变换得到 Winograd 域的 p x p 大小的 B^TdB 和 GgG^T,两者进行 Hadamard 乘法后用矩阵 A 进行变换得到 S。当 p 等于 4 时,矩阵 B 和 A 只含有 0,1 和-1 元素,因此与 B 和 A 的乘法只需要加减法。计算过程如下公式所示:
时域剪枝网络: 当使用普通剪枝的网络 (Han et al. 2015) 时,前一层的 ReLU 激活函数作用在时域输入 d 上,同时时域权重 g 被剪枝。输出块 S 由以下公式计算得到:
当 p=4 时的计算如下图所示。尽管 d 和 g 分别由于 ReLU 和剪枝都是稀疏的,然而 G(•)G^T 和 B^T(•)B 变换会抹掉时域的 0。因此,稀疏性无法减少乘法数量。
Winograd 本地剪枝网络: 当使用 Winograd 本地剪枝网络 (Liu et al. 2017, Li et al. 2017) 时,前一层的 ReLU 激活函数作用在时域输入 d 上,同时 Winograd 域权重 GgG^T 被剪枝。输出块 S 由以下公式计算得到
当 p=4 时的计算如下图所示。尽管由于剪枝,Winograd 域的权重 GgG^T 是稀疏的,然而 B^T(•)B 变换会抹掉时域 d 中包含的 0。因此,时域 d 由于 ReLU 造成的稀疏性仍然无法带来乘法数量减少。
Winograd-ReLU 卷积神经网络: 为了解决上述问题,我们提出了 Winograd-ReLU 卷积神经网络。我们将 ReLU 操作放在 Winograd 域而不是时域。如此,在进行乘法操作时,Winograd 域的权重 GgG^T 和输入 B^TdB 都是稀疏的,乘法数量得以进一步减少。输出块 S 由以下公式计算得到
当 p=4 时的计算如下图所示。
值得注意的是,我们完全摈弃了时域的卷积核。因为 ReLU 是和前一层的卷积层绑定的,Winograd 域的 ReLU 操作实际上是从第二层开始的。需要指出,新提出的卷积神经网络架构和普通的卷积神经网络在数学上不等价。因此,网络的训练、剪枝和重训练都需要进行如下改变。
训练: 我们直接在 Winograd 域训练变换后的卷积核。卷积核随机初始化后直接由反向传播计算梯度进行优化。
剪枝: 我们对 Winograd 域卷积核进行剪枝:所有绝对值小于阈值 t 的元素置为 0。阈值 t 是通过达到某一要求的剪枝率 r 计算得到的。在我们进行的实验中,所有层的剪枝率是相同的。
重训练: 我们利用前一步得到的剪枝掩码来进行重训练。在重训练过程中,被剪枝的权重通过掩码强制设置为 0。网络损失函数对输入神经元和 Winograd 域权重的梯度可通过链式法则由上游传递来的梯度计算得到:
实验和结果
我们将上述方法应用在不同数据集上的不同网络架构上。我们选择实验的网络架构中大多数卷积核的大小为 3x3,这可以保证大多数卷积层都可以转化为 Winograd 卷积层。我们分别使用图像分类数据集 CIFAR-10、CIFAR-100 和 ImageNet 进行实验。对每个网络架构我们比较前述三类网络。三类网络都是从头开始训练并进行迭代的剪枝-重训练过程。
CIFAR-10:
我们使用 VGG-nagadomi 网络进行实验。VGG-nagadomi 可以视作轻量级的 VGGNet,其中有 8 层 3x3 卷积层。我们将第一层的权重密度设为 80%,其余层迭代地从 80% 剪枝为 20%。
由上图可以看到,当准确率损失小于 0.1% 时,时域剪枝网络、Winograd 本地剪枝网络仅可以被剪枝到 60% 密度,而我们提出的 Winograd-ReLU 网络可以被剪枝到 40% 密度。
上表比较了各个剪枝后网络的计算量以及权重和输入神经元的密度。时域剪枝网络、Winograd 本地剪枝网络仅可以将计算量分别减少 5.1 和 3.7 倍。而我们提出的 Winograd-ReLU 网络可以减少计算量 13.3 倍,相较于两个基准网络分别提升 2.6 和 3.6 倍。
CIFAR-100:
我们使用 ConvPool-CNN-C 网络进行实验。ConvPool-CNN-C 有 9 个卷积层,其中有 7 个 3x3 卷积层。我们将第一层的权重密度设为 80%,其余层迭代地从 80% 剪枝为 20%。
由上图可以看到,当准确率损失小于 0.1% 时,Winograd 本地剪枝网络可以被剪枝到 70% 密度,而时域剪枝网络和我们提出的 Winograd-ReLU 网络可以被剪枝到 60% 密度。
上表比较了各个剪枝后网络的计算量以及权重和输入神经元的密度。时域剪枝网络、Winograd 本地剪枝网络仅可以将计算量分别减少 3.5 和 3.2 倍。而我们提出的 Winograd-ReLU 网络可以减少计算量 7.1 倍,相较于两个基准网络分别提升 2.1 和 2.2 倍。
ImageNet:
我们使用 ResNet-18 网络的一个变体进行实验。该变体与原 ResNet-18 的差别在于,我们用 1x1 步长 3x3 卷积以及 2x2 池化层来替代 2x2 步长 3x3 卷积。同时我们也去掉了最后一个池化层,使得最后一组卷积层的大小为 14x14。我们将卷积层的权重密度迭代地从 80% 剪枝为 10%。
由上图可以看到,当准确率损失小于 0.1% 时,时域剪枝网络、Winograd 本地剪枝网络仅可以被分别剪枝到 60% 和 50% 密度,而我们提出的 Winograd-ReLU 网络可以被剪枝到 30%/35% 密度。
上表比较了各个剪枝后网络的计算量以及权重和输入神经元的密度。时域剪枝网络、Winograd 本地剪枝网络仅可以将计算量分别减少 5.1 和 4.5 倍。而我们提出的 Winograd-ReLU 网络可以减少计算量 13.2 倍,相较于两个基准网络分别提升 2.6 和 2.9 倍。
讨论
我们对提出的 Winograd-ReLU 网络的卷积核进行可视化。我们挑选了 res2a_2a 层的前 6 个输入和输出通道。可以看到,Winograd-ReLU 网络的卷积核并未显示出明显的物理意义。然而,我们发现 (2,2) 元素(从左至右从上至下,初始指标为 1)通常较其它元素更显著。一个可能的原因在于,(2,2) 元素在 Winograd 域输入神经元中是特别的:它是 B^TdB 中唯一一个只由加法而无减法进行线性变换的神经元。在光滑的输入特征图中,这意味着 (2,2) 元素是唯一拥有非零均值的元素。
。