GAN, VAEに続く（隠れた）第３の深層生成モデル 「Flowベース生成モデル」の要点をつかむ

深層生成モデルとしては、__GAN （敵対的生成ネットワーク Generative Adversary Network）__と__VAE（変分オートエンコーダ Variational Auto Encoder）__の__2つ__がよく知られています。GANとVAEは、いまや、深層学習のトップスターです。

ところで、深層生成モデルのグループに括られるモデルとして、__Flowベース生成モデル （Flow-based generative models）__というものがあります。

__2014年にGoogle Brain在籍の研究者が提出した論文（ICLR2015査読通過）で最初に提案__されたモデルで、入力データのデータ生成過程（生成元の統計母分布の確率密度関数）を推定するにあたり、__対数尤度の値を直接、計算可能__で（変分下限を介在させない。VAEは変分下限が介在する）、__近似値ではなく、対数尤度の値そのもの（*exact* value）を算出できる__（VAEを含む変分ベイズモデルは、変分下限が最大化された場合の（対数尤度の）近似値しか計算できない）という特徴を持ちます。

加えて、モデル学習段階で、__*Encoder*と*Decoder*の2つを学習する必要がなく、入力データと潜在表現ベクトルを、どちらか片方向に結ぶ「データ変形関数」を学習するだけで事足りる（反対方向のデータ変換関数は、学習ずみの関数の「逆関数」を用いることで獲得可能）__という特徴を備えたモデルです。

Flowモデルが持つこうした特質（（β-)VAEやGANと比較したときに浮かび上がる「強み」）は、Flowモデルの初出論文[Dinh 14]の*CONCLUSION*の中で、次のように要約されています。

> In this work we presented a new flexible architecture for learning a highly non-linear bijective transformation that maps the training data to a space where its distribution is factorized, and a framework to achieve this by directly maximizing log-likelihood. 
>
> （ 省略 ）
>
> ・・・ We also note that NICE can enable more powerful approximate inference allowing a more complex family of approximate posterior distributions in those models, or a richer family of priors.

このような特徴に注目した研究者によって、__いわゆる「Flow系」モデルを提案する論文が、すでに大量に提出__されています。Googleで論文を検索すると、大量の論文がヒットします。その割には、GANとVAEと比べると、その知名度はまだまだ低い状態にあります （2021年1月14日現在）。

このような興味深い特徴を持ちながらも、Flowモデルを設計する上では、__数学的に乗り越えなければならない制約条件__も存在します。Flowモデルでは、入力データと潜在表現ベクトルの間を双方向に「データ変換」させる際に、計算しやすい（扱いやすい。*tractable*）簡単な線形関数で構成された合成関数を適用するのですが、__この関数は「逆関数」をもっていて、「関数のヤコビアン（ヤコブ行列の行列式）が計算しやすい単純な数式になること」という条件を満たさなければなりません__。

Flow系モデルを提案している論文では、__「三角行列の行列式の計算は高速に計算可能である」という数学的な（すでに発見されている）事実を利用__することで、提案モデルにいろいろと工夫を加えることで、三角行列の形のヤコビアンが導出されるような「データ変形関数」をなんとか、構築しようと努力しています。（ヤコビアンは、（ヤコブ行列の）行列式です）

そんな中、Flowモデルが提案されてから5年後の__2019年__には、__このような数学的な制約条件を大きく緩和する方法を提案する論文__が登場しました。この論文の登場によって、Flowモデルはこれまでよりも使いやすいものになったという指摘もあります。

__この記事では、「Flowベース生成モデル」の全体を画素は荒くとも、要点をおおづかみにしてみます。__

Flowベース生成モデルの仕組みを、数学的に十分に掘り下げた解説を読みたい方は、別途、本記事内で引用する他のスライドやWebページをご参照下さい。また、実装コードを動かす記事は、また稿を分けて書いてみたいと思います。

###広く使われている？ 将来性あるモデルなの？

新しいモデルやプログラミング言語を勉強するときは、そのモデルや言語が真に学ぶべき価値のあるものであるのかどうかが、気になると思います。モデルや言語の将来性です。

ここでの答えは、以下の2点になります。

- GANやVAE, 自己回帰モデルなど、多くの既存手法をFlowベース生成モデルを使って置き換える論文が数多く掲載されている。
- そうした論文の中には、AIのトップ会議に採択されたものが少なからずある。

__（ 論文の主題（一部） ）__

- GAN（敵対的生成ニューラルネットワーク）モデルを*Flow based generative model*で置き換えたモデル
- VAE（変分オートエンコーダ）モデルを*Flow based generative model*で置き換えたモデル
- Auto Regressive（自己回帰）モデルを*Flow based generative model*で置き換えたモデル

2021年1月までに、すでに数多くの*Flow based model*系の論文が提案されています。
次のようなWebページも作られています。

