生成的敵対的ネットワークを使用してランダムノイズからデータを作成する

公開: 2022-03-11

生成的敵対的ネットワーク(GAN)について知って以来、私はそれらに魅了されてきました。 GANは、新しいデータを最初から生成できるニューラルネットワークの一種です。 入力として少しランダムなノイズを与えることができ、寝室や鳥、または生成するように訓練されたもののリアルな画像を生成できます。

すべての科学者が同意できることの1つは、より多くのデータが必要であるということです。

データが制限された状況で新しいデータを生成するために使用できるGANは、非常に便利であることがわかります。 データの生成は、困難で費用と時間がかかる場合があります。 ただし、有用であるためには、生成されたデータから取得した洞察が実際のデータに適用されるように、新しいデータは十分に現実的である必要があります。 マウスを狩るために猫を訓練していて、偽のマウスを使用している場合は、偽のマウスが実際にマウスのように見えることを確認することをお勧めします。

それについての別の考え方は、GANが現実的なデータを作成できるようにするデータの構造を発見していることです。 これは、その構造を自分で見ることができない場合、または他の方法でそれを引き出すことができない場合に役立ちます。

生成的敵対的ネットワーク

この記事では、GANを使用して新しいデータを生成する方法を学習します。 このチュートリアルを現実的に保つために、Kaggleのクレジットカード不正検出データセットを使用します。

私の実験では、このデータセットを使用して、不正なケースを検出するのに十分な現実的なデータをGANで作成できるかどうかを確認しました。 このデータセットは、限られたデータの問題を浮き彫りにします。285,000件のトランザクションのうち、不正であるのは492件のみです。 492件の不正行為は、特に、データセットを数桁大きくしたい機械学習タスクに関しては、トレーニングするのに大きなデータセットではありません。 私の実験の結果は驚くべきものではありませんでしたが、私は喜んで共有する過程でGANについて多くのことを学びました。

始める前に

このGANの領域を掘り下げる前に、機械学習またはディープラーニングのスキルをすばやく磨きたい場合は、次の2つの関連するブログ投稿をご覧ください。

  • 機械学習理論とその応用の紹介:例を含むビジュアルチュートリアル
  • ディープラーニングチュートリアル:パーセプトロンからディープネットワークまで

なぜGAN?

生成的敵対的ネットワーク(GAN)は、変分オートエンコーダーや制限付きボルツマンマシンなど、以前の生成的手法に比べて目覚ましい改善を示したニューラルネットワークアーキテクチャです。 GANは、より現実的な画像(DCGANなど)を生成し、画像間のスタイル転送を可能にし(こことここを参照)、テキストの説明から画像を生成し(StackGAN)、半教師あり学習を介して小さなデータセットから学習することができます。 これらの成果により、学術部門と商業部門の両方で多くの関心を集めています。

FacebookのAIResearchのディレクターであるYannLeCunnは、過去10年間で機械学習の最もエキサイティングな開発とさえ呼んでいます。

基礎

あなたがどのように学ぶかについて考えてください。 何かを試してみると、フィードバックが得られます。 戦略を調整して、再試行してください。

フィードバックは、批判、苦痛、または利益の形でもたらされる可能性があります。 それはあなたがどれだけうまくやったかについてのあなた自身の判断から来るかもしれません。 多くの場合、最も有用なフィードバックは、他の人からのフィードバックです。これは、単なる数字や感覚ではなく、タスクをどれだけうまく実行したかをインテリジェントに評価するためです。

コンピュータがタスクのために訓練されるとき、人間は通常、調整されたパラメータまたはアルゴリズムの形でフィードバックを提供します。 これは、2つの数値を掛けることを学ぶなど、タスクが明確に定義されている場合にうまく機能します。 あなたはそれがどのように間違っていたかをコンピュータに簡単かつ正確に伝えることができます。

犬の画像を作成するなど、より複雑なタスクでは、フィードバックを提供することがより困難になります。 画像がぼやけていますか、猫のように見えますか、それとも何かのように見えますか? 複雑な統計を実装することもできますが、画像をリアルに見せるためのすべての詳細をキャプチャすることは困難です。

