squeezenet 2016.11.4
squeezenet的目的是用更少的网络构建模型,同时保持模型的准确率。
出发的三个原则是:1、用1*1卷积代替3*3卷积
2、减少与3*3卷积相连的通道数
3、在网络后期使用采样。保证特征图的大小。
其中1、2的目的是减少参数,同时尝试保护准确率。3是在有限的参数下最大化准确率。
论文中提出fire module:
体现了策略1和2
网络模型:
最左侧是本文提出的model,几个fire module 之后再用pool,体现策略3.
中间添加了skip connection,右侧为了解决输出数不同,不能相加的问题,使用了1*1卷积,改变层的通道数,实现相邻层的相加。
实验结果:
不使用deep compression 时,与Alex网络相比参数可以减小50倍,且准确率没有降低
采用deep compression之后,模型压缩得更新,且保持了准确率。
论文后面部分对网络中各个参数的选择对结果的影响进行了实验:
fire module里面,squeeze输出的个数是expand输出个数的0.75时,准确率最高。
expand中的1*1和3*3个数相同时,准确率最高。
同时bypass(即skip connection)能够缓解压缩层造成的表达瓶颈。对准确率有所提高,并且实验结果显示简单的bypass(即中间形式)提高的准确率更高。
论文中提到了DSD网络(DSD: Dense-Sparse-Dense Training for Deep Neural Networks):
本文提出一种新的训练方式,可以提升现有模型的准确率,其做法是:先训练dense网络,然后进行sparse训练,即剪枝掉绝对值小于阈值的w,训练到收敛。然后在将剪掉的w初始为0,学习率减小十分之一,继续进行整个网络的dense训练。这样做的好处是,剪枝的做法相似于模拟退火,能够扰乱原学习,可以跳出鞍点这种次优解。同时打破了权重的一种对称性(Crelu就说明了权重的对称性),整体来说提高准确率主要来自于稀疏操作,而后面的 dense训练起到了防止过分稀疏,补充学习了一下。
哪里理解不对欢迎指正~