Boost camp週間2追加学習GANS
11568 ワード
Introduction
生成対抗ネットワーク(GANS)は機械学習分野における最新のイノベーション分野の一つである.Generative modelsは、私たちが指定した学習データと非常に似たデータを生成します.例えば、GANSは、これらの顔が真実の人に属していないとしても、顔写真のような画像を作成することができる.These images were created by a GAN:
GANs achieve this level of realism by pairing a generator, which learns to produce the target output, with a discriminator, which learns to distinguish true data from the output of the generator. The generator tries to fool the discriminator, and the discriminator tries to keep from being fooled.
GAN(Generative Adversarial Network)
講義参照.
"Generative"describes a class of statistical models that contrasts with discriminative models. Generative models can generate new data instances.
Formally, given a set of data instances X and a set of labels Y: Generative models capture the joint probability p(X, Y), or just p(X) if there are no labels.
In GAN, Discriminative Model can capture p(Y | X)
例えば、任意の写真データをpdata(x)p{data}(x)pdata(x)の確率分布として表すことができる.そしてそれぞれx 1,x 2,...x_1,x_2,...x1,x2,...のデータは、データの任意の特徴を表すことができ、例えば、画像データに眼鏡をかけた男性の割合が小さい場合、眼鏡を表す任意のxix ixiデータに対して、低い確率表現値の確率分布を有する.
このとき,我々の最終目標は,Generatorモデルにより得られた結果pmodel(x)p{model}(x)pmodel(x)を実際のデータの確率分布pdata(x)pdata}(x)pdata(x)と類似させることである.
1. Generative Adversarial Network
Adversarialは「敵対」という意味で,生成モデルで敵対手法を用いたGANについて理解する.
基本GANの構造はDistributorとGeneratorからなる.Distributorは、画像を入力すると0または1の1次元データが出力される分類モデルです.代表的にsigmoid関数を用いて、閾値を0.5を基準として区別する.
以上の2つの学習形態から,実際の画像をx,ランダム入力をzと呼ぶと,Distributorはxに対する結果値D(x)を1とし,ジェネレータはzに対する結果値G(z)の結果値D(G(z)を0とすることを学習する.次のように表示されます.VはGANの目的関数です.
Discriminator
maxDV(G,D)=Ex∼pdata [logD(x)]+Ex∼pz(z)[log(1−D(G(z))]\max_{D} V(G, D)=E_{\mathbf{x}\sim p_{\text {data }}}[\log D(\mathbf{x})]+E_{\mathbf{x}\sim p_z(z)}[\log (1-D(\mathbf{G(z}))]DmaxV(G,D)=Ex∼pdata [logD(x)]+Ex∼pz(z)[log(1−D(G(z))]
Generator
minGV(G,D)=Ex∼pz(z)[log(1−D(G(z))]\min_{G} V(G, D)=E_{\mathbf{x}\sim p_z(z)}[\log (1-D(\mathbf{G(z}))]GminV(G,D)=Ex∼pz(z)[log(1−D(G(z))]
Pytochコードで確認してみます.import torch
import torch. nn as nn
D=nn. Sequential(
nn.Linear(784, 128)
nn.ReLU(),
nn.Linear (128, 1),
nn.Sigmoid)
G=nn. Sequential(
nn.Linear (100, 128),
nn.ReLU(),
nn.Linear (128, 784),
nn.Tanh()
criterion =nn. BCELOSS()
d_optimizer = torch.optim.Adam(D.parameters(), Ir=0.01)
g_optimizer = torch.optim.Adam(G.parameters(), Ir=0.01)
# Assume x be real images of shape (batch size, 784)
# Assume z be random noise of shape (batch size, 100)
while True:
# train D
loss = criterion(D(x), 1) + criterion(D(G(z)), 0)
loss.backward()
optimizer.step()
# train g
loss = criterion(D(G(z)), 1)
loss.backward()
optimizer.step()
上記のコードでは、次のようにバイナリCrossEntropy LossとしてOptimizerを使用しています.
L(h(x),y)=L(h(x), y)=L(h(x),y)=−ylogh(x)−(1−y)log(1−h(x))-y\log h(x)-(1-y)\log (1-h(x))−ylogh(x)−(1−y)log(1−h(x))
Distributorを基準として,yが1の場合と0の場合にlossを加え,前述の式形式を持つことができる.(符号は逆なので最小化の形と考えられる.)
一方、Generatorのターゲット式を見てみましょう.
minGV(G,D)=Ex∼pz(z)[log(1−D(G(z))]\min_{G} V(G, D)=E_{\mathbf{x}\sim p_z(z)}[\log (1-D(\mathbf{G(z}))]GminV(G,D)=Ex∼pz(z)[log(1−D(G(z))]
ここでは,学習の初期段階でD(G(z))の値が0(偽の悪い出力に近い)に非常に近いことを十分に考慮できる.しかし、D(G(z)の値が0に非常に近い場合、1−logD(G(z)1−logD(G(z)1−logD(G(z))のGradientの大きさは十分ではなく、以下の式を変更する.(Heuristically motivated)
maxGV(G,D)=Ex∼pz(z)[log(D(G(z))]\max_{G} V(G, D)=E_{\mathbf{x}\sim p_z(z)}[\log (D(\mathbf{G(z}))]GmaxV(G,D)=Ex∼pz(z)[log(D(G(z))]
なぜ傾斜が大きいのですか?
開始段階ではGeneratorが学習時に勾配を上げるとDistributorが0であると確信する段階から素早く抜け出すことができるからである.
0に近い場合の傾きの違いを比較できます.
従って,Pythorchコードに記述されたバイナリCrossEnropy Loss関数がy=1に代入されたときに変形したlog尤度であることを決定できる.
その他の説明
L(h(x),y)=L(h(x), y)=L(h(x),=========================================================================================================================================================================================================log(G,D)]V(G,D)=Ex~pz(z)[log(D(G(z)]最大化
Why Does GAN Work?
上で求めた式に対してmin,maxをとる方法は統計学的にJSDを最小化する方法であり,すなわち2つの分布間の距離を減少させるためである.
minGmaxDV(G,D)\min_{G}\max_{D} V(G, D)GminDmaxV(G,D)
ここまでがGANの基本形態ですが、ここで変形した(Variants)GANについて解説していきます.
2. DCGAN
Distributor,CNN,GeneratorとしてDe畳み込みネットワークを使用する.
講義参照.
"Generative"describes a class of statistical models that contrasts with discriminative models. Generative models can generate new data instances.
Formally, given a set of data instances X and a set of labels Y: Generative models capture the joint probability p(X, Y), or just p(X) if there are no labels.
In GAN, Discriminative Model can capture p(Y | X)
例えば、任意の写真データをpdata(x)p{data}(x)pdata(x)の確率分布として表すことができる.そしてそれぞれx 1,x 2,...x_1,x_2,...x1,x2,...のデータは、データの任意の特徴を表すことができ、例えば、画像データに眼鏡をかけた男性の割合が小さい場合、眼鏡を表す任意のxix ixiデータに対して、低い確率表現値の確率分布を有する.
このとき,我々の最終目標は,Generatorモデルにより得られた結果pmodel(x)p{model}(x)pmodel(x)を実際のデータの確率分布pdata(x)pdata}(x)pdata(x)と類似させることである.
1. Generative Adversarial Network
Adversarialは「敵対」という意味で,生成モデルで敵対手法を用いたGANについて理解する.
基本GANの構造はDistributorとGeneratorからなる.Distributorは、画像を入力すると0または1の1次元データが出力される分類モデルです.代表的にsigmoid関数を用いて、閾値を0.5を基準として区別する.
以上の2つの学習形態から,実際の画像をx,ランダム入力をzと呼ぶと,Distributorはxに対する結果値D(x)を1とし,ジェネレータはzに対する結果値G(z)の結果値D(G(z)を0とすることを学習する.次のように表示されます.VはGANの目的関数です.
Discriminator
maxDV(G,D)=Ex∼pdata [logD(x)]+Ex∼pz(z)[log(1−D(G(z))]\max_{D} V(G, D)=E_{\mathbf{x}\sim p_{\text {data }}}[\log D(\mathbf{x})]+E_{\mathbf{x}\sim p_z(z)}[\log (1-D(\mathbf{G(z}))]DmaxV(G,D)=Ex∼pdata [logD(x)]+Ex∼pz(z)[log(1−D(G(z))]
Generator
minGV(G,D)=Ex∼pz(z)[log(1−D(G(z))]\min_{G} V(G, D)=E_{\mathbf{x}\sim p_z(z)}[\log (1-D(\mathbf{G(z}))]GminV(G,D)=Ex∼pz(z)[log(1−D(G(z))]
Pytochコードで確認してみます.
import torch
import torch. nn as nn
D=nn. Sequential(
nn.Linear(784, 128)
nn.ReLU(),
nn.Linear (128, 1),
nn.Sigmoid)
G=nn. Sequential(
nn.Linear (100, 128),
nn.ReLU(),
nn.Linear (128, 784),
nn.Tanh()
criterion =nn. BCELOSS()
d_optimizer = torch.optim.Adam(D.parameters(), Ir=0.01)
g_optimizer = torch.optim.Adam(G.parameters(), Ir=0.01)
# Assume x be real images of shape (batch size, 784)
# Assume z be random noise of shape (batch size, 100)
while True:
# train D
loss = criterion(D(x), 1) + criterion(D(G(z)), 0)
loss.backward()
optimizer.step()
# train g
loss = criterion(D(G(z)), 1)
loss.backward()
optimizer.step()
上記のコードでは、次のようにバイナリCrossEntropy LossとしてOptimizerを使用しています.L(h(x),y)=L(h(x), y)=L(h(x),y)=−ylogh(x)−(1−y)log(1−h(x))-y\log h(x)-(1-y)\log (1-h(x))−ylogh(x)−(1−y)log(1−h(x))
Distributorを基準として,yが1の場合と0の場合にlossを加え,前述の式形式を持つことができる.(符号は逆なので最小化の形と考えられる.)
一方、Generatorのターゲット式を見てみましょう.
minGV(G,D)=Ex∼pz(z)[log(1−D(G(z))]\min_{G} V(G, D)=E_{\mathbf{x}\sim p_z(z)}[\log (1-D(\mathbf{G(z}))]GminV(G,D)=Ex∼pz(z)[log(1−D(G(z))]
ここでは,学習の初期段階でD(G(z))の値が0(偽の悪い出力に近い)に非常に近いことを十分に考慮できる.しかし、D(G(z)の値が0に非常に近い場合、1−logD(G(z)1−logD(G(z)1−logD(G(z))のGradientの大きさは十分ではなく、以下の式を変更する.(Heuristically motivated)
maxGV(G,D)=Ex∼pz(z)[log(D(G(z))]\max_{G} V(G, D)=E_{\mathbf{x}\sim p_z(z)}[\log (D(\mathbf{G(z}))]GmaxV(G,D)=Ex∼pz(z)[log(D(G(z))]
なぜ傾斜が大きいのですか?
開始段階ではGeneratorが学習時に勾配を上げるとDistributorが0であると確信する段階から素早く抜け出すことができるからである.
0に近い場合の傾きの違いを比較できます.
従って,Pythorchコードに記述されたバイナリCrossEnropy Loss関数がy=1に代入されたときに変形したlog尤度であることを決定できる.
その他の説明
L(h(x),y)=L(h(x), y)=L(h(x),=========================================================================================================================================================================================================log(G,D)]V(G,D)=Ex~pz(z)[log(D(G(z)]最大化
Why Does GAN Work?
上で求めた式に対してmin,maxをとる方法は統計学的にJSDを最小化する方法であり,すなわち2つの分布間の距離を減少させるためである.
minGmaxDV(G,D)\min_{G}\max_{D} V(G, D)GminDmaxV(G,D)
ここまでがGANの基本形態ですが、ここで変形した(Variants)GANについて解説していきます.
2. DCGAN
Distributor,CNN,GeneratorとしてDe畳み込みネットワークを使用する.
3. LSGAN
Least Squares GAN(LSGAN)
Proposed a GAN model that adopts the least squared loss function for the discriminator.
DistributorはSquareを用いてD(x)が1に近づき,D(G(z)が0に近づくことを学習する.GeneratorもD(G(z))が1に近いことを学びます.
GANはDistributorでSigmoidを使用していますが、ここでは使用しません.
DCGANよりも優れたパフォーマンス
4. SGAN
Semi-Supervised GAN
ランク分けのガン
Supervised
Unsupervised
5. ACGAN
この図は交流GANと他のGANの形態を比較することができる.
(ACGAN)Auxiliary Classifier GAN
これは
前述したようにDistributorは1です.真偽判別課2つのカテゴリ予測を学習します.SGANではlabel数が#class+1#class+1#class+1であればclass数と同じである.
6.CycleGAN
Unpaired Image to Image Translation
Generatorで画像入力を受け付けます.Distributor学習は「馬」と予測でき,Generatorはシマウマ画像の出現時にシマウマを除去する馬の形態を学習する.そして、別のジェネレータでは、このようにして生成された馬が元のシマウマから戻ると、実際に入力されたシマウマのL 2損失を最小化する方法を学び、シマウマ紋のみを除去する方法がループGANである.
7.StackGAN
これは、ジェネレータによって生成された結果を生成し、ジェネレータによって高解像度画像を生成する方法である.2つの発電機、各発電機には2つのDistributorが必要です.
Reference
この問題について(Boost camp週間2追加学習GANS), 我々は、より多くの情報をここで見つけました https://velog.io/@dayday/부스트캠프-week2-추가학습テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol