原文:http://suanfazu.com/t/topic/13744

正则化

相信对机器学习有一定了解的朋友对正则化(Regularization)这个概念都不会陌生。可以这么说,机器学习中被讨论最广泛也可以说是最重要的一个问题,就是防止 过拟合(Overfitting) 。

为什么这么说呢?因为通过增加模型复杂性来在训练数据上达到完美的拟合实在太过容易。如果仅希望在训练数据上得到输入预期的输出,那么我们仅仅需要记住所有的训练数据就可以了。而对于机器学习,我们真正的关心的问题,是在那些没有见过的数据上,模型的表现如何,也就是模型的泛化能力。

至于正则化的方法,很多时候被大家简化理解为了“在目标函数上增加关于参数的范数”的简单表达,但对于为何需要增加范数约束,以及增加以后所产生的效果不甚明了。

我们这里通过一个最简单的Logistic regression的例子来看看增加范数约束的必要性。对于Logistic regression问题,通过给定的个数据,其中,我们希望寻求到一个足够好的,使得尽可能接近,其中就是我们前文神经网络常用的Sigmoid函数。我们可以将Sigmoid函数的输出解释为某个输出为1的概率,那么按照最大似然原则,需要求解如下优化问题:

假设我们求得某个,能够成功让所有的正样本,而负样本输出,已经意味着我们可以通过该分类器完美对数据进行区分。但如果仔细查看我们的最优化问题可以发现,如果我们将替换成,则可以进一步降低目标函数值,我们可以通过不断放大来进一步降低目标函数值。事实上,所表达的是同一个分类器超平面(hyperplane),可以通过限制使其收敛到唯一解。

上面的例子是数学上一类Inverse problem2的特例。这其中最简单的当属线性方程组求解的问题。当我们已知其生成过程,其中为独立同分布(i.i.d)的高斯随机噪声时,可以证明,采用范数进行优化,是在最大似然意义下的理论最优解:

类似上述能够给出具体数学描述的生成过程,及其Inverse problem最优求解方法的问题还有很多。最近哥伦比亚大学John Wright教授在字典学习问题的突破(参见Complete Dictionary Recovery over the Sphere)的结果非常漂亮,堪称是这一类Inverse problem和正则化应用的典范。

谈回深度学习,我们可以看到目前应用最广泛的两类正则化的方法,一类是通过给网络参数增加的范数(并且往往p=2):

另一类是采用由Hinton et. al所提出的Dropout方法进行正则化(参见Dropout: A Simple Way to Prevent Neural Networks from Overfitting)。并且这两类方法经常同时在训练神经网络时被采用。

范数正则化

这两种正则化方法在深度学习的应用,与其说是理论家的贡献,不如说是实践者的胜利。虽然通过添加范数的形式在传统凸优化中有大量可被证明正确性的应用,并且将这个想法使用于神经网络极为自然,但对于超过一层隐藏层的神经网络,范数所带来的优势还很难被严格证明。这里我提供几个非完全严格的“直观”解释:

  • 在原目标函数的基础上增加,将原函数进行了一定程度的平滑化,这个可以从其梯度函数有所体现。
  • 对于一类存在大量驻点(Stationary point,即梯度为0的点),增加范数意味着将原本导数为零的区域,加入了先验知识进行区分(几何上,意味着原本一个平台的区域向0点方向倾斜),这样可以帮助优化算法至少收敛到一个局部最优解,而不是停留在一个鞍点上。

  • 通过限制参数在0点附近,加快收敛,降低优化难度。回忆一下,对于一类常见激活函数,如Sigmoid,满足:单调有界。根据单调有界定理,对于任意小的,我们可以取得足够大的,使得。换句话说,对于该变量,我们可以找到一个足够大的区域使得其导数接近于0,这意味着通过梯度方法改进该变量会变得极其缓慢(回忆后向传播算法的更新),甚至受浮点精度等影响其收敛。那么,采用范数控制变量的大小在0附近,可以避免上述情况,从而在很大程度上可以让优化算法加快收敛。

Dropout正则化

Dropout是另一类目前被广泛使用的正则化方法,其基本思路非常简单:在训练阶段,对于每个mini-batch随机抹去一定比例的神经元进行前向及后向传播更新。这种方法在Hinton et. al的论文中所给出的解释为:

This prevents units from co-adapting too much.
This should make each hidden unit more robust and drive it towards creating useful features on its own without relying on other hidden units to correct its mistakes.

但由于深层神经网络的一大优势其实就在于对于特征的层级化表达,并且深层单元可以对浅层单元进行组合与复用。所以上述解释虽然乍听之下合理,但真实的可靠性存疑。上述论文中提到了另个解释,可能更为合理:通过控制每个单元的开关,我们潜在使用了个不同的网络(为采用Dropout的神经元数量),这样的模型相当于将个不同的共享变量的网络在预测时进行几何平均,从而达到平滑的效果。

对于一类更特定的模型,Dropout有在理论上有进一步的论证。如果我们限制所研究的为广义线性模型(Generalized linear models),并且Dropout只在输入变量上进行,那么通过对广义线性模型通过泰勒展开进行二次近似,可以得到

