Hardcode GELU as the intermediate activation for ESM
One more issue revealed by the nucleotide transformer port! This time it's the activation function - ESM uses a hardcoded GELU, which the PyTorch port gets right, but the TF port used an intermediate block copied from BERT which reads `config.hidden_act`. This value was set to `gelu` for all of the original ESM checkpoints, so the bug was silent until we tried making some new checkpoints from scratch. 

This PR replaces `config.hidden_act` with a hardcoded `gelu`. All ESM tests (including slow / cross-tests) pass locally.
_The documentation is not available anymore as the PR was closed or merged._<|||||>Just to understand a bit better, does this mean that the nucleotide model has a different activation set in its config used for other layers? <|||||>Actually, no! It also always expects gelu, which matches the original ESM (both the port to HF and the original repo at Meta). The issue here is that the TF version is reading `config.hidden_act`, but that isn't even set by default - the bug slipped in because whatever way we constructed the original ESM checkpoints, that value was always set in the configs, so the issue was silent until we tried to make new configs for nucleotide transformer and they suddenly broke in TF.<|||||>@Rocketknight1 Would a possible solution to this be to update the ESM configuration to have `hidden_act` as `"gelu"` by default? If I've understood correctly, the original ESM model configs have the `hidden_act` attribute. In which case, as a user, if I updated this I'd expect it to be propagated when constructing a model from the config. <|||||>@amyeroberts I'm not sure that's the best course here! `hidden_act` is actually a parameter on the base config that `EsmConfig` inherits from. As such, it's not included in the documentation for `EsmConfig` at all. The attribute just happened to be set (I think by the ESM team) when they created the ESM checkpoints, which masked the bug. I think the right solution is to just not read the attribute at all in the code for either framework.

Also, I spotted one minor issue with the weight tying fix I made for ESM, and I'm sneaking a fix for it into this PR. (decoder should be a layer when it's untied to make sure weight crossloading works properly, not a bare weight matrix).<|||||>No probs, I think they helped!