Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GANs in Action(実践GANs) 7章まとめ資料

shinebalance
September 15, 2020

GANs in Action(実践GANs) 7章まとめ資料

2020-9-15
【オンライン開催!】GAN:敵対的生成ネットワーク勉強会#6勉強会にて
https://soleildatadojo.connpass.com/event/188638/

shinebalance

September 15, 2020
Tweet

More Decks by shinebalance

Other Decks in Programming

Transcript

  1. Chapt7.Semi-Supervised GAN Chapt7.Semi-Supervised GAN ( 半教師ありGAN) ( 半教師ありGAN) 2020-09-15 GANs

    in Action(実践GAN) 勉強会資料 Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  2. 本⽇のTARGET 本⽇のTARGET Semi-Supervised GANの仕組みを理解する Semi-Supervised GANを通じ、Semi-Supervised Learningの 有⽤性を考える 余録:tensorflow v2のBatchNormを使った時の訓練失敗について

    TL:DR TL:DR GANの成果物といえばGenerator(⽣成器)だが、GANの学習プロセ スを上⼿に使うことで、有⽤なDescriminator(分類器)を獲得するこ とが出来る Generatorの訓練だけがGANではないのよ、という話 Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  3. おさらい おさらい 1~4章:GAN基礎 5章:GANにおいて有⽤なアイデア(Wassetetein GANとか) 6章:Progressivee GAN 7 章の構成 7

    章の構成 7.1 Semi-Supervised GANの概要とアーキテクチャ解説 7.2 Semi-Supervised GANの実装(DCGANベース) 実装コード⾃体はすんなり動いたのでは? 7.3 性能⽐較(通常の分類器と⽐較) Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  4. What is Semi- What is Semi- Supervised GAN ? Supervised

    GAN ? 主に7.1まとめ Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  5. 半教師あり学習:Semi-Supervised Learning 半教師あり学習:Semi-Supervised Learning 途中まで教師あり学習、途中から教師なし学習の 「半教師あり学習」 「⼈間の学習⽅法に最も似た機械学習かもしれません」 何が嬉しいの? 何が嬉しいの? 「ラベル付きデータの準備」という命題をショートカットできる

    可能性 (個⼈的な感想ですが)現状のDeep Learning実⽤化は特定タス クの解決が主題なので、まだ教師あり学習が強い気がします。 とはいえ可能性は感じる( ) 気になってる本 Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  6. ⼤前提の共有 ⼤前提の共有 Machine Learning全般におけるカテゴライズとして、 1. 教師あり学習(Supervised Learning) 2. 教師なし学習(Unsupervised Learning)

    3. 強化学習 学習データにラベルが有る/ない/学習データの質がちょっと違う 今の所、いちおうデファクトスタンダードな切り⼝? これ、厳密にはMECEじゃなくね?という意⾒もある Qiita:脳科学者とITエンジニアの、DLや汎⽤⼈⼯知能に関する 会話 Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  7. Semi-Supervised GAN? Semi-Supervised GAN? Descriminatorを真贋判定の分類器ではなく、多クラス分類器にした もの N+1クラスの分類を⾏う Nは訓練データに含まれるクラスの総数 1は偽画像 MNISTであればNは0〜9の10クラス

    つまり11クラスの分類を⾏う 書いてあるままだとそうなるが、実装を⾒ると感覚的に は2クラス分類と10クラス分類を交互にやってる感じ Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  8. 学習for ループは以下の順番 学習for ループは以下の順番 1. Descriminator($D(x,y)$) 2. Descriminator($D(x)$,$D(G(z))$) 3. Generator

    1ステップの中で全部やるのがポイント? 個⼈的には先に$D(x,y)$だけやっても成⽴しそうな気はした Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  9. 性能⽐較 性能⽐較 ⽐較のポイントは、「同じ数の教師データ(ラベルあり)で学習した、 通常の教師あり分類器」と⽐較して精度が出るかどうか 書籍での数値⽐較は… 分類器 Test Accuracy 100sampleの分類器 70%

    SGANのD分類器 89% 10,000sampleの分類器 98% * 当たり前だが10.000sampleで学習した分類機が⼀番強いのである Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  10. 所感 所感 あくまで「少ないラベル付きデータとラベルなしデータで精度が出 た」事が強み すごい&技術的に興味深いのは⼤変よく分かるが、実⽤という⾯で は、どういったシチュエーションに適するかは考えどころな気がし た ラベリングのコスト > Generatorを上⼿に学習させるコスト

    が採⽤前提? データがあまりに⼤量すぎる場合、この⽅法で作った分類器を アノテーション⽀援に使うのはアリかな、という気がした (´・ω・`)皆さんはどう思われますか? Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  11. 余録 余録 tensorflow v2 のBatchNorm を使っ tensorflow v2 のBatchNorm を使っ

    た時の訓練失敗について た時の訓練失敗について 何故そんなことが起こるのか ⻑いです Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  12. 本書は原著の出版が2019年10⽉となっており、tensorflowの前提 バージョンは1.0台となっている。 Google Colabのデフォルトは現在tensorflow2.0台となっており、 マジックコマンド %tensorlow version 1.x を実⾏するか、明⽰的に 1.0台を

    pip install しないと、Kerasを利⽤してもバックエンドは tensorflow2.0台で処理される で、本勉強会でDCGANの時から⾔われていたことだが、GitHubの コードを2.0台で実⾏すると、4章以降使いまわしているDCGANの 学習が上⼿く進まない Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  13. 結論としては、v2のBatchNormは trainable is False なら training is False に分岐する(v1は分岐しない)というのがポイント このあたりは次スライドの内容も含め、

    ソースを追いかけていくと、v1を通したときは _USE_V2_BEHAVIOR is False で BatchNormalizationBase クラスが呼び出される事がわかる _USE_V2_BEHAVIOR is False だと以下の処理が⾏われない fusedのコントロール( fused:true だと処理の⾼速化?を ⾏うらしい) trainable is False なら training is False への分岐 つまり、v1のBatchNormは trainable is False で も training is True になりうるということ nkmk.me様の記事がわかり やすい Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  14. ここで抑えておいたほうが良いポイントとして、 BathNormalization()には training と trainable 2つのパラメータが有 ること BathNormalization()はNormalizationの単位をパラメータとして学 習する 訓練時はミニバッチの平均と分散で正規化が⾏われる

    推論時は、訓練時に得た正規化パラメータ(平均と分散)を元 に、⼊⼒データをNormalizeする この切替は BathNormalization() のメンバ変数?である training にも っている それとは別に、compileされたmodelとしては trainable をもってい て、これは明⽰的に設定もできるし、呼び出しメソッド(fit, predict) によっても変更される Chapt7.Semi-Supervised GAN - (半教師ありGAN) 
  15. じゃあDCGANの実装で trainable ってどうコントロールしてるの? と思いコードを⾒る ここで⼀度よくわからなくなった 明⽰的に trainable = False してるところがある

    学習前のそれぞれのDescriminatorのtrainableの値を⾒ると (´・ω・`)??????学習しないってこと? # Keep Discriminator’s parameters constant for Generator training discriminator_unsupervised.trainable = False print(f'discriminator_net:{discriminator_net.trainable}') print(f'discriminator_supervised:{discriminator_supervised.trainable}') print(f'discriminator_unsupervised:{discriminator_unsupervised.trainable}') >>> discriminator_net:False discriminator_supervised:True discriminator_unsupervised:False Chapt7.Semi-Supervised GAN - (半教師ありGAN) 