这是深度学习笔记第八篇,完整的笔记目录可以点击这里查看。
  
  下面介绍几种可以控制神经网络的容量以防止过拟合(overfitting)的方法:

1. L2 regularization

  L2正则化可能是最常见的正则化形式。它可以通过直接惩罚(penalize)目标中所有参数的平方大小来实现。也就是说,对于网络中的每个权重w,我们将1/2λw2项添加到目标中,其中λ是正则化强度。使用系数1/2是为了使该项相对于参数w的梯度为λw而不是2λw。L2正则化具有严重惩罚峰值权重向量和偏好扩散权重向量的直观解释。由于权重和输入之间的乘法运算,这具有一个很好的特性,即鼓励网络少量使用其所有输入,而不是大量使用其部分输入。最后,请注意,在梯度下降参数更新过程中,使用L2正则化最终意味着每个权重都会线性衰减到0,W += -lambda * W

2. L1 regularization

  L1正则化是另一种相对常见的正则化形式,其中对于每个权重w,我们将λ∣w∣添加到目标。可以将L1正则化与L2正则化结合起来:λ1∣w∣+λ2w2(这称为弹性网正则化,Elastic net regularization)。L1正则化具有一个有趣的特性,即它会导致权重向量在优化过程中变得稀疏(即非常接近于零)。换句话说,具有L1正则化的神经元最终只使用其最重要输入的稀疏子集,并且对“噪声”输入几乎不变。相比之下,L2正则化的最终权重向量通常是分散的、小数量的。在实践中,如果不关心显式特征选择,L2正则化的性能往往优于L1正则化。
  对于L1正则化会产生稀疏性的一个直观解释是,L1正则化函数的图形有很多角(比如在二维情况下是一个棱形),损失函数J0与L1的顶点相交的概率比与边相交要大,而与顶点相交则会有很多权值为0(在坐标轴上)。而对于L2正则化,其图形是圆滑的(比如在二维情况下是一个圆),损失函数J0与L2所有部位都可能相交,而这些部位大概率不会落在坐标轴上,也就是不会出现很多权值为0的情况。因此说,L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择;而L2正则化可以防止模型过拟合(overfitting)。因为L2正则化可以获得值很小的参数,而拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。当然一定程度上,L1也可以防止过拟合(当L1的正则化系数很小时)。参考

3. Max norm constraints

  正则化的另一种形式是对每个神经元的权向量的大小施加一个绝对上界,并使用投影梯度下降来施加约束。实际上,这相当于正常执行参数更新,然后通过钳制每个神经元的权重向量w来进行强制约束,以满足∥w∥2<c。c的典型值为3或4。它的一个优良特性是,即使学习率设置得太高,网络也不会“爆炸”,因为更新总是有界的。

4. Dropout

  Dropout是Srivastava等人引入的一种非常有效、简单的正则化技术。在训练过程中,Dropout是通过以某种概率p(一个超参数)来保持神经元处于激活状态的,否则就设置为零。

  Dropout论文中的插图。在训练过程中,Dropout可以解释为在全部神经网络中对一个神经网络进行采样,并且只根据输入数据更新采样网络的参数。然而,采样到的网络可能并不是独立的,因为它们共享参数。
  Vanilla dropout在一个三层神经网络上的应用示例如下:

