百科问答小站 logo
百科问答小站 font logo



为什么在SGD中使用L1正则化很难获得稀疏性? 第1页

  

user avatar   menc01 网友的相关建议: 
      

关于 L1 在实操中常不能得到真正稀疏性的原因,有一个听起来很奇怪,细品又有点道理的解释:当参数使用float方式存储时,计算机进行浮点数的四则运算很难得到完美的 0 值。

冷不丁看到,感觉离了大谱。

当我们专注于算法推导的时候,几乎没人想到这里来,但听到这个解释后,又打心眼里觉得对。这理论也是我在查阅 FTRL 资料的时候看到的,它莫名契合 FTRL 追求实际落地的出发点。

这里贴一个链接,是一个关于 L1 正则稀疏性的文章,文中有一个很不错的小小实验。这个实验排除了其他回答所说“很多问题是非凸或者复杂凸问题”的干扰因素,或能佐证这个解释。

简单介绍下实验设定:

       def genData(n, p, s):     A = np.random.normal(0, 1, (n,p))     opt_x = np.zeros(p)     random_index_list = random.sample(range(p), s)     for i in random_index_list:  opt_x[i] = np.random.normal(0,10)     e = np.random.normal(0,1,n)     b = np.dot(A,opt_x.T) + e.T     return A, b  A, b = genData(100, 50, 20)     
  1. 使用如上代码,随机生成了一个小的有冗余的线性 dataset,其中非 0 参数 30 维, 0 参数 20 维。
  2. 对这个凸的数据集使用 L1 训练。

结论如下:

  1. 加了 L1 后,模型参数确实比只有 L2 更接近 0 了;
  2. 使用 subgradient 的 L1 并未达到理论上的稀疏性,很多预期为 0 的参数学习到的参数值在 1e-7 数量级上下,很接近 0 了,但不是 0 -- 各大机器学习框架对 L1 正则的实现,基本都基于 subgradient;
  3. 使用近端梯度下降代替 subgradient 后,参数达到理想中的稀疏性。近端梯度下降和 subgradient based L1 相比,具体实现上的区别是加入了软阈值,当 ω < λt 时,ω 会被置零。

关于近端梯度下降,可参考这里:Xinyu Chen:机器学习 | 近端梯度下降法 (proximal gradient descent)




  

相关话题

  对自己深度学习方向的论文有idea,可是工程实践能力跟不上,实验搞不定怎么办? 
  如何评价 UCLA 朱松纯教授近日访谈中对深度学习的批评? 
  机器学习,深度神经网络等方法是否是正确的方向? 
  如何评价微软亚研院提出的把 Transformer 提升到了 1000 层的 DeepNet? 
  Resnet到底在解决一个什么问题呢? 
  为什么学习深度学习感觉无法入门? 
  如何评价周志华在微博对 AlphaGo 和机器学习技术的评论? 
  如何评价微软亚研院提出的把 Transformer 提升到了 1000 层的 DeepNet? 
  要研究深度学习的可解释性(Interpretability),应从哪几个方面着手? 
  在文本分类任务中,有哪些论文中很少提及却对性能有重要影响的tricks? 

前一个讨论
隐私计算/多方安全计算/联邦学习问题?
下一个讨论
有哪些能吊打大牌的国货护肤品?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利