Li Mu の精読論文: GAN「Generative Adversarial Nets」、Ian J. Goodfellow 著

論文: https://papers.nips.cc/paper/2014/file/5ca3e9b122f61f8f06494c97b1afccf3-Paper.pdf

ビデオ: GAN 論文を段落ごとに集中的に読む [Paper Intensive Reading]_哔哩哔哩_bilibili

コース: CS231n 2022PPT ノート - ジェネレーティブ モデリング

Li Honyi 機械学習 - 対立生成ネットワーク (GAN)_iwill323 のブログ-CSDN ブログ

サイトを展開:この人物は存在しません

https://www.reddit.com/r/MachineLearning/top/?t=month

https://crypko.ai/

ブログ投稿: この記事は主に次のブログ投稿を参照し、Li Mu の論文集中読解シリーズ 1: ResNet、Transformer、GAN、BERT_Shen Luohua のブログからテキストと画像を抽出しています。

GAN をさらに詳しく理解したい場合は、ブログ投稿をお勧めします: Generative対決ネットワーク、DCGAN から StyleGAN まで、pixel2pixel、顔の生成、および画像変換。_Shen Luohua のブログ - CSDN ブログ_肖像画油絵敵対的生成ネットワーク

目次

1 はじめに

2 はじめに

3 関連作品

4 目的関数とその解

目的関数

1. ジェネレーターG

2. 識別子 D

3. 2 つのモデルを同時にトレーニングします       

モデルトレーニングプロセスのデモンストレーション

反復的な解決プロセス

5 理論的結果: 大域的最適解 pg =pdata

収束の証明

6 GANのメリットとデメリット

アドバンテージ

質問

7 コードの実装

8 インパクト

9. 損失関数に関する議論

二項分類

識別子

発生器


1 はじめに

        GANs (Generative Adversarial Networks、敵対的生成ネットワーク) は、対立訓練から生成モデルを推定するもので、生成モデル ニューラル ネットワーク G (Generator Neural Network) と識別ニューラル ネットワーク D (Discriminator Neural Network) の 2 つの基本的なニューラル ネットワークで構成されます。 )。)

  生成器 G は、与えられたノイズ (一般に一様分布または正規分布を指します) からサンプリングしてデータを合成し、識別器 D は、サンプルが実際のサンプルであるか、G によって生成されたサンプルであるかを区別するために使用されます。G の目標は、判別ネットワーク D を欺いて D に間違いをさせるためにできるだけ多くの実画像を生成することであり、D の目標は、G によって生成された画像を実際の画像からできるだけ分離することです。最も理想的な状態では、G は「現実を混乱させる」に十分な画像 G(z) を生成できますが、D にとって、G が生成した画像が本物であるかどうかを判断することは困難です実数か否かは関係ないので、D(G (z)) = 0.5、このときのノイズ分布は実際のデータ分布に近くなります。

発展:

2 はじめに

  ディープラーニングは、AI のさまざまなデータの確率分布を表現できるいくつかの豊富な階層モデルを発見するために使用されます。深層学習ネットワークは単なる手段です。

     ディープラーニングは学習ネットワークであるだけでなく、データ分散の表現でもあります。これは、確率論の観点から機械学習モデルは確率分布 Pθ (X) であると考える統計学習手法の考え方と一致します(ここでは確率分布は確率密度関数で表されます)。

     機械学習のタスクは、確率分布 Pθ (X) が最大になるように (つまり、発生した事実に対応する確率が最大になるように) 最適なパラメーター θt を見つけることです。    

     argmax 関数は、データの確率密度を最大化するためのパラメーターの取得を表します。最適なパラメータ θt を解くプロセスを、モデルのトレーニング プロセス (トレーニング) と呼びます。

  ディープラーニングは、識別モデルでは良好な結果を達成しましたが、生成モデルでは不十分です。問題は、尤度関数を最大化するときに確率分布に対して多くの近似を行う必要があり、計算が非常に困難になることです。

  この記事の核心は、尤度関数を近似する必要がなくなり、より良い方法 (GAN) を使用してモデルを計算できるということです

  GAN はフレームワークであり、その中のモデルはすべて MLP です。生成器 G の MLP の入力はランダム ノイズ (通常はガウス分布) であり、それを当てはめたい任意の分布にマッピングします。弁別器 D も MLP であるため、誤差の逆伝播によってトレーニングできます。代わりに、マルコフ連鎖などのアルゴリズムを使用して分布の複雑なサンプリングが必要です。このように、モデルは比較的単純であり、計算上有利である。