視覚的な入力を評価した経験が豊富なため、人間はある程度の推定を行うことができますが、比較的遅く、評価は非常に主観的である可能性があります。 代わりに、ニューラルネットワークをトレーニングして、実際の画像と生成された画像を区別するタスクを学習することができます。

次に、画像生成器(これもニューラルネットワーク)と弁別器が交互に学習するようにすることで、時間の経過とともに改善することができます。 このゲームをプレイするこれら2つのネットワークは、生成的な敵対的ネットワークです。

GANの発明者であるIanGoodfellowが、このトピックに関するバーでの議論が、最初のGANをもたらしたコーディングの熱狂的な夜にどのようにつながったかについて話しているのを聞くことができます。 そして、はい、彼は彼の論文のバーを認めています。 このトピックに関するIanGoodfellowのブログから、GANの詳細を学ぶことができます。

GANの図

GANを使用する場合、いくつかの課題があります。 単一のニューラルネットワークのトレーニングは、アーキテクチャ、活性化関数、最適化方法、学習率、ドロップアウト率など、さまざまな選択肢があるため難しい場合があります。

GANは、これらすべての選択肢を2倍にし、新しい複雑さを追加します。 ジェネレーターとディスクリミネーターの両方が、トレーニングの初期に使用したトリックを忘れる可能性があります。 これにより、2つのネットワークが、時間の経過とともに改善されないソリューションの安定したサイクルに巻き込まれる可能性があります。 一方のネットワークがもう一方のネットワークを圧倒し、どちらも学習できなくなる可能性があります。 または、ジェネレータは、可能なソリューションスペースの多くを探索せず、現実的なソリューションを見つけるのに十分なだけである可能性があります。 この最後の状況は、モード崩壊として知られています。

モードの崩壊は、ジェネレータが可能な現実的なモードの小さなサブセットのみを学習する場合です。 たとえば、タスクが犬の画像を生成することである場合、ジェネレータは小さな茶色の犬の画像のみを作成することを学習できます。 ジェネレーターは、他のサイズまたは色の犬で構成される他のすべてのモードを見逃していたでしょう。

これに対処するために、バッチ正規化、トレーニングデータへのラベルの追加、または識別器が生成されたデータを判断する方法の変更など、多くの戦略が実装されています。

人々は、データにラベルを追加すること、つまり、データをカテゴリに分割することで、ほとんどの場合、GANのパフォーマンスが向上することを指摘しています。 一般的にペットの画像を生成することを学ぶよりも、たとえば猫、犬、魚、フェレットの画像を生成する方が簡単なはずです。

おそらく、GAN開発における最も重要なブレークスルーは、ディスクリミネーターがデータを評価する方法を変更するという点でもたらされたので、それを詳しく見てみましょう。

Goodfellow et al。による2014年のGANの元の定式化では、弁別器は、特定の画像が実在または生成された確率の推定値を生成します。 弁別器には、実際の画像と生成された画像の両方で構成される画像のセットが提供され、これらの各入力の推定値が生成されます。 弁別器の出力と実際のラベルの間の誤差は、クロスエントロピー損失によって測定されます。 クロスエントロピー損失は、イェンセンシャノン距離計量と同等であり、2017年の初めにArjovskyetalによって示されました。 このメトリックが失敗する場合もあれば、正しい方向を示さない場合もあります。 このグループは、ワッサースタイン距離メトリック(アースムーバーまたはEM距離とも呼ばれます)が機能し、さらに多くの場合にうまく機能することを示しました。

クロスエントロピー損失は、弁別器が実際の画像と生成された画像をどれだけ正確に識別したかを示す尺度です。 代わりに、ワッサースタインメトリックは、実際の画像と生成された画像の各変数(つまり、各ピクセルの各色)の分布を調べ、実際のデータと生成されたデータの分布がどれだけ離れているかを判断します。 ワッサースタイン計量は、質量×距離の観点から、生成された分布を実際の分布の形にプッシュするのにどれだけの労力がかかるかを調べます。したがって、別名「アースムーバー距離」です。 ワッサースタインメトリックは、画像が実体であるかどうかを評価しなくなり、代わりに、生成された画像が実像からどれだけ離れているかを批判するため、「弁別器」ネットワークは、ワッサースタインでは「クリティカル」ネットワークと呼ばれます。建築。

