GANの簡単な理解から正しい理解まで

>100 Views

March 16, 23

スライド概要

学内勉強会で使用したGANについての資料。初心者向けの噛み砕いた説明、GANの色々な発展系、分かる人向けの少し難しい解釈をまとめた。

*slideshare(https://www.slideshare.net/ssuser4c06f8/gan-256527097)からの移植

profile-image

主に深層学習に興味があります

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

2023/3/15 DDoS2023春 GAN (敵対的⽣成ネットワーク) 武蔵野⼤学 DDoS(脱初⼼者データサイエンスオンラインセミナー) 2023春 ⼩宮和真 misya11p 武蔵野⼤学 データサイエンス学部 2年 @ds33miya

2.

2023/3/15 DDoS2023春 ⽬次 1. GANとは 2. GANの仕組み 3. GANの実装 4. ⾊々なGAN 5. GANの正しい理解 1

3.

2023/3/15 DDoS2023春 ⽬次 1. GANとは 2. GANの仕組み 簡略化した説明 (ちょいちょい嘘が混じってる) 3. GANの実装 4. ⾊々なGAN 5. GANの正しい理解 正しい説明 2

4.

2023/3/15 DDoS2023春 1. GANとは 3

5.

2023/3/15 DDoS2023春 1. GANとは GAN 敵対的⽣成ネットワーク1 (Generative Adversarial Networks) ⼆つのニューラルネットワークを敵対させて学習させる仕組み 1. I. J. Goodfellow, et al., “Generative Adversarial Nets”, NIPS, 2014. 4

6.

2023/3/15 1. GANとは DDoS2023春 GANの発想 GANの発想を考える.なおこの発想は私が捏造したもので本来の背景とは異な るので注意. まずニューラルネットワークを考える.これは⼈間の脳の神経回路を模した機 械学習モデル. 入 力 出 力 5

7.

2023/3/15 DDoS2023春 1. GANとは GANの発想 NNは損失(正解との差)を⼩さくする様に学習を進める.しかし,正解として ⼀つのデータを定められない場合が存在する. 例)⽂章 → 画像 ある⽂章表現に沿った画像を正解とする場合,正解が⼤量に存在する 例)“かわいい猫” 6

8.

2023/3/15 DDoS2023春 1. GANとは GANの発想 NNの評価指標が必ずしも損失である必要はないため,他の指標を考える ここで,⼈間の主観による評価を考える.NNの出⼒結果を⼈間が⾒て点数をつ けるということ.これなら正解を⽤意する必要がない. しかし以下の様な問題が⽣じる • 微分ができない • 時間がかかる 7

9.

2023/3/15 1. GANとは DDoS2023春 GANの発想 うーん…⼈間の様にNNの出⼒を評価できて,評価結果を微分できるような都合 のいいモデルとかないかなぁ… → NNがあるじゃん といった発想で,NNの評価を別のNNに任せる仕組みが⽣まれた.これがGAN. 入 力 NN 出 力 評価用 NN 評 価 8

10.

2023/3/15 1. GANとは DDoS2023春 GAN GANは⽣成モデルを得るための⼿法として使われる ⽣成モデル あるデータ集合の特徴を捉え,似たデータの⽣成が可能になったモデル 生成 モデル 学習 生成 9

11.

2023/3/15 1. GANとは DDoS2023春 GAN GANで学習させるNNへの⼊⼒は乱数とする.これはノイズと呼ぶ. ノ イ ズ NN 出 力 「テキスト → 画像」の様に何らかの⼊⼒を考えたい場合,それは「条件」とし て⼊⼒とは異なる形で与える(詳細は4章) 10

12.

2023/3/15 1. GANとは DDoS2023春 GAN ⽣成したいデータの例を事前に集めておき,それを学習させることで,ノイズ から似たデータを⽣成できる様になる 1. 学習フェーズ 2. 生成フェーズ NN ノ イ ズ NN 11

13.

2023/3/15 DDoS2023春 2. GANの仕組み 12

14.

2023/3/15 2. GANの仕組み DDoS2023春 GANの仕組み まず⽤語を整理する • ⽣成器:ノイズからデータを⽣成するNN • 本物:⽣成したいデータ(予め集めておくデータ) • 偽物:⽣成器が⽣成したデータ • 識別器:データが偽物である確率を予測するNN ノ イ ズ 生成器 偽 物 識別器 確 率 13

15.

2023/3/15 2. GANの仕組み DDoS2023春 識別器の学習 識別器:データが偽物である確率を予測するNN 本物に0,偽物に1のラベルを割り当てたデータで学習させる.偽物のデータは ⽣成器から得る. ノ イ ズ 生成器 偽 物 =1 識別器 本 物 =0 学習 14

