为什么 keras Batchnorm 中只有一个动量参数?

问题描述

我是 CNN 的新手,正在使用 keras 在 CNN 中实现 Batchnorm。 Batch norm 层有 4*Feature_map(of prev layer) 参数。具体如下:

  1. 2 是 gamma 和 beta
  2. 其他 2 个用于小批量均值和方差的指数移动平均值

现在,均值和方差的指数移动平均定义为:

 running_mean = momentum * running_mean + (1 - momentum) * sample_mean
 running_var = momentum * running_var + (1 - momentum) * sample_var

在 keras 的 Batchnormalization 函数中,我看到只有一个超参数称为动量。

Batchnormalization(axis=-1,momentum=0.99,epsilon=0.001,center=True,scale=True,beta_initializer='zeros',gamma_initializer='ones',moving_mean_initializer='zeros',moving_variance_initializer='ones',beta_regularizer=None,gamma_regularizer=None,beta_constraint=None,gamma_constraint=None,**kwargs)

我的问题是为什么运行均值和运行方差没有单独的动量超参数?

解决方法

均值和 STD 的指数移动平均值是这些框架在幕后处理的事情。此外,那些不是可学习的参数(运行均值和 STD),因此它们不可训练,我猜想用于计算这两个值(均值和方差的指数移动平均值)的动量是相同的在batchNorm 层中决定。正如我所说,运行均值和 STD 是不可学习的,因此对于不同的超参数,它们毫无疑问可以调整它们的值。

您还可以查看这些主题以获得更多见解- moving mean and std in Keras batch norm