Yes, you can. As defined in the Optimizer class:

  
      github.com
  
  
    pytorch/pytorch/blob/85c51a8c10984e4ebdbca731ca0ebd30e5e8af4d/torch/optim/optimizer.py#L26 12



class Optimizer(object):
    r"""Base class for all optimizers.


    .. warning::
        Parameters need to be specified as collections that have a deterministic
        ordering that is consistent between runs. Examples of objects that don't
        satisfy those properties are sets and iterators over values of dictionaries.


    Arguments:
        params (iterable): an iterable of :class:`torch.Tensor` s or
            :class:`dict` s. Specifies what Tensors should be optimized.
        defaults: (dict): a dict containing default values of optimization
            options (used when a parameter group doesn't specify them).
    """


    def __init__(self, params, defaults):
        torch._C._log_api_usage_once("python.optimizer")
        self.defaults = defaults


        if isinstance(params, torch.Tensor):



  
  
    
    
  
  


You can use a dictionary to define a parameter group with the syntax:
param_groups = [{‘params’: COMPONENT_1_PARAMTERS, ‘lr’: COMPONENT_1_LR, ‘name’: ‘GROUP_1’},
{‘params’: COMPONENT_2_PARAMTERS, ‘lr’: COMPONENT_2_LR, ‘name’: ‘GROUP_2’},
…
]
opt.Adam(param_groups, lr=INITIAL_LR)