Une implémentation Pytorch de "SEQGAN: Séquences de réseaux adversaires génératifs avec gradient de politique". (Yu, Lantao, et al.). Le code est très simplifié, commenté et (espérons-le) simple à comprendre. Les gradients de politique mis en œuvre sont également beaucoup plus simples que dans l'œuvre originale (https://github.com/lantaoyu/seqgan/) et n'impliquent pas les déploiements - une seule récompense est utilisée pour toute la phrase (inspirée par les exemples de http://karpathy.github.io/2016/05/31/rl/).
Les architectures utilisées sont différentes de celles du travail d'origine. Plus précisément, un réseau de GRU bidirectionnel récurrent est utilisé comme discriminateur.
Le code effectue l'expérience sur les données synthétiques comme décrit dans l'article.
Vous êtes encouragé à soulever des doutes concernant le fonctionnement du code en tant que problèmes.
Pour exécuter le code:
python main.pyMain.py devrait être votre point d'entrée dans le code.
Les hacks suivants (empruntés à https://github.com/soumith/ganhacks) semblent avoir fonctionné dans ce cas:
Discriminateur de formation beaucoup plus que le générateur (le générateur n'est formé que pour un lot d'exemples, et l'augmentation de la taille du lot fait du mal à la stabilité)
Utiliser Adam pour générateur et Adagrad pour le discriminateur
Taux d'apprentissage peaufiné pour le générateur en phase Gan
Utilisation de décrochage en phase de formation et de test
La stablité est extrêmement sensible à presque tous les paramètres: /
La phase GaN peut ne pas toujours entraîner des baisses massives de la NLL (parfois très minimes) - je soupçonne que cela est dû à la nature très grossière des gradients politiques mis en œuvre (sans déploiement).
Courbe d'apprentissage obtenue après la formation MLE pour 100 époques, suivie d'une formation contradictoire. (Vos résultats peuvent varier!)