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

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

什么是过拟合?


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

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

  • 训练集(顾名思义,用来训练的)

  • 验证集(训练过程中去验证模型效果的)

  • 测试集(用来评测模型最终效果的数据集)

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

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

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

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

或者看图更好理解:

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

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

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

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

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

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

  1. 数据有噪声

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

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

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

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

如何避免过拟合?


直接上结论:

  1. early stopping

  2. 扩增数据集

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

  4. dropout正则化

early stopping

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

上图更好解释:

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

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

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

扩增数据集

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

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

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

  3. 重采样

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

正则化

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

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

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

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

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

dropout

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

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

Dropout是如何防止过拟合的?


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

Dropout的灵感:遗传和突变

我们来看一张图

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

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

无性繁殖vs有性繁殖

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

无性繁殖有以下特点:

  • 遗传单亲基因

  • 继承优秀基因,轻微突变(不变坏)

有性繁殖则是:

  • 遗传双亲独特基因

  • 组合之后,加上随机的突变(可好,可坏)

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

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

Dropout带来的模型变化

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

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

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

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

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

最后

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

  • Android进阶学习全套手册
    关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。

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

  • Android高级架构师进阶知识体系图
    关于视频这块,我也是自己搜集了一些,都按照Android学习路线做了一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!
    《理解Dropout》分享,Jetpack-MVVM高频提问和解答

  • Android对标阿里P7学习视频

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

  • BATJ大厂Android高频面试题
    这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
    《理解Dropout》分享,Jetpack-MVVM高频提问和解答

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

  • Android对标阿里P7学习视频

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

  • BATJ大厂Android高频面试题
    这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
    [外链图片转存中…(img-gxTeSpHg-1643885474683)]

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

上一篇:抖音、美团、微信,kotlin教学


下一篇:分页的存储过程