深度学习存在两个问题
1,由于更新权重导致输入取值范围的变化导致收敛慢。
2,由于输入数量的增多,一般都是累加x*w。而若假设他们都是正太0,1分布,那么加的越多会导致方差越大,因此使用sigmoid会导致饱和,而使用relu 等线性的会导致数有可能很大,几百上千的值。
解决方案
将每个核的输出给一个归一化,让其都保持期望是0,方差为1。
归一化的话无非就是求均值方差,而根据求得方法分为很多种,因此出现各种normalization 方法。
batch 方法就是在batch范围内对每个单个得输出求均值。
layer 方法是在每个layer求均值。
而最新的Cross Iteration Batch Normalization,由于batch normalization是batch 求均值,因此batch小了的话反而造成不好的效果,因此尝试累计这个均值和方差。
但是不同次batch 训练时参数都变了,因此直接利用前几次batch 的均值和方差有偏差,因此需要做一个简单的线性拟合。
具体计算见原论文,或https://zhuanlan.zhihu.com/p/159762029