Python:训练神经网络 (七十)

训练优化

如何构建神经网络以及如何训练它来拟合数据,但是有时候,我们去训练神经网络,却发现结果并非计划的那样,为何?因为有很多原因会导致出现问题,我们所选的结构可能很不合适,我们所选的数据可能有很多瑕疵,我们的模型可能需要好几年的运行时间,但是我们需要运行速度更快,我们需要学习各种方法,来优化模型训练过程,接下来我们将学习这方面的知识。

测试

训练集和测试集

file
我们来看看下面这些由蓝点和红点构成的数据,以及这两个将蓝点和红点,区分开来的分类模型,问题是哪个模型更好?

似乎左侧的看起来更简单,因为是条直线,右侧的更复杂,是条复合曲线,右侧的没有错误,正确地分类了所有点,但是左侧的确犯了一些错误,所以我们倾向于说右侧的更好,为了真正地弄明白哪个更好,我们将引出训练集测试集的概念。

表示方法为:实心彩色点是训练集,里面是白色的点是测试集。我们的做法是用训练集训练我们的模型,并且不看测试集,然后用测试集评估结果,因此,我们用训练集训练了线性模型,和复合曲线模型 获得这两个界线,现在拿出测试集 可以看到左侧的模型犯了一个错,而右侧的模型犯了两个错,所以最终结论是 左侧的简单模型更好些

file

这与我们的直觉相符吗?相符,因为在机器学习中,我们就是这么做的,每当我们要在可以完成工作的简单模型和完成的稍微好点的复杂模型之间进行选择时,我们始终会选择更简单的模型。

在 Keras 中进行测试

要在 Keras 中进行测试,我们只需将数据集拆分为训练集和测试集。因为我们有 400 个数据点,所以用 50 个数据点进行训练比较合理:

(X_train, X_test) = X[50:], X[:50]
 (y_train, y_test) = y[50:], y[:50]

过拟合和欠拟合

现在我们举个生活中的例子,在生活中 我们可以犯两个错误,一个是用苍蝇拍杀死哥斯拉,另一个是用火箭炮杀死苍蝇。

file

用苍蝇拍杀死哥斯拉有什么问题?我们过度简化了问题,我们尝试的解决方案太简单,无法完成工作,在机器学习中 这叫做欠拟合

那么用火箭筒杀死苍蝇存在什么问题的?过于复杂了,导致不好的解决方案和过于复杂,而实际上我们可以使用更简单的解决方案,在机器学习中 这叫做过拟合

如何出现

我们看看在分类问题中会如何出现过拟合和欠拟合现象。

假设有以下数据 我们需要分类它们,那么可以采用什么规则呢?似乎是个简单的问题 对吧?右侧的是狗,而左侧的都不是狗。
file

如果我们使用下面的规则,假设说右侧的是动物,而左侧的不是动物,这个解决方案不太好,对吧?问题是什么?太简单了 甚至都没有让整个数据集变正确,这里的猫分类错误了,因为猫是动物,这就是欠拟合,就像尝试用苍蝇拍杀死哥斯拉,有时候称为因偏差造成的误差

再看看下面的规则,我们说右侧的是黄色,橙色或黑色的狗,左侧不是黄色,橙色或灰色的狗,理论上来说是对的,
因为数据分类正确,但是我们过于具体了,因为直接说是不是狗就完成任务了,但是这个问题更加概念化,如何看出这里的问题?

file

一种方式是引入测试集,如果测试集是这只狗,可以想象出,好的分类模型会将它放在右侧,和其他狗放在一起,但是这个分类模型会将它放在左侧,因为这只狗不是黄色 橙色或灰色,所以这里的问题就是,分类模型太具体了,可以很好地拟合数据,但是无法泛化,这就是过拟合,就像尝试用火箭筒杀死苍蝇。有时候我们将过拟合称为因方差造成的误差

考试前的学习过程类比

我喜欢将欠拟合和过拟合想象成考试前的学习过程,欠拟合就像不好好学习,没通过考试,好的模型就像好好学习在考试中表现不错,过拟合就是不是学习,而是一个字一个字地记住整个教科书,我们也许能够答对教科书中的任何问题,但是无法总结泛化不能回答测试中的问题。

file
我们看看在神经网络中是什么情况,这是我们的数据,同样蓝点表示正,红点表示负,这里有三个模型,中间的模型可以很好地拟合数据,左侧的模型欠拟合 因为太简单了,它尝试用一条直线来拟合数据但是数据更复杂,右侧的模型过拟合了,因为它尝试用一个过于复杂的曲线来拟合数据,注意右侧的模型很好地拟合了数据,因为它没有犯错 而中间的模型在这里犯错了,但是可以看出中间的模型很可能会更好地泛化,中间的模型将这个点看做噪音,而右侧的模型被它弄的很困惑,尝试过于正确地拟合它,中间的模型可能是一个结构稍微复杂的神经网络 就像这个,左侧可能是过于简单的建构,例如 整个神经网络,只是一个感知器 因为模型是线性的,右侧的模型可能是高度复杂的神经网络,拥有比我们需要的还多的层级和权重,坏消息是很难为神经网络找到正确的结构,我们始终遇到的结果是:过于简单的结构,例如左侧的模型,或者过于复杂的结构 例如右侧的模型,问题是 该怎么办?这就像穿裤子,如果找不到我们的尺码 是选更大的还是更小的裤子?似乎选择稍微大点的裤子 然后尝试系个腰带,或者用其他方法穿起来更合身,这样不会是太糟糕的方法,我们将这么做,我们将选择过于复杂的模型,然后应用某种技巧,防止它过拟合。

file

为者常成,行者常至