code: def add_gradient_noise(
      model: torch.nn.Module,
      iteration: int,
      duration: float = 100,
      eta: float = 1.0,
      scale_factor: float = 0.55,
  ):
      """Adds noise from a standard normal distribution to the gradients.
  
      The standard deviation (`sigma`) is controlled
      by the three hyper-parameters below.
      `sigma` goes to zero (no noise) with more iterations.
  
      Args:
          model: Model.
          iteration: Number of iterations.
          duration: {100, 1000}: Number of durations to control
              the interval of the `sigma` change.
          eta: {0.01, 0.3, 1.0}: The magnitude of `sigma`.
          scale_factor: {0.55}: The scale of `sigma`.
      """
      interval = (iteration // duration) + 1
      sigma = eta / interval**scale_factor
      for param in model.parameters():
          if param.grad is not None:
              _shape = param.grad.size()
              noise = sigma * torch.randn(_shape).to(param.device)
              param.grad += noise
  
label_desc: Use image node_id 1 for calling a global function with example usage: add_gradient_noise(model, iteration, duration, eta, scale_factor) without return types