关于 LRA 和 Force Regularization 的探索
Aug 7, 2018
这部分是将《Coordinating Filters for Faster Deep Neural Networks》中提到的 Force Regularization 和 LRA 用于实际项目的效果,虽然现在看来不是很严谨,不过算是一次很好的尝试。
设定
为了探索 Low-Rank Approximations ( LRA ) 和 Force Regularization ( 参考 Wen. “Coordinating Filters for Faster Deep Neural Networks” ICCV 2017 ) 在我的工程上的实际效果, 进行了一些实际测试. 由于时间限制, 主要进行了两次探索, 分别为:
- LRA
- 单次大降秩(rank ratio 0.48)
- 在大降秩的基础上小降秩(rank ratio 0.8)
- LRA + Force Regularization
- 多次迭代 LRA (每次 rank ratio 0.9), FR (0.003 Degradation)
此外还有在 MNIST 上对 LeNet 的对照测试, 结果与文中叙述结论基本一致, Force Regularization 后 LRA 带来的压缩率有进一步的提高, 但主要在全连接层体现 (实验时卷积层个数完全没变), 尚未使用其他网络进行测试, 也没有观察出 Force Regularization 后卷积核的变化, 可能需要进一步实验 (调整 Force Regularization 参数, 用更好的可视化方法 t-SNE 等)
结果
- 原模型结果
测试 | 分数 |
---|---|
原准确率 | 0.8993 |
原召回率 | 0.9017 |
F1-Score | 0.8919 |
- LRA
单次 0.48 大降秩后 finetune 17300 iters, 接着 0.8 小降秩 finetune 40000 iters:
测试 | 0.48分数 | 0.48+0.8分数 |
---|---|---|
准确率 | 0.8947 | 0.9181 |
召回率 | 0.8868 | 0.8157 |
F1-Score | 0.8813 | 0.8489 |
- LRA + Force Regularization
此版本由于原工程正在改进, 所以使用了新的方法 (修改了网络输出层的卷积个数以及输入的通道数, 准确率略微提高, 召回率变化不大)
在新方法训练的模型下进行 0.003 Degradation 的 Force Regularization, 400 iters ( 50 iters/epoch ) 后 0.9 rank ratio 降秩, finetune 1000 iters后 继续 0.9 rank ratio 降秩, finetune 1300 iters 后得到收敛结果
测试 | 源模型 FR | 第一次降秩 | 第二次降秩 |
---|---|---|---|
准确率 | 0.9252 | 0.9207 | 0.9228 |
召回率 | 0.7729 | 0.8520 | 0.8443 |
F1-Score | 0.8298 | 0.8731 | 0.8698 |
分析
- 从 LRA 可以看出, 单次大降秩也能恢复到接近源模型的效果(召回率下降大约2%), 模型大小压缩明显(12.7M => 4.8M), 但是再度降秩模型效果开始较大幅度下降(召回率再度下降7%), 且模型大小变化不大(4.8M => 3.7M)
- FR 后模型的召回率迅速降低, 但理论上在此基础上再进行多次降秩并最终 finetune 应该是能恢复效果的, 问题 loss 已经几乎收敛, 无法看出有明显下降, 召回率仍然有较大损失, 所以怀疑可能需要降低训练 force regularization, 和 learning rate, 或者有可能是 FR 未足够 finetune 的问题??
后续
进行了FR再测试, 对原模型进行了更久的 finetune, 得到
测试 | 分数 |
---|---|
准确率 | 0.9194 |
召回率 | 0.9018 |
F1-Score | 0.9030 |
对于速度, 进行了几个小实验, 似乎该方法在小网络上会由于增加卷积层所以减慢前向速度, 而且比起低秩增速, 卷积层的增加带来的负面影响似乎更大. 至少以本项目来说是有些许降速的.