具体操作:对于一个三层网络来说,就是每次每层计算输出,以一定概率乘以一个掩码0,一般为50%,从而让一半的输出无效化,对于被选中的节点,就相当于失活了。
那么为什么要随机失活?
解释一:
避免过拟合
一个猫的特征是多种的,但有时候某些特征过于明显导致其他特征不明显,从而抑制了其他特征的在网络中的表述,这就是对明显特征的过拟合,所以失活可以使你的表征对于图片的表示是冗余的,由于每一个特征都有可能失活,所以分类必须依赖于各种各样的特征。
实际使用时,有时候这个明显的特征获取不到,不明显的特征又没有训练好,就会造成分类错误,所以说随机失活可以防止过拟合,其实和人的学习过程也挺像。
解释二:
随机失活相当于把很多小网络组合大网络,相当于多个网络的混合,之前也说了,会有这样会有性能上的提高。失活不是把权值置零,只是暂时的让他输出不起作用,相当于输出乘以掩码0。想要更多的正则化,可以使用每次失活更多的神经元。
在测试的时候:
可以看到,由于P设置为0.5,所以训练时候的权值只有测试时候权值的一半。所以在测试的时候,不要忘记让**函数乘以P。
有两种修正方式:
1、
在输出的时候*p
2、
或者在训练的时候/P
两种方式有什么不同?