在训练神经网络时,我们需要做出很多决策,比如:神经网络分多少层;每层含有多少个隐藏单元;学习速率是多少;各层采用哪些激活函数等等。
我们不可能从一开始就准确的预测出这些超参数,因为应用机器学习是一个高度迭代的过程,通常在项目启动时,我们会先有一个初步的想法,比如构建一个含有特定层数,隐藏单元数量或数据集个数等等的神经网络,然后编码,并尝试运行这些代码,通过运行和测试得到该神经网络或这些配置信息的运行结果,你可能会根据输出结果重新完善自己的想法,改变策略,或者为了找到更好的神经网络不断迭代更新自己的方案。对于很多应用系统,即使是经验丰富的深度学习工作者也不太可能一开始就预设出最匹配的超级参数。
(一)训练集和测试机的划分
针对小数据,常见的做法有三七分,或者622,或者K折交叉验证;但是如果拥有百万数据,我们只需要1000条数据,便足以评估单个分类器。假设我们有100万条数据,其中1万条作为验证集,1万条作为测试集,对于数据量过百万的应用,训练集可以占到99.5%,验证和测试集各占0.25%。
注意:最好确保验证集和测试集的数据来自同一分布。
(二)偏差和方差的权衡
高偏差对应欠拟合,高方差对应过拟合。
初始模型训练完后,首先我们需要知道算法的偏差高不高,如果偏差很高的话