class_docstr: Layer normalization
code: def backward(self, indexes, grad_outputs):
      F = chainer.functions
      x, gamma = self.get_retained_inputs()
      (gy,) = grad_outputs
  
      x_mu, var, inv_std, x_hat = self._compute(F, x)
  
      g_beta = F.sum(gy, axis=0)
      g_scaled_x = gy
  
      g_gamma = F.sum(g_scaled_x * x_hat, axis=0)
      g_x_hat = g_scaled_x * gamma
  
      g_inv_std = F.sum(g_x_hat * x_mu, axis=1, keepdims=True)
      g_x_mu_1 = g_x_hat * inv_std
  
      g_std = g_inv_std * (-1.0 / (var + self.eps))
      g_var = g_std * 0.5 * inv_std
  
      n_units = x.shape[1]
      g_squ_x_mu = g_var * (1.0 / n_units)
      g_x_mu_2 = g_squ_x_mu * 2 * x_mu
  
      g_x_1 = g_x_mu_1 + g_x_mu_2
      g_mu = F.sum(g_x_1, axis=1, keepdims=True) * (-1.0)
  
      g_x_2 = g_mu * (1.0 / n_units)
  
      g_x = g_x_1 + g_x_2
  
      return (
          g_x,
          g_gamma,
          g_beta,
      )
  
file_path: chainer/chainer/functions/normalization/layer_normalization.py
imports: from chainer import backend
  from chainer import function_node
  import chainer.functions
  from chainer.utils import type_check
label_desc: Use image node_id 5 for calling the LayerNormalization obj's underlying member method code with example usage: obj.backward(indexes, grad_outputs) and returns: g_x,  g_gamma,  g_beta