16.

2023/3/15 2. GANの仕組み DDoS2023春 ⽣成器の学習 ⽣成器:ノイズからデータを⽣成するNN 識別器が出⼒した確率を元に逆伝播を⾏うことで,識別器に偽物と判断されな くなるデータ=本物に近いデータを⽣成するための勾配を得る.それを元に勾配 降下法でパラメータを更新する. 逆伝播 ノ イ ズ 生成器 偽 物 識別器 確 率 15

17.

2023/3/15 2. GANの仕組み DDoS2023春 敵対的学習 ⽣成器と識別器を交互に何回も学習させること 識別器の学習→⽣成器の学習 という2ステップで⽣成器の学習が完了しそうだが, これだと上⼿くいかない.初めに強い識別器を作ってしまうと良い勾配が得ら れない為,⽣成器と並⾏して学習させる必要がある. 識別器の学習 生成器の学習 16

18.

2023/3/15 DDoS2023春 3. GANの実装 17

19.

2023/3/15 DDoS2023春 3. GANの実装 ノートブック参照 https://github.com/misya11p/GAN/blob/main/GAN_simple.ipynb 18

20.

2023/3/15 DDoS2023春 4. ⾊々なGAN 19

21.

2023/3/15 DDoS2023春 4. ⾊々なGAN ⾊々なGAN GANの発展系は⼤量に存在する ここに⾊々まとまっている: https://github.com/hindupuravinash/the-gan-zoo 2018時点で500以上のGANが提案されている 主要なものをいくつか紹介する 20

22.

2023/3/15 DDoS2023春 4. ⾊々なGAN DCGAN1 Deep Convolutional GAN 畳み込み層を⽤いたGAN.それだけ.「普通のGAN」がDCGANも含めること もある. 畳み込みを使わないGANに⽐べて画像が綺麗になる. 識別器には普通の畳み込み層,⽣成器には転置畳み込み層というものを⽤いる. 1. A. Redford, et al., “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks”, ICLR, 2016. 21

23.

2023/3/15 DDoS2023春 4. ⾊々なGAN CGAN1 Conditional GAN 条件付きGAN.⽣成するデータに制限をかける. 例)任意の数字の⼿書き画像⽣成 普通のGANと異なる点が3つ存在する 1. M. Mirza, et al., “Conditional Generative Adversarial Nets”, arXiv: 1411.1784, 2014. 22

24.

2023/3/15 4. ⾊々なGAN DDoS2023春 CGAN 1. ⽣成器と識別器が条件を考慮できる様にする 条件はone-hotベクトルとか⽂章ベクトルとかが考えられる.このベクトルを⽣ 成器・識別器のどこかから⼊⼒できる様にする. ノ イ ズ 生成器 データ 条 件 23

25.

2023/3/15 4. ⾊々なGAN DDoS2023春 CGAN 2. 学習データに適切な条件を割り当てておく 例) 5 ↓ 0 ↓ 4 ↓ 1 ↓ 9 ↓ 2 ↓ 24

26.

2023/3/15 DDoS2023春 4. ⾊々なGAN CGAN 3. 識別器が「本物で且つ条件が正しい場合」を識別できる様にする (学習時に)識別器に与えるデータと条件の組として以下を考える 1. 本物 & 正しい条件 2. 本物 & 間違った条件 3. 偽物 & (⽣成時に)⽣成器に与えた条件 識別器は,1かそれ以外かを識別できる様に学習する.こうすることで,⽣成器 が条件に沿ったデータを⽣成する様になる. 25

27.

2023/3/15 DDoS2023春 4. ⾊々なGAN pix2pix1 CGANの条件を画像にしたもの.ただノイズを⼊⼒しないのでただの画像変換 モデルという感じ(⼀応ドロップアウトでランダム性は持たせているらしい). 変換前と変換後の画像のペアを学習させることで以下の様な画像変換が⾏える. デモが試せるサイト: https://affinelayer.com/pixsrv/ 1. P. Isola, et al., “Image-to-Image Translation with Conditional Adversarial Nets”, CVPR, 2017 26

28.

2023/3/15 DDoS2023春 4. ⾊々なGAN CycleGAN1 「あるドメイン(ある特徴を持ったデータ集合)から別のドメインへの変換を ⾏うモデル」を得るための⼿法.画像のスタイル変換などが可能になる. 1. J. Y. Zhu, et al., “Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks”, ICCV, 2017. 27

29.

