深度学习训练中是否有必要使用L1获得稀疏解

内容来自知乎深度学习训练中是否有必要使用L1获得稀疏解?,整理以做记录。

知乎专栏:CNN-L1正则的稀疏性 -无痛的机器学习中对比了L1和L2在CNN中的实践,并提出问题:稀疏解是否有意义?为何在实际中很少看见L1在深度学习中采用?

Towser 的回答:

Towser - 知乎
没必要。因为:

  1. 对于加了L1正则的神经网络,大部分深度学习框架自带的优化器(主要是SGD及其变种)训练获得不了稀疏解
  • DL框架中L1正则的实现基本都是给损失函数加上所有参数
    的绝对值之和,这一步是没有问题的(这是L1范数约束的拉格朗日形式)。但是,求解算法(optimizer)却求不到所有参数的绝对值之和,哪怕是对于已经被研究得很透的LASSO而言,subgradient descent都获得不了严格的稀疏解(LASSO需要用soft-thresholding/LARS等求解算法才能获得真正的稀疏解),更别说更加复杂的神经网络了。Gradient descent 连一个高维光滑函数的最小值都找不到,还指望stochastic subgradient descent 找到一个不光滑函数的最小值?不存在的。上面专栏中的实验也验证了对于现在的深度学习框架来说,加L1正则是获得不了稀疏解的。
  1. 实践中如果想获得稀疏解,可以先给目标函数加L1正则,然后在训练过程中或者训练结束后把绝对值较小的参数抹成0
  • 例如Github源码就是这样做的,readme里写了把1e-4以下的权重抹成0.另一种获得稀疏解的方法是使用proximal gradient系列的优化器,不过这种方法通常需要自己改optimizer,用的人比较少
  1. 如果稀疏解的模式是无规律的,这种稀疏意义不大
  • 因为对部署并不友好,完全有可能减了参数却没减推断速度(稀疏的卷积或者其它稀疏运算其实不好实现),模型的存储格式也要重新修改(比如说要存储非零元素的位置),有一连串的后续反应。如果希望稀疏解的模式有规律,往往需要更复杂的正规手段(例如Group LASSO)来引导,这样依赖代码写起来太麻烦:一方面是需要考虑自己想要的稀疏模式应该如何对权重分组(别整到最后大大影响模型训练速度,把深度学习框架幸幸苦苦优化的fused kernel的优势全搞没了),另一方面还要按照2中所说的技巧对网络权重及时归零,简直麻烦大了,所以不实用。
  1. 综上,如果是为了模型压缩、加速推断的话,有搞稀疏正则的时间不如去搞量化、蒸馏以及精简网络结构(MobileNet等);如果是为了给模型加正则防止过拟合,不如去用L2正则或者Dropout等手段,好用又好写。

补充:

Naiyan Wang的回答:

Naiyan Wang - 知乎
这个问题是分成两个小问题的:

  • 深度学习中怎么通过L1能优化到sparse的解
  • 深度学习中sparse有什么用

针对第一个问题,以上的回答中已经说的很好。如果直接使用momentum SGD这种方法去优化L1这种non-smooth loss的话,其实并不会得到exact sparse solution。一般来说只能通过一些heuristic的办法,比如说设置某个threshold强行截断来得到一个sparse的结果,我们为了解决这个问题,在[1]中提出了一种modified accelerated proximal gradient办法,只使用简单几行代码,无痛地把稀疏优化问题联合加入到deep learning的训练中去。

针对第二个问题,我想其实需要退一步站在更广阔的一个视角下来看。狭义无结构的sparse对于实际应用来说意义不是很大,很难获得实际的walk clock time加速的效果。训练的目标可能不仅仅是有狭义的weight,还可能包括更广义的结构等。这也是[1,2]中所努力探索的。在模型压缩和最近流行的模型结构搜索NAS上都取得了不错的效果。

[1] Huang, Z., & Wang, N. (2018). Data-driven sparse structure selection for deep neural networks. InProceedings of the European Conference on Computer Vision (ECCV)(pp. 304-320).

[2] Zhang, X., Huang, Z., & Wang, N. (2018). You Only Search Once: Single Shot Neural Architecture Search via Direct Sparse Optimization.arXiv preprint arXiv:1811.01567.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章