「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
(Generative Adversarial Network: GAN)
特徴 †
本物データと見分けのつかない贋作データを出力する。
- 教師なし学習で使用される人工知能アルゴリズムの一種
できること †
- データの特徴を抽出して学習し、実在しないデータを生成できる(生成モデル)。
詳細 †
システム †
Generator(生成器) †
生成側は識別側を欺こうと学習
- 入力にランダムなノイズ・ベクトルzを受け取る。
- ランダムなノイズ・ベクトルzから贋作データを生成する。
- Discriminatorが贋作データを本物データと識別するように学習する。
- 学習が進むにつれどんどん精度の高い贋作データを生成できるようになる。
- 学習が終わるとGeneratorのみでデータ生成タスクを実行できる。
- 2つのネットワークの競合関係は、損失関数を共有
Discriminator(識別器) †
識別側はより正確に識別しようと学習
損失関数を共有 †
- Discriminatorが正しくラベル付けできた場合、
- 「D(x)」の値が大きくなり、「logD(x)」も大きくなり
- さらにGが偽物だとバレることで、「D(G(z))」が小さくなる。
結果、「log(1−D(G(z)))」が大きくなりDiscriminatorが優勢になる。
- Generatorが本物に近いデータを作れた場合、
- 「G(z)」の値が大きくなり(?)、「D(G(z))」も大きくなる。
- さらにDiscriminatorが正しくラベル付けできなくなることで、「D(x)」の値が小さくなり、「logD(x)」も小さくなる。
結果、「log(1−D(G(z)))」が小さくなりGeneratorが優勢になる。
DCGAN †
- CNNをGANに取り入れることで画像の生成性能を上昇させたモデル。
- 数多くのGANのアーキテクチャにはDCGANが基礎として導入されている(?)。
- 100次元のランダムノイズのベクトルから32x32の画像を生成
- ConvTranspose2d(転置畳み込み)を使用し画像サイズを拡張
統合 †
- 手続
以下を1エポック分、繰り返す。
- ランダムノイズを生成し贋作画像の生成
- 学習データ(本物画像+贋作画像)を作成
- update_discriminator関数呼び出し
- update_generator関数呼び出し
- 平均の損失を算出
- update_discriminator関数
Discriminatorのパラメタ更新を行う。
- 本物データで順伝播、贋作データで順伝播
- 上記2つの損失を合計して逆伝播してパラメタ更新
損失関数の謎 †
参考 †
YouTube? †
https://www.youtube.com/playlist?list=PLcd5jOpoEDGBDqiRMS4eqkfBwl28ixRYc