寻找最优超参数是一个迭代过程
在今天,应用深度学习是一个典型的迭代过程。
创建高质量的训练数据集、验证集和测试集,有助于提高循环效率。
训练集、验证集和测试集
数据Data分为三部分:
训练集trainning set简单交叉验证集hold-out cross validation set(development set)(dev set):检验哪种算法(或模型)更有效,尽可能优化性能测试集test set:对最终选定的神经网络系统做出无偏评估。
接下来我们对训练集执行训练算法,通过验证集(简单交叉验证集)选择最好的模型。选择完毕后在测试集上评估。
对于小数据量(100~10000),可以把数据70(trainning set):30(test set),或者60(trainning set):20(dev set):20(test set)。
对于大数据量(百万级别),验证集和测试集占数据总量的比例会趋于变得更小。因为验证集的目的就是检验哪种算法更有效,所以我们可能不需要拿出20%的数据作为验证集。(1000000-10000-10000)
在实际应用中,如果不同的数据集来源不同,会导致各数据集之间的不同分布。这种情况应该避免(即确保验证集和测试集的数据来自同一分布)。
如果验证集和测试集来自同一分布,但由于深度学习算法需要大量的训练数据,为了获取更大规模的训练数据集
如果不需要对神经网络系统做出无偏评估,则只有验证集dev set,没有测试集test set也OK
偏差(Bias)和方差(Variance)
这是两个易学难精的概念,easy to learn but difficult to master.
关于深度学习的误差问题,另一个趋势是对偏差、方差的权衡研究甚浅。
偏置bias和方差variance的介绍
从左到右依次为:
欠拟合underfitting、高偏差high bias正好过拟合overfitting、高方差high variance
需要注意的是,这里有两个假设条件:
出错率约等于0,所以才把10%以上的出错率定为高。(一般来说,最优误差被称为贝叶斯误差)trainning set和dev set同分布。
高方差(过拟合overfitting)的表现为测试集test data错误率远高于训练集trainning set,即过度拟合训练集导致缺少泛化能力。
高偏差(欠拟合underfitting)的表现为训练集的错误率就很高,即神经网络没有完全得到训练。
所以从左到右依次为:
高方差high variance高偏差high bias高方差high variance + 高偏差high bias低方差low variance + 低偏差low bias
紫色的线标出的为high bias + high variance的情况,近似的线性分类器导致了high bias,加上过度拟合了部分数据。
实现低方差low variance + 低偏差low bias的方法
在深度学习的早期阶段,很难做到只减少bias或variance而不影响到另外一方。
但在当前深度学习和大数据时代,只要持续训练一个更大的网络,只要准备了更多数据(当然也并非只有这两种情况,我们假定是这样)。
只要正则适度,通常来说构建一个更大的网络便可以在不影响variance的同时来减少bias。
而采用更多数据通常可以在不过多影响bias的同时减小variance。
这样我们就得到了一个非常规范化(well regularize)的网络。
通过正则化regularization,训练一个更大的网络而几乎没有任何负面影响。训练一个大型神经网络的主要代价也只是计算时间,当然前提是网络是规范化regularized的。
正则化regularization是一种非常实用的减少方差variance的方法。虽然bias可能会略有增加,但如果网络足够大,bias的增幅通常不会太高。