[E検定]E試験プログラム課題突破!敵対性生成ネットワーク(GAN)によるMNIST手書き文字の生成

敵対性生成ネットワーク(GAN)による深層学習は、近年のAIの中でもホットなトピックです。E試験を受験する資格を得るには各社で主催している講座でプログラム研修が必須になっていることがおおいと思います。著者は、E試験のために複数のGANモデルによるMNIST手書き文字の生成 ・可視化するプログラムを作成しその結果を考察しました。今後同じようにプログラム課題の提出が必要な方、GANに興味を持っている人に参考になればと思い記事にしてみました。

E試験で頻出のGANのてテーマ

E試験で頻出のGANのテーマは以下のようになっています。

GAN
DCGAN
Conditional GAN(条件付きGAN)
LAPGAN
Conditional Cycle GAN
Info GAN
潜在変数を用意し、潜在変数と画像分布の相互情報量を最大化するように学習を進めるモデルである。
AnoGAN
異常検知に用いられるモデルです。
StackGAN
高画質の画像を生成するために用いられるモデルです。
SAGAN
StyleGAN
PGGAN
ACGAN
Discriminatorで生成画像の真偽判定に加えてクラス分類も実施するモデルです。

開発の流れについて

参考にしたのは以下の書籍になります。

実践GAN

本書の目次は以下のようになっています。

Part 1 GANと生成モデル入門
1章 はじめてのGAN
2章 オートエンコーダを用いた生成モデル
3章 はじめてのGAN:手書き文字の生成
4章 深層畳み込みGAN: DCGAN
Part 2 GANの発展的な話題
5章 訓練とよくある課題: GANをうまく動かすために
6章 プログレッシブなGAN
7章 半教師あり学習
8章 条件付きGAN
9章 CycleGAN
Part 3 ここからどこへ進むべきか
10章 敵対的サンプル
11章 GANの実用的な応用
12章 将来に向けて

主に参考したのは、第3章、第4章、第7章、第8章でした。プロダクト開発では、GAN、DCGANで生成した文字の比較、その後、DCGANのネットワークを用い半教師なし学習と教師あり学習でのラベル付きのデータ数を変更し性能の検証を実施、条件付きGANによる数字文字列の生成を実施しました。

開発環境について

環境は以下になります。

python 3.7.1
keras 2.3.1
tensorflow1.13.1

各章の内容をVisual Studio Codeで実行しましたが動作しなかったのは第7章の以下のみでした。

[修正前]

accuracies = training.history[‘acc’] [修正後]

accuracies = training.history[‘accuracy’]

考察

実際にコードを動かした考察は以下のようになっています。

GAN・DCGAN

GANで生成された画像は、人間が事後に完璧に識別できるものではありませんでした。しかしながら多くのものが識別可能であり生成器と識別機の2層からなる単純なネットワークであることを考えると素晴らしい成果であると考えられます。次にDCGANですが、DCGANはAlec Radford, Luke Metz,Soumith Chintalaによって2016年に提案されました。DCGANはGANが2年前に誕生して以降、最も偉大で重要な初期の発明と考えられています。実際の結果を確認すると理由がよく分かりました。DCGANによる実行結果は、手書きの数字文字とほとんどが区別がつかないものとなっています。

半教師あり学習・教師あり学習

次に半教師なし学習では、ラベル付きのデータ100枚の場合で89%正確に分類することができました。同じラベル数での教師あり学習の約63%と16%も高い精度で推定することができます。ラベル付きのデータを500,1000と増加させると精度が向上していっているころが分かります。このことからラベル付きのデータを更に増加させると精度が向上することわかります(ラベル付きの画像1000枚で教師なし学習の精度は96.64%)。また、教師なし学習と教師あり学習の精度の差も少なくなっています。比較のために先行研究での精度に関して言及すると2016年にTim Salimans,lan Goodfellowと、OpenAIの仲間たちは、Street View House Numbers(SVHN)ベンチマークにおいて、わずか2000のラベル付きのデータからおよそ94%の精度を達成しました。また、Gao Huang等は、2016年に完全にラベルのついた73,257枚のデータを用いた最高のアルゴリズムを開発しておりその精度は98.40%でした。これら教師あり学習の場合に比べ今回の検証でも明らかなように半教師なし学習がサンプル数が少ない場合でも高い精度を実現しており、利用方法によっては有用な手法になりうることが分かります。AIは、サンプルデータの入手が課題であることから教師なし学習の発展は今後更なる発展が期待されます。

E検定対策として

GANはE検定でも応用モデルとして頻出のテーマになっています。実際のコードを動作させることによりGANがこれまでどのように発展してきたかを理解することができました。プログラム課題も無事に通過しました。GANの技術は現在も発展中でどんどん新しい手法が確立されています。E検定対策のにならずGANの動向を把握するには参考にした本(実践GAN)はとてもよい良書だと思いました。皆さんも是非本書を元に手を動かしてプログラムを実行してみることをお勧めします。