Open ZhangAdjy opened 4 years ago
因为每次更新是要执行weight -= weight.grad的,这个操作相当于若weight为正,每次更新多减一点,若为负,每次更新时少减一点,于是weight就有向0的趋势
我做了一些实验证明,加了加了L1范式后,如@ZongshenXie所说可以使γ更趋近于0(也就是数值较小的γ更多了),但是并不可以使γ值变为0。
我做了一些实验证明,加了加了L1范式后,如@ZongshenXie所说可以使γ更趋近于0(也就是数值较小的γ更多了),但是并不可以使γ值变为0。
代码里面实际上并不是L1,而是一个与γ正负相同的固定值,应该算是L0。另外,剪枝并不需要使γ严格等于0,而是让部分γ足够小,也就是让这部分channel对网络的影响变小,从而剪枝的时候把它们去掉后网络依然能够正常运行
我做了一些实验证明,加了加了L1范式后,如@ZongshenXie所说可以使γ更趋近于0(也就是数值较小的γ更多了),但是并不可以使γ值变为0。
代码里面实际上并不是L1,而是一个与γ正负相同的固定值,应该算是L0。另外,剪枝并不需要使γ严格等于0,而是让部分γ足够小,也就是让这部分channel对网络的影响变小,从而剪枝的时候把它们去掉后网络依然能够正常运行
L0的说法还是不太严谨的,这里援引netslim原作者的回答https://github.com/Eric-mingjie/network-slimming/issues/31
bnmodule.weight.grad.data.add(s * torch.sign(bn_module.weight.data)) # L1 不理解将L1范式加到grad上后怎样来使得gama值变成0,以便于后续裁剪?麻烦知道的朋友告知一下,谢谢了