先看一下pytorch中dropout函数的用法
可以看到该方法的用途就是在训练的时候根据一个给定的概率随机的将输入tensor的元素置为0,在卷积神经网络中,这个tensor通常指的是卷积后的feature map。
在吴恩达的改善深层神经网络的课程中也给出了dropout为什么会有作用的解释(也给出了如何实现的方法,用兴趣的话可以去了解一下)。
dropout是一种正则化的方法,可以减少神经网络的过拟合,在训练神经网络的时候,它会随机的删除一些节点,如下图所示:
这样就会得到一个节点更少,规模更小的网络。但是如何直观的去理解它呢?
假如我们只看网络的一个小部分,对于紫色的节点,它要接受前一层节点的输出,但是由于节点会随机的删除,如图中红叉的部分,这样的话紫色节点就不会过分的去依赖某一个节点的输出,因为它们都可能会被删除掉,网络就会赋予这些连接很小的权重,通过这种训练方法,将会产生收缩权重平方范数的效果。和L2正则化相似,使用dropout的方法会压缩权重。
而在卷积神经网络中,卷积核的作用就类似与这些节点之间的连接,是需要去训练的权重,而feature map则类似于这些节点,因此pytorch的dropout实现方法才会是对feature map进行置零操作。