生成的敵対的ネットワーク(GAN)について知って以来、私はそれらに魅了されてきました。 GANは、新しいデータを最初から生成できるニューラルネットワークの一種です。入力として少しランダムなノイズを与えることができ、寝室や鳥、または生成するように訓練されたもののリアルな画像を生成できます。
すべての科学者が同意できることの1つは、より多くのデータが必要であるということです。
データが制限された状況で新しいデータを生成するために使用できるGANは、非常に便利であることがわかります。データの生成は、困難で費用と時間がかかる場合があります。ただし、有用であるためには、生成されたデータから取得した洞察が実際のデータに適用されるように、新しいデータは十分に現実的である必要があります。マウスを狩るために猫を訓練していて、偽のマウスを使用している場合は、偽のマウスが実際にマウスのように見えることを確認することをお勧めします。
それについての別の考え方は、GANが現実的なデータを作成できるようにするデータの構造を発見していることです。これは、その構造を自分で確認できない場合や、他の方法で引き出すことができない場合に役立ちます。
この記事では、GANを使用して新しいデータを生成する方法を学習します。このチュートリアルを現実的に保つために、 クレジットカード詐欺検出データセット Kaggleから。
私の実験では、このデータセットを使用して、不正なケースを検出するのに十分な現実的なデータをGANで作成できるかどうかを確認しました。このデータセットは、限られたデータの問題を浮き彫りにします。285,000件のトランザクションのうち、不正であるのは492件のみです。 492件の詐欺は、特に人々が数桁大きいデータセットを持ちたいと考える機械学習タスクに関しては、トレーニングするのに大きなデータセットではありません。私の実験の結果は驚くべきものではありませんでしたが、その過程でGANについて多くのことを学びました。
このGANの領域を掘り下げる前に、機械学習またはディープラーニングのスキルをすばやくブラッシュアップしたい場合は、次の2つの関連ブログ投稿をご覧ください。
生成的敵対的ネットワーク(GAN)は、次のような以前の生成的手法に比べて目覚ましい改善を示したニューラルネットワークアーキテクチャです。 変分オートエンコーダ または制限付きボルツマンマシン。 GANは、よりリアルな画像を生成することができました(例: DCGAN )、画像間のスタイル転送を有効にします(を参照) ここに そして ここに )、テキストの説明から画像を生成します( StackGAN )、およびを介して小さなデータセットから学ぶ 半教師あり学習 。これらの成果のために、彼らは多くを生み出しています 興味 学術部門と商業部門の両方で。
FacebookのAIリサーチディレクターであるYannLeCunnは、彼らに電話をかけました。 機械学習で最もエキサイティングな開発 過去10年間で。
あなたがどのように学ぶかについて考えてください。何かを試してみると、フィードバックが得られます。戦略を調整して、再試行してください。
フィードバックは、批判、苦痛、または利益の形でもたらされる可能性があります。それはあなたがどれだけうまくやったかについてのあなた自身の判断から来るかもしれません。多くの場合、最も有用なフィードバックは、他の人からのフィードバックです。これは、単なる数字や感覚ではなく、タスクの実行状況をインテリジェントに評価するためです。
コンピュータがタスクのために訓練されるとき、人間は通常、調整されたパラメータまたはアルゴリズムの形でフィードバックを提供します。これは、2つの数値を掛けることを学ぶなど、タスクが明確に定義されている場合にうまく機能します。あなたはそれがどのように間違っていたかをコンピュータに簡単かつ正確に伝えることができます。
犬の画像を作成するなど、より複雑なタスクでは、フィードバックを提供することがより困難になります。画像がぼやけていますか、猫のように見えますか、それとも何かのように見えますか?複雑な統計を実装することもできますが、画像をリアルに見せるためのすべての詳細をキャプチャすることは困難です。
視覚入力の評価経験が豊富なため、人間はある程度の推定を行うことができますが、比較的遅く、評価は非常に主観的である可能性があります。代わりに、ニューラルネットワークをトレーニングして、実際の画像と生成された画像を区別するタスクを学習することができます。
次に、画像ジェネレーター(ニューラルネットワークでもある)と弁別器が交互に学習するようにすることで、時間の経過とともに改善することができます。このゲームをプレイするこれら2つのネットワークは、生成的な敵対的ネットワークです。
あなたはできる 聞く GANの発明者であるIanGoodfellowは、このトピックに関するバーでの議論が、最初のGANをもたらしたコーディングの熱狂的な夜にどのようにつながったかについて話します。そして、はい、彼は彼のバーを認めています 論文 。 GANについて詳しくは、 イアン・グッドフェローのブログ このトピックにおいて。
GANを使用する場合、いくつかの課題があります。アーキテクチャ、活性化関数、最適化方法、学習率、ドロップアウト率など、選択肢の数が多いため、単一のニューラルネットワークのトレーニングは難しい場合があります。
GANは、これらすべての選択肢を2倍にし、新しい複雑さを追加します。ジェネレーターとディスクリミネーターの両方が、トレーニングの初期に使用したトリックを忘れる可能性があります。これにより、2つのネットワークが、時間の経過とともに改善されないソリューションの安定したサイクルに巻き込まれる可能性があります。一方のネットワークがもう一方のネットワークを圧倒し、どちらも学習できなくなる可能性があります。または、ジェネレータは可能なソリューションスペースの多くを探索せず、現実的なソリューションを見つけるのに十分なだけである可能性があります。この最後の状況は、モード崩壊として知られています。
モードの崩壊は、ジェネレータが可能な現実的なモードの小さなサブセットのみを学習する場合です。たとえば、タスクが犬の画像を生成することである場合、ジェネレータは小さな茶色の犬の画像のみを作成することを学習できます。ジェネレーターは、他のサイズまたは色の犬で構成される他のすべてのモードを見逃していたでしょう。
これに対処するために、バッチ正規化、トレーニングデータへのラベルの追加、生成されたデータの判別方法の変更など、多くの戦略が実装されています。
データにラベルを追加する、つまりデータをカテゴリに分類すると、ほとんどの場合、GANのパフォーマンスが向上することに人々は注目しています。一般的にペットの画像を生成することを学ぶよりも、たとえば猫、犬、魚、フェレットの画像を生成する方が簡単なはずです。
おそらく、GAN開発における最も重要なブレークスルーは、ディスクリミネーターがデータを評価する方法を変更することでもたらされたので、それを詳しく見てみましょう。
2014年のGANの元の定式化では Goodfellow etal。 、ディスクリミネーターは、特定の画像が実際の画像または生成された確率の推定値を生成します。弁別器には、実際の画像と生成された画像の両方で構成される画像のセットが提供され、これらの各入力の推定値が生成されます。弁別器の出力と実際のラベルの間の誤差は、クロスエントロピー損失によって測定されます。クロスエントロピー損失は、イェンセン・シャノン距離計量と同等であり、2017年の初めに Arjovsky etal。 このメトリックが失敗する場合もあれば、正しい方向を示さない場合もあります。このグループは、ワッサースタイン距離メトリック(アースムーバーまたはEM距離とも呼ばれます)が機能し、さらに多くの場合にうまく機能することを示しました。
クロスエントロピー損失は、弁別器が実際の画像と生成された画像をどれだけ正確に識別したかを示す尺度です。代わりに、ワッサースタインメトリックは、実際の画像と生成された画像の各変数(つまり、各ピクセルの各色)の分布を調べ、実際のデータと生成されたデータの分布がどれだけ離れているかを判断します。ワッサースタイン計量は、質量×距離の観点から、生成された分布を実際の分布の形状にプッシュするのにどれだけの労力がかかるかを調べます。したがって、別名「アースムーバー距離」です。ワッサースタインメトリックは、画像が本物であるかどうかを評価するのではなく、生成された画像が実際の画像からどれだけ離れているかを批判するため、ワッサースタインでは「ディスクリミネーター」ネットワークは「クリティカル」ネットワークと呼ばれます。建築。
GANのもう少し包括的な調査のために、この記事では、4つの異なるアーキテクチャを調査します。
ただし、最初にデータセットを見てみましょう。
私たちはと協力します クレジットカード詐欺検出データセット Kaggleから。
データセットは約285,000のトランザクションで構成されており、そのうち492のみが不正です。データは、「時間」、「量」、「クラス」の31の機能と、28の追加の匿名化された機能で構成されています。クラス機能は、トランザクションが不正であるかどうかを示すラベルであり、0は正常を示し、1は不正を示します。すべてのデータは数値で連続しています(ラベルを除く)。データセットに欠落値はありません。データセットは最初からかなり良好な状態になっていますが、もう少しクリーニングを行います。ほとんどの場合、すべての機能の平均を0に調整し、標準偏差を1に調整します。クリーニングプロセスについては、ノートブックで詳しく説明しました ここに 。今のところ、 最終結果 :
これらの分布では、通常のデータと不正なデータの違いを簡単に見つけることができますが、重複もたくさんあります。より高速で強力な機械学習アルゴリズムの1つを適用して、不正を特定するための最も有用な機能を特定できます。このアルゴリズムは、 xgboost は、勾配ブーストされた決定木アルゴリズムです。データセットの70%でトレーニングし、残りの30%でテストします。テストデータセットのリコール(検出された不正サンプルの割合)が改善されなくなるまで続行するようにアルゴリズムを設定できます。これにより、テストセットで76%のリコールが達成され、明らかに改善の余地があります。それは94%の精度を達成します。つまり、予測された詐欺事件の6%だけが実際に通常の取引でした。この分析から、不正を検出する際の有用性によってソートされた機能のリストも取得します。最も重要な機能を使用して、後で結果を視覚化するのに役立てることができます。
繰り返しになりますが、詐欺データが多ければ、それをより適切に検出できる可能性があります。つまり、より高いリコールを達成できます。次に、GANを使用して新しい現実的な不正データを生成し、実際の不正を検出できるようにします。
このデータセットにさまざまなGANアーキテクチャを適用するために、 GAN-サンドボックス 、KerasライブラリとTensorFlowバックエンドを使用してPythonで実装された人気のあるGANアーキテクチャが多数あります。私の結果はすべてJupyterノートブックとして利用できます ここに 。簡単なセットアップが必要な場合は、必要なすべてのライブラリがKaggle / PythonDockerイメージに含まれています。
GAN-Sandboxの例は、画像処理用に設定されています。ジェネレーターは、ピクセルごとに3つのカラーチャネルを持つ2D画像を生成し、ディスクリミネーター/評論家はそのようなデータを評価するように構成されます。畳み込み変換は、画像データの空間構造を利用するためにネットワークのレイヤー間で利用されます。畳み込み層の各ニューロンは、入力と出力の小さなグループ(たとえば、画像内の隣接するピクセル)でのみ機能し、空間的な関係の学習を可能にします。クレジットカードのデータセットには変数間の空間構造がないため、畳み込みネットワークを密に接続されたレイヤーを持つネットワークに変換しました。密に接続された層のニューロンは、層のすべての入力と出力に接続され、ネットワークが機能間の独自の関係を学習できるようにします。この設定を各アーキテクチャに使用します。
最初に評価するGANは、ジェネレーターネットワークをディスクリミネーターネットワークと比較し、ディスクリミネーターからのクロスエントロピー損失を利用してネットワークをトレーニングします。これは、元の「バニラ」GANアーキテクチャです。評価する2番目のGANは、条件付きGAN(CGAN)の方法でデータにクラスラベルを追加します。このGANには、データにもう1つの変数、クラスラベルがあります。 3番目のGANは、ネットワークをトレーニングするためにワッサースタイン距離メトリック(WGAN)を使用し、最後のGANは、クラスラベルとワッサースタイン距離メトリック(WCGAN)を使用します。
492件の不正取引すべてで構成されるトレーニングデータセットを使用して、さまざまなGANをトレーニングします。条件付きGANアーキテクチャを容易にするために、不正データセットにクラスを追加できます。ノートブックでいくつかの異なるクラスタリング方法を検討し、不正データを2つのクラスに分類するKMeans分類を使用しました。
各GANを5000ラウンドトレーニングし、その過程で結果を調べます。図4では、トレーニングが進むにつれて、実際の不正データと、さまざまなGANアーキテクチャから生成された不正データを確認できます。実際の不正データが2つのKMeansクラスに分割され、これら2つのクラス(PCA変換された機能からの機能V10とV17)を最もよく区別する2つの次元でプロットされていることがわかります。クラス情報を使用しない2つのGAN、GANとWGANは、生成された出力をすべて1つのクラスとして持ちます。条件付きアーキテクチャであるCGANとWCGANは、生成されたデータをクラスごとに表示します。ステップ0では、すべての 生成されたデータは ジェネレータに供給されるランダム入力の正規分布。
SQLサーバーでのクエリ最適化手法
元のGANアーキテクチャは、実際のデータの形状と範囲を学習し始めますが、その後、小さな分布に向かって崩壊することがわかります。これは、前に説明したモードの崩壊です。ジェネレータは、ディスクリミネータが偽物として検出するのに苦労している小さな範囲のデータを学習しました。 CGANアーキテクチャは少し良くなり、不正データの各クラスの分布に広がり、近づきますが、ステップ5000で見られるように、モードの崩壊が始まります。
WGANは、GANおよびCGANアーキテクチャによって示されるモード崩壊を経験しません。クラス情報がなくても、実際の不正データの非正規分布を想定し始めます。 WCGANアーキテクチャも同様に機能し、個別のクラスのデータを生成できます。
以前に不正検出に使用したのと同じxgboostアルゴリズムを使用して、データがどの程度現実的に見えるかを評価できます。高速でパワフルで、あまり調整しなくても既成で動作します。実際の不正データの半分(246サンプル)と同数のGAN生成例を使用して、xgboost分類器をトレーニングします。次に、実際の不正データの残りの半分と246GANで生成された別の例を使用してxgboost分類器をテストします。この直交法(実験的な意味で)は、ジェネレーターが現実的なデータを生成するのにどれほど成功しているかを示します。完全に現実的な生成データを使用すると、xgboostアルゴリズムは0.50(50%)の精度を達成する必要があります。つまり、推測に勝るものはありません。
我々はできる xgboostの精度を参照してください GANで生成されたデータは、最初は減少し、モード崩壊が始まるとトレーニングステップ1000の後に増加します。CGANアーキテクチャは2000ステップ後にいくらかより現実的なデータを実現しますが、このネットワークでもモード崩壊が始まります。 WGANおよびWCGANアーキテクチャは、より現実的なデータをより速く達成し、トレーニングが進むにつれて学習を続けます。 WCGANは、WGANに対してあまり優位に立っていないようです。これは、これらの作成されたクラスがWassersteinGANアーキテクチャに役立たない可能性があることを示唆しています。
WGANアーキテクチャの詳細については、 ここに そして ここに 。
WGANおよびWCGANアーキテクチャの評論家ネットワークは、特定のデータセットと実際の不正データとの間のワッサースタイン(Earth-mover、EM)距離を計算することを学習しています。理想的には、実際の不正データのサンプルについて、ゼロに近い距離を測定します。しかし、批評家はこの計算を実行する方法を学ぶ過程にあります。生成されたデータの距離が実際のデータよりも長い限り、ネットワークを改善できます。生成されたデータと実際のデータのワッサースタイン距離の違いがトレーニングの過程でどのように変化するかを見ることができます。それが頭打ちになっている場合は、それ以上のトレーニングは役に立たない可能性があります。図6を見ると、 さらなる改善のようです このデータセットのWGANとWCGANの両方に必要です。
これで、実際の不正データを検出するのに十分現実的な新しい不正データを生成できるかどうかをテストできます。最も低い精度スコアを達成したトレーニング済みのジェネレーターを使用して、データを生成できます。基本的なトレーニングセットでは、非不正データの70%(199,020ケース)と不正データの100ケース(不正データの約20%)を使用します。次に、このトレーニングセットに、最大344ケース(不正データの70%)まで、さまざまな量の実際の不正データまたは生成された不正データを追加してみます。テストセットには、他の30%の非不正ケース(85,295ケース)と不正ケース(148ケース)を使用します。訓練されていないGANと最も訓練されたGANから生成されたデータを追加して、生成されたデータがランダムノイズよりも優れているかどうかをテストできます。私たちのテストから、私たちの最高のアーキテクチャはトレーニングステップ4800のWCGANであり、70%のxgboost精度を達成したようです(理想的には、精度は50%になることを忘れないでください)。そのため、このアーキテクチャを使用して新しい不正データを生成します。
図7を見ると、トレーニングに生成された不正データをより多く使用しても、リコール(テストセットで正確に識別された実際の不正サンプルの割合)は増加しないことがわかります。 xgboost分類器は、100の実際のケースから不正を識別するために使用したすべての情報を保持でき、数十万の通常のケースからそれらを選択した場合でも、追加の生成データに混乱することはありません。トレーニングを受けていないWCGANから生成されたデータは、当然のことながら、助けになったり傷つけたりすることはありません。しかし、訓練されたWCGANから生成されたデータも役に立ちません。データが十分に現実的ではないようです。図7を見ると、実際の不正データを使用してトレーニングセットを補足すると、リコールが大幅に増加することがわかります。 WCGANがトレーニングの例を複製することを学んだばかりで、創造性をまったく発揮していなかったとしたら、私たちが 実際のデータで見る 。
実際の詐欺を検出するのに十分な現実的なクレジットカード詐欺データを生成することはできませんでしたが、これらの方法で表面を傷つけることはほとんどありませんでした。より大規模なネットワークを使用して、より長くトレーニングし、この記事で試したアーキテクチャのパラメーターを調整することができます。 xgboostの精度とディスクリミネーターの損失の傾向は、より多くのトレーニングがWGANおよびWCGANアーキテクチャに役立つことを示唆しています。もう1つのオプションは、実行したデータクリーニングを再検討することです。おそらく、いくつかの新しい変数を設計するか、機能の歪度に対処するかどうか、および対処する方法を変更します。おそらく、不正データのさまざまな分類スキームが役立つでしょう。
他のGANアーキテクチャを試すこともできます。ザ・ ドラガン ワッサースタインGANよりも高速かつ安定してトレーニングすることを示す理論的および実験的証拠があります。限られたトレーニングセットからの学習に有望である半教師あり学習を利用する方法を統合することができます(「 GANをトレーニングするための改善されたテクニック 」)。人間が理解できるモデルを提供するアーキテクチャを試すことができるので、データの構造をよりよく理解できる可能性があります(を参照)。 InfoGAN )。
また、この分野の新たな展開にも目を光らせておく必要があります。最後になりましたが、この急速に発展している分野で独自のイノベーションの創出に取り組むことができます。
この記事に関連するすべてのコードは、この記事にあります。 GitHubリポジトリ 。
関連: TensorFlowにおける最急降下法の多くのアプリケーションGANは、あるニューラルネットワークがデータを生成し、別のニューラルネットワークが出力が実際に見えるかどうかを判断する機械学習アルゴリズムです。 2つのネットワークは、生成されたデータのリアリズムを向上させるために互いに競合します。