剪枝的目标就是只保留重要的权重。
全连接层剪枝
首先,对于如全连接和局部连接这些没有权值共享的层,我们可以很简单的计算神经元之间的相关性:
假设 ai
是当前层的一个神经元, 上一层有 K 个神经元,则此时 ai 与上一层之间应该有 K 个连接,即 K 个权重参数: bi1,bi2…biK 。 于是我们可以用下式计算 ai 与每一个 bik
的相关系数 :
其中 μ和 σ分别是在验证集上计算得到的均值与方差正相关和负相关同样重要,而且实验发现保留一些相关性较小的权重也会提高实验效果。
于是,作者首先将所有正相关的 rik
降序排列,然后均分为两部分,在前一部分随机采样 λSK+ 个,在后面一部分随机采样 (1−λ)SK+ 个, 其中 S 为事先确定的稀疏度, λ
文中设定为0.75 。对负相关采取同样操作。据此,我们可以创建出表示剪枝的掩膜矩阵。
卷积层剪枝
卷积层剪枝稍微复杂一点,因为存在权值共享。
设 aim是当前层第 i 个feature map中的第 m 神经元,该feature map中的共有 M 个神经元。显然,根据卷积规则,这 M 个神经元都只与一个卷积核有关,即 K 个权值有关 ( K 为filter size)。于是, ( bmk 应该是上一层 feature map 中卷积的部分,该部分的位置与 m 有关,且包含 ( K个元素。
最后,相关系数通过平均的方式计算: