「seqgan:シーケンス生成敵対網を備えたシーケンス生成網」のPytorch実装。 (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から借りた)は、この場合はうまくいったようです。
訓練弁護士はジェネレーターよりもはるかに多く(ジェネレーターは例の1つのバッチのみトレーニングされ、バッチサイズを増やすと安定性が損なわれます)
発電機にAdamを使用し、Adagradを使用して弁護士にAdagradを使用します
GANフェーズでの発電機の学習率を微調整します
トレーニングフェーズとテストフェーズの両方でドロップアウトを使用します
安定性は、ほぼすべてのパラメーターに非常に敏感です:/
GAN相は、常にNLLの大規模なドロップにつながるとは限らない(非常に最小限) - これは、実装されたポリシーグラデーションの非常に粗い性質による(ロールアウトなし)ためだと思います。
100エポックのMLEトレーニング後に得られた学習曲線に続いて敵対的なトレーニング。 (あなたの結果は異なるかもしれません!)