iteration).  As part of the "unscale_()", gradients are
         checked for infs/NaNs.
  2. If no inf/NaN gradients are found, invokes "optimizer.step()"
     using the unscaled gradients.  Otherwise, "optimizer.step()"
     is skipped to avoid corrupting the params.

  "*args" and "**kwargs" are forwarded to "optimizer.step()".

  Returns the return value of "optimizer.step(*args, **kwargs)".

  Parameters:
     * **optimizer** (*torch.optim.Optimizer*) -- Optimizer that
       applies the gradients.

     * **args** -- Any arguments.

     * **kwargs** -- Any keyword arguments.

  Warning:

    Closure use is not currently supported.

unscale_(optimizer)
  Divides ("unscales") the optimizer's gradient tensors by the
  scale factor.

  "unscale_()" is optional, serving cases where you need to modify
  or inspect gradients between the backward pass(es) and "step()".
  If "unscale_()" is not called explicitly,  gradients will be