GANのもう少し包括的な調査のために、この記事では、4つの異なるアーキテクチャを調査します。

  • GAN:元の(「バニラ」)GAN
  • CGAN:クラスラベルを利用する元のGANの条件付きバージョン
  • WGAN:ワッサースタインGAN(勾配ペナルティ付き)
  • WCGAN:ワッサースタインGANの条件付きバージョン

しかし、最初に私たちのデータセットを見てみましょう。

クレジットカード詐欺データを見る

Kaggleのクレジットカード不正検出データセットを使用します。

データセットは約285,000のトランザクションで構成されており、そのうち492のみが不正です。 データは、「時間」、「量」、「クラス」の31の機能と、匿名化された28の追加機能で構成されています。 クラス機能は、トランザクションが不正であるかどうかを示すラベルであり、0は正常を示し、1は不正を示します。 すべてのデータは数値で連続しています(ラベルを除く)。 データセットに欠落値はありません。 データセットは最初はすでにかなり良い状態になっていますが、もう少しクリーニングを行います。ほとんどの場合、すべての機能の平均を0に調整し、標準偏差を1に調整します。 クリーニングプロセスについては、こちらのノートブックで詳しく説明しています。 今のところ、最終結果を表示します。

機能とクラスグラフ

これらの分布では、通常のデータと不正なデータの違いを簡単に見つけることができますが、多くの重複もあります。 より高速で強力な機械学習アルゴリズムの1つを適用して、不正を特定するための最も有用な機能を特定できます。 このアルゴリズムxgboostは、勾配ブースティングされた決定木アルゴリズムです。 データセットの70%でトレーニングし、残りの30%でテストします。 テストデータセットのリコール(検出された不正サンプルの割合)が改善されなくなるまで続行するようにアルゴリズムを設定できます。 これにより、テストセットで76%のリコールが達成され、明らかに改善の余地があります。 それは94%の精度を達成します。つまり、予測された詐欺事件の6%だけが実際に通常の取引でした。 この分析から、不正を検出する際の有用性によってソートされた機能のリストも取得します。 最も重要な機能を使用して、後で結果を視覚化するのに役立てることができます。

繰り返しになりますが、より多くの不正データがあれば、それをより適切に検出できる可能性があります。 つまり、より高いリコールを達成することができます。 次に、GANを使用して新しい現実的な不正データを生成し、実際の不正を検出できるようにします。

GANを使用した新しいクレジットカードデータの生成

このデータセットにさまざまなGANアーキテクチャを適用するために、GAN-Sandboxを使用します。GAN-Sandboxには、KerasライブラリとTensorFlowバックエンドを使用してPythonで実装された多くの一般的なGANアーキテクチャがあります。 私の結果はすべて、ここでJupyterノートブックとして利用できます。 簡単なセットアップが必要な場合は、必要なすべてのライブラリがKaggle /PythonDockerイメージに含まれています。

GAN-Sandboxの例は、画像処理用に設定されています。 ジェネレータは、ピクセルごとに3つのカラーチャネルを持つ2D画像を生成し、ディスクリミネータ/評論家はそのようなデータを評価するように構成されます。 畳み込み変換は、画像データの空間構造を利用するためにネットワークのレイヤー間で利用されます。 畳み込み層の各ニューロンは、入力と出力の小さなグループ(たとえば、画像内の隣接するピクセル)でのみ機能し、空間的な関係の学習を可能にします。 クレジットカードのデータセットには変数間の空間構造がないため、畳み込みネットワークを密に接続された層を持つネットワークに変換しました。 密に接続された層のニューロンは、層のすべての入力と出力に接続され、ネットワークが機能間の独自の関係を学習できるようにします。 このセットアップを各アーキテクチャに使用します。

