NIPS2017 論文読み会	
2018/1/27
株式会社ウェブファーマー
大政 孝充
◾名前:⼤政孝充(おおまさ たかみつ)
◾株式会社ウェブファーマー 代表
 http://web-farmer.net
◾⼈⼯知能システムの開発(画像・動画・時系列データ)
◾⼈⼯知能のコンサルタント
⾃⼰紹介
masataka46
人工知能 プロトタイプ開発	
•  人工知能の試作品、本格的な開発に入る前のプロトタイプを開発
•  画像系、動画系、音声系、時系列データ系の人工知能を取り扱う
試作品の例)
顔の表情を読み取る
アプリ
困惑の表情
学習
Triple-GANとは
	
論文
C. Li, et. al. Triple Generative Adversarial Nets. In NIPS, 2017.
著者らのコード
https://github.com/zhenxuan00/triple-gan
taki0112氏のTensorflowを用いたCifar10での学習コード
https://github.com/taki0112/TripleGAN-Tensorflow
私のTensorflowを用いたMNISTでの学習コード
https://github.com/masataka46/tripleGAN
私のChainerを用いたMNISTでの学習コード
https://github.com/masataka46/tripleGAN_chainer
本日の予定
1.  Triple-GANのしくみ
2.  Triple-GANの学習方法
3.  Triple-GANの学習結果
4.  実装のポイント
5.  Triple-GANの改良案
6.  Tripel-GANのまとめ
7.  NIPS2017から Discriminatorの役割を分けた他の例
8.  NIPS2017から 半教師あり学習の他の例
Triple-GANのしくみ
元祖GANsのしくみ	
Xl
Xg
R
元祖 GANs
ノイズによって異なる画像を生成する
Ian Goodfellow, et. al. Generative adversarial nets. In NIPS, 2014.
Conditional-GANのしくみ	
Xl
R
3
3
3
Conditional-GAN
ラベルを一緒に入力し、そのラベルの画像を生成させる
M. Mirza and S. Osindero. Conditional generative adversar- ial nets. arXiv preprint arXiv:
1411.1784, 2014
Discriminatorは入力された画像とラベルのペアが real なものか、生成さ
れたものかを判別する
Conditional-GANの問題点	
Xl
R
3
3
3
例えば Discriminator に   と3を入力した時に Discriminator が生成され
た画像とラベルのペアと判定したとする。
これは3っぽい画像だけど本物っぽくないスタイルなので real でないと考
えたのか・・・・
あるいは本物っぽいスタイルだけど3でなく8と考えたからそう判定したの
だろうか・・・
Conditional-GANの問題点(1)
Conditional-GANの問題点	
Xl
R
3
3
3
 
Discriminator に画像のスタイルとラベルとの両方を判定させている
 →これが性能の向上を妨げている・・・?
Conditional-GANの問題点(1)
Conditional-GANの問題点	
Xl
R
3
3
3
あるいは、この仕組みだとラベルの付いた画像しか学習に使えないので、
データセットが少ない
 →これも性能の向上を妨げる原因
Conditional-GANの問題点(2)
Triple-GANのしくみ	
そこで Triple-GAN では新たに Classifier を設ける
3
3
3
3
Triple-GANのしくみ	
① Classifier でラベルを識別する
 →これにより Classifier の識別性能はどんどん上がるだろう。。。
3
3
3
3
Classifier にラベルの存在する画像を入れた場合の流れ
出力と正解ラベルから教師あり学習をする
 
Triple-GANのしくみ	
② Classifier にラベルなしの画像も入れ、ラベルを推論させる
 →データセットが大幅に増やせる
3
3
3
3
ラベルの無い画像を Classifier に入れた場合の流れ
Classifier でラベルを推論し、それを Discriminator に渡す
Triple-GANのしくみ	
③ Classifier に Generator で生成した画像を入れる
 →データセットが更に増やせる
