深度学习笔记-dropout(随机失活)

  • drop 是通过设定的概率在每一层上随机清除一定的unit,网络会变得简洁,因为少了一些点

      keep-prob = 0.8
      d3.np.random.rand(a3.shape[0],a3.shape[1]) < keep-prob ##hidden layer中80%的点会保留,20%的点会消除,最终会是元素为true和false的矩阵
      a3 = np.multiply(a3,d3)      #a3*d3, 做乘法时,会将d3的元素转成0,1
      ##下面这步骤为 Inverted dropout(反向随机失活),dropout中最常用的种
      ##保证消除部分点后a3的期望值不变,如这里消除了20%的点,通过除以keep-prob来保证期望不变
      a3 /= keep-prob
    
  • 正向测试阶段并不希望结果是随机的,并无必要使用,即使使用后对于每一次z=wx+b也都是线性的运算,并无实际的作用

  • 每一层的keep-prob都可能不一样,如果某层的参数矩阵维度最大,为了消除过拟合,可能会设置keep-prob的值使得该层的unit消除的较多

  • dropout的过程:将一个总的样本分为多个小的样本。假定分成了10份。假如设置的消除概率为20%,则在训练时会消除20%的unit,保留80%,那么对第一批样本保留下来的80%的units进行训练,得到第一次的 y ^ \hat{y} ,后梯度下降,得到新的一批W和b,再对第二批样本重新消除20%(因为这里说是消除,但只是不对其进行运算,单元本身还是在网络中),第二批剩下的80%的units进行运算得到新的 y ^ \hat{y} ,再梯度下降一次,直到找到全局最优解,即cost function的值达到最小值。训练完毕。在测试阶段,是对全部的units,包括先前的20%的units,训练时候只是不对这20%的units进行运算,但是其还保留在网络中,测试的时候不采取dropout,是对全部的100%个units进行运算。

  • drop的缺点是会消除一小点,导致代价cost函数J不再被明确定义,方法是先确定好cost funciton,使其为单调下降的,再使用dropout

猜你喜欢

转载自blog.csdn.net/disasters/article/details/84959929