私が評価する最初のGANは、ネットワークをトレーニングするためにディスクリミネーターからのクロスエントロピー損失を利用して、ディスクリミネーターネットワークに対してジェネレーターネットワークをピットインします。 これは、元の「バニラ」GANアーキテクチャです。 評価する2番目のGANは、条件付きGAN(CGAN)の方法でデータにクラスラベルを追加します。 このGANには、データにもう1つの変数、クラスラベルがあります。 3番目のGANは、ワッサースタイン距離メトリックを使用してネットワーク(WGAN)をトレーニングし、最後のGANは、クラスラベルとワッサースタイン距離メトリック(WCGAN)を使用します。

GANアーキテクチャ

492件の不正取引すべてで構成されるトレーニングデータセットを使用して、さまざまなGANをトレーニングします。 条件付きGANアーキテクチャを容易にするために、不正データセットにクラスを追加できます。 ノートブックでいくつかの異なるクラスタリング手法を検討し、不正データを2つのクラスに分類するKMeans分類を使用しました。

各GANを5000ラウンドトレーニングし、その過程で結果を調べます。 図4では、トレーニングが進むにつれて、実際の不正データと、さまざまなGANアーキテクチャから生成された不正データを確認できます。 実際の不正データが2つのKMeansクラスに分割され、これら2つのクラス(PCA変換された機能からの機能V10およびV17)を最もよく区別する2つの次元でプロットされていることがわかります。 クラス情報を使用しない2つのGAN、GANとWGANは、生成された出力をすべて1つのクラスとして持ちます。 条件付きアーキテクチャであるCGANとWCGANは、生成されたデータをクラスごとに表示します。 ステップ0で、生成されたすべてのデータは、ジェネレーターに供給されるランダム入力の正規分布を示します。

GAN出力の比較

元のGANアーキテクチャは、実際のデータの形状と範囲を学習し始めますが、その後、小さな分布に向かって崩壊することがわかります。 これは、前に説明したモードの折りたたみです。 ジェネレータは、ディスクリミネータが偽物として検出するのに苦労している小さな範囲のデータを学習しました。 CGANアーキテクチャは少し良くなり、不正データの各クラスの分布に広がり、近づいていますが、ステップ5000で見られるように、モードの崩壊が始まります。

WGANは、GANおよびCGANアーキテクチャによって示されるモード崩壊を経験しません。 クラス情報がなくても、実際の不正データの非正規分布を想定し始めます。 WCGANアーキテクチャも同様に機能し、個別のクラスのデータを生成できます。

以前に不正検出に使用したのと同じxgboostアルゴリズムを使用して、データがどれほど現実的に見えるかを評価できます。 それは高速で強力であり、多くの調整なしで既製で動作します。 実際の不正データの半分(246サンプル)と同数のGAN生成例を使用して、xgboost分類器をトレーニングします。 次に、実際の不正データの残りの半分と246GANで生成された別の例を使用してxgboost分類器をテストします。 この直交法(実験的な意味で)は、ジェネレーターが現実的なデータを生成するのにどれほど成功しているかを示します。 完全に現実的な生成データを使用すると、xgboostアルゴリズムは0.50(50%)の精度を達成する必要があります。つまり、推測に勝るものはありません。

正確さ

GANで生成されたデータのxgboostの精度は、最初は減少し、モードの崩壊が始まるとトレーニングステップ1000の後に増加することがわかります。CGANアーキテクチャは、2000のステップの後にいくらかより現実的なデータを達成しますが、このネットワークでは次のようにモードの崩壊が始まります。良い。 WGANおよびWCGANアーキテクチャは、より現実的なデータをより速く達成し、トレーニングが進むにつれて学習を続けます。 WCGANは、WGANに対してあまり優位に立っていないようです。これは、これらの作成されたクラスがWassersteinGANアーキテクチャに役立たない可能性があることを示唆しています。

WGANアーキテクチャの詳細については、こことここを参照してください。

