1-7 理解 dropout
理解 dropout( Understanding Dropout)
从单个神经元入手,如图,这个单元的工作就是输入并生成一些有意义的输出。
通过 dropout,该单元的输入几乎被消除,有时这两个单元会被删除,有时会删除其它单元,就是说,用紫色圈起来的这个单元,它不能依靠任何特征,因为特征都有可能被随机清除,或者说该单元的输入也都可能被随机清除。
我不愿意把所有赌注都放在一个节点上,不愿意给任何一个输入加上太多权重,因为它可能会被删除,因此该单元将通过这种方式积极地传播开,并为单元的四个输入增加一点权重,通过传播所有权重,
dropout 将产生收缩权重的平方范数的效果,和我们之前讲过的 L2正则化类似,实施 dropout的结果是它会压缩权重,并完成一些预防过拟合的外层正则化。
dropout 被正式地作为一种正则化的替代形式,L2对不同权重的衰减是不同的,它取决于倍增的激活函数的大小。
dropout 的功能类似于L2正则化, 与 L2正则化不同的是,被应用的方式不同,dropout 也会有所不同,甚至更适用于不同的输入范围。
对于一个多层神经网络:
- 每个层的 keep-prob参数可以不同,可以把某些层的 keep-prob值设置得比其它层更低,缺点是为了使用交叉验证,你要搜索更多的超级参数 。
- 也可以在一些层上应用 dropout,而有些层不用 dropout,应用 dropout 的层只含有一个超级参数,就是 keep-prob。
dropout在计算机视觉中应用得比较频繁,有些计算机视觉研究人员非常喜欢用它,几乎成了默认的选择,但要牢记一点, dropout 是一种正则化方法,它有助于预防过拟合,因此除非算法过拟合,不然我是不会使用 dropout 的,所以它在其它领域应用得比较少 。
dropout 一大缺点就是代价函数 J不再被明确定义,每次迭代,都会随机移除一些节点,如果再三检查梯度下降的性能,实际上是很难进行复查的。定义明确的代价函数 J每次迭代后都会下降,因为我们所优化的代价函数J实际上并没有明确定义,或者说在某种程度上很
难计算,所以我们失去了调试工具来绘制这样的图片。
通常的做法是:
通常会关闭 dropout 函数,将 keep-prob 的值设为 1,运行代码,确保J函数单调递减。然后打开 dropout 函数,希望在 dropout过程中,代码并未引入 bug。