Deeplearning,ai之学习笔记 Course2 Week1 Practical aspects of Deep Learning

本周,我们将继续学习如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行,从而使学习算法在合理时间内完成自我学习。

1.1 训练,验证,测试集(Train / Dev / Test sets)

训练神经网络时,我们需要做出很多决策,例如:

  • 神经网络分多少层
  • 每层含有多少个隐藏单元
  • 学习速率(步长 α \alpha α)是多少
  • 各层采用哪些激活函数

所以通常深度学习是一个典型的迭代过程,需要多次循环往复,才能为应用程序找到一个令人满意的神经网络,因此循环该过程的效率是决定项目进展速度的一个关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。下面我们就来看看数据集上的一些术语:

数据集的划分

当我们拿到一个数据集后,我们通常会将其分为三部分:

  • 训练集/train set
  • 验证集/交叉验证集/dev set
  • 测试集/test set

在机器学习发展的小数据量时代,常见做法是将所有数据三七分,就是人们常说的70%验证集,30%测试集,如果没有明确设置验证集,也可以按照60%训练,20%验证和20%测试集来划分。这是前几年机器学习领域普遍认可的最好的实践方法。

但是在如今的大数据时代,假设我们有100万条数据,那么拿其中1万条作为验证集,1万条作为测试集,就达到我们的需求 了。即:训练集占98%,验证集和测试集各占1%。对于数据量过百万的应用,训练集可以占到99.5%,验证和测试集各占0.25%,或者验证集占0.4%,测试集占0.1%。因为我们希望的是迅速判断出哪种算法更有效。

需要注意的事项

1.确保验证集和测试集的数据来自同一分布——举个例子,当我们的任务是对猫进行识别时,如果我们的测试集都是非常清晰的猫的图片,而测试集却是用户随意拍摄的、非常模糊的图片。那么我们训练出来的效果很可能就不符合我们的期望。

2.没有测试集也不要紧,测试集的目的是对最终所选定的神经网络系统做出无偏估计,如果不需要无偏估计,也可以不设置测试集。所以如果只有验证集,没有测试集,我们要做的就是,在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。因为验证集中已经涵盖测试集数据,其不再提供无偏性能评估。当然,如果你不需要无偏估计,那就再好不过了。

1.2 偏差,方差(Bias /Variance)

具体图像

尽管我们已经在概率论中学习过了方差和偏差的概念,还是有必要来看看深度学习中它们是如何表现的


假设这就是数据集,如果给这个数据集拟合一条直线,可能得到一个逻辑回归拟合,但它并不能很好地拟合该数据,这是高偏差(high bias)的情况,我们称为“欠拟合”(underfitting)。

相反的如果我们拟合一个非常复杂的分类器,比如深度神经网络或含有隐藏单元的神经网络,可能就非常适用于这个数据集,但是这看起来也不是一种很好的拟合方式分类器方差较高(high variance),数据过度拟合(overfitting)。

在两者之间,可能还有一些像图中这样的,复杂程度适中,数据拟合适度的分类器,这个数据拟合看起来更加合理,我们称之为“适度拟合”(just right)是介于过度拟合和欠拟合中间的一类。


第一个例子是高方差,第二个是高偏差,第三个是两个都很高,第四个则可能达到了我们满意的需求

1.3 机器学习基础(Basic Recipe for Machine Learning)

在这里插入图片描述

吴老师的训练神经网络时的基本方法:

初始模型训练完成后,首先要知道算法的偏差高不高,如果偏差较高,试着评估训练集或训练数据的性能。如果偏差的确很高,甚至无法拟合训练集,那么你要做的就是选择一个新的网络,比如含有更多隐藏层或者隐藏单元的网络,或者花费更多时间来训练网络,或者尝试更先进的优化算法。

如果网络足够大,至少可以拟合或者过拟合训练集。一旦偏差降低到可以接受的数值,下一步就该检查一下方差有没有问题,为了评估方差,我们要查看验证集性能,我们能从一个性能理想的训练集推断出验证集的性能是否也理想,如果方差高,最好的解决办法就是采用更多数据,如果你能做到,会有一定的帮助,但有时候,我们无法获得更多数据,我们也可以尝试通过正则化来减少过拟合,这个我们下节课会讲。有时候我们不得不反复尝试,但是,如果能找到更合适的神经网络框架,有时它可能会一箭双雕,同时减少方差和偏差。如何实现呢?想系统地说出做法很难,总之就是不断重复尝试,直到找到一个低偏差,低方差的框架,这时你就成功了。

1.4 正则化(Regularization)

正则化可以用于解决高方差问题
我们用逻辑回归来实现这些设想,求成本函数 J J J的最小值,它是我们定义的成本函数,参数包含一些训练数据和不同数据中个体预测的损失, w w w b b b是逻辑回归的两个参数, w w w是一个多维度参数矢量, b b b是一个实数。在逻辑回归函数中加入正则化,只需添加参数λ,也就是正则化参数,一会儿再详细讲。

我们讲这个称作是 L 2 L2 L2正则化,至于 L 1 L1 L1就不说了,如果用的是 L 1 L1 L1正则化,最终 w w w会是稀疏的,也就是说向量中有很多0,有人说这样有利于压缩模型,因为集合中参数均为0,存储模型所占用的内存更少。实际上,虽然 L 1 L1 L1正则化使模型变得稀疏,却没有降低太多存储内存,所以我认为这并不是 L 1 L1 L1正则化的目的,至少不是为了压缩模型,人们在训练网络时,越来越倾向于使用 L 2 L2 L2正则化

1.5 为什么正则化有利于预防过拟合呢?(Why regularization reduces overfitting?)

正则化为什么可以预防过拟合,假设我们用的是这样的双曲线激活函数。

在这里插入图片描述
现在我们来看下这个庞大的深度拟合神经网络。这张图不够大,深度也不够,但你可以想象这是一个过拟合的神经网络。这是我们的代价函数 J J J,含有参数 W W W b b b。我们添加正则项 λ \lambda λ,它可以避免数据权值矩阵过大.

直观上理解就是如果正则化设置得足够大,权重矩阵被设置为接近于0的值,直观理解就是把多隐藏单元的权重设为0,于是基本上消除了这些隐藏单元的许多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。

但是会存在一个中间值,于是会有一个接近“Just Right”的中间状态。
直观理解就是 λ \lambda λ增加到足够大, W W W会接近于0,实际上是不会发生这种情况的,我们尝试消除或至少减少许多隐藏单元的影响,最终这个网络会变得更简单,这个神经网络越来越接近逻辑回归,我们直觉上认为大量隐藏单元被完全消除了,其实不然,实际上是该神经网络的所有隐藏单元依然存在,但是它们的影响变得更小了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值