사용이유: 훈련시에 internal covariate shift

 

Batch noralization (BN)

 

훈련모드: 레이어가 미니배치 단위로 mean, std을 현재 미니배치단위마다 얻어와 각 채널별로 정규화해준다.

추론모드: 추론모드는 2가지 방법으로 사용될 수 있다. 

  • model.evaluate() 또는 prdict
  • layer, model이 training=False인 경우

추론모드에서는 각 훈련모드에서 얻어진 평균과 std을 moving averrage하여 번환한다.

  • moving_mean = moving_mean * momentum + mean(batch) * (1 - momentum)
  • moving_var = moving_var * momentum + var(batch) * (1 - momentum)

ma * (batch - self.moving_mean) / sqrt(self.moving_var + epsilon) + beta.

따라서, 추론모드는 이미 훈련모드에서 훈련된 상황에서만 사용할 수 있고, 훈련데이터가 추론데이터가 유사한 상황에서 사용될 수 있다. 따라서, 훈련모드와 추론모드에서 둘다 BN(Batch normalization)이 시행된다.

 

 

self.moving_mean_initializer = initializers.get(moving_mean_initializer)
self.moving_variance_initializer = initializers.get(moving_variance_initializer)


self.moving_mean = self.add_weight(
          name='moving_mean',
          shape=param_shape,
          dtype=self._param_dtype,
          initializer=self.moving_mean_initializer,
          synchronization=tf_variables.VariableSynchronization.ON_READ,
          trainable=False,
          aggregation=tf_variables.VariableAggregation.MEAN,
          experimental_autocast=False)


self.moving_variance = self.add_weight(
          name='moving_variance',
          shape=param_shape,
          dtype=self._param_dtype,
          initializer=self.moving_variance_initializer,
          synchronization=tf_variables.VariableSynchronization.ON_READ,
          trainable=False,
          aggregation=tf_variables.VariableAggregation.MEAN,
          experimental_autocast=False)
          
          
output, mean, variance = control_flow_util.smart_cond(training, train_op, _fused_batch_norm_inference)
 def mean_update():
   """Update self.moving_mean with the most recent data point."""
   
   if use_fused_avg_updates:
  		return self._assign_new_value(self.moving_mean, mean)
   else:
   		return self._assign_moving_average(self.moving_mean, mean, momentum,
   input_batch_size)

 

reference: https://keras.io/api/layers/normalization_layers/batch_normalization/

반응형

+ Recent posts