吴恩达人工智能课程第二周笔记一: 训练,开发,测试集

   博客分类: 学习笔记 文章类型: 原创

吴恩达人工智能课程第二周笔记一: 训练,开发,测试集

本文字数为 2083 字, 预计读完大约需要 6 分钟

吴恩达人工智能课程第二周笔记一: 训练,开发,测试集

前言

通过之前的课程,我们已经知道了神经网络的搭建过程,但还不清楚如何让神经网络的运行效率得到进一步的提升,通过我写的神经网络模型可调参数神经网络模型的效果可以看到神经网络有待优化,第二周的课程基本上就是在讲神经网络的优化。

第二周的课程讲如何有效运作神经网络,大致包含如下三个方面:

在创建神经网络的时候我们要决定很多的超参数,比如

而事实上,神经网络是一个典型的迭代过程,因为我们不可能知道最好的超参数的组合究竟是什么样子的,因为即使是经验丰富的深度学习行家也不太可能一开始就预设出最匹配的超级参数,因此能做的就是在神经网络运行过程中不断调整其中的参数

如同下图所示,可能我们刚开始只是根据最开始的想法搭建了最初的模型,然后运行代码,通过运行和测试获取该神经网络。然后在这个过程中我们有了什么好的策略,就可以加入到我们最初的模型上面,然后查看模型运行效果,如果效果比之前要好就保留这个策略,反之沿用之前的策略。这样反复循环,才能找到一个符合我们要求的神经网络。 网络调优模型

**创建高质量的训练’数据集’,’验证集’以及’测试集’有助于提高上面提到的迭代的效率 **

Train(训练)、Dev(验证)、Test(测试) Sets

概念

训练集:用于最初的模型训练的数据集,一般占总体数据的大部分甚至绝大部分

验证集:用于之后的模型调试,也称开发集,即当准备对模型进行调整时,利用验证集(开发集)来验证调整的结果如何。

测试集:在验证集上有了较好的结果后,使用测试集测试模型的最终工作情况。如果效果不是很理想那么使用其他方式重新对模型进行调整。

数据集的划分

数据集的划分 如同上面的划分,我们把数据划分为Train(训练)/Dev(开发/交叉验证/验证集)/Test(测试集)

对于上面三种数据的使用:

  1. 使用Train Sets对最初的神经网络模型进行训练
  2. 在第一步训练结束后,使用Dev Sets对神经网络进行调整,直到神经网络的效果符合我们的预期(其中一个方法是通过损失函数的变化来查看网络的运行效果和情况)
  3. 使用我们感觉满意的模型使用Test Sets对网络进行测试

根据总体数据集大小确定三种集合占比

在机器学习早期,下面的两种数据划分的方式都是可行的,因为对早期而言,我们的数据量很小。划分可能如下: 小数据集的划分

但对于如今的大数据时代,我们的数据量很大,上面的划分方式就不那么适用了,因为开发集的目的是快速决策出哪一种策略对于模型更加适合,举例来说,假如我们有100万的数据,那么20%就是20万数据,因此数据量不可能很大,对于100万的数据,用于开发集的使用1%就足够使用,同理,测试集也不易过多只要分布均匀,足以测试模型即可。因此98/1/1的分配在如今的大数据时代更适用。甚至如果我们的数据量很大,我们也可以考虑99.5/0.25/0.25的划分方式.如下: 大数据集的划分

总结来说,如果数据量不大,上面的①和②的方式都是可行的,如果数据量大,我们就需要重新考虑数据的划分了。而划分的依据就是:训练集要占总体数据的大多数。验证集以及训练集的大小只要能够体现整体数据特性即可,不需太大也不要太小。

数据集的另一个问题是:可能训练集和测试开发集不是来自同一个分布

例如,我们训练一个猫识别模型,可能训练的数据是来自网络上面的图片,图片的质量很好,而我们的最终目的是识别用户的图片,因此开发集测试集用的是用户上传的图片质量不是很好的图片。 对于上述情况训练集是网上爬取的质量好的图片,而验证测试集则是用户上传的质量不好的图片,很显然两者不属于同一个分布。

解决这个问题的一个途径是:保证你的’验证集(开发集)’和’训练集’来自同一个分布。

因为你评估模型的依据应该是模型的最终使用场景,开发集和训练集同时作为模型的评估数据集,如果不是来自同一分布的数据,那么模型的最终性能肯定会受影响。

另外,开发集和测试集同时作为评估模型的数据,现实中也可以不使用测试集,而只是用开发集来作为模型的评估,测试集是对模型进行最终的评估,因此开发集也可以做到这一点。只不过如果只使用开发集作为评估的话,因为对模型调整的时候使用的是开发集,因此也可能出现对开发集过拟合的情况。

因此,从上面的例子和解决的途径来看,我们可以总结三种集合的关系。 以上面训练识别猫的系统来说。

  1. Train Set(训练集):Cat pictures from webpage 使用的虽然不是我们预期的集合(用户上传的图片),但训练集的作用是为了训练模型而得到一个预期的模型效果。
  2. Dev(验证)/Test(测试)Set:Cat pictures from users using your app 要保证验证集和测试集属于同一分布,因为无论训练集最初训练出来的模型效果如何,之后模型的调整都是根据模型在验证/测试集上面的表现而做出的调整,所以验证和测试集来自同一分布就显得尤为重要。