WGANおよびWCGANアーキテクチャの批評家ネットワークは、特定のデータセットと実際の不正データとの間のワッサースタイン(Earth-mover、EM)距離を計算することを学習しています。 理想的には、実際の不正データのサンプルについて、ゼロに近い距離を測定します。 しかし、批評家はこの計算を実行する方法を学ぶ過程にあります。 生成されたデータの距離が実際のデータよりも長い限り、ネットワークを改善できます。 生成されたデータと実際のデータのワッサースタイン距離の違いがトレーニングの過程でどのように変化するかを見ることができます。 それが頭打ちになっている場合は、それ以上のトレーニングは役に立たない可能性があります。 図6を見ると、このデータセットのWGANとWCGANの両方でさらに改善が見られることがわかります。

EM距離推定

私たちは何を学びましたか?

これで、実際の不正データを検出するのに十分現実的な新しい不正データを生成できるかどうかをテストできます。 最も低い精度スコアを達成した訓練されたジェネレーターを取得し、それを使用してデータを生成できます。 基本的なトレーニングセットでは、非不正データの70%(199,020ケース)と不正データの100ケース(不正データの約20%)を使用します。 次に、このトレーニングセットに、最大344ケース(不正データの70%)まで、さまざまな量の実際の不正データまたは生成された不正データを追加してみます。 テストセットには、不正以外のケース(85,295ケース)と不正ケース(148ケース)の残りの30%を使用します。 訓練されていないGANと最も訓練されたGANから生成されたデータを追加して、生成されたデータがランダムノイズよりも優れているかどうかをテストできます。 私たちのテストから、私たちの最高のアーキテクチャはトレーニングステップ4800のWCGANであり、70%のxgboost精度を達成したようです(理想的には、精度は50%になることを忘れないでください)。 したがって、このアーキテクチャを使用して新しい不正データを生成します。

図7を見ると、トレーニングに生成された不正データをより多く使用しても、想起(テストセットで正確に識別された実際の不正サンプルの割合)は増加しないことがわかります。 xgboost分類器は、100の実際のケースから不正を識別するために使用したすべての情報を保持でき、数十万の通常のケースからそれらを選択した場合でも、追加の生成データと混同されることはありません。 訓練されていないWCGANから生成されたデータは、当然のことながら、助けになったり傷つけたりすることはありません。 しかし、訓練されたWCGANから生成されたデータも役に立ちません。 データが十分に現実的ではないようです。 図7を見ると、実際の不正データを使用してトレーニングセットを補足すると、リコールが大幅に増加することがわかります。 WCGANがトレーニングの例を複製することを学んだばかりで、創造性をまったく発揮していなければ、実際のデータで見られるように、より高いリコール率を達成できたはずです。

追加データの影響

無限の彼方へ

実際の不正を検出するのに十分な現実的なクレジットカード不正データを生成することはできませんでしたが、これらの方法ではほとんど表面を傷つけていません。 より大規模なネットワークを使用して、より長くトレーニングし、この記事で試したアーキテクチャのパラメーターを調整することができます。 xgboostの精度とディスクリミネーターの損失の傾向は、より多くのトレーニングがWGANおよびWCGANアーキテクチャーに役立つことを示唆しています。 もう1つのオプションは、実行したデータクリーニングを再検討することです。おそらく、いくつかの新しい変数を設計するか、機能の歪度に対処するかどうか、およびどのように対処するかを変更します。 おそらく、不正データのさまざまな分類スキームが役立つでしょう。

他のGANアーキテクチャを試すこともできます。 DRAGANには、ワッサースタインGANよりも高速かつ安定してトレーニングできることを示す理論的および実験的証拠があります。 限られたトレーニングセットからの学習に有望である半教師あり学習を利用する方法を統合することができます(「GANをトレーニングするための改善されたテクニック」を参照)。 人間が理解できるモデルを提供するアーキテクチャを試すことができるので、データの構造をよりよく理解できる可能性があります(InfoGANを参照)。

また、この分野の新たな展開にも目を光らせておく必要があります。最後になりましたが、この急速に発展している分野で独自のイノベーションの創出に取り組むことができます。

この記事に関連するすべてのコードは、このGitHubリポジトリにあります。

関連: TensorFlowでの最急降下法の多くのアプリケーション