前言
第一门课的笔记见:跟着吴恩达学深度学习(一)
本文对应了吴恩达深度学习系列课程中的第二门课程《改善深层神经网络:超参数调试、正则化以及优化》
第二门课程授课大纲:
- 深度学习的实用层面
- 优化算法
- 超参数调试、Batch正则化和程序框架
目录
1 深度学习的实用层面
1.1 训练/开发/测试集
在配置训练(train)、验证(devlopment)和测试(test)数据集的过程中做出正确决策在很大程度上会帮助大家创建高效的神经网络。训练神经网络时我们需要做很多决策,包括:
- 神经网络的层数
- 每个隐藏层包含的隐藏单元
- 学习因子(学习速率)
- 各层激活函数的选择
- ...
应用型机器学习是一个高度迭代的过程。具体过程如下:
(1)项目启动时,先有一个初步想法(idea),比如构建一个含有特定层数、隐藏单元数量或者数据集个数等的神经网络。
(2)然后编码(code),并尝试运行这些代码,通过运行和测试得到该神经网络,或这些配置信息的运行结果。
(3)根据结果重新完善自己的想法,改变策略,不断试验(experiment),或者找到更好的神经网络不断更新迭代自己的方案。
同样,应用深度学习也是一个反复迭代的过程,需要通过反复多次的循环训练得到最优化参数。因此,循环该过程的效率是决定项目进展速度的一个关键因素。而创建高质量的训练数据集、验证集和测试集也有助于提高循环效率。
在实验中通常将所有的样本数据分成三个部分:Train/Dev/Test sets。训练集(Train sets):用来执行训练算法;验证集(Dev sets)或简单交叉验证集:选择最好的模型,经过充分验证不同算法的表现情况,选定了最终模型; 测试集(Test sets):进行评估,用来测试最好算法的实际表现,作为该算法的无偏估计。
数据集比例划分:
- 小数据量(如数量为100、1000或10000)一般三七分,即70%训练集30%测试集。如果有验证集,则设置比例依次为60%、20%、20%。
- 大数据量:对于百万级别的数据,训练集、验证集、测试集的比例通常可以设置为98%、1%、1%。对于超过百万级别的数据,比例可以为99.5%、0.25%、0.25或者99.5%、0.4%、0.1%。
因此,样本数据量越大,相应的验证集和测试集的比例可以设置的越低一些。
数据没有测试集也没关系,测试集的目的是对所选定的神经网络系统做出无偏评估,如果不需要无偏评估,也可以不设置测试集,在验证集(test sets)上选择合适的模型。
1.2 偏差/方差
如上图(图左)的数据集,拟合成一条直线,可能得到一个逻辑回归拟合,但它并不能很好地拟合该数据集,这是偏差高(high bias)的情况,。称为欠拟合(underfit the data)。
如上图(图右)的数据集,拟合一个非常复杂的分类器,分类器方差较高(high variance),数据过度拟合(overfit the data)。
这两者之间,如(图中)这种情况,复杂程度适中,数据拟合适度的分类器,这个看上起更为合理,称适度拟合(just right),是介于过拟合和欠拟合中间的一类。
以上是在二维的情况下,将偏差和方差可视化。而多维则无法通过绘制数据和可视化分割边界实现,但我们可以通过几个指标来研究偏差和方差。
理解偏差和方差的两个关键数据是训练集误差(train set error)和验证集误差(development set error)。
同样以识别小猫为例,可能出现以下情况。
情形1:Train set error为1%,Dev set error为11%。
根据误差情况可以看出训练集设置的非常好,而验证集设置的相对较差。分析原因,可能存在过拟合,某种程度上,验证集并没有充分利用交叉验证集的作用,模型泛化能力不强,导致验证集识别率低。这种情况,通常被称之为”高方差“(high variance)。
情形2:Train set error为16%,Dev set error为16%。
根据误差情况可以看出训练集没有得到很好训练,而验证集设置的相对合理。如果训练集的拟合度不高,就是欠拟合,即偏差较高(high bias)。
情形3:Train set error为15%,Dev set error为30%。
根据误差情况,可以说明该模型既存在高偏差(high bias)也存在高方差(high variance),这是深度学习中最坏的情况。
情形4:Train set error为0.5%,Dev set error为1%。
根据误差情况,可以说明该模型不仅低偏差(low bias)还低方差(low variance),这是深度学习中最好的情况。
注意,上面的情形都是假设人眼辨别的错误率接近0%,即人类都能正确识别所有猫类图片。一般来说,最优误差(optimal error)也称为基本误差(base error),所以最优误差接近0。如果基本误差(base error)不同,例如图片很模糊,相应的train set error和dev set error会有所变化,那分析过程就要做出改变了。
一般来说,Train set error体现了是否出现bias,Dev set error体现了是否出现variance(正确地说,应该是Dev set error与Train set error的相对差值)。
上图中的模型既存在high bias也存在high variance,可以理解成某段区域是欠拟合的,某段区域是过拟合的。
1.3 机器学习基础
在训练神经网络时, 如果碰到高偏差(欠拟合),通常是增加神经网络的隐藏层层数、神经元个数,训练时间延长,选择其它更复杂的NN模型等
如果碰到高方差(过拟合),通常是增加训练样本数据,但有时无法获得更多的数据,进行正则化(Regularization)来减少过拟合。
总之,通过不断地尝试找到一个低方差,低偏差的模型。
⚠️注意:
- 处理高方差和高偏差的方法不一样,首先要通过验证集找到存在的问题,再对症下药,明确这一点有助于选出最有效的方法。
- 在当前的深度学习和大数据时代,只需要持续训练一个更大的网络,只要准备了更多的数据,同时减少方差和偏差不是没有可能。
1.4 正则化
如果怀疑神经网络过度拟合了数据,即出现了高方差(high variance),那么最先想到的可能是正则化(regularization),另一个方法是准备更多的数据(more data)。但获取更多样本的成本可能很高但正则化通常有助于避免过度拟合或减少网络误差。
求成本函数(cost function)J的最小值。它是定义的成本函数,参数包含一些训练数据和不同数据中个体预测的损失,w和b逻辑回归的两个参数,w是一个多维度参数矢量,b是一个实数。实现正则化只需要添加参数λ(正则化参数),这种方法称为L2 regularization。先给出两种常见的正则化表达式:
L2 regularization的表达式为:
L1 regularization的表达式为:
具体解释看下图:
标签:吴恩达学,训练,梯度,归一化,batch,神经网络,参数,深度,跟着 From: https://blog.csdn.net/Zhoozie/article/details/140153354