w的赋值比较困难,稍一赋值不好,就会使得CNN很脆弱,变得特别发散或特别难;我们就得想办法,看能不能约束一下这个w。
我们希望激励过后的结果是高斯分布的,手动可以进行修改:首先对每一个维度都独立计算经验均值和方差,再进行标准化。
我们也可以想办法让它自动进行修改,而Batch Normalization就可以进行这样的操作。
Batch Normalization通常是在全连接层后(因为全连接层后的波动是最大的,最需要进行约束),激励层前:FC->BN->tanh。下面是其基本步骤:
BN只是一个变换,不是一层(理解的时候可以看做一层)。
BN的优点:
- 梯度传递(计算)更为顺畅;
- 学习率设高一点也没关系;
- 对于初始值的依赖减少了;
- 其实,这个也可以看作是一种正则化。减少了对dropout的需求,但是不能过于依赖BN,没有dropout,同样可能会过拟合。