09_为什么图像输入网络前要进行归一化

问题

在将图像输入到深度学习网络之前,一般先对图像进行预处理,即图像归一化,为什么需要这么做呢?

问题背景

之前在和师弟讨论的时候问了我有个问题“机器学习中为什么要做特征归一化?

我的回答是“特征归一化可以消除特征之间量纲不同的影响,不然分析出来的结果显然会倾向于数值差别比较大的特征,另外从梯度下降的角度理解,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解”。接着他又抛出了一个问题“图像的像素值都是在0到255之间,并不存在量纲的差别,那为什么还需要做归一化呢?”是啊,为什么还要呢,被问住了……

问题解答

对于机器学习中要进行特征归一化这一个问题,总结起来有三个点

  • 消除特征之间量纲的影响,使得不同特征之间具有可比性(这个很容易理解,比如说有14个指标,要分析这14个指标对最终结果的影响,首先要做的事情就是特征归一化,让14个指标都处于一个数据分布内,这样才有可比较性
  • 在使用随机梯度下降的模型中,能加快模型的收敛速度(模型训练的本质就是数据拟合,数据要拟合的好的前提是特征工程做得好,当所有数据都在一个数据分布内的时候,模型当然可以更好地拟合数据啦
  • 特定场景,归一化能提高精度:一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

为什么图像输入网络前要进行归一化

  • 灰度数据表示有两种方法:一种是uint8类型、另一种是double类型。其中uint8类型数据的取值范围为 [0,255],而double类型数据的取值范围为[0,1],两者正好相差255倍。对于double类型数据,其取值大于1时,就会表示为白色,不能显示图像的信息,故当运算数据类型为double时,为了显示图像要除255。
  • 图像深度学习网络也是使用gradient descent来训练模型的,使用gradient descent的都要在数据预处理步骤进行数据归一化,主要原因是,根据反向传播公式: ∂ J ω 11 = x 1 ∗ 后面层梯度的乘积 \frac{\partial J}{\omega_{11}} = x_1*后面层梯度的乘积 ω11J=x1后面层梯度的乘积 如果输入层 x 很大,在反向传播时候传递到输入层的梯度就会变得很大。梯度大,学习率就得非常小,否则会越过最优。在这种情况下,学习率的选择需要参考输入层数值大小,而直接将数据归一化操作,能很方便的选择学习率。在未归一化时,输入的分布差异大,所以各个参数的梯度数量级不相同,因此,它们需要的学习率数量级也就不相同。对 w1 适合的学习率,可能相对于 w2 来说会太小,如果仍使用适合 w1 的学习率,会导致在 w2 方向上走的非常慢,会消耗非常多的时间,而使用适合 w2 的学习率,对 w1 来说又太大,搜索不到适合 w1 的解
  • 提高模型鲁棒性:通过将像素值归一化到相同的尺度,可以提高深度学习模型的鲁棒性和泛化性能。这是因为不同的图像将具有相似的特征数据分布,而不是在不同的图像中产生非常大的变化。

归一化的操作

那么深度学习中在训练网络之前应该怎么做图像归一化呢?有两种方法:

  • 归一化到 0 - 1:因为图片像素值的范围都在0~255,图片数据的归一化可以简单地除以255. 。 (注意255要加 . ,因为是要归一化到double型的 0-1 。
  • 归一化到 [-1, 1]:在深度学习网络的代码中,将图像喂给网络前,会先统计训练集中图像RGB这3个通道的均值和方差,如:mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375],接着对各通道的像素做减去均值并除以标准差的操作。不仅在训练的时候要做这个预处理,在测试的时候,同样是使用在训练集中算出来的均值与标准差进行的归一化。

注意两者的区别:归一化到 [-1, 1] 就不会出现输入都为正数的情况,如果输入都为正数,会出现什么情况呢?:根据求导的链式法则,w的局部梯度是X,当X全为正时,由反向传播传下来的梯度乘以X后不会改变方向,要么为正数要么为负数,也就是说w权重的更新在一次更新迭代计算中要么同时减小,要么同时增大。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值