Реализация Pytorch «Seqgan: последовательно генеративные состязательные сетки с градиентом политики». (Yu, Lantao и др.). Код очень упрощен, прокомментирован и (надеюсь) прост, чтобы понять. Реализированные градиенты политики также намного проще, чем в оригинальной работе (https://github.com/lantaoyu/seqgan/) и не включают развертывание. Для всего предложения используется единственная награда (вдохновлена примерами в http://karpathy.github.io/2016/05/31/rl/).
Используемые архитектуры отличаются от работы в работе orignal. В частности, в качестве дискриминатора используется повторяющаяся двунаправленная сеть GRU.
Код выполняет эксперимент по синтетическим данным, как описано в статье.
Вам рекомендуется поднять любые сомнения относительно работы Кодекса в качестве вопросов.
Чтобы запустить код:
python main.pymain.py должен быть вашей точкой входа в код.
Следующие хаки (заимствованные с https://github.com/soumith/ganhacks), похоже, работали в этом случае:
Дискриминатор обучения намного больше, чем генератор (генератор обучается только для одной партии примеров, и увеличение размера партии повреждает стабильность)
Использование Адама для генератора и Адаграда для дискриминатора
Настройка скорости обучения для генератора на фазе Gan
Использование отсевания как на этапе обучения, так и на этапе тестирования
Стабильность чрезвычайно чувствительна практически к каждому параметру:/
Фаза GAN не всегда может привести к огромным падениям в NLL (иногда очень минимально) - я подозреваю, что это связано с очень грубым характером реализованных политических градиентов (без развертываний).
Кривая обучения, полученная после обучения MLE для 100 эпох с последующей состязательной подготовкой. (Ваши результаты могут варьироваться!)