引用Andrew Ng 的一段话:
超参数有很多,隐含层层数选择,隐含层单元节点选择,学习率,激活函数等。一来预设出最匹配的超参数是很困难的,所以应用深度学习是一个典型的迭代过程,需要多次循环往复,才能为应用程序找到一个称心得神经网络。因此,循环该过程的效率是决定项目进展速度的关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。
数据集划分
这有一个常见的误区,在机器学习发展的小数据时代,常见做法是将所有数据三七分,70%训练集,30%测试集或者60%训练集,20%验证集,20%测试集,这是机器学习前几年学习领域普遍认可的最好实践方法,如你的数据是100,1000,1万条按照上述划分是非常合理的。
BUT在大数据时代,我们现在的数据量可能是百万级的,那么验证集和测试集占总数的比例会趋向于变得更小。因为验证集的目的就是为了验证不同的算法,检验哪种算法更加高效。比如我们有一百万的数据,那么拿出1万的数据便足以进行评估,找出其中表现最好的1-2种算法。测试集主要目的是正确评估分类器的性能,同样只需要拿出10000条数据便足以评估单个分类器。所以,假设我们有100万数据,其中1万条做验证集,1万条做测试集。即:训练集98%,验证集和测试集各1%。对于数据量为百万级应用,训练集可以占到99.5%(哭晕在厕所)
注:想清楚每个数据集的作用,而不是机械的记住原来的三七分
偏差 / 方差
如图所示,高偏差将导致欠拟合,高方差将导致过拟合。
在只有两维特征X1,X2,我们可以绘制数据,将偏差和方差可视化,在多维空间绘制数据可视化分割边界将无法实现。但我们可以通过几个指标来知道。
理解偏差和方差的两个关键数据是:
- 训练集误差
- 验证集误差
假设训练集误差1%,验证集误差11%,我们可能过度拟合了训练集,某种程度上交叉验证集并没有充分利用交叉验证集的作用,像这种情况,我们称之为高方差。
假设训练集错误率是15%,验证集错误率16%,这属于高偏差欠拟合。
假设训练集错误率是15%,验证集错误率30%,这属于高偏差以及高方差。
假设训练集错误率是0.5%,验证集错误率1%,这属于低偏差以及低方差。
一些解决方案
- 如果偏差很高甚至无法拟合训练集,那么你要做的就是选择一个新的网络——比如增加隐含层或者隐藏单元,或者花费更多时间训练或者尝试更先进的优化算法。
- 一旦偏差降低到一个可接受的数值,检查一下方差有没有问题,为了评估方差,我们要查看验证集性能。如果方差高,最好的解决办法就是采用更多的数据,但有时候无法获取更多数据,我们也可以通过正则化来减少过拟合
总之就是不断尝试直到找到一个低偏差低方差的框架。
注:内容来源于吴恩达deeplearning.ai,为什么想写一篇这么基础的呢?不要问我,踩过的坑只有自己清楚