dropout原理的理解

      dropout是深度学习的一个很朴素也很实用的思想,为了减少过拟合问题提出来的。传统的神经网络是全连接的,也就是前一层的每一个神经元都会和下一层的每一个神经元全部连接。  为了减少层与层之间的连接,提出来了使用随机的方法,对其进行只连接一部分。使用一个概率p,只连接一定概率的神经元(以一定概率生成一堆0和1,其中1表示连接,0表示不连接)。在训练的过程中,每一次输入都会使隐层的神经元按照一定概率进行连接,这样训练的过程中会形成很多个不同的网络结构,会减少一定计算量,因为每一次迭代的过程不需要训练整个全连接的权重,而是,只是随机的一部分,不过,训练结束后,每个神经元之间的权重都会被得到计算。

        值得注意的是,在验证和测试阶段dropout是被禁用的,因此只存在于训练阶段,因此,我们在验证和测试阶段是使用全连接的神经网络,算出来的结果需要乘以概率p(这个p很关键,有的是定义的失活的概率,有的是存活的概率,因此有的是写的1-p,其实是一样的)。或者是在训练阶段,在dropout后面的结果除以p。这个过程看起来就是很像标准化的过程。

         之所以敢说训练结束后,每个神经元之间的权重都会被得到计算,因为假如有的神经元没有权重,我们是测试阶段有的权重值没有的话,我们测试时怎么计算全连接的神经网络的呢?因此,我大胆的设想了,训练的时候是同一数据集作为输入,训练了很多个神经网络,类似于随机森林,然后将多个结果进行投票或者求均值。这才是dropout效果好而且稳定的一个精髓,不过这个猜想没有找到相关的文献验证。

        而且,dropout另外一个伟大之处在于,随机选择的过程,其实这减少了特征之间的高度关联,因为,训练的过程,不存在固定的神经元之间的连接,因此上次连接过的,下次可以就没连接了,这样也能大大丰富可能性,很有集成学习的味道。而且,这个p是作用在伯努利分布上的,这样的我们计算期望的时候,前面使用标准化的思想(前面提到的乘以p的过程)就具备理论依据。

你可能感兴趣的:(深度学习)