Compressing Convolutional Neural Networks in the Frequency Domain 论文笔记

摘要

卷积神经网络(CNN)越来越多地用于计算机视觉的许多领域。它们特别有吸引力,因为它们能够通过数百万个参数“吸收”大量标记数据。然而,随着模型尺寸的增加,分类器的存储和存储器需求也在增加,这阻碍了许多应用,例如移动电话和其他设备上的图像和语音识别。在本文中,我们提出了一种新颖的网络架构,频率敏感散列网(FreshNets),它利用了卷积层和深度学习模型的完全连接层的固有冗余,从而大大节省了内存和存储消耗。基于关键观察,学习的卷积滤波器的权重通常是平滑和低频的,我们首先使用离散余弦变换(DCT)将滤波器权重转换到频域,并使用低成本散列函数随机分组频率参数进入哈希桶。分配给相同散列桶的所有参数共享使用标准反向传播学习的单个值。为了进一步减小模型大小,我们将更少的散列桶分配给高频组件,这些组件通常不太重要。我们对八个数据集评估FreshNets,并表明它比几个相关基线带来更好的压缩性能。

背景介绍

  • 特征哈希

  特征散列(a.k.a散列技巧)之前已被研究作为减少模型存储大小的技术。 通常,它可以被视为降维方法。

  如[60]所示,特征散列的一个关键属性是它保留内积操作,其中在散列之后的内积产生正确的预先散列内积:公式见论文

  由于偏差校正符号因子ξ(i),该属性成立。 通过特征散列,可以在更小的空间Rk中直接学习模型,这不仅可以加速训练和评估,还可以显着节省内存。 例如,原始空间中的线性分类器可以占用模型参数的O(d)存储器,但是当在散列空间中学习时仅需要O(k)参数。 对于稀疏特征向量,由哈希冲突引起的信息丢失严重得多,并且可以通过多个散列[49]或更大的散列表[60]来抵消。

  • 离散余弦变换

  建立在DCT上的方法[1,42]被广泛用于压缩图像和电影,包括形成JPEG的标准技术[41,59]。 DCT表示作为不同相位/频率的正弦曲线的加权组合的函数,其中每个正弦曲线的权重反映输入中相应频率的幅度。 当以足够的数值精度使用并且没有量化或其他压缩操作时,DCT和逆DCT(将频率输入投射回空间域)是无损的。

  通过像素(例如蓝天)的局部平滑度在图像中使压缩成为可能,其可以通过较少的非零频率分量在区域上很好地表示。 虽然DCT与离散傅里叶变换(DFT)高度相关,但由于其频谱压缩特性,DCT通常更适用于压缩任务,其中大多数图像的权重往往集中在DCT的一些低频分量中[42]。 此外,DCT变换产生实值表示,不同于其表示具有虚部的DFT。 给定输入矩阵V,DCT后频域中对应的矩阵定义为:公式见论文

