[cs231n] assignment2 Dropout部分

Dropout部分是assignment2的一个重要组成部分。其实dropout思想不难,就是针对一层网络中的输出神经元中,我们选择随机选择输出的一些神经元作为下一层的输入,而不是全部选择。下面这个图可以很形象地解释dropout层的作用。dropout值越高,越多的神经元被激活

《[cs231n] assignment2 Dropout部分》

然后在我们的cs231n的assignment2中,我们的dropout是一种inverted dropout,具体而言:在训练中,每个神经单元是以概率p被保留的,此时如果再到训练阶段,也必须要在激励的结果中乘上因子p进行缩放,这样非常影响测试的性能。因此为了提高在测试时的性能(减少测试时的时间),我们将缩放的工作挪到了训练阶段,而测试阶段与不使用dropout相同,称为inverted dropout. 主要做法就是对于每一个上一层的输出,我们通过一个随机化的array,这个array中的取值是在[0,1]中的一个double>=p的布尔值,通过这样生成出一个numpy的array,然后将这个array和输出的array相乘,从而达到过滤的作用。可以参考下面的dropout_forward的代码:

关于不同的正则项,我们可以参考课程的一篇tutorial

Quesion

  1. 读相关的博客,说dropout的好处在于可以避免过拟合现象的发生,不过有了BatchNormlization层后这个dropout的意义就不大了。这个我有点不怎么理解。
  2. 关于随机失活,为了使得在不改变测试过程时的网络结构且保持期望不变,为什么是除以(1-p),推导上我好像还需要了一些麻烦。

Ref

https://www.cnblogs.com/makefile/p/dropout.html

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注