目的:本文是对韩松博士ICLR 2017论文 DSD:Dense-sparse-dense training for deep neural networks的详细解析。
论文地址:https://arxiv.org/pdf/1607.04381.pdf
代码地址:https://songhan.github.io/DSD.
目录
一、摘要
贡献点:
1.1 全新模型
1.2 提升模型准确率
1.3. 易于实施
二、方法
2.1 区别
与dropout的区别
与模型压缩的区别
2.2 算法流程
2.3 相应权重的变化
2.4 具体流程及解释
Initial Dense Training
Sparse Training
Final Dense Training
三、实验
四、讨论与原理
跳过了鞍点(Saddle Point)
更好的局部极小值(Better Minima)
正则化与稀疏训练
鲁棒的再次初始化
打破了对称性(Symmetry)
提出了一个全新的DSD的训练流程,来使网络得到更好的训练。先Dense训练,获得一个网络权重;然后spars将网络剪枝,然后继续dense训练。从而获得更好的性能。
实验显示DSD在CNN,RNN,LSTM等图像分类、图像识别,语音识别等模型上都取得了很好的效果。
DSD易于实施,只在S阶段引入一个超参数,其他阶段也更易实现。
虽然都是在训练过程中有prune(剪枝)操作,但是DSD是有一定依据来选择去掉哪些connection,而dropout是随机去掉
DSD的目的是提升准确率,不能带来模型的精简。
D:将网络正常训练,获得相应的权重
S:将网络剪枝,将小于某值的权重去掉,然后继续训练。
D:将剪枝的权重恢复为0,重新训练网络。
(a)上图为权重的直方图。我们看到第一次Dense训练之后,权重分布都有,且在各处分布
(b)将绝对值小于某值的权重删除掉,我们看到某绝对值一下的权重都没有了
(c)进行sparse训练,我们看到边缘变得平滑。
(d)恢复剪枝的权重,全部置为0。则0值有一个高峰。
(e)再次进行训练,权重各处都有分布。
即普通神经网络的训练方法,但此步的目的是1.学出权重的值 2.学出哪些权重更重要(绝对值越大则权重越重要)。
按比例将小于某绝对值权重值的值置为0。
进行剪枝的数学推导:
假定我们有一个loss,loss受到权重值的影响,是权重值的函数。
权重值变化会带来Loss值的变化:
所以权重值越小,则置为0带来的权重的变化越小,Loss值的变化也越小。
恢复被剪枝的权重置为0,重新训练。
各个数据集上均带来了性能的提升。DSD取得了最好的效果(字体颜色加深)。
分别在VGG,ResNet,NeuralTalk数据集上,均取得了很好的效果。
DSD带来了准确率的提升,作者进行了下面这些讨论:
鞍点:鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。
鞍点梯度接近于0,模型接近于收敛。但是剪枝的过程跳过了这些点。
低权重置为0就获得了更好的局部极小值。(对此作者没有具体解释)
稀疏的正则化将模型拉到了更低的维度,因此可以对于噪声更加鲁棒。
普通的模型只初始化一次,但是DSD进行了两次(或更多)的权值初始化。这里作者给出了一个猜想,作者采用的是0值初始化的方法,其他的初始化方法值得尝试。
剪枝能破坏权值的对称性,所以获得更好的训练。(此处不明意义,作者未给出详尽解释,我对于symmetry的理解不够好。贴出原文)
Break Symmetry: The permutation symmetry of the hidden units makes the weights symmetrical,thus prone to co-adaptation in training. In DSD, pruning the weights breaks the symmetry of the hidden units associated with the weights, and the weights are asymmetrical in the final dense phase.