""" Vanilla Dropout: Not recommended implementation (see notes below) """p = 0.5 # probability of keeping a unit active. higher = less dropoutdef train_step(X):""" X contains the data """# forward pass for example 3-layer neural networkH1 = np.maximum(0, np.dot(W1, X) + b1)U1 = np.random.rand(*H1.shape) < p # first dropout maskH1 *= U1 # drop!H2 = np.maximum(0, np.dot(W2, H1) + b2)U2 = np.random.rand(*H2.shape) < p # second dropout maskH2 *= U2 # drop!out = np.dot(W3, H2) + b3# backward pass: compute gradients... (not shown)# perform parameter update... (not shown)def predict(X):# ensembled forward passH1 = np.maximum(0, np.dot(W1, X) + b1) * p # NOTE: scale the activationsH2 = np.maximum(0, np.dot(W2, H1) + b2) * p # NOTE: scale the activationsout = np.dot(W3, H2) + b3

  在上面的代码中,在train_step函数中,我们执行了两次dropout:第一个隐藏层和第二个隐藏层。也可以在输入层上执行dropout,在这种情况下,我们还将为输入X创建一个二进制masks。反向传播保持不变,但当然必须考虑生成的masks U1U2
  关键的是,在predict函数中,我们不再执行dropout,而是使用参数p对两个隐层输出进行缩放。这一点很重要,因为在test的时候,所有神经元都能看到它们的所有输入,所以我们希望神经元在test时候的输出与训练时的预期输出相同。例如,在p=0.5的情况下,神经元必须在测试时将其输出减半,以获得与训练时相同的输出(预期)。要看到这一点,考虑一个神经元x的输出(在dropout之前)。在dropout时,该神经元的预期输出将变为px+(1−p)0,因为神经元的输出将有1−p的概率为零。在test的时候,当我们保持神经元始终处于激活状态时,我们必须调整x→px以保持相同的预期输出。
  上述方案的缺点是,我们必须在test的时候用参数p来缩放激活值。由于测试时间性能(test-time performance)非常关键,因此最好使用反向dropout(inverted dropout),它在train的时候执行缩放,使test-time的前向传播保持不变。此外,它还有一个良好的特性,即当你决定调整使用dropout的位置时,预测(prediction)部分的代码可以保持不变。Inverted dropout代码示例如下:

"""
Inverted Dropout: Recommended implementation example.
We drop and scale at train time and don't do anything at test time.
"""p = 0.5 # probability of keeping a unit active. higher = less dropoutdef train_step(X):# forward pass for example 3-layer neural networkH1 = np.maximum(0, np.dot(W1, X) + b1)U1 = (np.random.rand(*H1.shape) < p) / p # first dropout mask. Notice /p!H1 *= U1 # drop!H2 = np.maximum(0, np.dot(W2, H1) + b2)U2 = (np.random.rand(*H2.shape) < p) / p # second dropout mask. Notice /p!H2 *= U2 # drop!out = np.dot(W3, H2) + b3# backward pass: compute gradients... (not shown)# perform parameter update... (not shown)def predict(X):# ensembled forward passH1 = np.maximum(0, np.dot(W1, X) + b1) # no scaling necessaryH2 = np.maximum(0, np.dot(W2, H1) + b2)out = np.dot(W3, H2) + b3

  在第一次引入dropout之后,人们对此进行了大量的研究,试图理解它在实践中的拥有这么的效果的原因,以及它与其他正则化技术的关系。感兴趣的读者推荐的进一步阅读:Dropout论文,Dropout Training as Adaptive Regularization。

5. Bias regularization

  调整bias参数并不常见,因为它们不会通过乘法与数据相互作用,因此不会控制数据维度对最终结果影响。然而,在实际应用中(并在适当的数据预处理后),正则化bias基本上不会对性能造成巨大的不良影响。这可能是因为与所有权重的数据量相比,bias项非常少。因此,如果分类器需要bias来获得更好的loss结果,它可以“负担得起”使用bias。

6. Summary

  在实际应用中,最常见的是使用交叉验证的单个全局L2正则化。将其与在所有层之后应用的dropout相结合也是很常见的。p=0.5是一个合理的默认值,但可以根据validation数据进行调整。



*本博客翻译总结自CS231n课程作业网站,该网站需要翻墙才能访问。

