`model_kwargs` not used in `model.generate()`
### System Info

- `transformers` version: 4.25.1
- Platform: Linux-5.4.0-124-generic-x86_64-with-debian-bullseye-sid
- Python version: 3.7.13
- Huggingface_hub version: 0.10.1
- PyTorch version (GPU?): 1.12.1+cu102 (True)
- Tensorflow version (GPU?): not installed (NA)
- Flax version (CPU?/GPU?/TPU?): not installed (NA)
- Jax version: not installed
- JaxLib version: not installed
- Using GPU in script?: <fill in>
- Using distributed or parallel set-up in script?: <fill in>

### Who can help?

@ArthurZucker and @younesbelkada


### Information

- [X] The official example scripts
- [X] My own modified scripts

### Tasks

- [ ] An officially supported task in the `examples` folder (such as GLUE/SQuAD, ...)
- [ ] My own task or dataset (give details below)

### Reproduction

**Issue**: the extra `model_kwargs` are not used when using `model.generate(**model_kwargs)` (tried with transformer version '4.25.1' and '4.23.1'. 

**Code to replicate**: 

``` python
from transformers import GPT2LMHeadModel

class ToyGPT(GPT2LMHeadModel):
    def forward(self, *args, added_param=None, **kwargs):
        print("added_param", added_param)
        return super().forward(*args, **kwargs)
    
toy_model = ToyGPT.from_pretrained("gpt2")
toy_model.generate(added_param=1, max_length=5)
```

**Current output**:
`"added_param, None"`

**Current behaviour**: 
The extra `added_param` is not passed as input to the `forward()` of the model when generating new inputs, thus, `None` is printed during the forward pass. 

### Expected behavior

**Expected output**
"added_param, 1"

**Expected behaviour**
The generate function should print the updated version of the model_kwargs. 
This snippet should work (tested on the `main` branch):
```
from transformers import GPT2LMHeadModel

class ToyGPT(GPT2LMHeadModel):
    def forward(self, *args, added_param=None, **kwargs):
        print("added_param", added_param)
        return super().forward(*args, **kwargs)
    def prepare_inputs_for_generation(self, *args, added_param=None, **kwargs):
        output = super().prepare_inputs_for_generation(*args, **kwargs)
        output.update({"added_param": added_param})
        return output
    
toy_model = ToyGPT.from_pretrained("gpt2")
toy_model.generate(added_param=1, max_length=5)
```
you'll need to update the method `prepare_inputs_for_generation` to consider also your new args<|||||>Amazing. It works. Thank you very much !