Eine Pytorch -Implementierung von "Seqgan: Sequenzgenerative kontroverse Netze mit politischem Gradienten". (Yu, Lantao et al.). Der Code ist stark vereinfacht, kommentiert und (hoffentlich) unkompliziert zu verstehen. Die implementierten Richtliniengradienten sind auch viel einfacher als in der ursprünglichen Arbeit (https://github.com/lantaoyu/seqgan/) und beinhalten keine Rollouts- Eine einzige Belohnung wird für den gesamten Satz verwendet (inspiriert von den Beispielen in http://karpathy.github.io/2016/05/31/rl/).
Die verwendeten Architekturen unterscheiden sich von denen in der Originalarbeit. Insbesondere wird ein wiederkehrender bidirektionaler Gru -Netzwerk als Diskriminator verwendet.
Der Code führt das Experiment zu synthetischen Daten durch, wie in der Arbeit beschrieben.
Sie werden ermutigt, Zweifel an der Arbeit des Codes als Probleme zu beschaffen.
Um den Code auszuführen:
python main.pyMain.py sollte Ihr Einstiegspunkt in den Code sein.
Die folgenden Hacks (ausgeliehen von https://github.com/soumith/ganhacks) scheinen in diesem Fall funktioniert zu haben:
Training von Diskriminator viel mehr als Generator (Generator wird nur für eine Charge von Beispielen trainiert, und die Erhöhung der Chargengröße schadet die Stabilität)
Verwenden von Adam für Generator und Adagrad für Diskriminator
Optimierung der Lernrate für Generator in Gan Phase
Verwenden Sie den Ausfall in der Trainings- und Testphase
Die Stabilität ist äußerst empfindlich gegenüber jedem Parameter:/
Die GAN -Phase führt möglicherweise nicht immer zu massiven NLL -Tropfen (manchmal sehr minimal) - ich vermute, dass dies auf die sehr grobe Art der implementierten Politikverstärker zurückzuführen ist (ohne Einführung).
Lernkurve, die nach MLE -Training für 100 Epochen erhalten wurde, gefolgt von einem kontroversen Training. (Ihre Ergebnisse können variieren!)