GAN の学習過程の監視と一般的な故障モードの識別
GAN を学習させる作業は難しい場合があります。これは、学習中にジェネレーター ネットワークとディスクリミネーター ネットワークが互いに競い合うためです。実際、片方のネットワークを急速に学習させた場合、もう片方のネットワークの学習に失敗する可能性があります。これは通常、ネットワークが収束できないという結果をもたらします。問題を診断し、ジェネレーターとディスクリミネーターがそれぞれの目標をどれだけ達成したかを 0 から 1 のスケールで監視するために、スコアをプロットすることができます。GAN の学習方法、ジェネレーターおよびディスクリミネーターのスコアをプロットする方法を示す例については、敵対的生成ネットワーク (GAN) の学習を参照してください。
ディスクリミネーターには、入力イメージを "実" クラスまたは "生成" クラスとして分類するように学習させます。ディスクリミネーターの出力は、入力イメージが "実" クラスに属する確率 に対応します。
ジェネレーターのスコアは、生成イメージに対するディスクリミネーターの出力に対応する確率の平均です。
ここで には生成イメージの確率が含まれます。
が "生成" クラスに属するイメージの確率である場合、ディスクリミネーターのスコアは正しいクラスに属する入力イメージの確率の平均です。
ここで、 には実イメージに対するディスクリミネーター出力の確率が含まれ、ディスクリミネーターに渡された実イメージと生成イメージの数は等しくなります。
理想的には、どちらのスコアも 0.5 になります。これは、ディスクリミネーターが実イメージと偽イメージの違いを区別できないためです。ただし実際には、良好な GAN を達成できるのはこのシナリオだけではありません。
学習過程を監視するために、イメージの経時的な変化を視覚的に検査して、改善しているかを確認することが可能です。イメージが改善していない場合、スコア プロットを使用して問題の診断に役立てることができます。場合によっては、故障モードが発生していて学習を修復できないため、学習を続ける意味がなく停止すべきであることが、スコア プロットから判断できます。以下の節では、いくつかの一般的な故障モード (収束失敗とモード故障) を診断するためにスコア プロットと生成イメージのどこに注目すれば良いかを説明し、学習を改善するために実行できるアクションを提案します。
収束失敗
収束失敗は、ジェネレーターとディスクリミネーターが学習中に平衡に達しなかったときに発生します。
ディスクリミネーター優位
このシナリオは、ジェネレーターのスコアがゼロまたはゼロ付近に、ディスクリミネーターのスコアが 1 または 1 付近に到達したときに発生します。
このプロットは、ディスクリミネーターがジェネレーターを圧倒した例を示します。ジェネレーターのスコアがゼロに近くなり回復しないことに注意してください。この場合、ディスクリミネーターはほとんどのイメージを正しく分類します。一方で、ジェネレーターはディスクリミネーターを騙すイメージを生成できないため、学習が失敗します。
多数回の反復にわたってスコアがこれらの値から回復しない場合は、学習を停止することを推奨します。これが発生した場合は、次のようにしてジェネレーターとディスクリミネーターの性能のバランスをとります。
実イメージに対して偽ラベルをランダムに与えてディスクリミネーターの性能を落とす (片側ラベル反転)
ドロップアウト層を追加してディスクリミネーターの性能を落とす
ジェネレーターの畳み込み層のフィルター数を増やして追加の特徴を作成し、ジェネレーターの能力を改善する
ディスクリミネーターのフィルター数を減らして性能を落とす
実イメージのラベルを反転させる方法を示す例については、敵対的生成ネットワーク (GAN) の学習を参照してください。
ジェネレーター優位
このシナリオは、ディスクリミネーターのスコアが 1 または 1 付近に到達したときに発生します。
このプロットは、ジェネレーターがディスクリミネーターを圧倒した例を示します。多数回の反復にわたってジェネレーターのスコアが 1 に到達することに注意してください。この場合、ジェネレーターはディスクリミネーターをほぼ常に騙す方法を学習しています。学習過程のかなり早い段階でこれが発生した場合、ジェネレーターは、ディスクリミネーターを簡単に騙す非常にシンプルな特徴表現を学習している可能性が高くなります。これは、生成イメージのスコアが高くても、まったく不適切である可能性もあることを意味します。この例では、一部の実イメージを正しく分類できるため、ディスクリミネーターのスコアが極めてゼロに近くはならない点に注意してください。
多数回の反復にわたってスコアがこれらの値から回復しない場合は、学習を停止することを推奨します。これが発生した場合は、次のようにしてジェネレーターとディスクリミネーターの性能のバランスをとります。
ディスクリミネーターのフィルター数を増やし、さらに多くの特徴を学習する能力を改善する
ドロップアウト層を追加してジェネレーターの性能を落とす
ジェネレーターのフィルター数を減らしてパフォーマンスを落とす
モード崩壊
モード崩壊とは、GAN が多くの複製 (モード) を含む、変化に乏しいイメージを生成することです。これは、ジェネレーターが複数の異なる入力に、類似する出力を関連付けるよう学習した結果、豊かな特徴表現を学習できない場合に発生します。モード崩壊が起きていないか確認するには、生成イメージを検査します。出力にほとんど多様性がなく、その一部がほぼ同一である場合は、モード崩壊が発生している可能性があります。
このプロットは、モード崩壊の例を示します。ジェネレーターへの入力は異なっていてランダムであるにもかかわらず、生成イメージのプロットにはほぼ同一のイメージが大量に含まれることに注意してください。
この発生が確認された場合、ジェネレーターの能力を改善して、さらに多様な出力を作成できるようにします。
ジェネレーターへの入力データの次元を増やす
ジェネレーターのフィルター数を増やし、さらに多様な特徴を生成できるようにする
実イメージに対して偽ラベルをランダムに与えてディスクリミネーターの性能を落とす (片側ラベル反転)
実イメージのラベルを反転させる方法を示す例については、敵対的生成ネットワーク (GAN) の学習を参照してください。
参考
dlnetwork
| forward
| predict
| dlarray
| dlgradient
| dlfeval
| adamupdate