2023/3/15 4. ⾊々なGAN DDoS2023春 CycleGAN pix2pixとは違い,画像のペアを⽤意しなくていい.これが⼤きな利点. 以下の4つを定義する.また扱う⼆つのドメインをドメインA, ドメインBとする. • ドメインAからドメインBへの変換を⾏うモデル • ドメインBからドメインAへの変換を⾏うモデル 生成器 • データがドメインAに属するかを判定するモデル • データがドメインBに属するかを判定するモデル 識別器 28

30.

2023/3/15 4. ⾊々なGAN DDoS2023春 CycleGAN ⼆つの⽣成器は以下の2種類の損失を元に学習を進める 敵対的損失:変換後のデータを対象の識別器に⼊れた時の出⼒値 サイクル⼀貫性損失:「変換後のデータをもう⽚⽅の⽣成器に⼊れた時のデー タ」と「変換前のデータ」の差 ⽣成器(A→B)の学習の場合 データ(A) 生成器(A→B) サイクル 一貫性損失 偽物 偽物 識別器(B) 敵対的損失 生成器(B→A) 29

31.

2023/3/15 DDoS2023春 4. ⾊々なGAN StackGAN1 ⽂章から画像を⽣成するモデル.⽂章ベクトルを条件としたCGAN.⽣成器は まず⼩さめの画像を⽣成し,それを元に本来のサイズの画像を⽣成する.学習 時は,その⼆つのサイズの画像を別々の識別器に⼊れて敵対的損失を求める. 1. H. Zhang, et al., “StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks”, ICCV, 2017 30

32.

2023/3/15 DDoS2023春 4. ⾊々なGAN StackGAN ⽣成例 入力テキスト 小さめの画像 64x64 完成した画像 256x256 31

33.

2023/3/15 4. ⾊々なGAN DDoS2023春 MelGAN1 ⾳響特徴量(スペクトログラム)を⼊⼒して⾳声を⽣成するGAN ⽣成器の構成→ ⾳声合成(text-to-speech)のタスクでは,⼀度スペク トログラムを⽣成し,それを元に⾳声波形を⽣成すると いった⼿法をとることが多い.MelGANはそこで使える. ⽣成結果: https://melgan-neurips.github.io/ 1. K. Kumar, et al., “MelGAN: Generative Adversarial Networks for Conditional Waveform Synthesis”, NIPS, 2019. 32

34.

2023/3/15 DDoS2023春 5. GANの正しい理解 33

35.

2023/3/15 DDoS2023春 5. GANの正しい理解 GANの正しい理解 1~3章は「簡単な理解」を⽬標に書いたため,正しい解釈とは異なる部分が存在 する.本章ではGANを正しく理解する. なお,この「正しい理解」は,「論⽂に沿った理解」を指す 34

36.

2023/3/15 DDoS2023春 5. GANの正しい理解 Generative Adversarial Nets 2014年にNIPSで発表された論⽂1.GANの原論⽂. この論⽂は,「⽣成モデルを得るための⼿法」として敵対的⽣成ネットワーク を提案している 1. I. J. Goodfellow, et al., “Generative Adversarial Nets”, NIPS, 2014. 35

37.

2023/3/15 5. GANの正しい理解 DDoS2023春 ⽣成モデル データの分布を捉えたモデル ここで,あるデータ集合と,そのデータを表せるデータ空間を考える.無限に 広がるデータ空間内に,データが存在する範囲は限られている. 例えば28×28=784次元のベクトルで表せる画像を考えた時,MNISTの様な⼿ 書き数字と呼べるデータ(ベクトル)は,784次元空間の中の限られた範囲にし か存在しないよねという話. ℝ!"# (784次元空間) 36

38.

2023/3/15 DDoS2023春 5. GANの正しい理解 ⽣成モデル ⽣成モデルの⽬的は,このデータが存在する範囲=分布を捉えることである 分布が得られれば,その分布からサンプリングを⾏うことで,元のデータと同 じ特徴を持ったデータが得られる 37

39.

2023/3/15 DDoS2023春 5. GANの正しい理解 分布の推定 データから分布を求める⼿法やアルゴリズムは⾊々と存在する • 最尤推定 • EMアルゴリズム • ベイズ推定 • MCMC法 • 変分推論 ただ画像や⾳声といったデータは⾼次元で且つ複雑であるため,これらの⼿法 が素直に適応できない場⾯が多い 38

40.

2023/3/15 DDoS2023春 5. GANの正しい理解 潜在変数 あるデータの裏に潜む,そのデータの特徴を表す変数 例えば⼿書き数字の画像だったら,「数字(0~9)」と「書体」という⼆つの潜 在変数を仮定できる 「現実世界で観測できる画像や⾳声などのデータは,潜在変数からなる低次元 のベクトルで表せる」という仮説を多様体仮説と呼ぶことがある 潜在変数を考えることで,分布の推定がやりやすくなる 39

