前言: 大家都知道,当我们对着一些数据使劲训练时,如果训练次数过多就会导致过拟合,过拟合时只能认出我们的训练集,测试集里是数据很难认出来,因此训练出来的模型效果也不好。
Dropout在实践中可以完美解决这个问题,那么它是如何做到的?
Droupout的流程很简单: 随机丢掉一部分神经元,再进行前向和反向传播,重复这个过程。这样可以让模型更鲁棒,因为它不会太依赖某些局部的特征(因为局部特征有可能被丢弃)
为什么丢掉一部分神经元就可以有防止过拟合的魔力?
- 首先,在处于过拟合状态时,如果输入数据失去某些和训练集不一样的特征,即使很小的特征,也会导致模型识别不出来,(比如猫咪识别训练集中的数据,每个图片数据都含有猫的100个特征,那么如果测试图片只包含了99个猫的特征,过拟合的模型就会认为它不是猫)
- 此时Dropout随机丢掉一些神经元,那么神经网络提取的猫的特征就会随着这些神经元丢失,从而导致神经元只提取出90个、95个、88个猫的特征,并用这些特征正向和反向传播训练神经网络,此时会有什么影响?会使得测试图片即使丢失了某些猫的特征,只具备89个猫的特征,也能被Dropout的神经网络识别出来,既然该网络不再过分拟合训练数据且对测试集表现良好,那么当然就完美解决了过拟合问题。
更高层次地理解Dropout
通过上面我们知道了Dropout本质是丢弃了训练集部分特征来防止过拟合的,那么这意味着什么?
这不就是我们平时所采集的噪声数据吗,比如做手写识别时,弄一些滴了墨水或者局部遮挡的图片数据,做人脸识别时弄一些戴墨镜、眼罩、口罩的人脸数据,这些数据的共同点就是:增加了噪声=失去了部分特征。
所以Dropout等同于弄了许多噪声数据进行训练,当然可以有效阻止过拟合
参考资料:https://www.sohu.com/a/128044399_633698