3 関連作品

  以前の生成モデルは常に分布関数を構築する必要があり、これらの関数は学習するいくつかのパラメーターを提供します。これらのパラメータは、対数尤度関数を最大化することによって解決されます。この欠点は、分布をサンプリングするときに、特に高次元データの場合、パラメーターを解決するのが難しいことです。この計算は非常に難しいため、最近の一部の生成マシンは分布関数を構築せず、この分布を近似するモデルを学習します。

     前者は実際に分布を数学的に学習し、データがどのような分布であるか、平均分散がどのようなものであるかを明確に知っています。そして GAN は、分布関数を構築する必要なく、モデルを通じて分布を近似した結果です。これは計算が簡単ですが、最終的な分布がどのようになるかわからないという欠点があります。

  f の期待値を求めることは、f 自体を求めることと同じです。これが、GAN が誤差逆伝播によって解決される理由です。

生成モデルは、次の 2 つの方法で密度推定問題を解決できます。

  • 明示的密度モデルは、入力データを使用して分布 pmodel(x) を明示的に与えます。
  • 暗黙的密度モデルは、分布の式を明示的に指定せずに、入力データをサンプリングしてサンプルを直接出力するモデルをトレーニングします。

4 目的関数とその解

目的関数

GAN の最も単純なフレームワークは、モデルがすべて MLP であるということです。

1. ジェネレーターG

        ジェネレーターはデータ x の分布 pg (x) を学習するもので、その入力は事前ノイズ z で定義され、z の分布はガウス分布などの pz (z) です。モデル G を生成するタスクは、MLP を使用してノイズ z をデータ x にマッピングすることです。たとえば、画像生成では、生成されるさまざまな画像が 100 個の変数によって制御され、MLP が理論的に任意の関数に適合すると仮定すると、100 次元のベクトルを構築し、MLP は z を x に強制的にマッピングしてまともな画像を生成します。z は、ガウス分布における平均 0、分散 1 の 100 次元ベクトルとして事前に設定できます。これを行う利点は、計算が簡単なことですが、欠点は、MLP は背後の z が出力をどのように制御するかを実際には理解しておらず、x を近似するためにより適切な z をランダムに選択することを学習するだけであるため、最終的な効果は次のとおりです。平均。    

2. 識別子 D

        識別器は、入力が G によって生成されたデータであるか実データであるかを判断するためのスカラー (確率) を出力します。D の場合、実データ ラベル = 1、偽データ ラベル = 0

3. 2 つのモデルを同時にトレーニングします       

       最終的な目的関数の式は次のようになります。E は期待値を表し、式の中に minmax があるため、対決トレーニングになります。

G は生成ネットワークを表し、D は識別ネットワークを表します。θd は識別器のパラメータ、θg は生成器のパラメータです。トレーニングの目標は、目的関数が θg で最小値を取得するようにすることです。同時に θd の最大値を取得します。

  • 最初の項目: pdata は実データの分布を表します。D(x)は、実データ(訓練データ)xに対する識別器ネットワークの識別結果であり、0~1の確率(0は偽、1は真)を出力する。E は、特定のサンプルの確率ではなく、トレーニング セット全体のすべてのサンプルの期待値を考慮することを意味します。
  • 2 番目の項目: p(z) はノイズの分布を表します。サンプルはG(z)を用いて生成でき、D(G(z))は生成された擬似データに対する識別器ネットワークの識別結果を表します。
  • θd の目標: 全体的な式が大きいほど良い。logD(x) が大きいほど良い、つまり実際のサンプルが真であるという識別器の期待が大きいほど良いことが望まれ、サンプルが真であると判断される確率が小さいほど、より良い。したがって、この結果を最大化できれば、弁別器が本物のデータと偽のデータを非常によく区別できることを意味します。
  • θg の目標: 式全体が小さいほど良い。G の目標は、生成された画像が可能な限り実物に近く、D(G(z)) が 1 に近づくことを期待することです。つまり、log(1−D(G(z))) は次のようになります。最小化された。その結果、弁別器が可能な限り間違いを犯し、データのソースを区別できないように G をトレーニングすることになります。これは、ジェネレータが実際のサンプルに非常によく似たデータを生成していることを意味します。

