Где вычисляется недоумение в коде модели языка Huggingface gpt2? - PullRequest
1 голос
/ 24 марта 2020

Я вижу некоторые комментарии github о том, что вывод потери вызова model () имеет вид недоумения: https://github.com/huggingface/transformers/issues/473

Но когда я смотрю на соответствующий код .. . https://huggingface.co/transformers/_modules/transformers/modeling_openai.html#OpenAIGPTLMHeadModel .forward

    if labels is not None:
        # Shift so that tokens < n predict n
        shift_logits = lm_logits[..., :-1, :].contiguous()
        shift_labels = labels[..., 1:].contiguous()
        # Flatten the tokens
        loss_fct = CrossEntropyLoss()
        loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))
        outputs = (loss,) + outputs

    return outputs  # (loss), lm_logits, (all hidden states), (all attentions)

Я вижу, как рассчитывается перекрестная энтропия, но не превращается в недоумение. Где потеря, наконец, трансформируется? Или там уже есть трансформация, которую я не понимаю?

1 Ответ

1 голос
/ 24 марта 2020

Ах, хорошо, я нашел ответ. Код фактически возвращает кросс-энтропию. В комментарии Github, где они говорят, что это недоумение ... они говорят, что, потому что OP делает

return math.exp(loss)

, который преобразует энтропию в недоумение:)

...