除了 正则化外,还有一种常用的正则化方法 — dropout (随机失活)
dropout 通过遍历网络的每一层, 并设置消除节点的概率来实现正则化.
最常用的是 inverted dropout(反向随机失活)
来实施 dropout
下面以三层神经网络为例:
keep_prob = 0.8 # keep probability = 0.8
# 生成一个标准正态分布的随机数矩阵(此处是一个向量),和 keep_prob 进行比较,返回布尔值
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_prob
a3 = np.multiply(a3, d3) # python自动把 True 和 False 翻译为为 1 和 0
a3 /= keep_prob # 确保 a3 期望值不变, inverted dropout 精髓
注意: 测试阶段不适用 dropout