当前位置: 首页 > 知识库问答 >
问题:

实例规范化与批处理规范化

卢鸿彩
2023-03-14

我了解批次归一化有助于更快的训练,将激活转向单位高斯分布,从而解决梯度消失问题。批次规范行为在训练(使用每个批次的平均值/var)和测试时间(使用训练阶段的最终运行平均值/var)中的应用不同。

另一方面,实例归一化作为对比度归一化,如本文所述https://arxiv.org/abs/1607.08022。作者提到,输出样式化的图像不应依赖于输入内容图像的对比度,因此实例规范化有助于实现。

但是,我们是否也应该在图像分类中使用实例规范化,因为类标签不应依赖于输入图像的对比度。我没有看到任何论文使用实例规范化代替批处理规范化进行分类。原因是什么?此外,批处理和实例规范化可以并且应该一起使用。我渴望对何时使用哪种规范化有一个直观和理论上的理解。

共有3个答案

廉博赡
2023-03-14

我想为这个问题添加更多信息,因为这方面有一些最近的作品。你的直觉

使用实例归一化进行图像分类,其中类别标签不应取决于输入图像的对比度

部分正确。我会说光天化日之下的猪在晚上或黎明拍摄图像时仍然是猪。但是,这并不意味着在网络上使用实例规范化会给你更好的结果。以下是一些原因:

  1. 颜色分布仍然起作用。如果它有很多红色的话,它很可能是苹果而不是橘子
  2. 在以后的层中,您不能再想象实例规范化充当对比度规范化。特定于类的细节将出现在更深的层中,通过实例对其进行规范化将极大地损害模型的性能

IBN-Net在其模型中使用了批处理规范化和实例规范化。他们只将实例规范化放在早期的层中,并且在准确性和泛化能力方面都取得了改进。这里有开源代码

蒲深
2023-03-14

资料来源:链接到关于媒介对比规范的文章

羊煜
2023-03-14

让我们从两者的严格定义开始:

正如您所注意到的,它们正在做同样的事情,除了共同标准化的进审量张量。批处理版本标准化批处理和空间位置的所有图像(在CNN情况下,在普通情况下不同);实例版本独立标准化批处理的每个元素,即仅跨空间位置。

换句话说,批处理范数计算一个均值和std dev(从而使整个层的分布高斯),实例范数计算它们的T,使每个单独的图像分布看起来高斯,但不是共同的。

一个简单的类比:在数据预处理步骤中,可以根据每个图像对数据进行规范化或对整个数据集进行规范化。

积分:公式来自这里

答案取决于网络架构,特别是在标准化层之后要做什么。图像分类网络通常将特征映射堆叠在一起,并将其连接到FC层,FC层在整个批次中共享权重(现代的方法是使用CONV层而不是FC,但该论点仍然适用)。

这就是分布细微差别开始起作用的地方:同一个神经元将接收来自所有图像的输入。如果整个批次的方差很高,则小激活的梯度将被高激活完全抑制,这正是batch norm试图解决的问题。这就是为什么每实例规范化很可能根本无法改善网络融合的原因。

另一方面,批量归一化会给训练增加额外的噪音,因为特定实例的结果取决于相邻实例。事实证明,这种噪音对网络可能是好的,也可能是坏的。这在Tim Salimans的“权重归一化”论文中得到了很好的解释,该论文将递归神经网络和强化学习DQN命名为噪声敏感应用程序。我不完全确定,但我认为同样的噪声敏感性是风格化任务中的主要问题,实例规范试图与之对抗。检查权重规范是否在这个特定任务中表现更好会很有趣。

虽然它是一个有效的神经网络,但它没有实际用途。批处理规范化噪声要么有助于学习过程(在这种情况下,最好是这样),要么会损害学习过程(在这种情况下,最好忽略它)。在这两种情况下,让网络保持一种规格化可能会提高性能

 类似资料:
  • BatchNormalization层 keras.layers.normalization.BatchNormalization(epsilon=1e-06, mode=0, axis=-1, momentum=0.9, weights=None, beta_init='zero', gamma_init='one') 该层在每个batch上将前一层的激活值重新规范化,即使得其输出数据的均值接

  • BatchNormalization层 keras.layers.normalization.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initia

  • 我可以在输入层之后使用批处理规范化层而不规范化我的数据吗?我可以期望得到类似的效果/性能吗? 在keras函数中,它应该是这样的:

  • 我想使用Batchnormalization来规范化批次维度,但keras中的批次维度自然是无维度的。那我该怎么办呢。 keras示例显示,conv2d的轴为-1,这表示通道尺寸。 轴:整数,应规格化的轴(通常是特征轴)。例如,在具有data\u format=“channels\u first”的Conv2D层之后,在BatchNormalization中设置axis=1。

  • 页面模块化 规范 在具体谈论规范的之前,可以下去查看下各大网络公司的前端开发规范(Developemnt Style Guide)例如谷歌,Facebook 或者 Dropbox。从而更好的理解开发规范在实际应用中和多人协作中的重要性。 不同开发者在开发过程中使用不同的代码风格会直接的提升在之后的开发和维护的成本和难度,对前端开发来说更是尤为突出。这时使用代码规范来约束开发者的编码风格就可以大体解

  • 主要内容:范式的类型规范化是在数据库中组织数据的过程。 规范化用于最小化关系或关系集的冗余。 它还用于消除插入,更新和删除异常等不良特性。 规范化将较大的表分成较小的表,并使用关系链接它们。 普通表单用于减少数据库表中的冗余。 范式的类型 有四种类型的范式: 范式 描述说明 1NF 如果它包含原子值,则关系为第范式(1NF)。 2NF 如果它在1NF中,则关系将在2NF中,并且所有非关键属性完全依赖于主键。 3NF