41.

2023/3/15 5. GANの正しい理解 DDoS2023春 GANの発想 まず,あるデータ𝑥に,何らかの分布に従う潜在変数𝑧が存在すると仮定する. 次に,データ𝑥の⽣成モデルとして,潜在変数𝑧からデータ𝑥への写像関数を考え る.この写像関数をニューラルネットワーク𝐺(𝑧)と置いたものがGANで,これ がGANの⼀つの発想である.また𝐺は⽣成器と呼ぶ. 𝑧 𝐺(𝑧) 𝑥 潜在変数 生成器 データ 40

42.

2023/3/15 DDoS2023春 5. GANの正しい理解 GANの発想 𝐺(𝑧)は,𝐺(𝑧)から得られるデータ𝑥の分布を暗黙的に定義している → 具体的な分布はないけど𝑥は何らかの分布に従うよね,という感じ ここで以下の様に定義する • 𝐺(𝑧) から得られる𝑥の分布:𝑝! • 𝑥の真の分布(推定したい分布): 𝑝"#$# すると, 𝑝! = 𝑝"#$# となる𝐺を求めることがGANの⽬的となる 41

43.

2023/3/15 DDoS2023春 5. GANの正しい理解 GANの発想 𝑝! = 𝑝"#$# が唯⼀の最適解となる⽬的関数として,以下の関数を考える 𝑉 𝐺, 𝐷 = 𝔼!∼#!"#" log 𝐷 𝑥 + 𝔼!∼#$ log(1 − 𝐷 𝑥 ) ここで, 𝐷 は 𝑥 が真の分布 𝑝"#$# から得られた確率を出⼒するNN.識別器と呼ぶ. まず𝐺を固定した状態で𝑉(𝐺, 𝐷)を最⼤にする𝐷を求める.そしてそれを𝐷 ∗ とする とき, C G = 𝑉(𝐺, 𝐷 ∗ )は𝑝! = 𝑝"#$# (となるような𝐺)で唯⼀の最適解(最⼩ 値) −log 4をとる. 42

44.

2023/3/15 5. GANの正しい理解 DDoS2023春 GANの発想 ざっくりと証明する.詳しく⾒たかったら論⽂へ. 𝐷の最適解( 𝑉(𝐺, 𝐷)を最⼤にする𝐷)は𝐷 ∗ = 代⼊して⾊々いじると以下の様になる. &!"#" である.これを𝑉(𝐺, 𝐷)に &!"#" '&$ 𝑉 𝐺, 𝐷 ∗ = − log 4 + 2 ⋅ 𝐽𝑆[𝑝"#$# ||𝑝! ] 𝐽𝑆はJSダイバージェンス(jensen-shannon divergence)といい,⼆つの確率 分布の距離を表す.常に⾮負の値をとり,⼆つの確率分布が等しい場合にのみ0 をとる.よって𝑉(𝐺, 𝐷)は𝑝! = 𝑝"#$# すなわち⽣成器𝐺が真の分布を完全に再現し ている場合にのみ最適解となる.証明オワリ. 43

45.

2023/3/15 5. GANの正しい理解 DDoS2023春 アルゴリズム 先程の発想に従ってアルゴリズムを組むと ステップ1. ステップ2. 𝐺を固定し,𝑉(𝐺, 𝐷)を𝐷で最適化(最⼤化) 𝐷を固定し,𝑉(𝐺, 𝐷)を𝐺で最適化(最⼩化) となる.しかし実際のところ,ステップ1で 𝐷 を最適化することは不可能であり, 𝐷が最適化されていないとステップ2も成り⽴たない.そこで,1・2を繰り返す ことで𝑝! を𝑝"#$# に近づける(これが成り⽴つ証明も論⽂にあるが,理解できな かった). 44

46.

2023/3/15 5. GANの正しい理解 DDoS2023春 アルゴリズム 各ステップでは𝑉(𝐺, 𝐷)の勾配を求めて勾配法で𝐺, 𝐷を更新する バッチサイズ: m,ノイズ:𝑧 = 𝑧(, 𝑧), ⋯ , 𝑧* ,データ:𝑥 = 𝑥(, 𝑥), ⋯ , 𝑥* ステップ1. 勾配上昇法で𝐷を更新 1 ∇" ?[log 𝐷 𝑥+ + log(1 − 𝐷(𝐺(𝑧+ )))] 𝑚 * ステップ2. 勾配降下法で𝐺を更新 1 ∇! ? log(1 − 𝐷(𝐺(𝑧+ ))) 𝑚 * 45

47.

DDoS2023春 オワリ おつ