应用ML是一个高度迭代的过程
Idea->Code->Experment->...
去不断地调整超参数。
Train/Dev/Test sets
通常将数据集划分为Train/Dev/Test集。
Training set: 用于模型的训练
Hold-out cross validation set/Developmet set: 用于测试,调整模型超参数
Test set: 用于最终评估
以前的ML问题:数据规模在w级,通常70/30划分Train/Test集或者60/20/20比例划分。
现在的大数据时代:数据规模在百w级,趋势是Dev/Test集的比例减小,因为Dev集只需要大到足够判断不同的模型的优劣就可以了,Test集类似。如有100w的数据集,98/1/1的比例是一种较合理的划分。
经验:
- 确保Dev/Test集来自同一个分布,这样有助于算法进步的效率。
- 训练集则可以采取网页爬取等方式以获得更大量的数据。
- 没有测试集也是可以的,只用Dev集来调整。
Bias/Variance
可以通过Train set error和Dev set error来判断模型是否存在high bias/variance的问题。
比如,假设假设bayes error约为0%,即人类可以几乎完全准确识别,并且Train和Dev集来自同一个分布。
Train set error | Dev set error | 结果 |
---|---|---|
1% | 11% | high variance |
15% | 16 | high bias |
15% | 30% | high variance & high bias |
0.5% | 1% | low variance & low bias |
Some Basic recipe(基本准则)
STEP1 High bias? --> 更大的网络;训练更长时间;(其他NN架构)
STEP2 High variance? --> 更多的数据;正则化;(其他NN架构)
在深度学习时代,不需要再过多考虑bias 和 variance的权衡,如果合理的正则化,采用更大的网络在降低bias的同时几乎不会增加variance,如果有足够大的网络,获得更多的数据在降低variance时几乎不会增加Bias,这也是深度学习在监督学习领域十分有效地原因之一。