机器学习论文学习(1):Batch Normalization
机器学习论文阅读(1):Batch Normalization
使用背景:
神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch
梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。
作用:
1,每一层隐藏层的input均值为0,方差为1,加速训练
2,起到regularization的作用,但是这属于附加效果
针对每一mini-Batch,对每一个隐藏层进行归一化处理:
注意这里的x是在activation layer之前的输入(吴恩达deeplearning 2 week3),经过gamma、beta的调整,使x的分布略微调整,可以发挥非线性函数的作用(输入时均值为0,方差为1,非线性**函数近似于线性函数,而几个线性函数的叠加还是线性函数),给gamma、beta赋恰当的值,可以是x_hat转化为x
线性计算x的时候不需要加偏置b,因为之后beta会调整
bp算法:
更新参数的时候,每个量 - learning_rate * d* 即可
测试:
测试阶段我们一般只输入一个测试样本
引入指数加权平均数,计算之前mini-batch的mu、sigma来估算test data的mu、sigma
或者如论文:
Charlie
杭州
8.8
参考资料:
1. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
2. https://blog.****.net/hjimce/article/details/50866313
3. Coursera deep learning by Ng