3 モデルトレーニングプロセスのデモンストレーション

上の図に示すように、x と z は両方とも 1 次元ベクトルであり、z は一様に分布していると仮定します。点線の点は実際のデータの分布、青の点線は識別器 D の識別結果の分布、緑の実線は生成器 G の分布です。

a. 生成器は一様分布から緑色の実線で表されるガウス分布まで学習しますが、現時点では弁別器はまだ非常に貧弱です。

b. 弁別器は、図 b に示す分布を学習し、実際のデータと生成されたデータを区別できます。

c. トレーニングが進むにつれて、ジェネレーターのピークが実際のデータのピークに近づき、弁別器が区別することが困難になります。より正確にするために、弁別器の分布も実際のデータに近づきます。 ;

d. 最終トレーニングの結果、生成器は実際の分布に適合し、識別器は区別が難しく、出力確率は 0.5、つまりD ( x ) = 1/2です。

反復的な解決プロセス

具体的なアルゴリズムのプロセスは次のとおりです。

完全なトレーニング プロセス: 各トレーニング反復では、最初に弁別ネットワークがトレーニングされ、次にジェネレーター ネットワークがトレーニングされます。

  1. 1) 弁別器ネットワークの場合、最初にノイズ事前分布 z から小さなバッチのサンプルをサンプリングし、次にトレーニング データ x から実際のサンプルの小さなバッチをサンプリングし、ノイズ サンプルをジェネレータ ネットワークに渡し、ジェネレータの結果として画像が出力で得られます。この時点で、偽画像の小さなバッチと実際の画像の小さなバッチがあり、弁別器で勾配計算を実行し、勾配情報を使用して弁別器パラメータを更新し、上記の手順に従って k 回反復して、差別者。
  2. 2) ジェネレーターをトレーニングし、小さなバッチのノイズ サンプルをサンプリングしてジェネレーターに渡し、ジェネレーターを逆伝播して、目的関数を最適化します。

トレーニング後、ノイズを含む画像が生成ネットワークに渡されて、偽の画像が生成されます。

トレーニングの内部ループで D を最適化して完了させることは計算量が多大であり、有限のデータセットでは過剰適合が発生します。代わりに、D を最適化する k ステップと G を最適化する 1 ステップを交互に行います。その結果、 G が十分にゆっくりと変化する限り、D は最適解の近くに維持されます。

k はハイパーパラメータであり、小さすぎず、大きすぎません。識別子Dは十分に更新できるようにする必要があるが、あまり更新しすぎることはできない。

  • D の更新が十分でない場合、G トレーニング中に識別が不十分なモデルのパラメーターを更新し、D を騙し続けることは無意味です。
  • D が完全にトレーニングされた場合、log(1−D(G(z))) は 0 になる傾向があり、導関数の結果も 0 になる傾向があり、ジェネレーターのトレーニングが困難になります。
  • 全体的に、GAN の収束は非常に不安定であるため、改善するには多くの作業が必要です。

別の問題:

初期の頃はGが非常に弱かったのでDをしっかり鍛えると先ほどのGトレが動けなくなってしまいました。

実際には、方程式 1 はGが適切に学習するのに十分な勾配を提供しない可能性があります。学習の初期段階でGの値が低い場合、サンプルはトレーニング データと明らかに異なるため、D は高い信頼度でサンプルを拒否できます。この場合、log(1 - D ( G ( z ))) は飽和します。

したがって、著者は、logD(G(z)) を最大化するように G の目的関数を変更することで、G と D の同じ不動点が得られ、同時に、初期段階でより良く降下できるようにすることを提案しています。ステージ。

