GAN
1
(とても軽く)
⽣成モデルの世界
2
前提
私たちが観測するデータはとある分布からサンプリングされている!
観測データ(ヒストグラム) 3
⽣成モデル⼀⾔で
あるデータの⽣成過程を確率分布によってモデル化すること
データの特徴をより低次元の空間で表現し、⽣成されるデータを操作したい。。。 4
(今回の)⽣成モデル⼀⾔で
任意の分布を何かしらのデータを⽣成する真の分布に変換する関数
任意の分布 真の分布
学習
観測データ
p✓(x) =
Z
p✓(x|z)p(z)dz
⽣成モデルp(z) pdata(x) = p✓(x)
変換前のベクトル𝑧は
出⼒の特徴を表すことから
潜在変数と呼ばれる
5
何ができる?
データ⽣成
潜在変数を連続的に
変化させたときの結果
https://crypko.ai/#/
6
何ができる?
異常検知
データの⽣成確率がわかるので
異常な値の検知が可能
?
7
何ができる?
⽋損値補間
https://arxiv.org/pdf/2003.03808.pdf
8
深層⽣成モデル
実応⽤において変換前の任意の分布と推定したい真の分布は
⾮線形に依存していることが多い
計算機の性能が向上し、現実的な時間で学習が可能になったこと
も重なり、DNNを⽤いた⽣成モデルが提案され始め、それらの
ことを深層⽣成モデルと呼ぶ様になった。
9
GAN
Generative adversarial network(敵対的⽣成ネットワーク)
10
GANを⼀⾔で
⽣成ネットワークGと識別ネットワークDの騙し合いゲーム
イメージ
贋作を作る
⽣成機G
⽣成
贋作 本物
真贋⾒分ける
識別機D
(Fate/grand order)
vs
11
⽣成ネットワークGの⽬的
⽣成
𝐷に⾃分の⽣成した出⼒が本物であると誤認させたい
⼊⼒: 潜在変数 𝑧
出⼒: 偽データ 𝑥!"#$
ロス: 𝐷が𝑥!"#$を受け取って出⼒する偽物への確信度 1 − 𝑝 𝐶 = 1 𝑥!"#$
インスピレーション
⼊⼒
評価
12
識別ネットワークDの⽬的
𝐺の作った贋作なのか本物なのかを識別したい
⼊⼒: とあるデータ𝑥 (本物 𝑥%"&" or 贋作 𝑥!"#$)
出⼒: 本物への確信度 𝑝(𝐶 = 1|𝑥)
ロス: 出⼒と正解ラベルとの誤差
正解ラベル
誤差関数
評価
⼊⼒
誤差
13
数式に落とし込む
潜在変数 𝑧
訓練データ 𝑥-./.
⽣成データ 𝑥0.12 = 𝐺(𝑧)
識別機の出⼒ 𝑦 = 𝐷(𝑥)
識別機の損失関数
⽣成機の損失関数
ED(x) = (t log y + (1 t) log(1 y))
G
G(z)
xfake
D
D(x)
Eg(z) = log(1 D(G(z)) 14
⽣成モデル⼀⾔で
任意の分布を何かしらのデータを⽣成する真の分布に変換する関数
任意の分布 真の分布
学習
観測データ
p✓(x) =
Z
p✓(x|z)p(z)dz
⽣成モデルp(z) pdata(x) = p✓(x)
変換前のベクトル𝑧は
出⼒の特徴を表すことから
潜在変数と呼ばれる
15
理想的な識別機
訓練データから真の分布が、
⽣成機から予測された分布が与えられたとして理想的な判別機は
どの様な出⼒をするのか?
pdata(x)pg(x)
16
理想的な識別機
理想的には
となり、損失関数
の正解ラベルがそれぞれの分布から抽出される
ことに注意して
と変換したものに代⼊すると
pdata(x)
D(x)
ED(x) = (t log y + (1 t) log(1 y))
D(x) =
pdata(x)
pdata(x) + pg(x)
pg(x)
(Epdata(x)[ln D(x)] + Epg(x)[ln(1 D(x))])
17
Z
pdata ln
pdata
ddata + pg
dx
Z
pdata ln
pg
ddata + pg
dx
Z
pdata ln
2pdata
ddata + pg
dx +
Z
pdata ln 2dx
Z
pdata ln
2pg
ddata + pg
dx +
Z
pg ln 2dx
2DJS[pdata||pg] + 2 ln 2
と変換することができ、識別機の⽬的は訓練データ集合の従う分布と、
⽣成されたデータ集合の従う分布のJSダイバージェンスを求めることに
対応していることがわかります。
18
理想的な⽣成機
理想的な識別機の働きについて確認したらそれに敵対する⽣成機
の学習内容を考えることは簡単です。識別器が適切に分布間距離
を求めることで損失関数を最⼩化しようとしているのに対し、
⽣成機は を に近づけることで、識別機の損失関数を
最⼤化しようとします
2DJS[pdata||pg] + 2 ln 2
pg pdata
19
実験
実際にデータが⽣成されていく様⼦を⾒ていく
潜在変数 p(z) = N(0, 1)
20
実験
データの真の分布 と
そこからサンプリングされ、学習に⽤いられるデータ集合
p(x)
X
p(x) X
21
実験
⽣成機の構造
z
●
●
●
G(z)
10ノード
LeakyReLU
tanh
22
実験
識別機の構造
●
●
●
10ノード
sigmoid
x p(C = 1|x)
LeakyReLU
23
実験
学習データ数 10000
1度の学習に使⽤するデータ数 1024(ランダム抽出)
学習回数 1000回
100回ごとに⽣成機からの出⼒をサンプリング
24
結果
真の分布(からのサンプリング)
100 200 300 400 500
600 700 800 900 1000
モード崩壊の始まり
25
ロスの推移
G_loss
D_loss
敵対的に学習が⾏われている様⼦
26
(今回の)問題点
モード崩壊
あるデータ点の近傍のみが出⼒される様になり表現⼒が乏しくな
る問題( オーバーフィッティング)
原因
(モデルの複雑さに対して)学習データが少なく、真の分布を表せていない
(学習データの分布に対して)⽣成機の表現⼒、識別機の解析⼒が低い
'
27
再実験
今回の場合はネットワークの表現⼒不⾜が考えられるので
中間層の数を増やして再度検証を⾏う
同じ
分布だ!
28
再実験
先ほどのネットワークが
(⼊⼒層, 中間層, 出⼒層)=(1, 10, 1)と
構成されていたのに対して今回はD, Gそれぞれ
(⼊⼒層, 中間層*2, 出⼒層)=(1, 100, 100, 1)と
層とノードを増やすことで表現⼒の向上を図った
他の条件は先ほどと同じ
29
結果
真の分布(からのサンプリング)
100 200 300 400 500
600 700 800 900 1000
先ほどよりも真の分布に近そう
30
(個⼈的な)感想
今回はGANの学習過程や結果を可視化して理解したいと⾔う理
由で⼀次元データの⽣成に挑戦
基本的に(画像などの)ベクトル同⼠が⾮線形に⼤きく依存して
おり、カーネル密度推定などができないといった場合の⽣成に適
していて今回の様な問題に対しては動作理解には繋がっても現実
的ではなさそう
31
余談
学習⽤データから1024個サンプリングしてカーネル密度推定
真の分布 密度推定(正規化なし)
32
GANのこれから
実応⽤に際しては、今回の様にパラメータ数を多くとって解決!
とはならない
現実で扱いたい問題は基本的にデータの次元数が多い(画像など)
分布を説明できるだけの⼤量の教師データを作るのが難しい
次元数に沿った⼗分な表現⼒を持つ完全結合ネットワークは現実的な時間で学習で
きない
層が増えるにつれて勾配が消失し学習が進まなくなる 等
現在もなお、これらの問題を解決すべく新たな⼿法が提案されている
33
GANの発展
A Review on Generative Adversarial Networks: Algorithms, Theory, and Applications
written by Jie Gui, Zhenan Sun, Yonggang Wen, Dacheng Tao, Jieping Ye
(Submitted on 20 Jan 2020) 34

GANの基本