百科问答小站 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)




  

相关话题

  Transformer中的Mask矩阵已经有顺序了,能去掉position embedding吗? 
  新手如何入门pytorch? 
  医学生学习机器学习该如何入门? 
  学习python中的pandas有没有好的教程推荐? 
  科研时,想到一个idea,其实现的结果一定要比前人的评估指标高才能发表吗? 
  深度学习火热兴起后,隐马尔可夫模型(HMM)还有何独到之处,是不是几乎可被深度学习模型给替代了? 
  Yoshua Bengio为什么能跟Hinton、LeCun相提并论?? 
  word2vec有什么应用? 
  刷leetcode使用python还是c++? 
  CNN网络的pooling层有什么用? 

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





© 2025-05-06 - tinynew.org. All Rights Reserved.
© 2025-05-06 - tinynew.org. 保留所有权利