Dropout
Dropout是类似Dense层的一种层,用来连接整合神经元的,它是用来处理过拟合的问题。过拟合是因为模型要学习训练数据间的spurious pattern(伪模式), 要辨认出这些伪模式就需要每个神经元的weight之间有一些具体的联合,这些weight间的联合就像是一种共谋,这会导致模型模型性能下降。
这时候就轮到dropout登场了,它在每一次训练的循环里随机的丢弃一部分神经元的输出来避免weight之间的这种共谋,由于这些权重是具体的所以只要丢弃一部分共谋就被破坏了。你可能会问,既然识别这些伪模式需要共谋,那么我打破共谋不就识别不了了吗。其实这就是过拟合的本质,由于模型学习了这些伪模式就导致了模型在训练集上表现很好而在新的数据上很差,所以打破共谋就能避免过拟合。
如果你清楚随机森林这类集成模型的话两者做的事情很类似,简单说就是一个大的模型表现不好那就分成很多小的模型,虽然它们也会犯错但是所有的模型合在一起就能得到正确的结果。
Batch Normalization
简称为batchnorm,其和dropout一样也是一种层,用来解决模型训练太慢和不稳定的问题。在神经网络里我们最好把数据规范化,如果数据不规范(没有一个统一的尺度)那么就会影响weight,因为weight是把数据传入模型算出来来调整的,这会导致模型表现糟糕。所以我们在模型开始训练之前就进行数据的标准化,batchnorm层就是用来做这件事情的。
今天介绍的两个层都是用来提高模型性能的。