log(1 - D ( G ( z )))を最小化するようにGを訓練するのではなく、log D ( G ( z ))を最大化するようにGを訓練することができます。この目的関数は、 GDのダイナミクスの同じ固定点をもたらしますが、学習の初期段階ではるかに強い勾配を提供します。

以下、目標曲線の形状を最適化する観点から説明します。

上図の青い曲線は log(1−D(G(z))) です。ジェネレーターが良好でない場合 (D(G(z) が 0 に近い)、勾配は非常に平坦になり、モデルのトレーニングが遅くなります。ジェネレーターが良好な場合 (D(G(z) が 1 に近い)、勾配が急でモデルが更新されます 地面が速すぎます。これは私たちが期待していることとは逆です。発電機が効果的でないときは勾配が急になることを期待します。これにより、より多くのことを学習し、更新ペースを向上させることができます収束が近づいたら減速する必要があります。

max logD(G(z)) 画像は、下図の緑色の曲線に示されており、初期勾配が大きく、最終勾配が小さいという優れた特性を備えており、トレーニングのニーズを満たしています。実際のトレーニングでは基本的に公式を使用します。

Li Mu: 問題は、D(G(z))→0 のとき、log0 が負の無限大となり、数値的な問題が発生することです。

目的関数に関する部分はわかりにくいです。実際、率直に言うと、これは二値分類問題の誤差関数の構築です。たとえば、 min -log(y^) に進み、次のようになります。 min log(1-y^) に行かずに min -log(1-y^) に変更します。最後の部分の説明を参照してください。

5 理論的結果: 大域的最適解 pg =pdata

  具体的な証明部分については、投稿GAN 論文読み - オリジナル GAN (基本概念と理論的導出)_StarCoo のブログ - CSDN ブログ_gan オリジナル論文を参照してください。

1. 最初に D を訓練します。ジェネレーター G を修正すると、最適なディスクリミネーターは次のようになります。  

  • * は最適解を示します
  • pg (x) と pdata (x) は、それぞれ、ジェネレーターによって近似された分布と実際のデータの分布における x の確率を表します。
  • pg (x)= pdata (x) の場合、結果は 1/2 になります。これは、2 つの分布がまったく同じであり、最適な識別器がそれらを区別できないことを意味します。
  • この式の意味は、2 つの分布からデータをサンプリングし、目的関数 min max V(D,G) を使用してバイナリ分類器をトレーニングすることです。分類器の出力値が 0.5 の場合、2 つの分布が分布は完全に一致しています。統計学ではこれを2標本検定といい、2つのデータが同じ分布に由来するかどうかを判断するために使用されます。

        注: 2 つのサンプル テストは非常に実用的な手法です。たとえば、トレーニング セットでモデルをトレーニングし、それを別の環境にデプロイした後、テスト データの分布がトレーニング データと同じかどうかを確認する必要があります。このバイナリ分類器のようにトレーニングして、データ ソースを区別し、デプロイされた環境とトレーニングしたモデルの間の不一致を回避できるかどうかを確認できます。

証明:

最初の行は密度関数の積分で、代入 g(z)=x が 2 行目を取得します (この代入は理解できません)

上記を理解していれば、後者は簡単です。与えられたデータと G の前提の下では、Pdata ( x ) とPG ( x ) は両方とも定数と見なすことができ、それぞれabを使用して表すことができるため、次の式が得られます。

証明書が完成しました。

2. 次に G を訓練します。D の最適解を目的関数に代入します。目的関数は G にのみ関連し、C(G) として記述されます。   

    次に、この項目を最小化します。

    pg = pdata の場合に限り、最適解 C(G)=−log4 が存在することが証明できます。

  • 上記の 2 つの用語は KL ダイバージェンスと書くことができ、KL ダイバージェンスは 2 つの分布間の差を測定するために使用されます。

これは、Q 分布のエンコードに必要なビット数を最小限に抑えるために特定のエンコード方法を採用した場合に、P 分布のエンコードに必要な追加ビット数を表します。P 分布と Q 分布がまったく同じである場合、その KL 発散はゼロです。

KL ダイバージェンスには多くの有用な特性があり、最も重要なのは、KL ダイバージェンスが負ではないことです。KL 発散は、離散変数の場合は P と Q が同じ分布であるか、連続変数の場合は「ほぼどこでも」同じ分布である場合にのみ 0 になります。

KL 発散を使用して、上記の式を簡略化します。

  • そして、JS の分岐は次のように定義されているためです。

 したがって、さらに単純化すると次のようになります。   

        minC(G) は、最後の項目が 0 (JS divergence ≥ 0) に等しい場合にのみ成立する必要があります。このとき、pg = pdata は、2 つの分布がまったく同じであることを意味します。 D*(x) 式の場合、結果は 1/2 であり、最適な識別器はそれを区別できません。

    注: JS 発散と KL 発散の違いは、前者は対称的で pg と pdata を交換できるのに対し、後者は非対称であることです。

  要約すると、目的関数min max V (D,G) には大域的な最適解があり、この解はpg = pdata つまりジェネレーターによって学習された分布が実データの分布に応じて、最適なジェネレータを得ることができます

仮想トレーニング基準 C(G) のグローバル最小値は、pg = pdata の場合にのみ達成されます。その時点で、C(G) は値 - log 4 に達します。

収束の証明

  この部分は、十分なトレーニング データと正しい環境が与えられた場合、アルゴリズム 1 の各ステップで D が最適解に到達できる場合、G に対して次の反復が実行されることを証明します。

トレーニング プロセスは pg = pdata に収束します。この時点では、ジェネレーター G が最適なジェネレーターです。

実際には、毎回 D を k ステップで訓練するだけですが、これは上記の前提条件からはまだ程遠いため、結論が本当に当てはまるかどうかを判断するのはそれほど簡単ではありません。

6 GANのメリットとデメリット

参考GAN 論文読解 - オリジナル GAN (基本概念と理論的導出)_StarCoo のブログ - CSDN ブログ_gan オリジナル論文

アドバンテージ

他の生成モデルと比較して、生成対立ネットワークには次の 4 つの利点がありますDepth | OpenAI Ian Goodfellow の Quora の質問と回答:

  • 他のモデルよりも優れた結果 (より鮮明で鮮明な画像) を生成します。
  • GAN は、あらゆる種類のジェネレーター ネットワークをトレーニングできます (理論上、実際には、REINFORCE を使用して離散出力を持つジェネレーター ネットワークをトレーニングすることは非常に困難です)。他のほとんどのフレームワークでは、出力層がガウスであるなど、ジェネレーター ネットワークが何らかの特定の関数形式を持つ必要があります。重要なのは、他のすべてのフレームワークでは、ジェネレーター ネットワークがゼロ以外の質量に分散される必要があることです。
  • いかなる種類の因数分解にも従うモデルを設計する必要はなく、どのような生成ネットワークや弁別器でも機能します。
  • マルコフ連鎖を使用して繰り返しサンプリングする必要はなく、学習プロセス中に推論する必要もないため、難しい確率の近似計算の問題が回避されます。

質問

現時点での GAN の主な問題:

  • 収束しにくい(非収束)

        現在直面している基本的な問題は次のとおりです。どの理論でも、GAN はナッシュ平衡 (ナッシュ平衡) で優れたパフォーマンスを発揮するはずだと考えられていますが、勾配降下法は凸関数の場合にのみナッシュ平衡の実現を保証できます。ゲームの両側がニューラル ネットワークで表現される場合、実際に平衡に達することなく、戦略を永続的に調整させることが可能になります。 Deep Depth | OpenAI Quora Q&A by Ian Goodfellow

  • トレーニングが難しい: 崩壊問題

        GAN モデルはミニマックス問題として定義されており、損失関数がないと、トレーニング中に進歩しているかどうかを区別することが困難です。GAN の学習プロセスが崩壊する可能性があり、ジェネレーターが縮退し始め、常に同じサンプル ポイントを生成するため、学習を続行できなくなります。生成モデルがクラッシュすると、識別モデルも同様の方向の同様のサンプル点を指すことになり、トレーニングを続行できなくなります。

  • 事前のモデリングは必要ありません。モデルは自由すぎて制御できません。

        他の生成モデルと比較して、GAN は分布関数を構築する必要がなく、分布を使用して直接サンプリングするため、理論上実際のデータを完全に近似することができます。これが GAN の最大の利点でもあります。ただし、事前モデリングを必要としないこの方法は自由すぎるという欠点があり、画像が大きく、ピクセル数が多い場合、単純な GAN に基づく方法では制御性があまり高くありません (超高次元)。

したがって、作成者が生成した最終的な画像解像度は非常に低いことがわかります。GAN では、学習パラメータの各更新プロセスは、D については k 回更新され、G については 1 回のみ更新されるように設定されていますが、これも同様の考慮事項に基づいています。

7 コードの実装

 コード: Li Honyi 機械学習の宿題 6 - GAN を使用してアニメ キャラクターの顔を生成する

生成されたネットワーク コードに対する CS231n
 

pytorch バージョンのリファレンス https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html 

 

8 インパクト

1. GANの分野を創設

2. GAN 自体は教師なし学習であり、ラベル付きデータは必要ありません。GANの考え方は教師なし学習に応用されています。

3. トレーニング方法は、教師なし学習に教師あり学習損失関数を使用することです (教師ありラベルは、データが実際のものであるか生成されたものであるかに基づいて取得されます)。そのため、トレーニングははるかに効率的になります。これは、bert などの自己教師あり学習モデルのインスピレーションの源でもあります。もう 1 つの例は、ドメイン敵対的トレーニングです。Li Honyi 機械学習の宿題 11—転移学習、ドメイン敵対的トレーニング

9. 損失関数に関する議論

以下は個人的な考えですが、簡単に言えば、論文中の GAN の最適化目的関数の設計は複雑に見えますが、実際には 2 値分類の損失関数です。

二項分類

GAN のトレーニング プロセスは minmax トレーニングですが、勾配上昇法を実際に使用する人はほとんどいないため、実践と理論には違いがあります。まず、二値分類問題の損失関数を見てみましょう。損失関数は小さいほど良いと思います。y^ はモデルの予測結果、y はラベルです

y=1のとき、L(y^,y)=−log y^。y^ が 1 に近い場合、L(y^,y) ≈ 0 は、予測効果がより優れていることを意味し、y^ が 0 に近い場合、L(y^,y) ≈+∞ は、予測効果が優れていることを意味します。予測効果はさらに悪くなります。

y=0 の場合、L(y^,y)=−log (1−y^) となります。y^ が 0 に近い場合、L(y^,y)≈0 は、予測効果が優れていることを意味し、y^ が 1 に近い場合、L(y^,y)≈+∞ は、予測効果が優れていることを意味します。予測効果はさらに悪くなります。

識別子

以下は弁別器損失関数です。

二値分類の損失関数を適用し、y^=D(y) とします。データが Pdata から収集された場合、ラベル y=1、損失関数は -log y^ です。データが PG から収集された場合、ラベル y=0、損失関数は -log (1-y^) )。2 つを加算すると、実際には V(G,D) の逆の数になります。つまり、トレーニング弁別器は、実際の画像のラベルが 1 であるバイナリ クロス エントロピー ロス (BCELoss) を直接使用できます。生成された画像は 0 です

r_label = torch.ones((bs)).to(self.device)
f_label = torch.zeros((bs)).to(self.device)
r_loss = self.loss(r_logit, r_label)
f_loss = self.loss(f_logit, f_label)
loss_D = (r_loss + f_loss) / 2

発生器

以下は発電機の損失関数です。

二値分類の損失関数を適用すると、y^=D(G(z))、ラベル y=1 とすると、損失関数は -log y^ となるため、二値クロスエントロピー損失 (BCELoss) を直接使用することもできます。ラベルを 1 として指定する限り

loss_G = self.loss(f_logit, r_label)

おすすめ

転載: blog.csdn.net/iwill323/article/details/128331953