class_docstr: Implements the Noam Learning rate schedule. This corresponds to increasing the learning rate
  linearly for the first ``warmup_steps`` training steps, and decreasing it thereafter proportionally
  to the inverse square root of the step number, scaled by the inverse square root of the
  dimensionality of the model. Time will tell if this is just madness or it's actually important.
  
  Parameters
  ----------
  model_size : ``int``, required.
      The hidden size parameter which dominates the number of parameters in your model.
  warmup_steps: ``int``, required.
      The number of steps to linearly increase the learning rate.
  factor : ``float``, optional (default = 1.0).
      The overall scale factor for the learning rate decay.
code: def __init__(
      self,
      optimizer,
      model_size,
      warmup_steps,
      factor=1.0,
      last_epoch=-1,
  ):
      self.warmup_steps = warmup_steps
      self.factor = factor
      self.model_size = model_size
      super(NoamLR, self).__init__(optimizer, last_epoch=last_epoch)
  
imports: from __future__ import absolute_import
  import torch.optim.lr_scheduler
  from allennlp.common.checks import ConfigurationError
  from allennlp.common.params import Params
  from allennlp.common.registrable import Registrable
label_desc: Use image node_id 1 to create a new NoamLR object from inherited base classes: torch.optim.lr_scheduler with example: obj = NoamLR(optimizer, model_size, warmup_steps, factor, last_epoch)