Должно ли предсказание декодера быть отключено в обучении PyTorch? - PullRequest
0 голосов
/ 13 апреля 2020

Привет, ребята. Недавно я начал использовать PyTorch для своих исследований, в которых требуется инфраструктура кодер-декодер. Учебные руководства PyTorch по этому вопросу прекрасны, но есть небольшая проблема: при обучении декодера без принудительного воздействия учителя, что означает, что прогноз текущего временного шага используется в качестве входного для следующего, должен ли прогноз быть detach ed?

В используется это руководство по PyTorch , detach (decoder_input = topi.squeeze().detach() # detach from history as input ), но в это не так (top1 = output.max(1)[1]; output = (trg[t] if teacher_force else top1)).

Оба руководства основаны на RNN, поэтому я не уверен насчет архитектур на базе Transformer. Был бы признателен, если бы кто-то мог указать, какая из них является лучшей практикой:).

1 Ответ

0 голосов
/ 16 апреля 2020

Да, вы должны отсоединить его. Отключение тензора удаляет его из вычислительного графа, поэтому он больше не отслеживается в отношении вычислений градиента, а это именно то, что вам нужно. Поскольку предыдущий токен можно рассматривать как константу, определяющую начальную точку, он будет отброшен через один временной шаг. Однако, если вы не отсоедините его, он все равно будет зависать, поскольку он отслеживается в вычислительном графе, который потребляет ненужную память.

Реально, накладные расходы памяти, как правило, довольно малы, поэтому вы могли бы только заметить это если у вас много временных шагов и вы используете верхний предел использования памяти графическим процессором. Просто расцените это как микрооптимизацию.

Есть случаи, когда вам абсолютно необходимо отсоединить тензор, чтобы избежать нежелательного обратного распространения, но это обычно происходит, когда один и тот же вход используется в двух разных моделях, поскольку обратное потребление потребляет график по умолчанию, и если два разных обратного распространения пытаются go по одному и тому же пути, он больше не будет доступен и завершится неудачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...