FreshNets

  这里我们介绍FreshNets,一种使用权重共享的方法减少卷积神经网络的模型大小(和内存需求)。 类似于陈等人的工作。我们通过随机强制整个网络中的权重共享相同的值来实现更小的模型。 与以前的工作不同,我们在频域中实现卷积滤波器的权重共享和梯度更新。 这些共享约束是在训练之前进行的,我们在共享任务下学习频率权重。 由于分配是使用散列函数进行的,因此不会产生额外的存储空间。

  我们首先在DCT之后导出等效滤波器表示,并描述在使用散列技巧实现的频率空间中的有效随机权重共享方案。 接下来,我们将展示如何使用标准反向传播来学习频域中的参数。 最后,我们描述了一种通过为低频分量分配更多共享权重来利用滤波器平滑度的方案。

  • 时域和频域的滤波器

  令矩阵V表示将第k个输入平面连接到第i个输出平面的dXd卷积滤波器的权重矩阵。 (为了符号方便,我们假设方形滤波器并且只考虑网络单层中的滤波器。)卷积层中所有滤波器的权重可以用4维张量表示,其中m和n是输入平面和输出平面的数量,分别导致总共mXnXd^2个参数。 卷积滤波器可以在空间或频域中等效地表示,通过DCT及其逆在其两者之间进行映射。 我们将频域中的滤波器表示为(公式见论文)

  • Hashing随机权重共享

  在经由DCT的无损转换之后,频域中的滤波器保持与空间域中的等效滤波器相同的大小。 我们建议使用权重共享来减少频域中的参数数量。 对于频率表示中的滤波器,我们希望将模型参数的数量精确地减少到存储在权重向量w中的K个值,其中K«mXnXd^2。 为了实现这一点,我们随机地将值从w分配给V中的每个滤波器频率权重。这种随机权重共享的实现将为V引入辅助矩阵以跟踪权重分配,使用显着的额外存储器。 为了解决这个问题,陈等人。 [6]提倡使用散列技巧(伪)随机分配共享参数。 使用散列技巧,我们将每个过滤器权重V绑定到由散列函数h()的输出索引的w元素:公式见论文

  随着Eq(5)中的映射。 我们可以实现共享参数分配而无需额外的存储成本。 有关示意图,请参见图1.该图还包含本节后面讨论的频率敏感散列方案。 注意,卷积层中的所有滤波器共享w中的相同K个权重。 这样,我们将包含mnd^2个参数的整个V压缩成K维权向量w。 换句话说,添加更多卷积滤波器不会改变模型大小,因为所有滤波器值都是从现有滤波器中“回收”的。 我们可以通过调整K来任意控制每层中有效参数的数量。

  • 共享频率权重的梯度

  典型的卷积神经网络学习空间域中的滤波器。 由于我们的共享权重存储在频域中,因此我们根据频率空间中的滤波器参数推导出梯度。 以下等式 (2),我们表示空间域中参数的梯度与频域中的对应的梯度:(公式见论文)

  与Eq(1)相比 ,我们看到频域中的梯度仅仅是空间域中梯度的DCT(论文见公式)

  简而言之,在频域中学习滤波器参数V有一个简单的过程。 在前馈阶段,我们用逆DCT变换V重建空间域权重。 在反向传播期间,在计算空间域中的传统梯度之后,我们使用DCT来计算频域中的梯度。 使用现成的DCT软件可以有效地实现这些步骤。

  注意,V是虚拟参数,我们仍然需要计算实权重向量上的梯度。 我们通过简单地对分配权重的每个滤波器参数的梯度求和来计算梯度

  • 频率敏感哈希

  图2显示了空间(左)和频率(右)域中的滤波器。 在空间域中,由于自然图像中的局部像素平滑性,CNN滤波器是平滑的[30]。 在频域中,这对应于在低频中具有大幅度的分量,如图2中的V的左上半部分所示,具有小的坐标(j1; j2)。 相应地,具有大的坐标(j1; j2)的V的右下半部分中的高频具有接近零的幅度。

  如前所述,空间域V中的滤波器通常是“平滑的”,并且在频域中,大多数权重强度在低频区域中。 低频区域对应于具有小索引(j1; j2)的条目,并且低频条目通常具有比较高频率值(具有较大索引(j1; j2)的条目)大得多的规范后的值。

  由于不同频率区域的分量往往具有不同的幅度(从而对滤波器的空间结构的重要性不同),我们希望避免高频和低频分量之间的冲突。 因此,我们将不同的哈希空间分配给不同的频率区域。 如图3所示,每个频率区域拥有一个单独的散列空间。 特别地,我们将w的K个值分成子矢量(公式见论文)

  该分区允许具有相同频率的参数(对应于它们的索引和j = j1 + j2)被散列到相应的专用散列空间wj中,如图4所示。我们重写Eq(5),使用新的频率敏感共享权重分配:(公式见论文)

  对于频率敏感的散列,相对于实际权重的梯度与等式(10)中的梯度相同,除了散列函数h被替换为新的散列函数g,公式见论文

  其中j = j1 + j2是频率区域的索引,并且Aj 是第一个j散列空间的大小的累积和。 新的散列函数允许每个散列空间彼此独立。 虽然似乎有2d-1个散列函数,但所有hj都可以通过单个散列函数实现,它接受5个输入参数,最后一个参数为j,公式见论文

  我们为每个频率区域j定义压缩率rj并且分配Kj = rjNj,其中Nj是第j个频率区域中的虚拟参数的数量。较小的rj在散列期间引起更多的冲突,导致增加的权重分配 由于较低频率分量往往具有较高的重要性,使得碰撞更加有害,我们通常会将较大的rj(较少的碰撞)分配给低频区域。直观地,给定整个卷积层的大小预算,我们想要挤压哈希高频区域的空间,以节省低频区域的空间。这些压缩率可以手动分配或通过交叉验证以编程方式确定,如第6节所示。

 概述

简而言之,我们总结了FreshNets的训练流程

初始化阶段:

给定滤波器大小d和参数K的总预算,确定每个频率区域Kj的预算

随机初始化权重向量w,其由2d-1个子向量wj组成

前馈阶段:

根据方程(11)构造V。

使用逆DCT将V转换为其空间域v
使用v对输入执行卷积,并生成输出。

反向传播阶段:

计算梯度w.r.t. 在空间域中对卷积滤波器v使用正常反向传播

根据(8)对上步使用DCT

根据方程(12)对实际权重向量w使用任何梯度下降方法更新,例如具有动量的SGD [53],Adagrad [16]和RMSprop [56]。

通过修改反向传播的计算过程,可以在现有CNN包中实现所有上述训练操作。

猜你喜欢

转载自www.cnblogs.com/dushuxiang/p/10134142.html