Встраивание байтов в концептуальную борьбу mLSTM - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь выполнить эксперимент OpenAI "Нейрон настроения" , прочитав код PyTorch, опубликованный на Github для обучения модели с нуля.

Одна вещь, которую я не понимаю, это встраивание на уровне байтов, используемое в коде.Я понял, что LSTM выводит распределение вероятностей для значения следующего байта, и я предположил, что «встраивание» будет просто горячим кодированием значения байта.

Глядя на код, я вижу, чтовход модели проходит через (обучаемое) плотное вложение, прежде чем войти в модель.Смущает то, что выходные данные потерь вычисляются между выходными данными модели и предстоящим байтовым значением, которое является не встроенным.

Мои вопросы:
1. Как происходит перекрестная энтропия?потеря рассчитывается?Принимает ли nn.CrossEntropyLoss softmax своего входного сигнала и расширяет цель в один горячий вектор «под капотом»?

2. Если мы хотим генерировать байтовые строки из этого LSTM, как мы встраиваемвыводить обратно в модель для следующего шага?Мы встраиваем наивысшую вероятность или берем softmax результата и используем какое-то взвешенное вложение?

Я новичок в LSTM и пытаюсь учиться, но просто не понимаю!Я ценю любую помощь!

1 Ответ

0 голосов
/ 21 мая 2018

Даже если для ввода и вывода используются одни и те же символы, вполне допустимо использовать разные представления на каждом конце.Перекрестная энтропия является функцией двух вероятностных распределений.В этом случае два распределения являются распределением softmax, заданным моделью, и точечной массой на «правильном» байте.

Для вопроса 1 да, это то, что делается с точки зрения входов и выходов(хотя реализация может быть оптимизирована).

Чтобы ответить на вопрос 2, наиболее распространенным является формирование распределения softmax на каждом шаге, а затем выборка из него.

...