3
3
3
3
Generator で生成した画像を Classifier に入れた場合の流れ
教師あり学習をさせる
各要素のアーキテクチャ	
MNIST datasets を用いる場合の各要素のアーキテクチャ
Triple-GANの学習方法
学習方法① Generator	
Generator は adversarial な学習のみ。
3
学習方法② Discriminator	
Discriminator は3種類の流れに対する adversarial な学習。
3
学習方法③ Classifier	
Classifier は推論したラベルに関する adversarial な学習、real 画像に対す
る教師あり学習、Generator で生成された画像に対する教師あり学習
3
学習のポイント	
学習がうまくいくポイントは                  となること
3
p Xl, Xl( )= p Xg, Xg( )= p Xc, Xc( )
Triple-GANの学習結果
学習結果	
Classifier の識別結果。一部のデータのみラベルを付与している。
半教師あり学習できる Triple-GANの性能がいい。
学習結果	
Generator で生成された画像。
各列は同一のノイズ z 、各行は同一のラベル y
それっぽい画像が生成されている
学習結果	
Chainer で作成したコードによる学習結果。
Generator から生成された画像。
各列は同一のノイズ z 、各行は同一のラベル y
学習回数1回 学習回数10回 学習回数500回
学習結果	
学習速度の比較
同じ半教師学習である Improved GAN より収束が早い
学習回数10回
T. Salimans, et. al. Improved techniques for training GANs. In NIPS, 2016.
実装のポイント
Chainer で実装する際のポイント	
まず Discriminator を学習させる場合を考える
3
Chainer で実装する際のポイント	
お決まりの cleargrads() で Discriminator に溜められた勾配をクリアにする。
3
Chainer で実装する際のポイント	
backward() で Discriminator の Loss を起点に勾配を計算する
3
→Generator、Classifier の勾配も計算される
Chainer で実装する際のポイント	
update() で Discriminator の重みのみ更新する
3
Chainer で実装する際のポイント	
次に Classifier を学習させる。Disciriminator からの不要な勾配があるの
で、これを消す。
3
Tensorflow で実装する際のポイント	
Discriminator のみを学習させる場合、var_list に対象のパラメータを列挙
する
3
Tensorflow での学習結果	
Chainer で作成したコードによる学習結果。
Generator から生成された画像。
各列は同一のノイズ z 、各行は同一のラベル y
学習回数500回 学習回数1000回
ノイズを変えてもラベルを変えても全て同じものが出力される
しかも学習回数によってラベルは変わってくる・・・・なぜ??
Triple-GAN の改良案
学習のポイント(再掲)	
学習がうまくいくポイントは                  となること
3
p Xl, Xl( )= p Xg, Xg( )= p Xc, Xc( )
Triple-GAN の改良案	
現状では Generator から Classifier への経路だけ誤差逆伝播してない
3
ココ
Triple-GAN の改良案	
これを誤差逆伝播してみる
3
ココ
Triple-GAN の改良案	
コードの修正はこれだけ
3
ココ
Triple-GAN の改良案	
学習結果
Generator から生成された画像 (100epochくらい)
うまくいかなかった・・・・なぜ?
Tensorflowでの実装とChainerでの実装、
どちらがいいか	
l  Tensorflow では3日かけて作ったが学習が進まない。。。
l  Chainer では1晩で作ったが学習がうまくいった
l  面倒臭い設定が少ない Chainer の方が楽か???
苦労した点	
l  ハイパーパラメータを少しいじるとうまくいかなくなる。DCGANなど2
要素の場合より難易度が高いか
l  supplementary material を見てもハイパーパラメータの詳細は書か
れていない →参照されてる論文や著者のコードを読み解く必要が
あり、面倒臭い
Triple-GAN まとめ
Triple-GANのまとめ	
l  Triple-GANはGenerator と Discriminator に加えて Classifier を導入
した
l  これにより半教師あり学習が可能となった
l  学習後の Generator はこれまでのモデルよりリアルな画像を生成し
た
l  学習後の Classifier はこれまでのモデルより識別性能が上がった
l  このしくみは特に少ない教師データで学習する際に威力を発揮する
NIPS2017から
Discriminatorの役割を分けた他の例
Discriminatorの役割を分離する他の例
DA-GAN	
色々な向きを向いた顔画像を生み出して、学習に使いたい
シミュレータを使うと本物らしからぬ画像が生成されるので、これを本物っぽくしたい
この際に1)顔の角度を指定し、2)個人のラベルを維持、したい
生成器
(generator)
本物画像
合成画像
洗練された画像
識別器
シミューレータ
J. Zhao. et. al. Dual-Agent GANs for Photorealistic and Identity Preserving Profile Face Synthesis
. In NIPS, 2017.
Discriminatorの役割を分離する他の例
DA-GAN	
識別器を2つに分離する
識別器1では誰であるかを識別し、識別器2では本物っぽさを識別する
誰?
生成器
(generator)
識別器1
本物画像
合成画像
洗練された画像
識別器2 本物っぽさ
シミューレータ
DA-GANとは	
識別器1で顔画像のidentityを判別。
誰?
生成器
(generator)
本物画像
合成画像
洗練された画像
L1 ノルム
識別器2 本物っぽさ
識別器1
DA-GANとは	
Discriminatorはauto-encoder。顔の特徴量から必要最小限の顔画像を再構成している?
その出力画像と入力画像との差分は、ノイズや肌質など「本物っぽさ」の部分か?
誰?
生成器
(generator)
本物画像
合成画像
洗練された画像
L1 ノルム
識別器2 本物っぽさ
識別器1
「本物っぽさ」の部分?
DA-GANとは	
本物画像の「本物っぽさ」から生成画像の「本物っぽさ」を引いてLossを求めている。
本物画像と生成画像の「本物っぽさ」を近づけている?
誰?
生成器
(generator)
本物画像
合成画像
洗練された画像
L1 ノルム
識別器2 本物っぽさ
識別器1
DA-GANとは	
実際は本物画像の「本物っぽさ」を生成画像の「本物っぽさ」の kt 倍にする?
誰?
生成器
(generator)
本物画像
合成画像
洗練された画像
L1 ノルム
識別器2 本物っぽさ
識別器1
とすべく
で更新する
は
DA-GANとは	
Generatorは全て畳み込みからなり、中央にresidual blockが10個
誰?
生成器
(generator)
本物画像
合成画像
洗練された画像
L1 ノルム
識別器2 本物っぽさ
識別器1
DA-GANとは	
GeneratorのLossの1項目はauto-encoder自体を学習させている?
誰?
生成器
(generator)
本物画像
合成画像
洗練された画像
L1 ノルム
識別器2 本物っぽさ
識別器1
LGθ
= −Ladv + λ1Lip( )+ λ2Lpp
( )
LGθ
= kt
!xi − Dφ !xi( )
i
∑ + λ1Lip
⎛
⎝
⎜
⎞
⎠
⎟+ λ2Lpp
NIPS2017から
半教師あり学習の他の例
半教師あり学習の他の例	
2枚の画像から Optical Flow を求めるモデル
教師がある場合は予測画像と教師画像から EPE loss を求める
教師がない場合は Flow warp error を求め、adversarial loss を求める
W. Lai, et. al. ImSemi-Supervised Learning for Optical Flow with Generative Adversarial Networks
proved techniques for training GANs. In NIPS, 2017.

Nips20180127