Eric-mingjie / network-slimming

Network Slimming (Pytorch) (ICCV 2017)
MIT License
907 stars 214 forks source link

关于稀疏化训练的一个小问题 #31

Open xuemo188 opened 4 years ago

xuemo188 commented 4 years ago

论文采用的是对BN中缩放因子进行L1稀疏化,我看了代码发现好像和其他的过程的L1稀疏化不一样,torch中设置weight_decay默认是所有参数L2正则化训练 image 请问这个是怎么体现L1正则化的

Eric-mingjie commented 4 years ago

L1 loss 的gradient相当于取sign function

xuemo188 commented 4 years ago

谢谢您在百忙之中对我问题的回答 我还有一点不清楚 在损失函数里面好像没有体现出来啊 image image

xuemo188 commented 4 years ago

在训练的过程中,loss好像没有出现L1正则化的项

Eric-mingjie commented 4 years ago

https://github.com/Eric-mingjie/network-slimming/blob/master/main.py#L142

xuemo188 commented 4 years ago

非常感谢您对我问题的回答,非常友好的博主 我还想请教您以下,对BN层L1正则化的过程,只是对反向调整参数 image 不需要改动loss是这样的吗 image

xuemo188 commented 4 years ago

image 我理解的L1正则化是这样

Eric-mingjie commented 4 years ago

仔细思考会发现两者其实是等价的:

  1. 在loss里面写用autograd 对scaling factor做l1
  2. 和在training的时候单独update scaling factor
xuemo188 commented 4 years ago

您好,我想问一个问题,为什么BN层中的缩放因子越大,该通道参数越重要呢?论文里面好像没有体现

Eric-mingjie commented 4 years ago

可以理解成: BN层的缩放因子越大,代表这个channel 对模型output的贡献越大,因此,prune那些BN缩放因子小的channel 对output的影响相对来说要小些。事实上在实验中,大多数prune掉的channel的BN的系数接近于0,这些channel可以认为对output有可忽略的影响。

xuemo188 commented 4 years ago

大佬我想问下 BN层的缩放因子越大,代表这个channel 对模型output的贡献越大这句话是为什么呢?在直观上是理解,有证明吗

Eric-mingjie commented 4 years ago

没有证明。只是直观上来说的,这和pruning中最经典的文章 (https://papers.nips.cc/paper/5784-learning-both-weights-and-connections-for-efficient-neural-network.pdf) 思想是一致的,那篇文章中同样没有证明,但也是把weight的大小作为一个重要程度的指标。

如果你想强行加入理论的话,你可以去看一些有theory的channel pruning paper,slimming相对来说是一个比较empirical的文章。