【Pytorch】7. 训练优化

前面的部分我们学了怎么构建神经网络以及如何训练,但有时候我们发现结果不如意,那么该怎么办呢?这部分就学习一些解决方法

使用测试集(验证集)

下面哪个模型更优呢?
在这里插入图片描述

其实肉眼是不太看的出来的,就算右边的模型好像所有点都分类正确了,但也有可能过拟合,所以我们可以引入测试集(或者验证集),先训练一部分,然后进行测试

在这里插入图片描述

结果发现,第一个模型有一个分类错误,第二个模型有两个分类错误,所以跟我们的直觉还是不相符的

在这里插入图片描述

因此在机器学习中,我们就是这么做的,每当我们要在可以完成工作的简单模型和复杂模型中选时,我们更倾向于简单模型

例如下图,左边欠拟合,中间刚刚好,右边过拟合

在这里插入图片描述

但是现实情况是,我们很难在真实情况下刚好达到一个just right的模型,要么就是欠拟合,要么就是过拟合,我们通常的做法就是在过于复杂模型的一侧犯错,然后通过一些技巧来避免过拟合

早期停止

例如训练一个模型,不同的epoch时模型从欠拟合到过拟合
在这里插入图片描述

我们就加一些测试集的数据,分别在这些epoch期测试,然后把训练error和测试error画出来

在这里插入图片描述

所以在训练的时候,当testing error开始升高了,我们就停下来,这种方法就叫做早期停止

在这里插入图片描述

正则化(Regulation)

这里有个问题,考虑最简单的情况,我们有两个点,一个蓝色的(1,1),一个红色的(-1,-1),对他们进行分类,现在有两个答案,那么下面两个答案哪个的误差更小呢?

在这里插入图片描述

答案是第二个,我们用上sigmoid函数,可以进行计算

在这里插入图片描述

因为10x1+10x2的函数更窄,其实这在某种程度上算是过拟合,而且它的导数非常大

在这里插入图片描述

如何避免这种情况呢?最简单的就是在原来的物产函数基础上对weights加上惩罚系数,可以是加上绝对值和,也可以是平方和。如果是绝对值和,就是L1正则化,如果是平方和,就是L2正则化

在这里插入图片描述

一般情况下我们都使用L2
在这里插入图片描述

Dropout

假如你要运动,周一打球,周二举铁,周三……,最后你会发现自己有一个非常强壮的右臂
在这里插入图片描述

那么假如你周一打球,周二把右手绑起来只练左手,周三把左手绑起来只用右手打球……最后你两个手臂都很发达
在这里插入图片描述

神经网络也是这样,有时一些部分的权重会变得很大,而另一些部分得不到训练

在这里插入图片描述

因此我们在训练的时候,会选择性关闭一些节点,让剩下的节点得到锻炼,担起责任。在每一轮epoch中,关闭一些节点,就像是给这些节点一个参数,这个参数就是每个节点在特定epoch被drop的概率,这个过程反复进行,最后每个节点都得到相同的处理,这个方法就叫做dropout

在这里插入图片描述
在这里插入图片描述

随机重新开始

在梯度下降算法中假如存在局部最低点,那么很有可能模型会达到一个局部的最低点,而不是全局的最低点,如何解决这个问题呢?

在这里插入图片描述

一个解决办法就是随机从不同的地点开始下降,

在这里插入图片描述

本系列笔记来自Udacty课程《Intro to Deep Learning with Pytorch》

全部笔记请关注微信公众号【阿肉爱学习】,在菜单栏点击“利其器”,并选择“pytorch”查看

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值