其中为参数的Fisher information矩阵:

那么,对于输入进行Dropout,实际上就相当于首先将输入采用进行归一化得到,然后采用传统范数对参数进行正则化,从而建立起了采用Dropout与范数进行正则化的联系。具体的推导可以参见:Dropout Training as Adaptive Regularization。

转载于:https://www.cnblogs.com/davidwang456/articles/5607071.html

当我们在谈深度学习时,到底在谈论什么(三)--转相关推荐

  1. 当我们在谈深度学习时,到底在谈论什么(一)--转

    原文地址:http://suanfazu.com/t/topic/13741 深度学习最近两年在音频分析,视频分析,游戏博弈等问题上取得了巨大的成果.由于微软,谷歌等科技巨头的推动及应用上的可见突破, ...

  2. 当我们谈深度学习时,我们用它落地了什么?

    摘要: 近日,阿里云在深度学习方面动作频频,先后发布了OCR证件识别,声纹检测,人脸搜索,视频鉴黄服务以及相似图片搜索功能,下面小编就一一为大家介绍五大功能应用. 现今伴随人工智能在技术上的不断突破, ...

  3. 当我们谈深度学习时,我们用它落地了什么?阿里云内容安全功能全新升级

    现今伴随人工智能在技术上的不断突破,一些领域如计算机视觉,已开始与各个行业进行了深度融合.例如保险行业已通过人脸识别这种新时代的认证方式,来对用户身份信息进行识别与审核.深度学习对人工智能的发展起着至 ...

  4. 当我们在谈深度学习时,到底在谈论什么(二)--转

    原文地址:http://suanfazu.com/t/topic/13742 上一次的分享我们提到了神经网络的几个基本概念,其中提到了随机梯度下降(SGD)算法是神经网络学习(或者更通用的,一般性参数 ...

  5. 浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现)

    浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现) 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学习:了解RNN和构建并预测 浅谈深度学习:基于对LS ...

  6. 浅谈深度学习:基于对LSTM项目`LSTM Neural Network for Time Series Prediction`的理解与回顾

    浅谈深度学习:基于对LSTM项目LSTM Neural Network for Time Series Prediction的理解与回顾#### 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学 ...

  7. 嵌入式AI —— 6. 为糖葫芦加糖,浅谈深度学习中的数据增广

    没有读过本系列前几期文章的朋友,需要先回顾下已发表的文章: 开篇大吉 集成AI模块到系统中 模型的部署 CMSIS-NN介绍 从穿糖葫芦到织深度神经网络 又和大家见面了,上次本程序猿介绍了CMSIS- ...

  8. 周志华:浅谈深度学习

    我们都知道直接掀起人工智能热潮的最重要的技术之一,就是深度学习技术.今天,其实深度学习已经有各种各样的应用,到处都是它,不管图像也好,视频也好,声音自然语言处理等等.那么我们问一个问题,什么是深度学习 ...

  9. 浅谈深度学习的基础——神经网络算法(科普)

    浅谈深度学习的基础--神经网络算法(科普) 神经网络算法是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助 ...

最新文章

  1. python爬取网易云音乐_Python 从零开始爬虫(七)——实战:网易云音乐评论爬取(附加密算法)...
  2. Android 系统各种StreamType 的Volume关联和Mute设置
  3. Linux操作系统下实现远程开机
  4. 浅谈工业机器人的运动停止
  5. linux core无权限,linux – 为什么编辑core_pattern受限制?
  6. oracle 数据抽取 java_oracle数据抽取步骤
  7. 例题 2 最敏捷的机器人
  8. Java jar 版本 查看
  9. P4475 巧克力王国(KDTree)
  10. vue ---- 实现手机端(左滑 删除。右划 正常)
  11. 一些避免竞争条件的实例
  12. html5书法风格,中国书法五种分类介绍
  13. 通用网络版本md5算法和.net中md5算法接轨
  14. MATLAB求解矩阵特征值的六种方法
  15. growup怎么读_欧路词典|英汉-汉英词典 grow up是什么意思_grow up的中文解释和发音_grow up的翻译_grow up怎么读...
  16. COJ 0580 4021征兵方案
  17. pptpd搭建过程中 启动成功但不显示ppp0端口
  18. 论文阅读笔记: (2022.05, icra) Traffic Context Aware Data Augmentation for Rare Object Detection in Autonom
  19. 如何考虑SEO优化?
  20. Redis总结二 - 测试案例

热门文章

  1. wps定位对话框快捷键_Word、Excel、PPT快捷键汇总
  2. vim 插件_vim插件YouCompleteMe配置
  3. 如何阵列平面_Proe/Creo如何使用点阵列——通过内部草绘创建
  4. idea启动webservice_Intellij Idea 之 WebService客户端测试
  5. linux 系统时间是在哪里记录的,Linux系统如何记录时间
  6. import export php,import与export在node.js中的使用方法
  7. python常见异常
  8. E: Unable to locate package libjasper-dev的解决办法(亲测可以解决)
  9. elasticsearch python API
  10. 六行代码安装 GPU版本的TensorFlow