python暂停和恢复_Python:早期停止与正则化 (七十一)

早期停止

我们有一个复杂的结构,我们看看训练流程,我们在第一个 epoch 中以随机权重开始,获得这样的模型,有很多错误,假设训练 20 个epoch 后,我们获得了很好的模型,但是假设继续训练 100 个epoch,我们将获得数据拟合更好的模型,但是我们看到有点过拟合了,假设我们再训练 600 个 epoch,模型变得严重过拟合,可以看到蓝色区域差不多就是一堆围绕蓝点的圆圈,这样对训练数据拟合的很好,但是无法泛化。

QTp6fTXJSi.png

我们可以添加一些测试集来评估这些模型,例如添加这些空心点,我们将训练集和测试集相对于每个 epoch 的误差绘制成图表

BXaoTe88AU.png

注意:上图实线为训练集误差,虚线为测试集误差

在这张图中,很清楚何时停止欠拟合并开始过拟合,训练曲线始终会下降,因为在我们训练模型时,我们不断越来越好的拟合数据,当我们欠拟合时,测试误差很大,因为模型不够精确,随着模型开始很好地泛华,它不断降低,直到达到最低点(黄金点 Goldilocks spot),最终当我们超过该点后,模型开始过拟合,因为它已无法泛华并开始记住训练数据。

6bfsbwDqR5.png

这个图表叫做模型复杂度图表,在 y 轴上是误差测量结果,在 x 轴上是模型复杂度测量结果,这里是 epoch 数量,可以看出在左侧是很高的测试和训练误差,所以我们欠拟合,在右侧有很高的测试误差和很低的训练误差,所以,我们过拟合,在中间是令人满意的黄金点,这个就决定了我们要使用的 epoch 次数。

总结下,我们要做的是降低梯度 直到测试误差停止降低并开始增大,这时候我们就停止,这个算法叫做早期停止法广泛用于训练神经网络。

正则化

现在我来演示一种过拟合模型的微妙方法,我们来看看全世界最简单的数据集 其中只有两个点,点 (1,1) 是蓝色,点 (-1,-1) 是红色,现在我们想用一条直线来区分它们,我将提供两个方程你来判断下,哪个方程的误差更小,这就是我们的测验题,方程 1 是 x1 + x2,意味着 w1 等于 w2 并且是 1 偏差 b 是 0,方程 2 是 10x1 + 10x2,意味着 w1 等于 w2 并且是 10 偏差 b 等于 0,问题是:哪个预测的误差更小?这个问题并不简单请思考下,也许要进行必要的运算。

NsmLeWjh9b.png

yOc2VuUNTH.png

y1hHZP7Soh.png

为什么第二个模型更好?

GROGYwFoLf.png

第一个模型

第一个观点是两个方程给我们相同的直线,这条直线方程是 X1 + X2 = 0,原因在于第二个解法,实际上只是第一个解法的纯量倍数,那么我们来看一下 回想一下 预测是一个 sigmoid 线性函数,所以在第一个例子中 对于点 (1,1),可以是 sigmoid (1+1),即 sigmoid 2 等于 0.88,因为这个点是蓝色的,所以结果不算差,所以标签为 1;对于点 (-1,-1) 预测是 sigmoid (-1-1),即 sigmoid -2 等于 0.12,因为这个点标签为 0 是红色的 所以结果不算差。

第二个模型

我们来看一下第二个模型,点 (1,1) 预测结果是 sigmoid (10+10),即 sigmoid 20,结果为 0.9999999979 非常接近 1,所以这是个很好的预测,对于点 (-1,-1),预测结果是 sigmoid (-10-10),即 sigmoid -20,等于 0.0000000021,这非常接近 0,所以这是个很好的预测,所以这个测试的答案是第二个模型,第二个模型非常准确,也意味着更好。

关于过拟合

BDnGPLfr6j.png

在最后一部分,因为这可能有点过度拟合 所以你觉得有点勉强,而且你的预感是正确的,这个问题有点过度拟合,这是整个过程 以及第一个模型更好的原因,即使得出更大的误差,我们把 sigmoid 运用到较小值中 如 X1 + X2,我们得到左侧的函数,包含梯度下降法的较好斜率,我们把线性函数乘以 10 后得到 sigmoid (10X1+10X2),由于结果更趋近于 0 和 1 所以预测更好一些,但是函数更加陡峭 这里也更难使用,梯度下降法 因为导数几乎接近 0,到达曲线中部时 导数非常大,所以 为了合理使用梯度下降法,相比右侧的模型来说我们更想用左侧的模型。从概念上来说,右侧的模型非常稳定,很难应用梯度下降法,同时正如我们想象到的,这些点在右侧模型中分类错误,会导致更大的偏差,这样会很难调优模型或纠正模型。

这可以引用著名哲学家和数学家伯特兰·罗素的名言进行总结:人工智能的问题,在于错误模型对自身非常确定,而好的模型充满疑问。

如何避免过拟合?

我们如何避免这种过度拟合的发生呢?由于错误模型提供了更小误差,所以这并不简单。我们要做的是对误差函数稍作调整,大体来说 我们想要惩罚高系数,那么我们要做的是 利用原来的误差函数增加一项,如果权重大,那么这项也大,两种方法可以做到这些。

VGOntdlvSs.png

lKBTIqO6Dy.png

为者常成,行者常至

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值