深層学習_生成モデル

識別モデルと生成モデル

オートエンコーダ

VAE(2013年)

Variational AutoEncoder 変分自己符号化器:生成モデルの一つ
p(z):平均ゼロベクトル、分散共分散行列が単位行列であるような多変量標準正規分布の対角成分を出力するNN

[VAEの変分下界]
対数尤度logp(x)を最大化する代わりに、下界Lを最大化するように学習を行う.
 L = -E_z[logp(x|z)]+ D_{KL}(p(z|x)||p(z))

<Lの第1項>デコーダから再構成されたデータに関する対数尤度. 復元誤差(reconstrunction error)、入力と出力の差を小さくする.

<Lの第2項>p(z|x)のp(z)に対するKLダイバージェンス D_{KL}(p(z|x)||p(z))となる.非負の正則化項であり、エンコーダが出力する潜在変数zの分布をzのモデル分布に近づける.

エンコーダとデコーダの間に潜在変数zのサンプリングが入るため、エンコーダまで誤差逆伝播を適用するのは難しい.
エンコーダからのサンプリングを実行する.このサンプリング方法をreparametrization trick リパラメタリゼーショントリックと呼ばれる.

 -logp(x|z)デコーダの出力xを使った二乗損失に置き換えることができる.
AutoEncoder, VAE, CVAEの比較 〜なぜVAEは連続的な画像を生成できるのか?〜 - Qiita

VQ-VAE

GAN(2014年)

ミニマックスゲームの数式

損失関数

通常のGANでは以下の価値関数の最適化を行う.
 \underset{G}{min} \underset{D}{max} V(D,G) = E_{x~pdata}[logD(x)] + E_{z~pz(x)}[log(1-D(G(z))]
本物データの確率密度分布pdata(x)と生成データの確率密度分布pz(x)が固定される場合、最適な識別関数D(x)は

DをだますG、GをだまされないDを目指す.DとGを学習させていく.
もし、最適な生成器と識別器の両方が得られた場合、識別器の出力は0.5となる

self.update_discriminator(noize, batch_train_data)
self.update_generator(noize)

Dの更新よりもGの更新の方が勾配消失問題が起きやすい.
Discriminatorの出力層から逆伝播するため、入力層に近いGenerator側の勾配が小さくなる可能性が高くなる.

DCGAN(2015年)

Generatorに入力のノイズとしてのベクトルだけを与えて、Discriminatorが生成画像の真偽の判別を行う.
GANは優れた生成能力を持つが、学習が難しい.
CANの枠組みをCNNに適用した深層畳み込みGANはDCGANである.
学習を安定化させるため、以下の提案が導入される.

  • プーリング処理の代わりに、ストライドを2以上に設定した設定した畳み込み層や逆畳み込み層を用いる
  • 生成器と識別器の両方にバッチ正規化を使用する
  • 生成器の活性化関数は、最終層にtanh, それ以外にReLUを使用する
  • 識別器の活性化関数にLeaky ReLUを使用する
  • 全結合層を使用しない

(識別器と生成器ともバッチが正規化される)

conv4=Conv2DTranspose(3,(5,5),(2,2),"same",activation="tanh",kernel_initinalizer=self.w_init)(conv3)

[Discriminatorの特徴]

  • 中間層以外の活性化関数にLeakyReLUを用いる
  • Batch Normalizationを頻繁に入れる
  • Pooring層の代わりにStride=2の畳み込み層を使う
  • 全結合層(Affiine Layer)を使用しない

Conditional GAN(2014年)

訓練時に教師データのラベル情報を用いて、生成するクラスを指定できる
生成するデータに関する条件を与えることで、その条件に従うデータを生成することを可能としたGANである.条件には、クラスラベルや文章などのベクトル表現を用いる.

LAPGAN

低解像度な画像を生成するGANを訓練することはもっと簡単なとき、LAPGANは使用される
低解像度と高解像度の画像の差を学習し、画像を高解像度にする.
訓練時、Generator,Gに低解像度の画像を入力し、低解像度と高解像度の画像の差を生成し、
Discriminatorが本物か生成されたものか判定.  高解像度の画像を作成することに成功した.画像を生成するモデルとして発案されたが、近年で画像や音楽のタスクに応用される.

ACGAN

Generatorに入力ノイズとしてのベクトルと入力画像のクラス情報を同時に与え、Discriminatorが生成画像の真偽に加えてクラスの判別も行う

SNGAN

新しい正則化であるSpectral normalizationsを提案したもの

pix2pix(2017年)

Conditional GANの条件を画像とすることで、スタイル変換を実現したのはpix2pixである.

  • pix2pixは、ConditionalGANの目的関数V(G,D)にL(G)を追加することで、画像の大域的な情報を捉えられるようになり、より違和感のない画像を生成するを使用することに成功する.

  • 識別器が画像の高周波数の構造を捉えられるように、画像の中でNxNのバッチがそれぞれ本物か疑物かを判定するようにする.ここで、バッチサイズよりも離れた場所にあるピクセル間は独立であることを仮定する.

  • pix2pixは変換前画像と変換後画像のペアを用意する必要がある.片方しかない場合、CycleGAN(2017年)と呼ばれる.

  • L1損失やL2損失は、画像の低周波数の構造をよく捉えるが、画像の高周波数の構造(細かい構造)をよく捉えられず、画像がぼやける欠点がある.その欠点を解消するため、pix2pixは画像の局所的なパッチの構造に注意を向ける.この認識気をPatchGANと呼ぶ.

  • pix2pixは文章の描写から高解像度の画像への変換を行わない.(エッジのスケッチからカラー画像、昼の写真から夜の写真、航空写真と地図の変換)のスタイル変換に応用できる.文章の描写から高解像度の画像への変換のは、stackGAN(2017年)

  • エッジからカラー写真への変換タスク学習の場合、エッジの画像を条件として生成器、識別器それぞれに与えるという動作になる.U-Net(2015年)を生成器に用いる.Skip Connectionを用いてエンコーダの情報をデコーダへ渡し、連結するため、白黒画像からカラー画像への変換タスクでは生成器において、入出力画像間でエッジの位置を共有するという処理する.

  • pix2pixの応用として、画像にキャプションをつけることは入力画像から出力画像に変換できない.線画に対して自動で着色、一部を背景から補完、入力画像から高画質に変換