往期文章推荐:
脉冲神经网络资料汇总
损失函数与代价函数
神经网络从入门到精通(一)
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);
本博客的内容来自于:神经网络从入门到精通(二);
学习、合作与交流联系q384660495;
本博客的内容仅供学习与参考,并非营利;
创建新应用的过程中,我们不可能从一开始就准确预测出这些信息和其他超级参数。实 际上,应用型机器学习是一个高度迭代的过程,通常在项目启动时,我们会先有一个初步想 法,比如构建一个含有特定层数,隐藏单元数量或数据集个数等等的神经网络,然后编码, 并尝试运行这些代码,通过运行和测试得到该神经网络或这些配置信息的运行结果,你可能 会根据输出结果重新完善自己的想法,改变策略,或者为了找到更好的神经网络不断迭代更 新自己的方案。
所以本章内容为优化我们迭代过程中的技巧
一、测试集、验证集和训练集
训练集
训练集用来训练模型,即确定模型的权重和偏置这些参数,通常我们称这些参数为学习参数。
验证集
而验证集用于模型的选择,更具体地来说,验证集并不参与学习参数的确定,也就是验证集并没有参与梯度下降的过程。验证集只是为了选择超参数,比如网络层数、网络节点数、迭代次数、学习率这些都叫超参数。
测试集
测试集只使用一次,即在训练完成后评价最终的模型时使用。它既不参与学习参数过程,也不参数超参数选择过程,而仅仅使用于模型的评价和泛化性。
值得注意的是,千万不能在训练过程中使用测试集,而后再用相同的测试集去测试模型。这样做其实是一个cheat,使得模型测试时准确率很高。
- 数据集 分布
为什么需要保证训练集和测试集在同一分布中?
我们将训练出来的模型理解成为一个寻找靶心的过程,通过训练集不同的训练,然后调整超参和使用不同的算法来提高模型性能的过程理解为想靶心逼近的过程。如果想要在测试集也要像有训练集上的表现,那么测试集的靶心也需要和训练集的靶心位于同一位置。如果测试集的靶心相对训练集的靶心有所移动,那么模型在训练集上的表现是10环的话,在测试集上的表现可能就只有8环、9环甚至更低。这个例子中的靶心分布就是数据集的数据分布。
- 数据集大小
小规模数据集数据的划分
在传统的机器学习中,我们听过70%/30%的划分原则,就是指将整个数据集中的70%用于模型的训练也就是训练集,整个数据集中的30%用于模型的测试也就是测试集,其实这里的测试集被称为验证集或者开发集会更适合。如果想要加入验证集,可能划分标准就改成了60%/20%/20%,也就是指将整个数据集的60%划分为训练集,20%划分为验证集,20%划分为验证集。以上的两种划分标准只适用于小规模的数据集,如果对于上百万、甚至上千万规模的数据集可能需要修改数据集的划分原则。
大规模数据集数据的划分
我们现在所处的是大数据时代,所以很多数据集的数据规模都是上百万甚至上亿,而且如果想