数据科学机器学习与数据挖掘

漫谈Deep Compression(二)剪枝

2017-04-01  本文已影响1038人  Efackw13

Index

Architecture

Pruning

Pruning部分主要分为以上三个步骤:

Train Connectivity

1. Regularization and Dropout

正则化和Dropout的目的都是防止过拟合. 防止过拟合最直接的方式是扩大数据集和缩小网络结构. 但扩大数据集并不容易. 缩小网络结构可以有效减少参数, 看似是一个不错的方法, 但是通常来说我们认为网络越深, 其提取特征高维特征能力越强. 缩小网络结构意味着其能力下降, 这是我们不希望看到的. 因此有人提出了Regularization和Dropout, 来解决过拟合问题.

L2正则化是最常用的正则化方法. 它的表示为:


L2 Regularization

其中C为正则化后的cost function, C_0为原始cost function.
Lambda 是正则化因子, 为正.

所以常用的交叉熵cost function可以表示为:


Cross entropy cost funciton with L2 regularization

从上述L2正则化公式可以看出, 正则化是通过在cost function中加一项权值惩罚因子, 来使得cost增大, 从而减小权值. 而正则化因子的大小则可以调节正则化: Lambda大, 则更倾向于减小权值; Lambda小, 则更倾向于减小原始cost function.
理解了正则化之后, 为什么正则化对Deep Compression很有影响就很容易理解了. 在剪枝过程的第一次训练中, 我们希望学习到什么连接更重要, 什么连接不重要. 而正则化程度会影响权值大小, 从而影响我们剪什么枝.

Dropout ref 与正则化不同: 正则化通过修改cost function减小权值从而解决过拟合, dropout则通过改变网络结构. Dropout是在训练时以一定的概率删减神经元间的连接, 即随机将一定的权值置零. 这与deep compression的pruning稍有不同, dropout并不直接设置阈值, 而是设定一个概率随机修建, 增加网络稀疏性, 加快收敛
由于re-train环节我们已经学习到了什么连接更重要, 如果在dropout环节我们用和第一次训练同样的keep probability, 很多重要的连接可能会被删掉. 因此我们需要在一定程度上降低dropout ratio.
dropout 的计算如下:



其中C_i代表第i层连接数, N_i为第i层神经元数目. C_io代表原本的连接数, C_ir代表再训练时的连接数, D_o代表原本的dropout.

2. Prune Connections

在剪枝时, 不同的正则化方法以及不同类型的layers, 对剪枝的敏感性是不同的, 因此它们剪枝的阈值对准确度的影响也不同.


Regularization sensitivity

上图中, 可以看出L1正则化的准确度损失在剪枝后是比L2正则化小, 而在再训练后, L2正则化表现得更好. 用L1正则化作第一次训练, L2作再训练的整体表现也没有L2正则化好.

Layer Type Sensitivity

上图中, 卷积层的敏感度明显高于全连接层;而卷积的第一层conv1又是最敏感的. 这是由于第一层一般情况下只有三个通道(RGB图), 在参数较少的情况下, 第一层相对不如其余卷积层冗杂.

根据以上敏感性分析, 我们可以得出以下的深度压缩剪枝技巧:

  1. 使用L2正则化,
  2. 可以实行局部剪枝, 而非全局剪枝. 即保持卷积层, 只对全连接层剪枝.

2. CSR or CSC

CSR(Compressed Sparse Row)和CSC(Compressed Sparse Column)是存储稀疏矩阵的格式. CSR通过: values, column indices, row offsets 来存储稀疏矩阵. CSC与CSR原理一致.
通过CSR或CSC存储, 能将一个m * n的稀疏矩阵存储数量减少至: 2a+m+1(CSR)或2a+n+1(CSC), 其中a为非零数值.

关于CSR及CSC可参照scipy:
scipy.sparse.csr_matrix

上一篇下一篇

猜你喜欢

热点阅读