Deep Energy: Using Energy Functions for Unsupervised Training of DNNsを読んだのでメモ
はじめに
Deep Energy: Using Energy Functions for Unsupervised Training of DNNsを読んだのでメモ.
気持ち
データセットの規模をスケールさせたいというモチベーション.ほぼほぼ完璧なアノテーションが自動で作れればデータセット作成に人手がほぼいらなくなりスケールさせることができ,ラベル付きデータが増えれば教師ありで学習したモデルも強くできる.そのためラベルなしデータを使ったアノテーション生成モデルの学習手法を提案するというもの.
今回はエネルギー関数を使ってsegmentationのモデルを学習するが,そもそもアノテーションではなくそのエネルギー関数を使ってsegmentationを行えばいいのではという疑問がある.この疑問に関する答えとしては実用においてはエネルギー関数を使ったsegmentationは実行速度がネックになる点が一つ.もう一つは学習ベースの方がデータごとの細かな正則化を考える必要がない点があげられる.
Deep Energy
ここでのゴールとしてはデータが与えられた時にと真のラベルと一致させること.一般的なエネルギー関数を使ったsegmentationはエネルギー関数をとすると次の最適化問題として記述できる.
この定式化は逆問題(超解像やノイズ除去など)の課題で広く用いられているものと同一で,上記で定式化された問題を効率的に解くことのできるモデルを学習するのが目標.そこでモデルのパラメータをとするとはと書くことができる.さらにラベルなしの学習データセットをとすると,モデルの学習は以下の最小化問題としてかける.
上記定式化は逆問題において広く適用できるが,この論文では以下の2つの応用について考える.
Seeded Segmentation
応用の一つとして,ユーザーが与えたseed(前景か背景かを点や線描きで示したもの)と画像を入力として出力がsegmentationとなるようなモデルの学習について考える.
まず,画像を重み付き無向グラフとして考える.ただし,は頂点で画像におけるピクセルを示し,はエッジを表し,今回は4近傍でのピクセルの接続を考える.エッジの重みはで与えられ,はグレースケール画像のピクセルの輝度値,はスケールパラメータとして定義される.
ここでを各ピクセルがクラスに所属する確率とし,をクラスに所属するseed画像とする(論文でが使われていたから同様の表記にしたが,おそらくではなく0,1の2値かと).そこでを全クラス数に関してvectorizedしたものとすれば目的関数は以下のように記述できる.
ただし,とする(クラスごとのseedで与えられた前景領域のピクセル数を対角成分に持つ行列).またはグラフラプラシアンを表す(ここでは).右辺第1項はsmoothnessを表し,第2項はseedラベルとの誤差を表す.上記関数を目的関数としてモデルを学習していく.論文では上記の目的関数をCNNの出力の形に合わせて書き換えていたが,基本的に何も変わらないので割愛.
Image Matting
もう一つの応用として,前景物体のピクセルのopacityとcolorを決定することによって背景と切り分けるImage Mattingの課題を考える.入力をRGB画像とし,前景画像を,背景画像を[etx:\mathbf{B}]とする.すると各ピクセルは以下のmatting equationによって記述される.
は各ピクセルのopacityを表し,alpha matteと呼ぶ.基本的にこのalpha matteを画像から推定することは不良設定問題になっている.そのためここでもseedを与えることで解くことを考える.seed画像をとすると目的関数は以下で表現される.
ここでのはラプラシアン的な行列となっていて,以下によって与えられる.
はピクセルを中心としたパッチ(ここではの領域)を表し,はパッチ内のピクセルの平均と分散,は単位行列を表す.こちらも論文にはCNN用に書き直した式が出てくるが割愛.
まとめ
データセットのアノテーション自動生成は産業応用的にも重要だなあと感じる日々.関連した研究もここ数年でかなり出てきているので色々と考えねばという気持ち.
Normalized Cut Loss for Weakly-supervised CNN Segmentation
はじめに
Normalized Cut Loss for Weakly-supervised CNN Segmentationを読んだのでメモ.生成モデル以外の論文読むのが久しぶり.
気持ち
Weakly-supervisedの枠組みにおけるsegmentationの手法は擬似的なマスクを生成してフィットさせていくことが多いが,Cross Entropyのようなロス関数を使うとミスラベルにフィットしてあんまりうまくいかない.なのでそこを解決するような新しいコスト関数が欲しいという感じ.
従来の流れ
Semi-supervisedの枠組みでの一般的なアプローチとしてはラベルに準拠するロスとヒューリスティックスな正則化項を組み合わせたコスト関数の最小化を行う.例えば一つの例としてLaplacian eigenmap regularizerを使ったコスト関数は以下のようなものがある.
上記はラベルと点における出力値を比較する一般的なコスト関数で,第2項目は正則化項ではあらかじめ定義されたpairwise affinitiesを表す.基本的に正則化項は隣接ピクセルの滑らかさを定義するようなもの.
ここからの発展としてMRFなどで知られるグラフの拘束を用いる方法が考えられた.そのような手法では以下のコスト関数が考えられる.
これは言ってしまえば先ほどのコスト関数が離散になったようなもので,で,第二項目のはIverson brackets(indicator functionのようなもの.中身が真なら1で偽なら0)を表す.
ここでは上記のようなコスト関数をCNNのコスト関数に落とし込むことを考える.そのためにはコスト関数を実数に緩和する必要がある.CNNでは一般的にはsoftmaxの出力として得られ.これを使ってコスト関数を書き直すと以下のような2次形式のコスト関数として得られる.
ここででベクトルのk番目(クラスk)の要素のサポートベクトルを表す.このようにMRF等で用いられる関数を実数の枠組みに拡張すればCNNの枠組みでsemi-supervisedの学習のコスト関数として使える.(ただし,論文では"We will study these losses in the future. This paper focuses on normalized cut objective."と言っているので以降あんまり関係ない)
Normalized Cut
Normalized Cutはsegmentationの課題に対して提案された一般的なグラフクラスタリングのアルゴリズムらしい.spectral clustering等と同じくくりの手法でLaplacian Matrixの固有ベクトルに依存した手法になっている.基本的に以下で表される正則化項としてコスト関数に導入される.
はラベルが割り当てられたピクセルの集合を表し,は2値のindicator vector.は度数ベクトルでグラフの各ノードのエッジの本数を表す.細かいことは元論文にと書いてあったのでまた次回読みたい.
提案手法
基本的な戦略は,クロスエントロピーとnormalizing cutを組み合わせたコスト関数を使ってweakly-supervised segmentationをCNNで実現するというもの.
最初に述べたように,擬似ラベルを生成してクロスエントロピーを使うと間違ったラベルにフィットしてしまうため,まずはそのような領域を効果的に無視できるpartial cross entropyを提案する.アイディアはシンプルでクロスエントロピーを以下のように書き換えるだけ.
ここでの時でその他は0になる.すなわち出力の全体をコストの計算に使うのではなくラベルが振り当てられたピクセルのみで学習を行うというもの.実験的にだがこのロスはめちゃくちゃよく機能するらしく,フルラベルを用いた際と比べて85%程度の精度が出るらしい.
次にこのpartial cross entropyに実数空間に拡張したNormalizing Cutの正則化を組み合わせた以下のコスト関数を考える.
Affinity matrix は事前に定義されていてここではガウシアンカーネルを使ったsimilarity graph.
あとはこのコスト関数を使ってクラスごとの前景領域と背景領域を少しだけ与えてあげたデータを用意して学習するだけ. 実験ではネットワークにDeepLabを使ったとのこと. 面白いのはpartial cross entropyを使えばGrabCutを使ったアノテーションによる学習より線描きしたアノテーションの方がよく動作するということ.
まとめ
Weakly-supervisedと考えると出力結果が衝撃的な美しさ.これだけできるならもうdenseなアノテーションはほとんどいらないんじゃないかという気持ちになる.
IntroVAE: Introspective Variational Autoencoders for Photographic Image Synthesis
はじめに
IntroVAE: Introspective Variational Autoencoders for Photographic Image Synthesisを読んだのでメモ.
stackGANやPGGANと違ってVAEのEncoderをGANのdiscriminatorとして扱うことでシンプルながらも高解像度の画像を生成することに成功した.
IntroVAE
さっくりと中身を紹介.
基本的にはVAEなので以下のELBOを最小化することを考える.
ここにGANの考えを取り入れる.具体的にはVAEのdecoderによって生成された画像をとするとこのを入力とした事後分布はを最大化するように学習される.すなわちVAEのencoderにdiscriminatorの役割をさせるというもの.
上記の考えを取り入れた目的関数を考えると以下のようなものが考えられる.
ここでを表し,は正の値を持つハイパーパラメータ.triplet lossなど距離学習に使われる目的関数と似通った形になっている.この目的関数を用いてencoder とdecoder(generator) の間でmin-max gameを解く.つまりencoderは真の画像に対しては推定された分布のパラメータがpriorである標準ガウス分布に近くなるように,decoder(generator)により作られた画像に対しては標準ガウスから遠くなるように学習する.逆にdecoder(generator)は作った画像の分布をencoderに推定させた時,標準ガウス分布に近くなるように学習する.
オリジナルのGANの論文のnotationを使って整理すると,encoder はを最小化,decoder はを最小化するように学習される.
上記の目的関数をELBOと組み合わせることで最終的なintroVAEの目的関数は以下のように記述される.
学習の細かいパラメータ
VAEの事前分布としてはユニットガウスを使い,reconstruction errorはMSEを使ったとのこと.さらにの第2項目との第1項目に重みパラメータをかけてロスのバランスをとったとのこと.実験の設定ではは0.5では0.0025から0.5のレンジで実験している.またモデルの構造はPGGANとほぼ同様だがresidual blockを導入している.
まとめ
顔の生成は綺麗だがLSUNのBEDROOMの生成結果はPGGANのが綺麗かなあ.ただ学習の安定性がその他の手法に比べれば格段に良さそう.
Avoiding Latent Variable Collapse with Generative Skip Modelsを読んだのでメモ
はじめに
Avoiding Latent Variable Collapse with Generative Skip Modelsを読んだのでメモ.勉強メモがわりにブログ始めてからずっと生成モデルしか勉強してない...
気持ち
VAEではdecoderが潜在変数を無視して画像を生成してしまうlatent variable collapseという現象がある.これはVAEが良いデータの表現を獲得できないことに繋がるため回避したい現象である.latent variable collapseが起こる要因は乱暴に言ってしまえば,evidence lower bound(ELBO)のKL項が最小化された結果priorと近似事後分布がほぼ一致してしまうことによる.
この論文ではこれを回避するためにskip connectionをdecoder側に導入して,理論的にも実験的にもlatent variable collapseが回避できることを示したという話.この理論的側面が気になって読んでみた.
latent variable collapse
まず必要となる式を諸々導出や定義を行いつつlatent variable collapseが起こる理由について簡単に.
VAEのdecoderはとして表現され,以下で表されるニューラルネットによってparameterizeされた指数型分布族と考えられる.
ここではlog-normalizerを表す.はのhierarchical function(要は多層のニューラルネット)で,以下のように表される.
ただし,は層目の隠れ状態を表す.
次に目的関数を考える.ELBOを以下の形で与える.
上のELBOは第一項目の自由度の高さがKL項を0にする要因となっていてlatent variable collapseを起こす. Latent variable collapseをさらに理解するためadversarial autoencodersで議論されていたaggregated posterior を考える.aggregated posteriorは次の形で表される.
するとELBOは式変形により次のように表現することができる.(具体的な式変形は割愛するが,以下のELBOにaggregated posteriorの具体形を代入して整理すれば元のELBOに戻る.)
ここでは相互情報量を表していて,その定義からと計算される.KL項が0になるとういうことは上記の形で表現されるELBOにおいて
となることを意味する.相互情報量が0であるということはが独立であることを意味していて,独立になるということはlatent variable collapseと同義.
avoid latent variable collapse
論文のメインの主張であるgenerative skip modelsについて.generative skip modelsのは以下のように表現できる.
各層において隠れ状態と潜在変数を入力とする関数を導入した形で,ResNetやU-Netにあるいわゆるスキップコネクションと同じものと考えればいい.この論文ではを以下の形で表す.
ここではシグモイドやReLUといった非線形関数では学習される重みパラメータ.
上記のようなモデルを与えるとgenerative skip modelにおける相互情報量は次のような関係を持つ.
すなわち提案手法の方が相互情報量が大きくなるため潜在変数との結びつきが強くなる.証明としては,は層を重ねるごとにとの関係性が薄れていくものである,すなわち,が成り立つことを使う.SKIP-VAEでは全ての層にが入力されるため逆に層を重ねるごとにと依存関係が増していく.よってが成り立つ.
この関係性を使えばELBOの最大化は次のような制約付きの形で表すことができる.
よってskip-vaeにおける目的関数は
となる.ただしはラグランジュ乗数ではデータ分布のエントロピーを表す.また最後の式の導出はaggregated posteriorで導入した関係性を使った.
まとめ
論文では目的関数導出後,4章で実験において目的関数をどう計算していくか具体的に説明していたが実装予定はないので割愛.アブストに理論的にlatent variable collapseを防ぐと書いてある割に相互情報量の不等式が雰囲気で導入されててなんだか腑に落ちない(自分の理解不足または英語力不足かも知れないけど).とは言え感覚としてはわかるので手法としては実装も容易だし優秀な気がする.
Glow: Generative Flow with Invertible 1×1 Convolutionsの実装をした
はじめに
生成モデルの勉強も落ち着いたので理解深めるためにPytorchでGlowを実装した話(コードは載せてないので注意).
所感
著者のコードは幸いgithubに公開されていたので実装自体はそこまで難しくなかった.予定外だった(ちゃんと論文読めばわかるけど)のがglowがめちゃくちゃメモリを食うこと(論文の高解像度の顔画像を生成しようとすると確か600層くらいの畳み込みが必要.基本モデル的に使われているdepth=32のL=3のモデルでもかなりメモリを食う).論文にのっていないことがいくつかあったので,コードを見返さないでいいようにまとめとく.
畳み込みについて
論文にも書いてあることとしては,coupling layerのNNの構成は3層の畳み込みになっているが,最終層は0で初期化されていることとinvertible convは回転行列で初期化されていることには注意. またFigure 2のmulti-scaleの実装での従うガウス分布のパラメータをゼロ初期化した畳み込みで推定している.ゼロ初期化以外の畳み込みについては平均0,分散0.05のガウス分布を使って初期化が行われていた.
衝撃なのがinvertible convは論文ではLU分解をしてパラメータを保持してヤコビアンの計算を簡単にすると書いてあったが(というかこれが一つのコントリビューションに思えたが),実装のdefaultはLU分解しないものになっていた.LU分解するデメリットとしてP,L,U,sと一つの重み行列Wを4つのパラメータで保持しなければならないのでメモリをめっちゃ食う.LU分解しないと行列式を計算するのに多少コストがかかるがそれ以上にメモリを抑えられるから計算機が限られている限り普通に畳み込みしたほうがいい.
LU分解した際には,sについてはとのように対数で保持して符号は別で持っていた.この辺もちょっと疑問に思ったあたりだけど,そうしておけばヤコビアンの対数がすぐに計算できるからいいということでしょう.
畳み込みのパディングはadd_edge_paddingという関数で行われている.処理としては入力と同一サイズで0初期化された行列を作りパディングされた部分のみ1の値を持つ変数を作った後チャネル方向にconcatするというもの.パディングされた領域には別途バイアスを加えたいというものかと.
Act normについて
couplingのNNの関数について論文だと(自分が見逃していなければ)畳み込み3層とReLUを使ったと書いてあるが実装を見ると最後の畳み込み以外reluの前にactnormを加えていた(これに関してはdefaultがそうなっているだけで実験のときには使ってないかもしれない). またゼロ初期化した畳み込みに対しては畳み込み計算後にスケーリングの処理(学習可能な係数をかける処理)を行なっていた(couplingの畳み込み以外もゼロ初期化畳み込みは全てスケーリング処理が入る).ただし,パラメータは対数の形で持っていて演算の際にはexpをかける.多分スケーリングで符号を変えたくないから.これはNICEの論文に書いてあったスケーリングと同じことなのか?
Squeezeについて
論文内では図にのってるだけで触れられてないsqueezeの処理(RealNVPの論文で説明されているから割愛したのか).基本的にはバッチxチャネルx縦x横の入力に対しfactorと呼ばれる整数値を用意して(実装では2)入力をバッチxチャネルx縦/factorx横/factorにreshapeした後,バッチxチャネルxfactorxfactorx縦/factorx横/factorに並び替えて,バッチx(チャネルxfactorxfactor)x縦/factorx横/factorのようにチャネルに含めるような処理を行う(当然逆変換もできる).ただし実装では入力がバッチx縦x横xチャネルになっているので注意.実際にはfactor 2の場合はチェッカーボード状にピクセルをサンプリングしてチャネル方向にくっつけるというもの.
最適化について
optimizerはAdamで各パラメータはいわゆるdefault値を使って重み減衰はなし.ただし,最初の10epochの間で学習率を0からdefault値の0.001に線形に変化させている.resnetとかでもwarm upは使われていたけどここまで極端なのはやっぱり学習が難しいからなのか.
その他
coupling等でデータを二つに分ける際にはチャネルを半分に分けるだけ(論文にも書いてあったけど一応). 後normalizing flowは逆関数が定義されているから,ちゃんと元に戻るか試して見るのがdebugになる.
細かいところだと著者実装では画像から潜在変数方向のactnormの計算がぱっと見はz=(x+b)*sになっていて論文に書いてある式と一致していないが,初期化の段階でbを負の平均,sを標準偏差の逆数を使って行なっているため実質z=(x-b)/sをしているのと等しく論文の記述通りの計算をしていることになる(なんでこんな回りくどい実装になっているかは不明).
学習結果
mnistでちょこっと学習させたモデルで補間をやってみた.
概ねできてるっぽい.
まとめ
ざっと殴り書いたけどこんな感じ.実装見る限りtensorflowは畳み込みのチャネル等を入力のデータのサイズに合わせて勝手に初期化してくれるみたいなのでパラメータ追うのが結構しんどかった. もうちょっといろいろ遊んでみたいところ.
Neural Autoregressive Flowsを読んだのでメモ
はじめに
Neural Autoregressive Flowsを読んだのでメモ.表裏一体の関係にあったMAFとIAFを統合して一般化したneural autoregressive flow(NAF)を提案した論文.
お気持ち
この論文で問題としているのは,Variational InferenceにおいてIAFやMAFなどかなり質の良いモデルが作れるようになっているが,局所解の影響を受けやすいというところ(mode collapseのような現象).その原因は変換に使える関数の形が制限されていることにあるため,そこをもっとrichなものにして解決しようというもの.
その上で気をつけないといけないのはnormalizing flowを使った変分推定ではKLダイバージェンスの勾配はモンテカルロ推定などをしなければならないため以下の計算は扱いやすい必要がある.
ただし,はデータ分布では近似事後分布,は潜在変数の真の分布を表す.
Neural Autoregressive Flows
ここでは論文のnotationとは少し異なることに注意.
基本的にはAutoregressive Flowで用いられる変換の関数をニューラルネットに変えるというもの.すなわち
とする.何をしているかというと,入力はのスカラーでNNの重みがを入力とする関数から得られ,そこからが計算されるというもの.つまりニューラルネットの構造としてはスカラーを入力としてスカラーを出力する.ここではこの重みを擬似パラメータと呼ぶ.この定式化の嬉しいところは,と擬似パラメータの勾配が逆伝播によってもとまるというところ.
さらにここではの構造として二つ,deep sigmoidal flows(DSF)とdeep dense sigmoidal flows(DDSF)というものを導入する. DSFは以下で定義される.
ここではシグモイド関数を表し,はlogit関数.logit関数を最後に使う理由はの値が不当に0にならないようにするため.またとして定義される.または隠れ層のユニット数ではsoftmaxの出力とsoftplusまたはexpの出力から得られる.ただし,DSFは隠れ層1層の入出力がスカラーのMLPとして考えられるため表現力には限界がある.
そこでその問題を解決するためにDDSFは出力をベクトルとするようなモデルとして定義する.
ただし,を満たしを除き全て正の値を持つ.
ここで一つ問題が生じていて,DDSFの計算にはの擬似パラメータが必要となる.すると隠れ層の次元が大きくなると実践的に計算が難しくなるため,conditional batch-normalizationなるものを使って関数をの統計パラメータとの擬似パラメータで表現したらしい.実際のところ実験においてはconditional weight normalizationを使ったとのこと.詳しくはappendixにあるそうだがちょっとしたtips的なところは興味ないので割愛.
まとめ
一応最後にNAFがuniversal density approximatorだという主張があったが証明の部分がピンとこなかったのでこのメモでは割愛してしまった.
Flow関連の生成モデルに関してある程度主要な部分はsurveyできたと思うからアウトプットとして論文書きたいなという気持ち.
Masked Autoregressive Flow for Density Estimationを読んだのでメモ
はじめに
Masked Autoregressive Flow for Density Estimationを読んだのでメモ.
お気持ち
Inverse Autoregressive Flowと密接な関係がある,Real NVPの一般化手法Masked Autoregressive Flowを提案したぜということ.
密度推定の課題ではnormalizing flowやautoregressive modelがうまくいっているが,autoregressive modelは変数のオーダーにセンシティブな部分がありそこが欠点である.実際にFigure 1に例が載っていて,ターゲットの分布とモデルの分布の変数のオーダーを等しくしてもautoregressive modelは真の分布にフィットできず,フィットするのに適したオーダーを知るすべもないので良くない.さらに並列計算もあまり有効ではないがそれはMasked Autoencoder for Distribution Estimation(MADE)が解決した. Normalizing flowにおいてはInverse Autoregressive Flow(IAF)などのモデルは変分推定に基づいて作られているため密度推定に最適なものになっていない.
だからこの辺うまいこと統合して密度推定に適したものを作りたいというのが気持ち.
Masked Autoregressive Flow
まず,導入として自己回帰モデルをnormalizing flowの枠組みで考える.
はじめにガウス分布でparameterizedされた自己回帰モデルを考える.すると,の分布は
と表すことができる.ただし,は平均と標準偏差の対数を計算するなんらかの関数.上記のモデルからデータを生成する際にはreparameterization trickから
という計算を行えばいい.この式を考えてみれば,確率変数からデータへの写像を与えていることになるため,モデルとしてはとして書くことができる.さらにこの関数は簡単に逆変換がのように記述でき,その逆変換のヤコビアンは自己回帰モデルの構造から三角行列になる.よって行列式は
として簡単に計算ができる.この辺りはInverse Autoregressive Flowと同様の話.
ここでflowとして自己回帰モデルを記述し,モデルを積み重ねて深層構造にすることで改善を行う.自己回帰モデルがと与えられたとき,モデルの乱数の密度をでモデル化するモデルを考える.これは最終的には乱数を標準ガウス分布でモデリングすることになるが,モデルを積み重ねることで柔軟性を持ったモデルを作ることができる.この論文では関数をMADEを使ったアプローチで構成し,それをMasked Autoregressive Flow(MAF)とする.
IAFとの関係
今までの流れで定義されたMAFはほぼほぼIAFと同じ形をしていて,違うのはガウス分布のパラメータの計算が何を入力とするかだけ.MAFは上で書いたようにから計算されるのに対し,IAFはから計算される.この違いは計算のコストに大きく現れ,MAFはデータ点の密度分布を一つのパスから計算できるが,サンプリングにはデータ点の次元数のパスが必要になる.それに対しIAFは逆になる.このことからMAFは密度推定のためにデザインされていることが伺える.
理論的な面としては,初期の分布をを使って表せば,MAFにより計算される密度分布は変数変換の公式から
となるのに対し,IAFは
となる.ここから以下の関係が成り立つ.
証明はsupplementary materialにあったが簡単だったので割愛.基本的にはをで変数変換することでの形になることを導くだけ.
この後も論文中では色々書いてあったが,要するにIAFは変分推定を使って問題を解いていて,MAFはnormalizing flowとして問題を解いているくらいの違いだと思う.そこの違いで出口が潜在変数になるかデータになるか変わってくると言ったところ.
realNVPとの関係
realNVPはNICEをベースにaffine coupling layerを使って拡張したモデルで,affine coupling layerは今まで定義された変数を使えば以下の形で定義される.
式を見ればわかるようにIAFヤMAFとほぼほぼ同じ形をしていて,実際MAFの特別な場合とみなすことができる.realNVPではを二つに分けて一つは恒等写像されるが,IAFやMAFでは自己回帰性を満たすためのマスクによりについては恒等写像でについては変換が行われるため,realNVPの柔軟性を持つ一般化としてみなすことができる.ただし,realNVPはデータの生成も密度の推定もone forward passで計算できるため利点も存在する.
Conditional MAF
ここではサンプルのペアが与えられた時の条件付き分布の推定を行うタスクについて考える.自己回帰モデルはこの問題に自然に拡張することが可能.確率における連鎖律から自己回帰モデルではとして条件付き分布を書くことが可能で,入力の変数を拡張するだけで記述できる.
まとめ
realNVPの一般化としてIAFを定義したというところか.密度推定を意識してモデリングされているからタスク次第で,IAFとMAFの優劣はつかない感じか.MAFはSupplementary materialに生成した画像載っていたが全然うまくいってなかったところを見るとIAFの方がモデルの形式からも生成には向いている?(IAFは生成画像が載ってないからわからないが。。。)ただそれにしてもモデルの形式上は大差ないGlowがあれだけ綺麗に画像を生成できたのは何が起きているのか気になる.