深度学习笔记(八)—— 正则化[Regularization]相关推荐

  1. 深度学习笔记4:深度神经网络的正则化

    出处:数据科学家养成记 深度学习笔记4:深度神经网络的正则化 恍恍惚惚,又20天没写了.今天笔者要写的是关于机器学习和深度学习中的一项关键技术:正则化.相信在机器学习领域摸爬滚打多年的你一定知道正则化 ...

  2. 深度学习笔记5:正则化与dropout

    出处:数据科学家养成记 深度学习笔记5:正则化与dropout 在笔记 4 中,笔者详细阐述了机器学习中利用正则化防止过拟合的基本方法,对 L1 和 L2 范数进行了通俗的解释.为了防止深度神经网络出 ...

  3. 花书笔记:第07章 深度学习中的正则化

    花书笔记:第07章 深度学习中的正则化 7.1 参数范数惩罚 参数范数惩罚 Ω ( θ ) \Omega(\theta) Ω(θ) α ∈ [ 0 , ∞ ) \alpha \in [0,\infty ...

  4. AI圣经-深度学习-读书笔记(七)-深度学习中的正则化

    深度学习中的正则化 0 简介 机器学习中的一个核心问题是设计不仅在训练数据上表现好,而且能在新输入上泛化好的算法.采用显式减少测试误差(可能会增加训练误差)的策略称为正则化. 在深度学习的背景下,大多 ...

  5. 下载量过百万的吴恩达机器学习和深度学习笔记更新了!(附PDF下载)

    今天,我把吴恩达机器学习和深度学习课程笔记都更新了,并提供下载,这两本笔记非常适合机器学习和深度学习入门.(作者:黄海广) 0.导语 我和同学将吴恩达老师机器学习和深度学习课程笔记做成了打印版,放在g ...

  6. 33万字!深度学习笔记在线版发布!

    吴恩达老师的深度学习课程(deeplearning.ai),可以说是深度学习入门的最热门课程,我和志愿者编写了这门课的笔记,并在 github 开源,为满足手机阅读的需要,我将笔记做成了在线版,可以在 ...

  7. 深度学习笔记其三:多层感知机和PYTORCH

    深度学习笔记其三:多层感知机和PYTORCH 1. 多层感知机 1.1 隐藏层 1.1.1 线性模型可能会出错 1.1.2 在网络中加入隐藏层 1.1.3 从线性到非线性 1.1.4 通用近似定理 1 ...

  8. 深度学习笔记(十一)—— 完整性检查[Sanity Checks]

      这是深度学习笔记第十一篇,完整的笔记目录可以点击这里查看.      在进行高运算量的网络优化之前,可以先考虑进行以下几个检验: 1. Look for correct loss at chanc ...

  9. 深度学习笔记(十四)—— 超参数优化[Hyperparameter Optimization]

      这是深度学习笔记第十四篇,完整的笔记目录可以点击这里查看.      训练神经网络会涉及到许多超参数设置.神经网络中最常见的超参数包括: the initial learning rate lea ...

  10. 深度学习笔记其六:现代卷积神经网络和PYTORCH

    深度学习笔记其六:现代卷积神经网络和PYTORCH 1. 深度卷积神经网络(AlexNet) 1.1 学习表征 1.1 缺少的成分:数据 1.2 缺少的成分:硬件 1.2 AlexNet 1.2.1 ...

最新文章

  1. 视频up主测试显卡的软件,一个视频UP主亲身体验:5600X不讲武德,视频剪辑实测...
  2. SAP Analytics Cloud Model的delta upload(增量导入)功能
  3. 后端解决跨域问题---SpringBoot
  4. mysql 取第一条_MySQL索引底层(一)索引底层原理
  5. pycharm运行python程序后显示_pycharm运行和调试不显示结果的解决方法
  6. Java学习之路 之 类篇
  7. 利用AWVS进行反制
  8. VMware虚拟机中Ubuntu16.04系统下通过MVS运行海康威视工业相机
  9. 在Swing中使用JxBrowser-Using JxBrowser in Swing
  10. i春秋 - Exploit-Exercises: Nebula - level03
  11. Java语言List集和(详细介绍)
  12. 机器学习实战读书笔记-朴素贝叶斯
  13. 家庭媒体中心NAS方案设计
  14. 水泥行业超低排放政策频发,企业如何完成超低排放改造?
  15. Pycharm中c、m、F、f、v、p分别代表什么含义
  16. python 内置函数——排序
  17. chatgpt研究框架 --技术路线-行业进程研究
  18. 罗丹明标记鬼笔环肽|TRITC Phalloidin,915013-10-4
  19. 人工智能领域最佳5种编程语言
  20. COOX基础培训之AM

热门文章

  1. 5号字对应的数字字号_5号字体比较于多少pt
  2. 【厚积薄发】如何优化WaitForGPU?
  3. 计算机工程师考证要求
  4. eSPI自学笔记(一):前言和简介
  5. 爬虫入门经典(一) | 一文教你用Spider制作简易的翻译工具
  6. ural 1104. Don’t Ask Woman about Her Age
  7. php 失去焦点,jquery设置焦点方法focus()和jquery失去焦点方法blur()
  8. office 2021保姆级安装与激活教程(附安装包获取)
  9. 阿里云安全中心是什么?提供哪些防护?
  10. 【7gyy】教你快速对异常错误进行更正