让我向您展示一个玩具示例和我对图像规范化的推理:
假设我们有一个 CNN 架构来将 NxN 灰度图像分为两类。像素值范围从 0(黑色)到 255(白色)。
- 0 类:图像中心包含一个实心圆圈的图像。圆圈内的像素值高,接近255。圆圈外的像素低,接近0。下面是一个0类图片的例子。
- 第 1 类:为空的图像,包含接近 0 的像素。下面是一个示例,基本上是一张深色图像。
注意:图像基本上显示二进制值:白色/黑色,但是,假设黑色值可能在 [0, 30] 和白色值 [230-255] 的范围内,并具有一些随机分布。
在向网络提供图像之前,我们对数据进行预处理和规范化。这基本上意味着(i)使数据居中和(ii)缩放数据。一种典型且简单的方法是对所有像素减去 127.5 并按 255 缩放,以使像素值范围为 [-1, 1]。或者,另一种方法包括计算“平均图像”和“动态范围图像”,并以像素为单位对图像进行居中和缩放。让我们关注后者。
计算“平均图像”主要是指将所有图像按像素求和并按像素求平均。结果,我们获得了 NxN 平均图像。这有时可以阐明我们的任务并帮助我们了解我们正在使用的数据。同样,“动态范围图像”是通过逐像素计算最大值和最小值来获得的。“动态范围图像”向我们展示了每个像素可以取的值范围。
假设 1
在训练期间,CNN 中不同层的内核将尝试检测圆圈。由于任务相当简单,因此内核基本上必须了解当存在圆形时,存在从“空白区域”到“圆形区域”的强烈像素值转换。
假设 2
在对图像像素进行归一化之后,我们得到所有像素具有相同的范围和相同的均值,分别为 [-1, 1] 和 0。
最终假设
考虑一个 0 类图像(即图像有一个圆圈)。在归一化之前,像素 (i, j) 的值为 30(暗),这恰好是像素 (i, j) 所采用的最大值。像素 (i, j+1) 的值是 255(白色),也是像素 (i, j+1) 所取的最大值。所以我们有一个强大的过渡,第一层的内核应该能够学习。
但是,如果我们用“平均图像”和“动态范围图像”对数据进行归一化,这种强烈的转变不会被软化吗?特别是,转换将从值 1 到值 1,因为两者都是它们各自位置的最大值。从一个清晰而艰难的过渡中,我们以从相似值像素的过渡结束。
结论 使用这种逐像素归一化,我们最终会丢失全局像素信息,这可能会使内核的工作更加困难。我相信如果使用“方差图像”而不是“动态范围图像”,可能会得出相同的结论。
问题 是我遗漏了一些观点还是不再使用这种标准化?
另外 ,我还想到了批量标准化,它有时用于第一层,以便在网络内完成标准化。我想也许BN中使用的参数“beta”和“gamma”可能能够解决这个问题,如果它在训练时出现的话。