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




  

相关话题

  CVPR 2015 有什么值得关注的亮点? 
  请问应该怎样去学习图像识别和深度学习? 
  如何看待多所 985 大学开设人工智能专业? 
  如何理解今年发表在JMLR上随机森林算法SPORF? 
  如何评价 Exploring Simple Siamese Learning? 
  如何评价中国人民大学高瓴人工智能学院教授的薪酬标准? 
  为什么有的论文放出训练好的模型和测试脚本,但不开源训练代码? 
  如何评价Hinton在加拿大多伦多大学关于用“capsule”作为下一代CNN的演讲? 
  了解/从事机器学习/深度学习系统相关的研究需要什么样的知识结构? 
  我们目前的时代距离人工智能具有自我意识还有多远? 

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





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