减少过拟合(高方差)的方法

转载自点击打开链接

1、过拟合概述

在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合)。其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集,对训练集外的数据却工作不好。


常用的解决过拟合的方法有:增加数据量、L1L2正则化、dropout正则化

2、增加数据量

“有时候不是因为算法好赢了,而是因为拥有更多的数据才赢了。”---------------------某大牛

数据对于网络的训练很重要,拥有数据就拥有话语权。特别是在深度学习方法中,更多的训练数据,意味着可以用更深的网络,训练出更好的模型。所以尽情的去做更多的数据,不管是手工去标注还是在已有数据的基础上去进行扩充。

3、正则化

L2正则化

L2正则化就是在代价函数后面再加上一个正则化项:

C0代表原始的代价函数,后面那一项就是L2正则化项,它是这样来的:所有参数w的平方的和,除以训练集的样本大小n。λ就是正则项系数,权衡正则项与C0项的比重。另外还有一个系数1/2,1/2经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘刚好凑整。

L2正则化项是怎么避免overfitting的呢?我们推导一下看看,先求导:

可以发现L2正则化项对b的更新没有影响,但是对于w的更新有影响:

在不使用L2正则化时,求导结果中w前系数为1,现在w前面系数为 1−ηλ/n ,因为η、λ、n都是正的,所以 1−ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。

另外,需要提一下,对于基于mini-batch的随机梯度下降,w和b更新的公式跟上面给出的有点不同:

对比上面w的更新公式,可以发现后面那一项变了,变成所有导数加和,乘以η再除以m,m是一个mini-batch中样本的个数。

为什么L2正则化可以解决过拟合呢?字面上解释,对于一个激活函数g(z) = tanh(z),如果正则化参数变得很大,参数很小,也会相对变小,此时忽略的影响,会相对变小,实际上,的取值范围很小,这个激活函数,也就是曲线函数会相对呈线性,整个神经网络会计算离线性函数近的值,这个线性函数非常简单,并不是一个极复杂的高度非线性函数,不会发生过拟合,而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。

数学一点的解释:

过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。


而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。

L1正则化

在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以λ/n(这里不像L2正则化项那样,需要再乘以1/2,具体原因上面已经说过。)

同样先计算导数:

上式中sgn(w)表示w的符号。那么权重w的更新规则为:

比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

另外,上面没有提到一个问题,当w为0时怎么办?当w等于0时,|W|是不可导的,所以我们只能按照原始的未经正则化的方法去更新w,这就相当于去掉η*λ*sgn(w)/n这一项,所以我们可以规定sgn(0)=0,这样就把w=0的情况也统一进来了。(在编程的时候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)

dropout

L1、L2正则化是通过修改代价函数来实现的,而Dropout则是通过修改神经网络本身来实现的,它是在训练网络时用的一种技巧(trike)。它的流程如下:

假设我们要训练上图这个网络,在训练开始时,我们随机地“删除”一半的隐层单元,视它们为不存在,得到如下的网络:

保持输入输出层不变,按照BP算法更新上图神经网络中的权值(虚线连接的单元不更新,因为它们被“临时删除”了)。

以上就是一次迭代的过程,在第二次迭代中,也用同样的方法,只不过这次删除的那一半隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一半。第三次、第四次……都是这样,直至训练结束。

以上就是Dropout,它为什么有助于防止过拟合呢?我们从单个神经元入手,如图,这个单元的工作就是输入并生成一些有意义的输出。通过dropout,该单元的输入几乎被消除,有时这两个单元会被删除,有时会删除其它单元,就是说,我用紫色圈起来的这个单元,它不能依靠任何特征,因为特征都有可能被随机清除,或者说该单元的输入也都可能被随机清除。我不愿意把所有赌注都放在一个节点上,不愿意给任何一个输入加上太多权重,因为它可能会被删除,因此该单元将通过这种方式积极地传播开,并为单元的四个输入增加一点权重,通过传播所有权重,dropout将产生收缩权重的平方范数的效果,和我们之前讲过的正则化类似,实施dropout的结果是它会压缩权重,并完成一些预防过拟合的外层正则化。


