class_docstr: Black Box Variational Inference
  
  Parameters
  ----------
  neg_posterior : function
      posterior function
  
  q : List
      list holding distribution objects
  
  sims : int
      Number of Monte Carlo sims for the gradient
  
  step : float
      Step size for RMSProp
  
  iterations: int
      How many iterations to run
  
  record_elbo : boolean
      Whether to record the ELBO at every iteration
  
  quiet_progress : boolean
      Whether to print progress or stay quiet
docstr: The control variate augmented Monte Carlo gradient estimate
docstr_tok: ["The","control","variate","augmented","Monte","Carlo","gradient","estimate"]
code: def cv_gradient(self, z):
      """
      The control variate augmented Monte Carlo gradient estimate
      """
      gradient = np.zeros(np.sum(self.approx_param_no))
      z_t = z.T
      log_q = self.normal_log_q(z.T)
      log_p = self.log_p(z.T)
      grad_log_q = self.grad_log_q(z)
      gradient = grad_log_q * (log_p - log_q)
  
      alpha0 = alpha_recursion(
          np.zeros(np.sum(self.approx_param_no)),
          grad_log_q,
          gradient,
          np.sum(self.approx_param_no),
      )
  
      vectorized = (
          gradient
          - ((alpha0 / np.var(grad_log_q, axis=1)) * grad_log_q.T).T
      )
  
      return np.mean(vectorized, axis=1)
  
imports: import sys
  import numpy
  import scipy.stats
  from .stoch_optim import RMSProp, ADAM
  from .bbvi_routines import alpha_recursion, log_p_posterior, mb_log_p_posterior
label_desc: Use image node_id 5 for calling the BBVI obj's underlying member method code with example usage: obj.cv_gradient(z) and returns: np