- [（2019-03-26） Flow系の論文たち](https://tam5917.hatenablog.com/entry/2019/03/26/160108)

また、Flowモデルの流れを振り返るサーベイ論文も出ています。

__（ サーベイ論文 ）__
- [Ivan Kobyzev et.al., Normalizing Flows: Introduction and Ideas, 2019](https://arxiv.org/pdf/1908.09257.pdf)
- [George Papamakarios et.al.,Normalizing Flows for Probabilistic Modeling and Inference, 2019)](https://arxiv.org/pdf/1912.02762.pdf)

Qiitaには、ざっと調べた限りでも次の記事がありました。

- [@shionhondaさん 「深層生成モデルを巡る旅(1): Flowベース生成モデル」](https://qiita.com/shionhonda/items/0fb7f91a150dff604cc5)
- [@tkoshtさん 「要約：Flow-based Deep Generative Models」](https://qiita.com/tkosht/items/749389c36aa37cf682cb)
- [@expさん 「Glowの論文を読んだので要約とメモ」](https://qiita.com/exp/items/4f562ec788f2ac5241dc)
- [@expさん 「RealNVPの論文を読んだので要約とメモ」](https://qiita.com/exp/items/25e88f506fc7458c7fad)
- [ @oshian2さん 「i-RevNet/i-ResNetからはじめるFlow-basedモデル」](https://qiita.com/koshian2/items/1621faf321b3c5c5023a)
- [@MeguruMokkeさん 「Flow-based Model with Oxford flower 102 dataset」](https://qiita.com/MeguruMokke/items/d1eb562c88b3c1597cf2)
- [ @MeguruMokkeさん  「多様性のある自動着彩, Guided Image Generation with cINN を読む」](https://qiita.com/MeguruMokke/items/f2a57e29b4d19efcd6c7)
- [@cross32768さん 「PyTorchでRealNVP」](https://qiita.com/cross32768/items/87036cc35c5367050b04)
- [@m3yrinさん 「ちょっと変わったDecodingの方法」](https://qiita.com/m3yrin/items/7a6df0d7f5d44f0b5efc)

最後の記事は、Generative Flowの全体像について9行で簡潔にまとめられています。

###いつ提案されたの？

この記事の冒頭で先に書いてしまいましたが、__*Flow*モデルは、2014年に提案された論文で、産声を上げました。__

__（2015年度のICLRの採択論文）__

- [Laurent Dinh et al., NICE: NON-LINEAR INDEPENDENT COMPONENTS
ESTIMATION, ICLR 2015](https://arxiv.org/pdf/1410.8516.pdf)

（ この論文のAbstractの和訳（試訳）を後ほど、この記事の中で掲載します ）

これが、数ある*Flow*系論文の出発点に位置する論文です。
この記事ではあとで、この論文の*Abstract*の全訳を掲載します。

論文を執筆したのは、Google Brainに在籍する*Laurent Dinh*氏です。
*Dinh*氏は、2014年に上記の論文を提出して以降、Flowベース生成モデルの領野を広げるために、数多くの論文を執筆しています。

![スクリーンショット 2021-01-13 1.00.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/1b7a7f85-281c-2311-03ce-79e552696d19.png)

- [laurent-dinh.github.io/reports/ 論文業績一覧](https://laurent-dinh.github.io/reports/)
- [（Google Scholar） Laurent Dinh Google AI](https://scholar.google.ca/citations?hl=en&user=h7OHSkoAAAAJ&view_op=list_works&sortby=pubdate)

Flowベースモデルの初出論文（上記のNICE論文）は、2021年1月14日現在、680本の後続論文によって引用されています （Google scholar調べ）。

- https://scholar.google.ca/citations?user=h7OHSkoAAAAJ&hl=en

![スクリーンショット 2021-01-14 22.48.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/31ffdbfe-4f09-aee2-b748-313d3bbfc6f2.png)

__（ NICE論文を何らかの形で引用して、言及している論文の一覧リスト ）__

- https://scholar.google.ca/scholar?oi=bibs&hl=en&cites=8889086958261298527

この論文のアブストラクト（*Abstract*。論文概要）の部分を、全文和訳してみます。

__アブストラクト原文__

> __ABSTRACT__
>
>We propose a deep learning framework for modeling complex high-dimensional
densities called Non-linear Independent Component Estimation (NICE). 
It is based on the idea that a good representation is one in which the data has a distribution that is easy to model. For this purpose, a non-linear deterministic transformation of the data is learned that maps it to a latent space so as to make the
transformed data conform to a factorized distribution, i.e., resulting in independent latent variables. 
We parametrize this transformation so that computing the determinant of the Jacobian and inverse Jacobian is trivial, yet we maintain the
ability to learn complex non-linear transformations, via a composition of simple
building blocks, each based on a deep neural network. The training criterion is
simply the exact log-likelihood, which is tractable. Unbiased ancestral sampling
is also easy. We show that this approach yields good generative models on four
image datasets and can be used for inpainting.

__アブストラクト試訳（本記事執筆者による仮訳）__
>
> この論文は、 非線形独立因子推定モデル "Non-linear Independent Component Estimation" (NICE)と名付けられたディープ・ラーニングの学習フレームワークを提案します。このフレームワークは、入り組んだ高次元の確率分布を、ディープ・ラーニングの枠組みでモデル学習するものです。
>
> 私たちは、優れた特徴表現（ ベクトル）とは、解析対象のデータを、解釈（理解）のしやすい（単純な）確率分布で表現されるような表現であるという信念の上に立って、このフレームワークを考えました。
>
> このような特徴表現（ ベクトル）を得るために、モデル学習の結果、元のデータに対して非線形変換を決定論的に行う作用を持つ変換関数が得られるようなモデルを提案します。今回、提案するモデル学習を行った結果、入力データを決定論的に、非線形な潜在表現データに変換する能力を持つ関数が得られます。この関数をデータに適用すると、元のデータは、潜在空間の中で、相互に独立な複数の特徴因子に分解された状態になるように、潜在在空間に写像されます。
>
> 今回、提案するモデルは、ある関数の「ヤコビ行列の行列式（ ヤコビアン）」（the determinant of the Jacobian)と「逆ヤコブ行列式（逆ヤコビアン）」（inverse Jacobian）が、数学的に扱いやすい単純な行列式になるような関数を、（ノイズとなる乱数や、確率変数を介在させない）決定論的なアプローチで算出することで、元のデータを非線形な潜在表現データに決定論的に変換可能な関数を導出します。
>
> 得られた（非線形の決定論）関数を、ブロックを組み合わせるように複数回、繰り返し、対象となるデータに適用させることで、複雑に入り組んだ非線形の確率分布で表現されるような元のデータが持つ特徴因子の構造を、簡単に理解することができるようになります。
>
> 提案モデルは、このブロック部品となる非線形の決定論モデルの関数を、ディープ・ラーニングの枠組みで導出します。
得られた関数の良し悪しを判断する基準は、単純な対数尤度です。対数尤度ですので、データのサンプリングを簡単に行うことができます。
>
> この論文の中で、私たちは、ここまで述べてきたアプローチが、優れた性質を兼ね備えたデータ生成モデルを導出することができることを、4つの画像データセットに適用することで実証しました。この事実は、このモデルを画像の修復（inpainting）を試みるタスクに適用することによっても、証明されることも示します。

###どんなモデルなの？

潜在生成モデルは、画像などの（一般に高次元の）入力データが持つ特徴を、うまく表現した潜在ベクトルを密度推定した上で、獲得した潜在ベクトルから入力データと同じデータや、入力データに似た特徴を持つ新しい（学習データに含まれていない）データを生成（再現）するモデルです。

__Flowベースモデルは、「入力データ」と「潜在ベクトル」という2者の間で行われる「入力データからの潜在ベクトルの密度推定」と「潜在ベクトルからのデータの生成（再現）」という2つの作業を、（写像）関数によって行われる「データ変換」とみなします。__

そして、__「入力データ」と「潜在ベクトル」という2者の間で「双方向」に行われる「データ変換」__を、数学的に__演算が容易な「単純な線形関数」の合成関数と、その逆関数によって構成__します。

このデータ操作を箇条書きにすると、以下のようになります。

__（ 入力データ$x$の性質を表現する潜在ベクトル$z$ --そこから入力データ$x$が生成（サンプリング）されるデータ生成元の確率密度関数$z$ -- を推定するために、__次のアプローチをとる__モデルを、__Flowベース生成モデル__と呼ぶ ）__

- まず最初に、正規分布など、単純な形を持つ確率分布$p_{H}(x)$で、数学的な性質が調べ尽くされた__既知の統計分布（確率密度関数）から出発__する。
- この「単純な形の統計分布$p_{H}(x)$」に対して、__「ある線形関数」を繰り返し適用__することで、（単純な統計分布を）対象データが持つ特徴をうまく表現している「複雑な分布」に、__データ変換（変数変換）__していく。
- データ変形を繰り返した結果、（単純な統計分布$p_{H}(x)$を）対象データが持つ特徴をうまく表現している「複雑な分布」に至る。
- 最終的に得られる「複雑な分布$p_{H}(x)$」から、入力データが生成（サンプリング）される確率（尤度）が最大になるように、対数尤度の最大化を目指す。

出発点となる「（ガウス分布などの）単純な形を持つ確率分布$p_{H}(x)$」に対して、「その関数$f$」を「繰り返し」適用することで、入力データ$x$記述する（複雑な）確率分布を作り出す。

これが、Flowベース生成モデルがとるアプローチ（戦略）です。

この辺りは、__*Lilian Weng*さん__が分かりやすいイメージで可視化してくれています。図を転載します。

__（ 出典 ）__
- https://lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html

![スクリーンショット 2021-01-18 18.31.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/2f37f3d0-c224-c7e5-3481-bb8248c5903f.png)

__Flowモデルによって学習された潜在ベクトル（$z$）に、逆関数$f^{-1}$を作用させて、生成した入力データ（$x$）の再現データ$\hat{x}$__

__（ [Dinh 14] *p.8*より転載 ）__

![スクリーンショット 2021-01-20 0.17.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/246d85e2-f01d-4545-dbfc-ed5b701c6780.png)

###*β-VAE*との類似性： [Dinh 14]NICE: Non-linear *Independent Components* Estimationモデルの名前が持つ意味

なお、この「単純な確率分布」 $p_{H}(x)$は、モデルの設計者があらかじめ定めて、モデルに対して天下り的に与える統計分布（確率密度関数）ですが、各次元が互いに独立（相関関係を持たない）な（多変量）正規分布が選ばれます。

__（ [Dinh 14] *p.2* ）__
> where $p_{H}(h)$, the *prioer distribution*, will be a predefined density function, for example a standard isotropic Gaussian. If the prior distribution is factorial (*i.e,* with independent dimensions), then we obtain the following *non-linear independent components estimation* (NICE) criterion, ・・・

__（ 同 *p.3* ）__

> ・・・ and use the factorial structure of the prior $p_{H}$ to encourage the model to discover meaningful structure in the dataset

ややくどいですが、箇条書きにすると以下になります。

1. 単純な確率分布として、「各次元が互いに独立（相関関係を持たない）な（多変量）正規分布」を選択する
2. この「単純な」統計分布に対して、次々に線形関数を繰り返し適用していく（合成関数は非線形関数になる）うちに、入力データ$x$が持つ（一般に複雑な）特徴をうまく表現しうる「複雑」で「各次元が互いに独立な多変量統計分布」に変形させる

__最終的に獲得される潜在表現ベクトル$h$が、「各次元が互いに独立な多変量統計分布」であることで、*"encourage the model to discover meaningful structure in the dataset"*（入力データを構成する「互いに独立な特徴因子」）を抽出する結果を招来せしめ」ようとするアプローチは、潜在変数を、（すべての次元が互いに独立な）多変量正規分布に近づけることで、『入力データを構成する「互いに独立な特徴因子」を抽出する結果を招来せしめ」ようとする』*β-VAE*と同じ考え方です。__

NICE: Non-linear *Independent Components* Estimationモデルの名前の中に、$"I"$と$"C"$の2つの文字が含まれるのは、こうした経緯（いきさつ）からです。

__（ 同 *p.5* ）__

>###3.4 PRIOR DISTRIBUTION
>
>As mentioned previously, we choose the prior distribution to be factorial, i.e.:
>
>```math
>p_{H}(h) = \prod_{d=1}^{D} p_{H_{d}}(h_{d})
>```
>
>We generally pick up this distribution in the family of standard distribution, e.g. gaussian distribution:
>
>```math
>log(p_{H_{d}}) = - \frac{1}{2}(h_{d}^{2} + log(2\pi))
>```
>
>or logistic distribution:
>
>```math
>log(p_{H_{d}}) = - log(1 + exp(h_{d})) - log(1 + exp(-h_{d}))
>```
>
>We tend to use the logistic distribution as it tends to provide a better beyond gradient. 

###名前の由来は？: *Flow*の意味

上の図で、データ変換$f$」を、データ（統計分布）に対して何度も繰り返し適用する』演算操作は、その関数$f$」から構成される合成関数（$(f_{1} \circ f_{2} \cdots f_{n})$）をデータに適用する操作と同値です。

この関数適用列の上にデータが乗っかることで、ガウス分布などの単純な統計分布が、（対数尤度最大の条件下で生成される）入力データの生成元となりうる複雑な形状の統計分布に変換されたり、その逆方向のデータ変換が行われます。

__*Flow*-based generative model(s)__の名前に含まれる__*Flow*__は、この__データ変形の流れを形容した表現__です。

このあたりは、__[Dinh 14]の*p.3*で強調して述べられています。その部分を引用します。__

> In line with previous work with auto-encoders and in particular the variational auto-encoder (Kingma and Welling, 2014; Rezende et al., 2014; Mnih and Gregor et al., 2014), we call $f$ the *encoder* and its inverse $f^{-1}$ the *decoder*. With $f^{-1}$ given, sampling from the model can proceed very easily by *ancestral sampling* in the directed graphical model $H &rarr; X$, *i.e.,* as described in Eq.2

なお、末尾に登場する$Eq.2$は、この論文の*p.1*の最下段に印字されている次の関数です。この関数の逆関数と併せて掲載します。  

__（ $Eq.2$ ）__

```math 
h 〜 p_{H}(h)　\\
x = f^{-1}(h)
```

__（ 上記の逆関数 ）__

```math 
h = f(x)
```

__なお、転載した上図のした方に書いてある「データ変換」を行う際の（確率変数の）変数変換を担う数式については、この記事のなかで後述します。__

次のスライドの*pp.68-70*も参考になるため、転載をさせていただきます。
- [（speakerdeck）Hirokazu Kameoka 「深層生成モデルによるメディア生成」](https://speakerdeck.com/kame_hirokazu/shen-ceng-sheng-cheng-moderuniyorumedeiasheng-cheng?slide=75)

![スクリーンショット 2021-01-15 18.08.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/7df55f83-f63f-0852-a170-252dc1c76ba8.png)

![スクリーンショット 2021-01-15 18.08.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/a53db157-8354-e5b3-0d35-70279cd07164.png)

![スクリーンショット 2021-01-15 18.08.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/46ef1f66-d48e-6689-8182-166dbb906176.png)

###モデルとしての特徴は？

__Flowベース生成モデルは、以下に見るような特徴があります。__

1. __入力データの特徴を捉えた潜在表現（$z$）の対数尤度の近似値ではなく、対数尤度の数値を直接計算できる。__
2. __潜在変数（$z$）から入力データ（$x$）を再現（サンプリング）する*Flow*（関数の合成関数$(f_{1} \circ f_{2} \cdots f_{n})$）をニューラルネットワークモデルで学習すると、その逆関数（合成関数の逆関数）を演算するだけで、入力データ（$x$）から潜在変数（$z$）を密度推定できる。その結果、入力データ（$x$）から潜在変数（$z$）を密度推定する*Encoder*をモデル学習する必要がない。__

###モデルの強みは？
####（ 強み１ ）

ここで、__2.に注目__すると、*Flow*では、__入力データ$x$と潜在変数$z$の間を取り結ぶ、どちらか一方向（$z&rArr;x$ *or* $z&lArr;x$）のデータ変換関数（合成関数）さえ学習できれば、逆方向のデータ変換は、学習済みの合成関数の「逆関数」を演算するだけで済む__という特徴があります。

VAEとGANでは、これとは対照的に、それぞれ、*Encoder*と*Decoder*（VAE）、*Discriminator*と*Generator*（GAN）の__2つのモデルの学習（GAN）が必要__でした。

#####*Encoder*と*Decoder*

$A :$ __（ 入力データ$x$を表現する潜在変数$z$の学習 ） *VAE*における*Encoder*__
 __ガウス分布などの単純な確率分布 &rArr; （データ変換関数の繰り返し適用（合成関数の適用）） &rArr; 入力データ$x$をうまく記述する潜在表現ベクトル$z$__

$B :$ __（ 潜在変数$z$からの（入力データの再現値）$\hat{\mathbf{x}}$のサンプリング生成 ） *VAE*における*Decoder*__
 __潜在表現ベクトル$z$ &rArr; （『データ変換関数の「逆関数」』の繰り返し適用（『合成関数の「逆関数」』の適用） &rArr; 入力データ$x$__

__上記の$A$と$B$は、原論文の*Figure 1*（以下）中の$(a)$と$(b)$に対応します。__

![スクリーンショット 2021-01-16 13.49.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/453e88d5-b05e-9429-91a7-438be65e2408.png)

先ほど引用した__[Dinh 14]の*p.3*の次の箇所を、この文脈で再掲します。__
__（ 以下の太字部分は本記事執筆者による ）__

> In line with previous work with auto-encoders and in particular the variational auto-encoder (Kingma and Welling, 2014; Rezende et al., 2014; Mnih and Gregor et al., 2014), __we call $f$ the *encoder* and its inverse $f^{-1}$ the *decoder*.__ With $f^{-1}$ given, sampling from the model can proceed very easily by *ancestral sampling* in the directed graphical model $H &rarr; X$, *i.e.,* as described in Eq.2

####Flowモデルで学習が必要なのは、*Encoder*と*Decoder*のどちらか片方だけ

$A$のモデル学習の結果、ある関数$f$を$N$回、関数適用させると、最初に置いた単純な統計分布(ガウス分布など)がデータ$x$をうまく記述する複雑な統計分布に変換されるとします。

その場合、$B$では、データ$x$に対して、"$A$で学習された関数$f$の適用系列($f$の合成関数)すべて"の逆関数を適用すると、$x$は、最初に置いた単純な統計分布(ガウス分布など)に変換されます。

ここで、データ$x$に対して、$A$で学習された"関数$f$を$N$回より少ない回数、適用させる合成関数"の逆関数を適用すると、"単純な確率分布(ガウス分布など)から、統計分布の形が少しずつ複雑に変化し、最終的にデータ$x$を表現する複雑な統計分布に至る過程"の途中の段階で現れる"適度に複雑な形の統計分布"を得ることができます。この統計分布は、データ$x$の特徴を"そこそこ表現できている"(データxの)潜在表現です。

__なお、上図の$（c）$は興味を持つ画像データ（入力データ）を「画像修復」した結果の別の画像データを、「潜在変数」$H$からデータ逆変換により取得（生成）しています。Flowベース生成モデルは、画像の修復タスクでも利用可能です。__

####（ 強み２ ）

また、__1.に注目__すると、__*Flow*モデルでは、対数尤度の数値それ自体を算出することができます。__

VAEでは、変分下限の最大化によって、対数尤度の「近似値」を算出することしかできませんでした。また、GANでは、*Generator*が生み出すデータ（画像など）が、どれだけ入力（学習）データに近いのかは、定量評価することがそもそもできませんでした。

さらに__*β-VAE*__モデルは、入力データを潜在空間に写像（変数変換）するにあたって、中心値（平均値）から距離（*σ*）だけ離れた近傍領域に、非決定論的（確率論的）に、散らされてしまいます。そのため、__*β-VAE*__モデルによって得られるのは、入力データの特徴を圧縮表現した潜在変数の値そのものではなく、標準偏差*σ*だけ「ゆらぎ」が加えられた近傍値でしかありませんでした。

このことは、__[Dinh 14]では、*p.6*の次のパラグラフで述べられています。__

__（ [Dinh 14]の*p.6*の該当箇所 ）__
> Like the variational auto-encoders, the NICE model uses an encoder to avoid the difficulties of inference, but its encoding is deterministic. The log-likelihood is tractable and the training procedure does not require any sampling (apart from dequantizing the data)

また、GANで行われるのは、*Generator*が生み出したデータを、入力（学習）データか、そうでないのかを*Discriminator*が二者択一判定することだけです。さらに__*GAN*__は乱数から出発して、データを生成するモデルです。そのため、初期値として与えられる「乱数」の効果を取り除いて、データそのものの正確な値（*exact* value）を、一意に決定論的に算出できない設計となっています。

このあたりは、__[Dinh 14]論文の第４章（RELATED METHODS）の第２パラグラフから第３パラグラフを割いて、__述べられています。

Flowモデルは、出発点に置く「計算が容易な単純な統計分布」として、標準正規分布（*a standard normal distribution*）やロジスティック分布（*a standart logistic distribution*）など、複数の統計分布を選択することができます。また、どのようなカップリング関数を採用するのかについても、加法カップリングや乗法カップリングなど、いろいろなカップリングを選択することができます。

[Dinh 14]では、Flowモデルとして設計可能な複数のモデルのうち、適用対象のデータセットに対して、どのモデルが最も当てはまりが良いのかを、各モデルの「対数尤度」そのものの正確な値（近似値ではない*exact* value）を比較することで、探索しています。

__（ [Dinh 14] *p.7* ）__
> A standard logistic distribution is used as prior for MNIST, SVHN and CIFAR-10. A standard normal distribution is used as prior for TFD.
>
> The models are trained by mazimizing the log-likelihood log($p_{H}(h)) + \Sigma_{i=1}^{D} s_{i}$ with AdaM(Kingma and Ba, 2014) with learning rate $10^{-3}$, momentum 0.9, $β_{2}$ = 0.01, $λ$ = 1, and $ε$=$10^{-4}$.
> We select the best model in terms of validation log-likelihood after 1500 epochs.  

####（ Tips ）

なお、オートエンコーダーモデルにおいて、潜在変数（潜在ベクトル）$z$の正確な値（*exact* value）を得られなくなるにもかかわらず、各入力データの潜在表現ベクトルを多変量標準正規分布（$\mu=0$, $\Sigma=I$）に近い「確率変数」にする（同じデータが*Encoder*に入力されても、*Encoder*から生成される潜在表現ベクトルは毎回、異なる値になる）理由については、以下の拙記事を参考にしてください。

- [「「潜在変数」（z）を多変量正規分布に近づけるβ-VAEモデルはなぜ、データが持つ特徴のもつれを解く（disentangle）ことができるのか？」](https://qiita.com/Afo_guard_enthusiast/items/8ff4850385d1b2fa8e57)


このように、__Flowベース生成モデルは深層生成モデルとして、際立った特徴を持ちます。__
__そのことに気づいた一部の研究者の手で、GANモデルやVAEモデルをFlowベースの生成モデルに焼き直す論文が、この数年、猛烈な勢いで執筆されています。そして、そのような論文のなかで、少なくない論文が、NIPSやICLRなどの最難関の国際論文カンファレンスに査読通過しています__。

###アルゴリズムのコア：データ変換で登場する「ヤコビアン」（*Jacobian*）

なお、この記事でこれから簡単に説明しますが、*Flow*ベース生成モデルでは、__数学の「ヤコビアン」__が登場します。__「ヤコビアン」__は、次の形を持つものです。

```math
det \begin{bmatrix}
\frac{df_{1}}{dx_{1}} & \cdots & \frac{df_{1}}{dx_{n}}\\
\vdots & \cdots &  \vdots\\
\frac{df_{n}}{dx_{1}} & \cdots & \frac{df_{n}}{dx_{n}}\\
\end{bmatrix}
```

この「ヤコビアン」は、数学や物理学、数理統計学、機械学習の中で、次の場面で使われます。

- 確率変数の変数変換の計算
- 多変数関数の微積分演算における変数変換の計算

確率変数も多変数関数の微積演算も多用する機械学習や数理統計学では、ヤコビアンは登場する場面が多いです。

*Flow*ベース生成モデルでは、「単純な確率分布」に複数回、データ変形を施すことで、入力データの生成元である確率が大きい（対数尤度の最大化）複雑な統計分布（潜在変数$z$）にデータ変形させるものでした。

このように、「確率変数の変数変換」を行うFlowベース生成モデルでは、「ヤコビアン」が登場します。

ここで、すでに紹介しましたFlowモデルの初出論文[Dinh 14]の*p.1*に掲載されている「データ変換」（*data transformation*）の数式を掲載してみます。

__（ 出典 ）__

- [Laurent Dinh et al., NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION, ICLR 2015](https://arxiv.org/pdf/1410.8516.pdf)

![スクリーンショット 2021-01-19 20.06.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/ca176afc-8a7b-c703-cc85-96dc56776523.png)

__上の数式（１）__を、__ヤコビアンを用いた確率変数の変数式__を解説しているWebページに掲載されている__以下の式(4)と見比べてみてください__。 __数式として同じ（変数$x$を$y$に読み替える）であることが、わかると思います。__

__（ 出典 ）__
- [データ科学便覧 「確率変数の変換」](https://data-science.gr.jp/theory/tbs_convert_variable.html)

![スクリーンショット 2021-01-19 20.11.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/35acc175-aa31-b1ac-1dec-3c3b61930b1d.png)

（ この__式（４）が登場する数式の変形過程は以下になります。）

![スクリーンショット 2021-01-18 18.57.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/077b25cb-bb09-da30-62da-acc08dedd698.png)

__[[Dinh 14]の*p.1*の式（１）と、解説サイトの式（4）だけを抜粋して並べてみます。__

- __[Dinh 14]の*p.1*の式（１）__

![スクリーンショット 2021-01-19 20.14.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/59e31dde-5812-a93a-9070-caa5337199d0.png)

__解説サイトの式（4）__

![スクリーンショット 2021-01-19 20.15.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/79bdb44e-7e48-3d75-8f77-39b91ecf1a6d.png)

__２つの数式は、同じになっています。__

__ヤコビアンを用いた確率変数の変数変換が理解できれば、Flowベース生成モデルの仕組みを理解することができます。__

「ヤコビアンを用いた確率変数の変数変換」については、次のスライドがわかりやすいです。

- [（slideshare）Hiromasa Ohashi PRML読書会#2,#3資料](https://www.slideshare.net/hiromasaohashi/prml23-30172404)

![スクリーンショット 2021-01-18 19.04.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/24549bd6-a403-a573-21bc-9e3b39a6924c.png)

![スクリーンショット 2021-01-18 19.04.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/d83c8987-3cc2-dadf-4600-896578cd3db1.png)

![スクリーンショット 2021-01-18 20.47.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/25df1b0b-0dab-e6a7-47f5-4c6f1a4fbaa9.png)


LaTeXがうまくレンダリングされませんが、次のサイトも分かりやすいです。
-  [正しく代入できているのか：ヤコビアン（１）](https://ameblo.jp/students-note/entry-12053106704.html)

> ヤコビアンってなんですか？
> 先日、後輩くんが確率の授業でヤコビアンを見たらしい。
> 析学について学習する機会の少ない文系の学生にとって
>ヤコビアンが初めて登場するのは確率・統計の授業
>とくに、変数変換　のパートではじめて登場する。
>文系学生にとって、変数変換くらいでしか出てこない
>ヤコビアンはなかなか、お友達になりにくい概念である。


__（ xが1次元のとき、確率変数$p_{x}$が持つヤコビアンの数式形 ）__

```math
p_{x}(x) = p_{z}\begin{bmatrix} \frac{dz}{dx} \end{bmatrix} = p_{z}(f^{-1}(x))\begin{bmatrix} \frac{df^{-1}(x)}{dx} \end{bmatrix}
```
__（ xが多次元のとき、確率変数$p_{x}$が持つヤコビアンの数式形 ）__

```math
p_{x}(\boldsymbol{x}) = p_{z}\begin{bmatrix} det \frac{d\boldsymbol{z}}{d\boldsymbol{x}} \end{bmatrix} = p_{z}(f^{-1}(\boldsymbol{x}))\begin{bmatrix} det \frac{df^{-1}(\boldsymbol{x})}{d\boldsymbol{x}} \end{bmatrix}
```

Flowベースモデルを最初に提案した[Dinh 14]の*pp.1-2*に掲載されているヤコビアンの数式をここで転載します。

__（ 原論文[Dinh, 14]の$p.1$の最終段落 ）__
![スクリーンショット 2021-01-15 17.36.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/725ddb30-f0f2-b29a-5b73-c0af71dbb869.png)

__（ 同論文の$p.2$の最初の段落 ）__
![スクリーンショット 2021-01-15 17.38.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/3a0f94ac-4454-aa44-53f3-570a9b8c59fc.png)

###最大化すべきは、ヤコビアンを含む対数尤度

ヤコビアンを使ったデータ変換がコア部分に埋め込まれたFlowベース生成モデルは、入力データ　$x$がそこから生成（サンプリング）されたであろう母分布を推定するために、入力データが得られる確率$p(x)$を最大化する確率密度関数を計算するために、対数尤度$log(p(x))$を計算します。

__Flowベース生成モデルでは、この対数尤度関数の中にも、ヤコビアンが顔を出します。__

あとで触れますが、__*Flow*ベース生成モデルは、すでに数多くのモデルが、提案されています。__
それぞれのモデルによって、ヤコビアンを含む対数尤度の数式の形は異なります。

次の節で、__*Flow*モデルを最初に提案した論文__を取りあげますが、__その最初の論文で提案された対数尤度$log(p_{X}(x))$がどんな数式の形をしているのかを、まずは見てみましょう。__

__（ 以下、[Dinh 14]論文の$p.3$を抜粋して転載 ）__

![スクリーンショット 2021-01-17 16.45.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/36f60038-a43b-ab92-0d68-3c5882a7a01c.png)

__最後に登場する次の数式です。__

```math 
log(p_{x}(x)) = \Sigma_{d=1}^{D} log(p_{H_{d}}(f_{d}(x))) + log(|det(\frac{\partial f(x)}{\partial x})|)
```

__このヤコビアン（ヤコブ行列の行列式）が組み込まれた対数尤度は、一般的に、計算負荷が重たい計算になります。__

そのため、__*Flow*ベース系の生成モデルでは、データ変換関数に求められる２つの制約条件（この記事のなかで後述）を満たしつつ、いかにして、この対数尤度として、計算負荷の軽い数式を導出するのかが、モデル設計に際しての重要ポイント（頭のひねりどころ）として、問われてきます。__

次の節で取りあげますが、__Flowベース生成モデルの初出論文は2014年に公開されましたが、その5年後の2019年に、データ変換関数に求められる制約条件を大きく緩和する論文が出ました__（この論文についても、この記事の中で後ほど、簡単に取りあげます）。

この論文によって、__対数尤度の数式の中のヤコビアンの部分は、ヤコブ行列のトレース（対角成分の和）で計算できる結果が導かれたため、対数尤度の計算負荷は大きく低減されました__。

###データ変形関数は、２つの制約条件を満たさねばならない

ここで、データ変換を行う役割を果たす「線形関数」は、ある条件を満たす関数でなければなりません。

####（ 条件１ ）

その条件とは、__その関数のヤコビアン（ヤコビ行列式）が、数学的に扱いやすい、できるだけ簡単な形になる関数でなければならない__、というものです。

####（ 条件２ ）

もう１つ条件があります。

それは、__その関数は、「逆関数を持つ関数」でなければならない、__という条件です。

この辺りは、__原論文[Dinh, 14]の$pp.1-2$の次の部分で、宣言的に記述__されています。

> A key novelty of this paper is the design of such a transformation $f$ that yields these two properties of “easy determinant of the Jacobian” and “easy inverse”, while allowing us to have as much capacity as needed in order to learn complex transformations.

上の部分を日本語に訳してみます（本記事執筆者による試訳）。

>この論文のノベルティ（新規性）は、「数学的に取り扱いやすい形のヤコビアンが導出できて」、「逆関数を持つ」という２つの特質を持つ（データ）変換（関数）の設計方法を提示したことにあります。（これら２つの特質を満たす）（データ）変換（関数）は、（入力データが持つ）特徴（データの内部生成構造）を適切に捉えた（一般に複雑な確率分布に）データ変換できる能力（*capacity*）を持つ関数です。

ところで、__逆関数を持つ関数による写像は、「写像元のデータ」と「写像先のデータ」とで、次元の数が同じになります__。

入力データ$x$に、「関数$f$から構成される__（合成）関数の逆関数__」を適用（作用）させると、最初に設定した「単純な確率分布」に戻すことができる必要があるからです。数学的に厳密に表現すると、「逆関数」を持つ「関数」は、（写像で結ばれるすべての値が互いに１対１対応する）全単射（*bijecrtive*）の写像でなければならないからです。（[Dinh 14]では*p.3*などで、全単射（*bijecrtive*）という単語が登場します）

ここから、入力データ$x$の次元の数と、最初に設定した「単純な確率分布」の次元の数は、同じ数に揃える必要があります。

その結果、__Flowベース生成モデルによって求められる潜在ベクトル$z$は、入力データ$x$の次元数を小さくした次元圧縮表現にはなりません。ここが、VAEなどのオートエンコーダ系の深層生成モデルと異なる点__です。

ここで再び、__*Lilian Weng*さんのウェブページから、図を転載します。__

__（ 出典 ）__
- https://lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html

![スクリーンショット 2021-01-18 19.39.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/8f1d0762-89f4-1c4b-a38a-e8e04e8af308.png)

__同じ「深層生成モデル」に属する*GAN*と*VAE*の模式図では、*Encoder*と*Decoder*の形が台形（データの入り口と出口で次元数の大きさが違う）なのに対して、*Flow*モデルの「データ変形（合成）関数」の（模式図の）形は、正方形（データの入り口と出口で次元数の大きさが等しい）に描かれています。__

ここで、この上図の*flow*（合成関数）」と、その逆（合成関数）である*Inverse*を双方向に行き来することで、入力データ$\mathbf(x)$と潜在表現ベクトル$\mathbf(z)$と入力データの再現データ$\hat{\mathbf{x}}$の間を、双方向に行き来できます。

この__「双方向のデータ変換作用（処理）」__の__『ながれ』__が、__*"Flow-based"* generative model(s) の名前の由来__です。

$A :$ __（ 入力データ$x$を表現する潜在変数$z$の学習 ） *VAE*における*Encoder*__
 __ガウス分布などの単純な確率分布 &rArr; （データ変換関数の繰り返し適用（合成関数の適用）） &rArr; 入力データ$x$をうまく記述する潜在表現ベクトル$z$__

$B :$ __（ 潜在変数$z$からの（入力データの再現値）$\hat{\mathbf{x}}$のサンプリング生成 ） *VAE*における*Decoder*__
 __潜在表現ベクトル$z$ &rArr; （『データ変換関数の「逆関数」』の繰り返し適用（『合成関数の「逆関数」』の適用） &rArr; 入力データ$x$__

__上記の$A$と$B$は、原論文の*Figure 1*（以下）中の$(a)$と$(b)$に対応します。__

![スクリーンショット 2021-01-16 13.49.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/453e88d5-b05e-9429-91a7-438be65e2408.png)

###Flow系モデル設計上の課題： データ変形関数の制約条件をどう満たすのか？

__Flowベース生成モデルには、次の条件を満たす数理モデルでなければならない、という制約条件がありました。__

ここで、2つの制約条件をもう一度振り返ってみます。

####Flowベース生成モデルの制約要件（設計ポイント）

1. 数学的に簡単に計算できるヤコビアン（行列）を持った確率変数を登場させること
2. 逆関数をもち、数学的に簡単に計算可能なヤコビアン（行列）が導出できる非線形関数を登場させること

__GANやVAE, Autoregressiveモデルなど、様々なモデルをFlowベース生成モデルで表現する提案が、論文でなされています。各論文とも、様々な工夫を取り入れることで、上記の「2つの制約要件（設計ポイント）」を充足させています。__

__（ 制約条件 ）__
変換関数のヤコビアン（ヤコビ行列式）を簡単な形になる関数とは、どんな関数なのか？

__（ 制約を乗り越える解（の１つ） ）__
その変換関数のヤコビ行列が、三角行列になる関数が得られればよい。
（三角行列の行列式は、その行列の対角成分の積になり、数学的に簡単な構造になる）

そのような関数を導き出すために、Flowの系譜に連なるモデルは、入力データに適切な「カップリング関数」を適用させるなどの工夫をとり入れています。「カップリング関数」には、加法カップリングや乗法カップリングを始め、さまざまなカップリングがあります。各カップリング関数をモデルに組み込むと、データ変換関数のヤコビアンがどのような形（数式）になるのかについては、次のスライドが分かりやすいです。

- [（slideshare） Shunsuke NAKATSUKA 「Up to GLOW」](https://www.slideshare.net/ShunsukeNAKATSUKA1/up-to-glow)

なお、三角行列を採用すると、ヤコビアン（ヤコブ行列の行列式）の「行列式」演算が簡単になることは、Flowベース生成モデルの出発点に位置する[Dinh 14]の第3章 （*ARCHITECTURE*）の第3.1節（"TRIANGULAR STRUCTURE"）で、早くもつづられています。

__（ 各Flowモデルで採用された方法 ）__

- NICE（*Non-linear Independent Component Estimation* [Dinh+ 14]）は、加法カップリング（additive coupling）関数を選択。

```math
det \frac{dy}{dx} = det \frac{dy_{t2}}{dx_{t2}} = 1
```

- Real NVP （*Real-valued Non-Volume Preserving* [Dinh+ 17]）は、アフィンカップリング（affine coupling）を選択。

```math
det \frac{dy}{dx} = det \begin{bmatrix} l_{d} & 0  \\ \frac{dy_{l2}}{dx_{l1}} & diag(exp(s(x_{l1}))) \end{bmatrix} = diag(exp(s(x_{l1}))) = exp (\Sigma_{i=1}^{D-d} s(x_{l1})_{i}) 
```

- Masked Autoregressive Flowは、際パラメータ化（アフィン変換）を選択。

```math
det \begin{bmatrix}
\frac{du_{1}}{dx_{1}} & \cdots & \frac{du_{1}}{dx_{D}}\\
\vdots & \cdots &  \vdots\\
\frac{du_{D}}{dx_{1}} & \cdots & \frac{du_{D}}{dx_{D}}\\
\end{bmatrix}
=
det \begin{bmatrix}
exp(\alpha_{-1}) & \cdots & 0\\
\vdots & \cdots &  \vdots\\
\frac{du_{D}}{dx_{1}} & \cdots & exp(\alpha_{-D})\\
\end{bmatrix}
=
exp(-\Sigma_{i=1}^{D} \alpha_{i})
```

- Planar Flowの変数変換

```math
\boldsymbol{x}^{\prime} = \boldsymbol{z} + \boldsymbol{u}h(\boldsymbol{W}^{T}\boldsymbol{z} + b)
```

は、行列式の補題（Matrix determinant lemma）

```math
det (\boldsymbol{A} + \boldsymbol{u}\boldsymbol{v}^{T}) = (1 + \boldsymbol{v}~{T} + \boldsymbol{A}^{-1}\boldsymbol{u}) det \boldsymbol{A} \\
ただし、\boldsymbol{A}は可逆行列
```

を使って、以下の形に導出する。

```math
det (\boldsymbol{I} + \boldsymbol{u}h^{\prime}(\boldsymbol{W}^{T}\boldsymbol{z} + b)\boldsymbol{W}^{\prime}) = 1 + \boldsymbol{u} h^{\prime}( \boldsymbol{w}^{T}\boldsymbol{z} + b) \boldsymbol{w}^{T}
```

###「制約条件」は2019年に大きく緩和された。

#####Flowベース生成モデルの「制約要件」を一挙に緩和させた研究

Flowベース生成モデルを設計する上で、考慮しなければならない制約条件の下で、各モデルがどのようなモデルを提案してきたのかを、一部をピックアップして垣間見てきました。

__2019年に、この「制約条件」を大きく緩和するような論文（以下の2番目の論文）が出ました。__

1. [Ricky T. Q. Chen, Yulia Rubanova, Jesse Bettencourt, David Duvenaud, Neural Ordinary Differential Equations, NeurIPS 2018)](https://arxiv.org/pdf/1806.07366.pdf)

2. [Will Grathwohl et.al., FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models, ICLR 2019](https://openreview.net/pdf?id=rJxgknCcK7)

このことは、（先ほどFlowの絵を転載させて頂いた）解説スライド（以下）の61ページ目で解説されています。

- [（slideshare）Masahiro Suzuki, [DL輪読会]Flow-based Deep Generative Models](https://www.slideshare.net/DeepLearningJP2016/dlflowbased-deep-generative-models)

> FFJORD (Free-Form Jaccobian of Reversible Dynamics) [Greathwohl +19] 
> これの登場によって、フローにおける種々の制約が外れた
 - フローのダイナミクスが離散から連続的になった
 - （それに関連して）モデルのパラメータ数が大幅に減った
 - ヤコビ行列式の計算コストが低くなった
> - 密度推定とサンプリングの両方が効率的

（深層）ニューラル・ネットワークモデルは、隣り合う層（*layer*）の間に離散的な距離がある「飛び飛びの離散空間」です。そんな中、ニューラル・ネットワークモデルを（至るところ、微分可能な連続空間上で定義される）微分方程式として捉える方法を提示したのが、__論文（１）__です。

そして、そのような観点で捉えられたニューラル・ネットワークモデルを、Flowベースのデータ変換過程に置き換える試みが、__論文（２）__で提案された、といういきさつのようです。

結果として、__論文（２）__では、「ヤコビアン」は、「ヤコビ行列の対角要素を単に足し算すること」で得られるようになったと、この後すぐに掲載した同論文のAbstractの中で報告されています。
（行列のトレース（*trace*）は、__その行列の対角成分の和__で算出されます）

__論文2__より前に出た論文では、「ヤコビアン」を「行列の対角成分の__積__」で算出できるようにするために、ヤコブ行列が「三角行列」になるような（データ）変換関数を、あれこれ工夫して採用していました。

Google Scholarによると（アクセス日：2021/1/16）、__論文2__は、__269本の論文から引用__されています。

- https://scholar.google.com/citations?user=ZbClz98AAAAJ&hl=en

![スクリーンショット 2021-01-16 12.53.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/15193bda-9abf-fc01-2ad7-ceab63bcc76f.png)

__論文２を引用している論文の一覧__

- https://scholar.google.com/scholar?oi=bibs&hl=en&cites=12849237214531885593,15948756339021923930

ここで、２本の論文のAbstractを見てみます。

####__【 再掲 】 ２つの論文__

1. [Ricky T. Q. Chen, Yulia Rubanova, Jesse Bettencourt, David Duvenaud, Neural Ordinary Differential Equations, NeurIPS 2018)](https://arxiv.org/pdf/1806.07366.pdf)

2. [Will Grathwohl et.al., FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models, ICLR 2019](https://openreview.net/pdf?id=rJxgknCcK7)

__（ 論文１のAbstract ）__

> __Abstract__
>
> We introduce a new family of deep neural network models. __Instead of specifying *a discrete sequence of hidden layers*, we parameterize *the derivative of the hidden state using a neural network*.__ The output of the network is computed using __a blackbox differential equation solver__. These __*continuous-depth models*__ have constant memory cost, adapt their evaluation strategy to each input, and can explicitly trade numerical precision for speed. We demonstrate these properties in __*continuous-depth residual networks and continuous-time latent variable models*__. We also construct __*continuous normalizing flows, a generative model that can train by maximum likelihood*__, without partitioning or ordering the data dimensions. For training, we show how to scalably backpropagate through any ODE solver, without access to its internal operations. This allows end-to-end training of ODEs within larger models.

__（ 論文２のAbstract ）__

__（ 以下の太字斜線部分は本記事執筆者によるもの ）__

> __Abstract__
>
> Reversible generative models map points from a simple distribution to a complex distribution through an easily invertible neural network. Likelihood-based training of these models requires restricting their architectures to allow cheap computation of Jacobian determinants. __Alternatively, *the Jacobian trace* can be used *if the transformation is specified by an ordinary differential equation*.__ In this paper, we use Hutchinson’s trace estimator to give a scalable unbiased estimate of the logdensity. The result is a continuous-time invertible generative model with unbiased density estimation and one-pass sampling, while allowing unrestricted neural network architectures. We demonstrate our approach on high-dimensional density estimation, image generation, and variational inference, improving the state-ofthe-art among exact likelihood methods with efficient sampling.

なお、__論文（１）__については、以下の解説記事が参考になります。

- [@konatsuさん 「超深層学習と微分方程式(5/20更新)」](https://qiita.com/konatsu/items/a016dbe136be9b626fff)

> [1]によると、超深層学習の設計は微分方程式の数値計算技法で書き表せるらしく、具体例としては
>
> ResNetなど　$x_{t}=F(t,x)$ オイラー法
> PolyNet $x_{t}=F(t,x)$ 後退オイラー法
> FractalNet $x_{t}=F(t,x)$ 2次ルンゲクッタ法
> RevNet $x_{t}=F_{1}(t,y),y_{t}=F_{2}(t,x))$ オイラー法(連立常微分方程式)
>
>　応用数学では大体いつもそうですが、この「数学的に既存手法を書けた」という状況で次に考えるべきなのは「じゃあ別の数学技術>（ここでは微分方程式の数値解析技術）を使えばもっと良くなるんじゃないだろうか」という王道パターン。実際、[1]の著者は線形多>段法を用いてLM-ResNetという名の深層ニューラルネットの設計をし、高速化に成功しています。
>　ここまで扱ってきたのは決定論的な超深層学習です。もしここに確率要素を加えると、必然これは確率微分方程式の数値解析技術>と繋がってきます。

- [日経XTech 「連続ダイナミクスを表現可能なニューラルネットワーク」](https://xtech.nikkei.com/atcl/nxt/mag/rob/18/00007/00014/)
- [2019年01月14日 「ニューラル常微分方程式の詳細と解説」](http://blog.livedoor.jp/tak_tak0/archives/52406901.html)

> 既存のDeepニューラルネットワークは、内部状態を層によって離散的に分割していましたが、提案手法では、層を連続的な物として扱います。　
精度の向上と、メモリ使用量を一定化させる事が出来ました。
>
> RNNやResidual Networksなどでは、状態を保持したり、差分を学習したりしますが
> $h_{t} +1 = h_{t} + f(h_{t})$
>このtを時間ステップと見なして、 +1 時間幅の極限を取る事がアイデアの中核です。
>
> $\frac{dh(t)}{d_{t}} = f(h(t), t)$
>
>これは解が関数、関数h(t)であるので、常微分方程式と呼ばれます。
> この方程式を解く事で、隠れ層の状態を得ます。

##独立成分分析（ICA）との比較

すでに引用済みの次のスライドは、Flow系モデルがとるアプローチを「独立成分分析」（ICA）と比較する視点を提示しています。

- [（speakerdeck）Hirokazu Kameoka, 「 深層生成モデルによるメディア生成」筑波大学 社会工学ファシリテーター育成プログラム「メディア生成AI」講義資料（修正版）](https://speakerdeck.com/kame_hirokazu/shen-ceng-sheng-cheng-moderuniyorumedeiasheng-cheng?slide=69)

「独立成分分析」は、観測（音声採取）した「複数の人物の声が重なりあった音声データ」から、各人物の声をばらして、取り出す音声解析手法です。この手法は、各人物の肉声の音声波形データは、互いに独立であるという仮定をおきます。

![スクリーンショット 2021-01-16 20.13.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/791d5b28-ed56-924e-1322-343a32889776.png)

以下に示されているように、観測データ（ベクトル）」$X$に、__「可逆な線形変換行列$W$」を適用（作用）させることで__、各人の肉声波形ベクトルが並んだデータを導出します。

__入力データに対して、「可逆な」「変換行列」を適用（作用）させる部分が、Flowベース生成モデルがとるアプローチと同じです。__
__また、$I$個の源信号$s$の確率分布の形は「ある形」であるという仮定を置いた上で、観測データ$x$の対数尤度が最大になるときの線形変換行列$W$を求める部分も、対象データが得られる対数尤度を最大化するようなデータ変換関数を推定するFlow系ベースモデルのアプローチと、同じです。__

![スクリーンショット 2021-01-16 20.10.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/06e7c39c-249d-d275-ae3b-3d9e5a23bd91.png)

最終的に得ることを目指す「各人の肉声波形ベクトルが並んだデータ」は、次のスライドの中で、$I$人の肉声波形データが互いに独立に、観測時間ステップ$[1, T]$だけ並んだ$y$です。

- [澤田 宏 「部分空間法研究会 2010【チュートリアル】 独立成分分析入門 ～音の分離を題材として～ [2010年7月26日]  NTT コミュニケーション科学基礎研究所](http://www.kecl.ntt.co.jp/icl/ls/members/sawada/mypaper/subspace2010rev.pdf)

![スクリーンショット 2021-01-16 20.11.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/6aa02283-4657-9e00-e486-d830e69b3353.png)

![スクリーンショット 2021-01-16 20.11.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/1a1e2bb3-346f-6ae6-6436-0847d0841b30.png)

![スクリーンショット 2021-01-16 20.11.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/8f0c87ee-d86f-d322-1171-c385fa18dacb.png)

##発展思考

[Dinh 14]の*CONCLUSION*の第２パラグラフには、次の文が掲げられています。

> Note that the architecture of our model could be trained using other inductive principles capable of exploiting its advantages, like toroidal subspace analysis (TSA) (Cohen and Weiling, 2014).

[Dinh 14]と同じ年に提出された[Cohen +2014]論文を早速引用しているのが目を引きます。

- [Taco Cohen & Max Welling, Learning the Irreducible Representations of Commutative Lie Groups, JMLR 2014](https://arxiv.org/pdf/1402.4437.pdf)

Flowベース生成モデルの学習フレームワークには、TSAの他にさらにどのようなものがあるのでしょうか。

そして、それぞれのフレームワークの強みと弱みは、なんでしょうか。
この辺りは、別の記事を立てて論じてみたいと思います。

##応用研究

Flowベース生成モデルを実世界のタスクの解決に適用した研究論文は、すでに多く発表されています。
例えば、次の研究があります、

- [Kaushalya Madhawa et.al., GraphNVP: An Invertible Flow Model for Generating Molecular Graphs](https://arxiv.org/pdf/1905.11600.pdf)

![スクリーンショット 2021-01-14 22.13.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/8c3739c4-7653-a238-90d4-f1e2a96e05fe.png)

![スクリーンショット 2021-01-14 22.14.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/4490e8a8-9589-2586-beba-3623a8e5697c.png)

![スクリーンショット 2021-01-14 22.14.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/8ac85919-a724-931c-9c77-c96ba26a165c.png)


##（ 参考 ）
- [（slideshare） Shunsuke NAKATSUKA 「Up to GLOW」](https://www.slideshare.net/ShunsukeNAKATSUKA1/up-to-glow)
- [Flow-based Deep Generative Models](https://lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html)
- [（slideshare）Masahiro Suzuki, [DL輪読会]Flow-based Deep Generative Models](https://www.slideshare.net/DeepLearningJP2016/dlflowbased-deep-generative-models)
- [NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION #10](https://github.com/Yagami360/MachineLearning-Papers_Survey/issues/10)
- [My_NoteBook/情報工学/情報工学_機械学習_生成モデル.md](https://github.com/Yagami360/My_NoteBook/blob/master/%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6/%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6_%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92_%E7%94%9F%E6%88%90%E3%83%A2%E3%83%87%E3%83%AB.md#%E3%83%95%E3%83%AD%E3%83%BC%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E7%94%9F%E6%88%90%E3%83%A2%E3%83%87%E3%83%AB)
- [NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATIONを読んだのでメモ](http://peluigi.hatenablog.com/entry/2018/07/12/175428)
- [Lilian Weng. "Flow-based Deep Generative Models." 2018.](https://lilianweng.github.io/lil-log/2018/10/13/flow-based-deep-generative-models.html)
- [Ivan Kobyzev et al. "Normalizing Flows: Introduction and Ideas." 2019.](https://arxiv.org/abs/1908.09257)
- [日経XTECH 岡野原 大輔 「Energy-Based Model：ノイズを復元して生成モデルを学習する」](https://xtech.nikkei.com/atcl/nxt/mag/rob/18/00007/00031/)
- [SRFlow: 正規化フローによる超解像空間の学習](https://arxiv-check-250201.firebaseapp.com/each/2006.14200v2)
- [日経XTECH 岡野原 大輔 《日経Robo》「Glow：可逆な生成モデル、GANより安定的に学習できる尤度ベースの手法」](https://xtech.nikkei.com/atcl/nxt/mag/rob/18/00007/00005/)
- [GANの使用をやめた理由— ECCV 2020 GAN — vs —フローの正規化](https://ichi.pro/gan-no-shiyo-o-yameta-riyu-eccv-2020-14478886108701)
- [2019-10-28 ニューラルネットワークを用いた近年の変分推論２](https://www.hellocybernetics.tech/entry/2019/10/28/002132)

####（ ヤコビアンに関する参考記事 ）

__（ 座標変換とヤコビアン ）__

物理学では、座標系を直交座標から極座標に座標変換するときに、ある点の座標値（ベクトル）を座標変換の前後で数値変換する場面で登場します。ヤコビアンについては、Qiitaでは__[@bellbindさんの記事 「高校数学からヤコビアンに至るまで」](https://qiita.com/bellbind/items/bd0411957e2363456ea1)__があります。

__（ ヤコビアンを用いた「確率変数」の変数変換 ）__

- [ヤコビアンを使って確率変数の変数変換を行う方法【ガンマ分布とベータ分布】](https://mi-chan-nel.com/variable-transformation/)
- [ヤコビアンを使った変数変換法（応用編）](http://lef-t.blogspot.com/2013/01/blog-post_4277.html)
- [確率変数の変数変換とヤコビアンに慣れる](https://statmodeling.hatenablog.com/entry/transformation-random-variables-Jacobian)

ヤコビアンは、多変数関数の微分（全微分・偏微分）と積分（重積分）演算の中で、特定の変数を別の変数に置き換える「変数変換」でも登場します。そのため、ヤコビアンは、統計数理モデルや（深層学習を含む）機械学習の中でも、頻繁に登場します。

__（ 多変数関数の微分・積分演算における変数変換 ）__

- [メディカルAI専門コース オンライン講義資料 「1. 機械学習に必要な数学の基礎」](https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/01_Basic_Math_for_ML.html) 

> また，今回は多入力単出力関数の微分として勾配まで紹介しましたが，多入力多出力関数の微分であるヤコビ行列（ヤコビアン）もニューラルネットワークの誤差逆伝播法を理解するために必要となります．さらに詳しく知りたい方は，例えば[The Matrix Calculus You Need For Deep Learning](https://arxiv.org/pdf/1802.01528.pdf)などを参考にしてみてください．

__【 重積分における変数変換 】__
以下のWebページでは、__「ウェッジ積」（外積代数）を用いた$式（28）$の最後の式変形において、「積分演算における変数変換」が、なぜ「行列式」（*determinent*）が登場する数式形を導くのか__が、陽に示されています。

- [ヤコビアンの定義と意味; ２重積分の極座標変換（変数変換）の例題](https://k-san.link/jacobian-def/)

> ヤコビアンは多変数関数の積分（多重積分）の変数変換で現れます。2次元直交座標系から極座標系への変換を例示します。

__（ $式（28）$の部分を転載します ）__

__$式（28）$の最後の式変形の箇所で、行列式が導出されます。__

__引用開始__

![スクリーンショット 2021-01-15 23.18.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/66786b1d-b642-c734-f643-289afb94074b.png)
![スクリーンショット 2021-01-15 23.19.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/655d6e78-f89c-6656-9a4e-ae44816a230e.png)
![スクリーンショット 2021-01-15 23.19.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/862466/2b5f4571-4d1d-bcaf-9095-689f31460cbf.png)

__引用終了__

なお、「ウェッジ積」（外積代数）や「テンソル積」（テンソル代数）などの代数系の関係については、[「物理のかぎしっぽ」](http://hooktail.sub.jp/index.html)や文献[『幾何学と代数系 Geometric Algebra -ハミルトン,グラスマン,クリフォード』](https://www.amazon.co.jp/%E5%B9%BE%E4%BD%95%E5%AD%A6%E3%81%A8%E4%BB%A3%E6%95%B0%E7%B3%BB-Geometric-Algebra-%E3%83%8F%E3%83%9F%E3%83%AB%E3%83%88%E3%83%B3-%E3%82%AF%E3%83%AA%E3%83%95%E3%82%A9%E3%83%BC%E3%83%89/dp/4627077416/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E5%B9%BE%E4%BD%95%E5%AD%A6%E3%81%A8%E4%BB%A3%E6%95%B0%E7%B3%BB+Geometric+Algebra+-%E3%83%8F%E3%83%9F%E3%83%AB%E3%83%88%E3%83%B3%2C%E3%82%B0%E3%83%A9%E3%82%B9%E3%83%9E%E3%83%B3%2C%E3%82%AF%E3%83%AA%E3%83%95%E3%82%A9%E3%83%BC%E3%83%89&qid=1610720718&sr=8-1)を参照ください。

- [物理のかぎしっぽ 「外積代数」](http://hooktail.sub.jp/differentialforms/ExteriorAlgebra/)
- [物理のかぎしっぽ 「テンソル代数」](http://hooktail.sub.jp/vectoranalysis/TensorAlgebra/)

__【 偏微分における変数変換 】__
- [【微積分】ヤコビ行列とヤコビアン①～導入と例題～](https://pictblog.com/jacobi-1)

> 多変数関数の微積分において、変数変換は最も頻繁に用いられるテクニックと言ってよい。
>変数変換された多変数関数を変換後の変数で微積分する際に活躍するのが、ヤコビ行列とヤコビアンである。本記事ではヤコビ行列とヤコビアンを導入し、これらを利用した簡単な例題を紹介する。