Я читал код языковой модели GPT2. Преобразование скрытых состояний в распределение вероятностей по словарю выполнено в следующей строке:
lm_logits = self.lm_head(hidden_states)
Здесь,
self.lm_head = nn.Linear(config.n_embd, config.vocab_size, bias=False)
Однако в исходной статье они предложили умножать скрытые состояний с помощью матрицы встраивания токенов, тогда как реализация huggingface использовала другую матрицу.
Есть ли в этом преимущество? Я что-то упускаю?