总结一下,如果你担心某些层比其它层更容易发生过拟合,可以把某些层的keep-prob值设置得比其它层更低,缺点是为了使用交叉验证,你要搜索更多的超级参数,另一种方案是在一些层上应用dropout,而有些层不用dropout,应用dropout的层只含有一个超级参数,就是keep-prob。

实施dropout,在计算机视觉领域有很多成功的第一次。计算视觉中的输入量非常大,输入太多像素,以至于没有足够的数据,所以dropout在计算机视觉中应用得比较频繁,有些计算机视觉研究人员非常喜欢用它,几乎成了默认的选择,但要牢记一点,dropout是一种正则化方法,它有助于预防过拟合,因此除非算法过拟合,不然我是不会使用dropout的,所以它在其它领域应用得比较少,主要存在于计算机视觉领域,因为我们通常没有足够的数据,所以一直存在过拟合,这就是有些计算机视觉研究人员如此钟情于dropout函数的原因。直观上我认为不能概括其它学科


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 过拟合和欠拟合是机器学习中常见的问题。 过拟合指的是模型在训练集上表现很好,但在新的、未见过的数据上表现不佳。这是因为模型“过于复杂”,它在训练集上学习了训练集的噪音,而无法适应新数据。 欠拟合指的是模型在训练集上和测试集上都表现不佳,这是因为模型“过于简单”,它无法捕捉到训练集中的复杂关系。 总之,过拟合是模型在训练集上表现过好,在测试集上表现过差,而欠拟合是模型在训练集和测试集上都表现不佳. ### 回答2: 过拟合和欠拟合是机器学习中常见的两种模型错误。 过拟合表示模型在训练数据上表现较好,但在测试数据上表现较差。过拟合一般发生在模型复杂度过或者训练数据过少的情况下。当模型过于复杂时,它会过度关注训练数据中的噪声或异常值,从而导致其捕捉到的模式过于特定,无法泛化到新的数据过拟合的模型可能会出现较低的偏差(训练误差小),但较方差(测试误差大),即对训练数据敏感性,对新数据泛化能力差。 相反,欠拟合表示模型无法捕捉到数据中的全部模式和结构,无法很好地拟合训练数据。欠拟合一般发生在模型复杂度过低的情况下,或者训练数据中存在较多的噪声或复杂模式时。欠拟合的模型可能会出现较的偏差(训练误差大),但较低的方差(测试误差小),即对训练数据敏感性低,对新数据泛化能力强。 区别总结如下: - 过拟合表示模型过于复杂,过度拟合训练数据,导致其在测试数据上表现较差;欠拟合表示模型过于简单,无法很好地拟合训练数据。 - 过拟合的模型具有低偏差和方差;欠拟合的模型具有偏差和低方差。 - 过拟合主要解决方法有降低模型复杂度、增加训练数据量、正则化等;欠拟合主要解决方法有增加模型复杂度、优化模型参数等。 ### 回答3: 过拟合和欠拟合是在机器学习中常见的两种模型问题。过拟合指的是模型过度适应了训练数据集,导致在新的未见过的数据上表现不佳。欠拟合则是指模型无法学习到数据中的特征和规律,无论是在训练数据集还是未见过的新数据上都表现不佳。 过拟合的主要特征是模型在训练数据上表现非常好,但在测试数据上表现较差。原因通常是模型过于复杂,参数过多,或者训练数据集太小。过拟合的模型会记住训练集中的噪声和异常值,从而泛化性差。解决过拟合方法包括增加训练数据减少模型复杂度(如降低参数个数或使用正则化方法)以及采用交叉验证等。 相反,欠拟合的模型通常是由于模型过于简单,无法拟合数据中的复杂关系和特征。因此,无论在训练数据还是新数据上,欠拟合的模型都具有较的误差。解决欠拟合的方法包括增加模型复杂度、增加特征数量、改进特征提取方法等。 总而言之,过拟合和欠拟合是机器学习中常见的模型问题,过拟合指模型过于适应训练数据而泛化能力差,欠拟合指模型过于简单无法拟合数据的复杂规律。解决过拟合和欠拟合的方法都需要在训练过程中进行调整,以使模型在未见过的新数据上表现更好。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值