def METHOD_NAME(self, x, global_x):
    if self.is_train:
        xmean = jt.mean(global_x, dims=[0,2,3], keepdims=1)
        x2mean = jt.mean(global_x*global_x, dims=[0,2,3], keepdims=1)
        xvar = x2mean-xmean*xmean
        norm_x = (x-xmean)/jt.sqrt(xvar+self.eps)
        self.running_mean.update(self.running_mean + 
            (xmean.sum([0,2,3])-self.running_mean)*self.momentum)
        self.running_var.update(self.running_var + 
            (xvar.sum([0,2,3])-self.running_var)*self.momentum)
    else:
        running_mean = self.running_mean.broadcast(x, [0,2,3])
        running_var = self.running_var.broadcast(x, [0,2,3])
        norm_x = (x-running_mean)/jt.sqrt(running_var+self.eps)
    w = self.weight.broadcast(x, [0,2,3])
    b = self.bias.broadcast(x, [0,2,3])
    return norm_x * w + b