تنفيذ Pytorch لـ "Seqgan: Sequence Generative Cerversarial Nets مع التدرج السياسي." (يو ، لانتو ، وآخرون). الكود مبسط للغاية ، وعلق و (نأمل) واضحا لفهم. 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/).
البنى المستخدمة تختلف عن تلك الموجودة في العمل orignal. على وجه التحديد ، يتم استخدام شبكة GRU ثنائية الاتجاه المتكررة كمتميّز.
يقوم الرمز بتنفيذ التجربة على البيانات الاصطناعية كما هو موضح في الورقة.
نشجعك على إثارة أي شكوك فيما يتعلق بعمل الكود كقضايا.
لتشغيل الرمز:
python main.pyيجب أن تكون main.py نقطة الدخول الخاصة بك في الكود.
يبدو أن الاختراقات التالية (التي تم استعارة من https://github.com/soumith/ganhacks) قد عملت في هذه الحالة:
تمييز التدريب أكثر بكثير من المولد (يتم تدريب المولد فقط على مجموعة واحدة من الأمثلة ، وزيادة حجم الدُفعة يؤلمني الاستقرار)
باستخدام آدم للمولد والأدغراد للتمييز
تغيير معدل التعلم للمولد في مرحلة GAN
باستخدام التسرب في كل من مرحلة التدريب والاختبار
stablity حساس للغاية لكل معلمة تقريبًا:/
قد لا تؤدي مرحلة GAN دائمًا إلى انخفاضات ضخمة في NLL (في بعض الأحيان الحد الأدنى) - أظن أن هذا يرجع إلى الطبيعة الخام للغاية لتنفيذ تدرجات السياسة التي تم تنفيذها (بدون تمريرات).
منحنى التعلم الذي تم الحصول عليه بعد تدريب MLE لـ 100 عصر يليه التدريب العدواني. (قد تختلف نتائجك!)