Dropout正则化
Dropout介绍
除了L2正则化之外,还有一个很重要的正则化方法叫随机失活(Dropout),下面,我们来了解一下。
如图所示,假设网络中的每一层的节点都以抛硬币的形式来设置概率,每一个节点得以保留和消除的概率都是0.5。
设置完节点之后,我们会删除得分是0分节点,然后删除从该节点进出的连线。最后得到一个节点更少,规模更小的网络。之后我们用反向传播算法进行训练。
其他样本,我们也按照这个方法进行训练,即删除一些节点,然后用一些精简的网络进行训练。对于每一个样本,我们都用精简的网络进行训练。
如何实施Dropout
实施Dropout的方法有很多,最常见的是反向随机失活(Inverted Dropout)
如图所示,我们使用三层神经网络举例。
d3表示一个三层的Dropout向量,keep-prob是一个具体的数,比如说上个例子中的0.5,这个例子我们用0.8来表示。这个数表示的是保留某个隐藏单元的概率
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep-prob
这行代码表示的是它消除任意一个隐藏单元的概率是0.2,它的作用就是生成一个随机矩阵。也就是对于每一个隐藏单元而言,d3的值是1的概率都是0.8,而对应的值是0的概率是0.2。
接下来我们要做的是从第三层获取激活函数。
a3 = np.multiply(a3, d3)
他的作用就是过滤d3中所有等于0的元素。乘法运算最终把d3中的相应元素归零。
最后,我们进行
a3 /= keep-prob
他的功能是比如就像图中下面部分说的