深度学习中为什么要使用零均值化(zero-mean)处理


    在深度学习中,一般我们会把喂给网络模型的训练图片进行预处理,使用最多的方法就是零均值化(zero-mean) / 中心化,即让所有训练图片中每个位置的像素均值为0,使得像素值范围变为[-128,127],以0为中心。
这样做的优点是为了 在反向传播中加快网络中每一层权重参数的收敛

原因

    常用的激活函数(例如ReLu或者Sigmoid)输出和导数都是大于等于0的。如果神经网络输入样本被预处理在0-1之间,如果没有batchnorm,那么经过激活函数后,每一层结构的输入和输出都大于等于零,那么该层权重的各维的梯度也一定是同符号的,就导致梯度下降的方向只能在第一或者第三象限
因此,如果局部极小相较初始值位于第二或者第四象限,梯度下降只能以ZigZag的方式靠近极小值,收敛速度就会非常的慢。如下图:
在这里插入图片描述
    不过因为有了batchnorm之后,或者用LeakyReLu这种激活函数,无论样本预处理为均值为0还是0-1之间,顶多影响第一层的收敛速度,所以差距不大。样本的方差更无所谓,毕竟只是相当于在第一层权重上乘以一个系数。

参考链接

https://www.zhihu.com/question/327435793
https://blog.csdn.net/mooneve/article/details/81943904

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