Can we add optional kwargs to various model in addition to their required fixed inputs? 
### Feature request

For example in class BertForMaskedLM, we have to input needed arguments as follows:
    def forward(
            self,
            input_ids=None,
            attention_mask=None,
            token_type_ids=None,
            position_ids=None,
            head_mask=None,
            inputs_embeds=None,
            encoder_hidden_states=None,
            encoder_attention_mask=None,
            labels=None,
            output_attentions=None,
            output_hidden_states=None,
            return_dict=None,
        ):

I wonder if it's possible to add optional **\*\*kwargs** so that we could customize model layer easier. Like this:
  def forward(
            self,
            input_ids=None,
            attention_mask=None,
            token_type_ids=None,
            position_ids=None,
            head_mask=None,
            inputs_embeds=None,
            encoder_hidden_states=None,
            encoder_attention_mask=None,
            labels=None,
            output_attentions=None,
            output_hidden_states=None,
            return_dict=None,
            **kwargs,
        ):

### Motivation

When I want to add an additional operation to a sub module in a big whole model, I need to use extra data as input. But to implement this, I have to add the extra inputs to every module so they can be finally transferred to the correct module. I don't know whether there are more efficient ways to solve the problem. If so, I'd be appriciated for you to point it out.

### Your contribution

Maybe None
We can't add blank kwargs like this, as a user who makes a typo in their inputs will then not get any error and not realize they did something wrong.<|||||>This issue has been automatically marked as stale because it has not had recent activity. If you think this still needs to be addressed please comment on this thread.

Please note that issues that do not follow the [contributing guidelines](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md) are likely to be ignored.<|||||>Yeah, now I see the hidden trouble if we add blank kwargs to a model. But what about adding some arguments that are specified by users?

For example, we add an argument "custom_arg=None" to __init__(```, custom_arg=None), and then the model will add the argument to its forward function like "self.forward = partial(self.forward, custom_arg=None)", and finally this argument is iteratively passed to all the submodel.

Maybe in this way we could keep the input safety for unaware mistakes but increase a model's flexibility?<|||||>This issue has been automatically marked as stale because it has not had recent activity. If you think this still needs to be addressed please comment on this thread.

Please note that issues that do not follow the [contributing guidelines](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md) are likely to be ignored.