计算机视觉工程师在面试过程中主要考察三个内容:图像处理、机器学习、深度学习。然而,各类资料纷繁复杂,或是简单的知识点罗列,或是有着详细数学推导令人望而生畏的大部头。为了督促自己学习,也为了方便后人,决心将常考必会的知识点以通俗易懂的方式设立专栏进行讲解,努力做到长期更新。此专栏不求甚解,只追求应付一般面试。希望该专栏羽翼渐丰之日,可以为大家免去寻找资料的劳累。每篇介绍一个知识点,没有先后顺序。想了解什么知识点可以私信或者评论,如果重要而且恰巧我也能学会,会尽快更新。最后,每一个知识点我会参考很多资料。考虑到简洁性,就不引用了。如有冒犯之处,联系我进行删除或者补加引用。在此先提前致歉了!
这篇博客用面试中的问答形式呈现
了解dropout吗?是用来做什么的?
随机保留网络中的一部分神经元,用来防止过拟合。
具体一些?
对于每个神经元,以概率p对其输出进行保留,否则其输出为0。
这样是否改变了输出的分布?怎么解决的?
设不使用dropout时,一个神经元的输出的期望E=x。
使用dropout后,在训练过程中,对其输出以概率p进行保留,其输出的期望E=px+(1-p)*0=px。
为了使其在测试时输出的期望依然为px,我们对参数乘以p,输出的期望为E=px。
第一个px代表选择性保留,第二个px表示缩放。
那dropout为什么能缓解过拟合?
在每一个batchsize中,训练的神经元的集合都不同,相当于训练了很多个模型。
在测试阶段,相当于多个模型共同作用,抵消了个别模型对于极端数据的拟合,从而缓解过拟合。
同时,一些神经元组合不会经常被一起训练,缓解了它们之间的依赖关系,缓解了过拟合。
可以换一个角度解释吗?
不使用dropout时的A样本和使用dropout时的B样本,可能会使网络产生类似甚至相同的输出。
所以,在使用dropout时,相当于在训练数据中增加了一个A样本,而原数据库中可能没有A样本。
最后相当于做了数据集的扩增,增加了数据量,缓解了过拟合。
一般dropout中的超参数p选为多少?为什么?
一般选为0.5。
设神经元总数为n,保留的概率为p,那么被保留的神经元个数为pn。
如果说训练不同的神经元集合相当于训练不同的模型
那么一共训练了C(n,pn)(组合公式,n为下标,pn为上标)
当p=0.5时,训练的模型数量最多,可以最大程度缓解过拟合。
dropout还有什么作用?
输入添加p接近1的dropout层,相当于对输入数据加了噪声,实现了样本增强。
dropout有什么缺点?为什么很多人觉得BN层可以取代dropout?
1、训练速度慢
每次训练的神经元变少了,每个子模型的能力在一定程度上降低,拟合速度下降,训练时间变长。
2、局限性较强
比较适合全连接层。
对于卷积层,比较依赖特征图中每个元素之间的关系。
而且,卷积层的权值共享和局部连接在一定程度上已经实现了参数的稀疏化。
强行dropout效果未必会变好。
反之,BN层规范了每一个神经元的输入。
不使用BN层,每一个神经元的输入分布变化较大,或者每层的神经元的输入分布存在差异,
每次反向传播最佳的学习率不同,网络需要迁就学习率最小的,训练较慢。
使用BN层后,就可以适当增加学习率,提升训练速度。
同时,BN层对于卷积层也是适用的,通用性较强。
综上,BN层更全面,dropout更适用于全连接层。BN层可能暂时还无法全面取代dropout。
(这句就属于仁者见仁智者见智了)
恭喜你获得我司备胎卡一张!
谢谢!
完
欢迎讨论 欢迎吐槽