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




  

相关话题

  分类机器学习中,某一标签占比太大(标签稀疏),如何学习? 
  为什么神经网络具有泛化能力? 
  本科数学,目前在读计算机研一,毕业的时候想要应聘数据挖掘工程师,看了对数据挖掘工程师的招聘要求,感觉太宽泛了,希望能具体说一下现在应该准备哪些知识(算法?编程语言?其他?),谢谢! 
  K-means聚类算法中的K如何确定? 
  深度学习在无人驾驶汽车上面的运用有哪些? 
  如果你是面试官,你怎么去判断一个面试者的深度学习水平? 
  算法工程师是否应该持续读论文? 
  计算机视觉有多少分支? 
  如何评价 Self-Normalizing Neural Networks 这篇论文? 
  mxnet的并行计算为什么这么牛,是什么原理? 

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





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