吴恩达深度学习笔记-课程2改善深层神经网络-第一周、深度学习的实践

本系列为吴恩达老师《深度学习专项课程 (Deep Learning Specialization) 》学习与总结整理所得,对应的课程视频可以在这里查看。

1 数据划分:训练,验证,测试集(Train/Dev/Test sets)

1.1 深度学习实践迭代优化

实际应用深度学习是一个迭代过程。

在构建一个神经网络的时候,我们需要设置许多超参数,例如神经网络的层数 (#Layers) 、每个隐藏层包含的神经元个数 (#Hidden Units) 、学习速率 (Learning Rates) 、激活函数 (Activation Functions) 的选择等。实际上很难在第一次设置的时候就选择到这些最佳的超参数,而是需要通过不断地迭代更新来获得。

循环迭代过程是如下这样的:
在这里插入图片描述

  1. 产生想法Idea,选择初始的参数值,构建神经网络模型结构;
  2. 通过代码Code实现上述想法;
  3. 通过实验Experiment验证这些超参数对应的神经网络的表现性能。
  4. 根据验证结果,我们对超参数进行适当的调整优化,再进行下一次的Idea->Code->Experiment循环。通过很多次的循环,不断调整超参数,选定最佳的参数值,从而让神经网络性能最优化。

上述迭代过程中,决定整个训练过程快慢的关键在于单次循环所花费的时间,单次循环越快,训练过程越快。而设置合适的训练集 (Training sets) 、验证集 (Development sets) 、测试集 (Test sets) 大小,能有效提高训练效率。

上述数据部分来源于建立模型的过程中,我们对于总体数据的划分:

训练集 (Training Sets) :用训练集对算法或模型进行训练过程。
验证集 ( (Development Sets) :利用验证集 (又称为简单交叉验证集,hold-out cross validation set) 进行交叉验证,选择出最好的模型。
测试集 (Test Sets) :最后利用测试集对模型进行测试,获取模型运行的无偏估计 (对学习方法进行评估) 。

1.2 前大数据时代划分方式

在小数据量的时代,如100、1000、10000的数据量大小,可以将数据集按照以下比例进行划分:
在这里插入图片描述
无验证集的情况:70%、30%
有验证集的情况:60%、20%、20%

1.3 大数据时代划分方式

而在如今的大数据时代,对于一个问题,我们拥有的数据集的规模可能是百万级别的,所以验证集和测试集所占的比重会趋向于变得更小。

关于验证集
验证集的目的是为了验证不同的算法哪种更加有效,所以验证集只要足够大到能够验证大约2-10种算法哪种更好,而不需要使用20%的数据作为验证集。如百万数据中抽取1万的数据作为验证集就可以了。

关于测试集
测试集的主要目的是评估模型的效果,如在单个分类器中,往往在百万级别的数据中,我们选择其中10000条数据也足以评估单个模型的效果。

我们针对不同量级的大数据场景,可以采用如下的训练集 (Training sets) 、验证集 (Development sets) 、测试集 (Test sets) 数据划分方式:
在这里插入图片描述
100万数据量:98%、1%、1%
超百万数据量:99.5%、0.25%、0.25% (或者99.5%、0.4%、0.1%)

1.4 数据划分建议

建议验证集要和测试集来自于同一个分布 (数据来源一致) ,可以使得机器学习算法变得更快并获得更好的效果。

假设你开发一个手机app,可以让用户上传图片,然后app识别出猫的图片。在app识别算法中,你的训练样本可能来自网络下载,而你的验证和测试样本可能来自不同用户的上传。从网络下载的图片一般像素较高而且比较正规,而用户上传的图片往往像素不稳定,且图片质量不一。这种情况下验证集和测试集的作用就受影响了。

如果不需要用无偏估计来评估模型的性能,则可以不需要测试集。

Test sets测试集的目标主要是进行无偏估计。我们可以通过Train sets训练不同的算法模型,然后分别在Dev sets上进行验证,根据结果选择最好的算法模型。这样也是可以的,不需要再进行无偏估计了。如果只有Train sets和Dev sets,通常也有人把这里的Dev sets称为Test sets,我们要注意加以区别。

2 模型估计:偏差 / 方差

2.1 模型状态与评估

偏差 (Bias) 和方差 (Variance) 是机器学习领域非常重要的两个概念和需要解决的问题。在传统的机器学习算法中,Bias和Variance是对立的,分别对应着欠拟合和过拟合,我们常常需要在Bias和Variance之间进行权衡。而在深度学习中,我们可以同时减小Bias和Variance,构建最佳神经网络模型。

我们先来梳理一下上面提到的概念:

偏差 (Bias) :度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。(由训练集的错误率体现)
方差 (Variance) :度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。(由验证集(与训练集的差别)的错误率体现)
噪声 (noise) :表达了在当前任务上任何学习算法所能够达到的期望泛化误差的下界,即刻画了学习问题本身的难度。

如图是二维平面上二分类问题对应的几种模型状态 (High Bias,Just Right,High Variance) 示例图。
在这里插入图片描述
其中,High Bias对应着欠拟合,而High Variance对应着过拟合。在欠拟合 (underfitting) 的情况下,出现高偏差 (High Bias) 的情况,即不能很好地对数据进行分类。

这个例子中输入特征是二维的,High Bias和High Variance可以直接从图中分类线看出来。而对于输入特征是高维的情况,如何来判断是否出现了High Bias或者High Variance呢?
在这里插入图片描述
这就要特别借助于上一节我们提到几个数据集的评估来完成了 (关于模型的评估也可以参考ShowMeAI 文章 图解机器学习 | 模型评估方法与准则 )
在这里插入图片描述
一般来说,训练集错误率体现了是否出现Bias (偏差) ,验证集 (和训练集差异) 错误率体现了是否出现Variance (方差) 。当训练出一个模型以后:

训练集的错误率较小,而验证集的错误率却较大,说明模型存在较大方差 (Variance) ,可能出现了过拟合。
训练集和验证集的错误率都较大,且两者相当,说明模型存在较大偏差 (Bias) ,可能出现了欠拟合。
训练集错误率较大,且验证集的错误率远较训练集大,说明方差和偏差都较大,模型很差。
训练集和验证集的错误率都较小,且两者的相差也较小,说明方差和偏差都较小,这个模型效果比较好。

神经网络模型甚至可能出现High Bias and High Variance的糟糕状态,如下图所示:
在这里插入图片描述

2.2 应对方法

模型可能处于上述提到的不同状态中,在我们对模型状态评估完毕之后,针对不同的状态,优化方式如下:

模型存在高偏差:扩大网络规模,如添加隐藏层或隐藏单元数目;寻找合适的网络架构,使用更大的NN结构;花费更长时间训练。
模型存在高方差:获取更多的数据;正则化 (Regularization) ;寻找更合适的网络结构。
不断尝试,直到找到低偏差、低方差的框架。
在这里插入图片描述
在深度学习的早期阶段,没有太多方法能做到只减少偏差或方差而不影响到另外一方。而在大数据时代,深度学习对监督式学习大有裨益,使得我们不用像以前一样太过关注如何平衡偏差和方差的权衡问题,通过以上方法可以在不增加某一方的前提下减少另一方的值。

3 正则化 (Regularization)

3.1 正则化

如果模型出现了过拟合 (High Variance) 状态,可以通过正则化Regularization来缓解解决。虽然扩大训练样本数量也是减小High Variance的一种方法,但是通常获得更多训练样本的成本太高,比较困难。所以,更可行有效的办法就是使用正则。

3.2 Logistic 回归中的正则化

我们先回顾一下之前介绍过的逻辑回归模型,我们在Cost Function里添加了L2 Regularization (详见ShowMeAI 文章 图解机器学习 | 逻辑回归算法详解 ) ,表达式如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 神经网络中的正则化

在深度学习模型中,L2正则化的表达式如图所示:
在这里插入图片描述
在这里插入图片描述

3.4 正则化可以减小过拟合的原因

(1) 直观解释
我们回到上面模型状态的那张图,从左到右,分别表示了欠拟合、刚好拟合、过拟合三种情况。选择图中的复杂神经网络模型,那么不添加正则化的情况下,我们可能得到图中的过拟合分类边界。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因此,总结一下,直观的一种理解是:正则化因子设置的足够大的情况下,为了使成本函数最小化,权重W 就会被设置为接近于0的值,直观上相当于消除了很多神经元的影响,那么大的神经网络就会变成一个较小的网络。当然,实际上隐藏层的神经元依然存在,但是其影响减弱了,过拟合可能性大大减小。

(2) 数学解释
假设神经元中使用的激活函数为 公式
(sigmoid同理) 。(关于激活函数的知识回顾可以查看ShowMeAI 文章 浅层神经网络 )
在这里插入图片描述
在这里插入图片描述
(3) 其他解释
在权值 公式变小之下,输入样本 公式随机的变化不会对神经网络模造成过大的影响,神经网络受局部噪音的影响的可能性变小。这就是正则化能够降低模型方差的原因。

4 dropout随机失活正则化

dropout只在训练时使用,使用Dropout训练结束后,在测试和实际应用模型时,不需要进行Dropout和随机删减神经元,所有的神经元都在工作。
dropout的一大缺点是成本函数无法被明确定义。因为每次迭代都会随机消除一些神经元结点的影响,因此无法确保成本函数单调递减。因此,使用Dropout时,先将keep_prob全部设置为1.0后运行代码,确保 公式 函数单调递减,再打开Dropout。
dropout的作用越强,越不容易发生过拟合,此时训练集上表现的就较差。作用越弱,训练集上的表现就越好,但是容易发生过拟合。
L2正则化和dropout正则化都会使权重衰减。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值