Implementasi Pytorch dari "Seqgan: Sequence Generative Adversarial Nets dengan Gradien Kebijakan." (Yu, Lantao, dkk.). Kode ini sangat disederhanakan, dikomentari, dan (semoga) mudah dipahami. The policy gradients implemented are also much simpler than in the original work (https://github.com/LantaoYu/SeqGAN/) and do not involve rollouts- a single reward is used for the entire sentence (inspired by the examples in http://karpathy.github.io/2016/05/31/rl/).
Arsitektur yang digunakan berbeda dari yang ada dalam pekerjaan orignal. Secara khusus, jaringan GRU dua arah berulang digunakan sebagai diskriminator.
Kode melakukan percobaan pada data sintetis seperti yang dijelaskan dalam makalah.
Anda didorong untuk menimbulkan keraguan mengenai pekerjaan kode sebagai masalah.
Untuk menjalankan kode:
python main.pyMain.py harus menjadi titik masuk Anda ke dalam kode.
Peretasan berikut (dipinjam dari https://github.com/soumith/ganhacks) tampaknya telah berhasil dalam kasus ini:
Pelatihan Diskriminator Lebih dari Generator (Generator dilatih hanya untuk satu kumpulan contoh, dan meningkatkan ukuran batch menyakitkan stabilitas)
Menggunakan Adam untuk Generator dan Adagrad untuk Diskriminator
Tweaking Tingkat Pembelajaran untuk Generator dalam Fase GAN
Menggunakan putus sekolah di fase pelatihan dan pengujian
Stablity sangat sensitif terhadap hampir setiap parameter:/
Fase GAN mungkin tidak selalu menyebabkan penurunan besar di NLL (kadang -kadang sangat minim) - Saya menduga ini karena sifat kasar dari gradien kebijakan yang diterapkan (tanpa peluncuran).
Kurva belajar yang diperoleh setelah pelatihan MLE untuk 100 zaman diikuti dengan pelatihan permusuhan. (Hasil Anda mungkin bervariasi!)