其他分享
首页 > 其他分享> > 《理解Dropout》分享,Jetpack-MVVM高频提问和解答

《理解Dropout》分享,Jetpack-MVVM高频提问和解答

作者:互联网

那么这里引出一个更重要的问题是,什么是过拟合

什么是过拟合?


定义:过拟合就是训练出来的模型在训练集上表现很好,但是在测试集上表现较差的一种现象。

这里先普及下训练模型关于数据集的划分,一般情况我们都会将数据集划分为以下:

这样我们比较清楚过拟合在不同数据集会有什么样的表现。说白了,就是模型在训练集学习到的东西,不能很好的泛化到测试集,造成这样的原因有很多,稍后继续讲。

可能上面的定义对没有怎么接触过深度学习的同学可能还不够直观,我举个通俗一点的例子:

训练的情况:比如你去学车,在训练场上你熟练记得倒车入库还有侧方位停车的口诀,每次都能倒进去,因为你已经很熟悉这个环境了,这个是训练的时候的情况,自我感觉良好

测试的情况:但真正上考场的时候,妈蛋,发现情况跟自己想得完全不一样,换了车和场地之后就不知道怎么开了,起步直接挂掉,这个就是考试的情况,完全不符合预期,这就是过拟合

或者看图更好理解:

模型拟合情况

左边:欠拟合,完全没有学会东西。

中间:刚刚好拟合,更符合我们对模型的预期。

右边:过拟合,过度拟合训练集的数据了。

ok,关于模型过拟合的定义,我们应该比较清楚了。

那么产出过拟合的原因有哪些?

  1. 数据有噪声

  2. 训练数据不足,有限的训练数据

  3. 训练模型过度导致模型非常复杂

总的一句话:模型开始胡思乱想了

那问题来了:怎么避免过拟合?

如何避免过拟合?


直接上结论:

  1. early stopping

  2. 扩增数据集

  3. 控制模型参数大小(正则化:L1、L2)

  4. dropout正则化

early stopping

大致意思就是在模型对训练数据集迭代收敛之前停止迭代防止过拟合。

上图更好解释:

early stopping

可以看到模型的error是随着训练时间是呈曲线下降的,也就是说,这里包括train error和cross validation error,如果它在训练过程中在某个最低点之后cross validation error开始上升,说明模型可能存在过拟合了。

一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。

扩增数据集

有时候往往拥有更多的数据胜过一个好的模型。

  1. 从数据源头采集更多数据

  2. 复制原有的数据并加上随机噪声

  3. 重采样

  4. 根据当前数据集估计数据分布参数,使用该分布产生更多的数据等

正则化

即在对模型的目标函数或者代价函数加上正则项。

一般我们会采用L1、L2正则项,引用莫凡python的一张图:

这里写图片描述

其中L1范数是指向量中各个元素绝对值之和。L2范数是指向量各平方和然后求平方根。

关于更多L1、L2的详细介绍可以参考:L1、L2正则化

dropout

dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。

ok,以上就是避免过拟合的一些方法,下面我们正式讲下dropout是如何防止过拟合问题的。

Dropout是如何防止过拟合的?


在理解为什么Dropout对过拟合为什么有效之前,我们先看下Hinton大神发明Dropout这个利器的灵感和动机是什么。

Dropout的灵感:遗传和突变

我们来看一张图

无dropout网络&dropout网络

左边这张是没有用dropout的神经网络,右边这张是使用了dropout的神经网络。大家一眼应该就能看出它们之间的区别,明显左边的网络是比较复杂的,右边它似乎删除了一些神经元,让整个网络变得更小。

无性繁殖vs有性繁殖

在Hinton大神论文中做了这样的类比,无dropout的网络和经过dropout的网络可以类比成无性繁殖有性繁殖,为什么它们可以做这样的类比,我们就要从这两者之间的特点来看。

无性繁殖有以下特点:

有性繁殖则是:

从这两者的特点来看,似乎无性繁殖会更有优势才对,因为无性生殖的物种可以基本把父辈的基因内容都保留下来,而这些基因是父辈优化好的结果,如果一直这样下去的话,应该会越来越优才对。但实际上并非如此,从进化的角度来看,有性繁殖是比无性繁殖要更高级的。因为有性繁殖它通过基因的随机组合,打破了基因组之间的co-adaptation(联合适应性),意思减少了基因组之间的依赖,这样能让它们在突变的环境下产生更好的适应性。

无dropout的网络就像无性繁殖一样,它虽然能够学习到一些东西,但它更多适用于数据固定的情况,特征也比较固定的情况,它确实是能很有效的拟合数据。但一旦出现不可预见的数据的时候,它就会变得手无足措了。 而使用dropout的网络更能符合我们的实际的场景,网络需要去突变,去进化去适应环境,这样才能更好的去适应非特定场景的情况,具有更好的泛化能力。

Dropout带来的模型变化

这里写图片描述

左边:在训练时,每个神经单元都可能以概率p去除。

右边:在测试阶段,每个神经元都是存在的,权重参数w要乘以p,成为pw。

左边我们应该比较好理解,每个神经元都有概率p参与单次神经网络的训练。而测试的时候,神经元是不会去除的,每个神经元都是存在的,权重参数w要乘以p。那么这里就产生一个问题,为什么参数w要乘以概率p

问题:怎么理解测试时权重参数w要乘以概率p?

最后

文章不易,如果大家喜欢这篇文章,或者对你有帮助希望大家多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

习。接下来看一下导图和对应系统视频吧!!!
[外链图片转存中…(img-eEGWeI3O-1643885474682)]

[外链图片转存中…(img-FABQGoHy-1643885474683)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

标签:MVVM,训练,模型,Jetpack,Dropout,拟合,Android,数据,dropout
来源: https://blog.csdn.net/m0_66264856/article/details/122777829