class_docstr: Adam optimizer
code: def _compute_step(self, global_gradient: np.ndarray) -> np.ndarray:
      a = (
          self.step_size
          * np.sqrt(1 - self.beta2**self.t)
          / (1 - self.beta1**self.t)
      )
      self.m = self.beta1 * self.m + (1 - self.beta1) * global_gradient
      self.v = self.beta2 * self.v + (1 - self.beta2) * (
          global_gradient * global_gradient
      )
      step = -a * self.m / (np.sqrt(self.v) + self.epsilon)
      return step
  
file_path: maze/maze/train/trainers/es/optimizers/adam.py
imports: from typing import Optional
  import numpy
  from maze.core.agent.torch_policy import TorchPolicy
  from maze.train.trainers.es.optimizers.base_optimizer import Optimizer
label_desc: Use image node_id 3 for calling the Adam obj's underlying member method code with example usage: obj._compute_step(global_gradient) and returns: step