2020-5-15 吴恩达-改善深层NN-w1 深度学习的实用层面(1.1 训练/开发(验证)/测试集)

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

1.1 训练/开发(验证)/测试集 Train/dev/test sets

本节将介绍在配置训练、验证和测试数据集的过程中,做出正确决策会在很大程度上帮助大家创建高效的NN。

在训练NN时候,需要做出很多决策,即超参的选择,例如

  • NN的层数,layers
  • 每层的隐藏单元数,hidden units
  • 学习率,learning rate
  • 各层采用哪种激活函数,activation functions

创建新应用的过程中,我们不可能从一开始就准确预测出这些信息和其他超参。实际上ML应用是一个高度迭代的过程,这在前面的学习中已经介绍过。
在这里插入图片描述

DL已经在自然语言处理NLP,计算机视觉,语音识别以及结构化数据应用等众多领域取得巨大成功。结构化数据无所不包,从广告到网络搜索。其中网络搜索不仅包括网络搜索引擎,还包括购物网站;从所有根据搜索栏词条传输结果的网站,再到计算机安全,物流,比如判断司机去哪接送货,范围之广,不胜枚举。

可能有NLP方面的人才想踏足计算机视觉领域,或者经验丰富的语音识别专家想投身广告行业,又或者有的人想从电脑安全领域跳到物流行业。但是从一个领域或者应用领域得来的直觉经验,通常无法转移到其他应用领域

最佳决策取决于

  • 你所拥有的数据量
  • 计算机配置中输入特征的数量
  • 用GPU训练还是CPU,GPU和CPU的具体配置
  • 其他诸多因素

对于很多应用系统,即使是经验丰富的DL行家也不太可能一开始就预设出最匹配的超参。所以说,DL应用是一个典型的迭代过程,需要多次循环往复,才能为应用程序找到一个称心的NN。

循环该过程的效率是决定项目进展速度的一个关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。

在这里插入图片描述

如上图,通常我们把数据集分为3个部分

  • 训练集,training set
  • 交叉验证集,hold-out cross validation set。或者称为验证集,development set。在本文中统一称为dev set。
  • 测试集,test set

我们在训练集上执行算法,通过验证集或简单交叉验证集选择最好的模型。经过充分验证,我们选定了最终模型,最后在测试集上进行评估,无偏评估算法的运行状况。

数据集比例

在ML发展的小数据量时代,如果没有明确设置验证集,常见做法是将所有数据三七分,就是人们常说的70%验证集,30%测试集。也可以按照60%训练,20%验证和20%测试集来划分。

在大数据时代,我们的数据量可能是百万级别,那么验证集和测试集占数据总量的比例会趋向于变得更小。因为验证集的目的就是验证不同的算法,检验哪种算法更有效,因此,验证集要足够大才能评估,比如2个甚至10个不同算法,并迅速判断出哪种算法更有效。我们可能不需要拿出20%的数据作为验证集。

比如我们有100万条数据,那么取1万条数据便足以进行评估,找出其中表现最好的1-2种算法。

同样地,根据最终选择的分类器,测试集的主要目的是正确评估分类器的性能。所以,如果拥有百万数据,我们只需要1万条数据,便足以评估单个分类器,并且准确评估该分类器的性能。

所以,假设我们有100万条数据,其中

  • 1万条作为验证集,1%
  • 1万条作为测试集,1%
  • 训练集占98%

对于数据量过百万的应用

  • 训练集可以占到99.5%
  • 验证和测试集各占0.25%,或者验证集占0.4%,测试集占0.1%。

训练集数据与验证集和测试集数据不是来自同一分布

DL的另一个趋势是越来越多的人在训练和测试集分布不匹配的情况下进行训练。

例如:假设你要构建一个用户可以上传大量图片的应用程序,目的是找出并呈现所有猫咪图片,训练集train sets可能是从网上下载的猫咪图片,而验证集dev sets和测试集test sets是用户在这个应用上上传的猫的图片。

结果网页上的猫咪图片分辨率很高,很专业,后期制作精良,而用户上传的照片可能是用手机随意拍摄的,像素低,比较模糊,这两类数据有所不同。

经验法则:针对这种情况,建议大家要确保验证集和测试集的数据来自同一分布。因为你们要用验证集来评估不同的模型,尽可能地优化性能。如果验证集和测试集来自同一个分布就会很好。

由于DL算法需要大量的训练数据,为了获取更大规模的训练数据集,我们可以采用网页抓取。代价就是训练集数据与验证集和测试集数据有可能不是来自同一分布。但只要遵循这个经验法则,你就会发现DL算法会变得更快。

没有测试集的情况

最后一点,就算没有测试集也不要紧,测试集的目的是对最终所选定的神经网络系统做出无偏估计,如果不需要无偏估计,也可以不设置测试集。

所以如果只有验证集,没有测试集,我们要做的就是,在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。因为验证集中已经涵盖测试集数据,其不再提供无偏性能评估。

在DL中,如果只有一个训练集和一个验证集,而没有独立的测试集,遇到这种情况,训练集还被人们称为训练集,而验证集则被称为测试集。不过在实际应用中,人们只是把测试集当成简单交叉验证集使用,并没有完全实现该术语的功能,因为他们把验证集数据过度拟合到了测试集中。

总结

搭建训练,验证集和测试集能够加速NN的集成,也可以更有效地衡量算法地偏差和方差,从而帮助我们更高效地选择合适方法来优化算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章