回复
DeepNetwork中一般Dropout原理
Dropout现在这个操作在目前这个深度学习时代中是非常常见的一个操作。对于Dropout的好处我们也听过很多,降低过拟合,提高模型的鲁棒性,控制模型复杂度等blabla。。
但我比较好奇的是,Dropout是怎么实现以上好处,经过一番了解,简单描述下。
Dropout实际上我们可以先理解成给予Network结构中的一种噪音,但是我们这个噪音不是随便给,是有一定数学理论支撑,我们是选择无偏差地往网络结构中加入噪音。
通常来说,训练的时候才需要用到dropout,推理的时候不需要。理由也很简单,一个保证推理的时候有确定性输出,另一个是dropout的好处并没有在推理时体现,无需徒增计算。
这是李沐在《动手学深度学习》里面实现的代码,不得不说真的简单易懂。
当dropout等于1的时候,要返回跟上一层输出shape一致的全零矩阵。当dropout=0时,说明无需丢弃,则返回原值。
当在0<dropout<1之间,(torch.randn(X.shape) > dropout).float()生成一个跟X的shape一致的零一矩阵表示不同 输出与否,然后这个mask*X就是实际输出的X结果,再除以之前期望公式所需要的(1-dropout),得到最终结果。
论文出处:https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf
本文转载自 沐白AI笔记,作者: 沐白
赞
收藏
回复
相关推荐