フローベース生成モデル

フローベース生成モデル（フローベースせいせいモデル、英：Flow-based generative model）は、機械学習で使われる生成モデルの一つである。確率分布の変数変換則を用いた手法である正規化流 (英：normalizing flow)を活用し確率分布を明示的にモデル化することで、単純な確率分布を複雑な確率分布に変換する。 尤度関数を直接的にモデリングすることには多くの利点がある。例えば、負の対数尤度を損失関数として直接計算して最小化することができる。また、変換前の分布からサンプリングし、フローによる変換を適用することにより、複雑な分布に基づいた新しいサンプルを生成することができる。 これとは対照的に、変分オートエンコーダ（VAE）や生成的敵対的ネットワークなどの多くの代替生成モデリング手法は、尤度関数を明示的に表現しない。 z 0 {\displaystyle z_{0}} を確率分布 p 0 ( z 0 ) {\displaystyle p_{0}(z_{0})} に従う（一変数または多変数の）確率変数であるとする。 i = 1 , . . . , K {\displaystyle i=1,...,K} について、 z i = f i ( z i − 1 ) {\displaystyle z_{i}=f_{i}(z_{i-1})} を z 0 {\displaystyle z_{0}} から変換された確率変数の列であるとする。ここで関数 f 1 , . . . , f K {\displaystyle f_{1},...,f_{K}} は逆変換可能である必要がある：すなわち、逆関数 f i − 1 {\displaystyle f_{i}^{-1}} が存在する。最終的な出力 z K {\displaystyle z_{K}} はモデル化したい分布を表す。 ここで、 z K {\displaystyle z_{K}} の対数尤度は以下の様に表される（対数尤度の導出参照）： log ⁡ p K ( z K ) = log ⁡ p 0 ( z 0 ) − ∑ i = 1 K log ⁡ | det d f i ( z i − 1 ) d z i − 1 | {\displaystyle \log p_{K}(z_{K})=\log p_{0}(z_{0})-\sum _{i=1}^{K}\log \left|\det {\frac {df_{i}(z_{i-1})}{dz_{i-1}}}\right|} 対数尤度を効率的に計算するためには、関数 f 1 , . . . , f K {\displaystyle f_{1},...,f_{K}} は次の性質を満たす必要がある： 逆変換が容易である。 ヤコビ行列式を計算しやすい。 実際には、関数 f 1 , . . . , f K {\displaystyle f_{1},...,f_{K}} はディープニューラルネットワークを使用してモデル化され、対象となる分布からのデータサンプルの負の対数尤度を最小化するように訓練される。これらの手法は通常、逆行列式とヤコビ行列式の両方の計算でニューラルネットワークの順方向演算のみが必要になるように設計される。このような手法の例として、NICE、 RealNVP 、およびGlowがある。 変数 z 1 {\displaystyle z_{1}} 及び z 0 {\displaystyle z_{0}} について、 z 0 = f 1 − 1 ( z 1 ) {\displaystyle z_{0}=f_{1}^{-1}(z_{1})} であるとする。 確率密度の変数変換公式より、 z 1 {\displaystyle z_{1}} の従う確率分布は以下のように書ける： p 1 ( z 1 ) = p 0 ( z 0 ) | det d f 1 − 1 ( z 1 ) d z 1 | {\displaystyle p_{1}(z_{1})=p_{0}(z_{0})\left|\det {\frac {df_{1}^{-1}(z_{1})}{dz_{1}}}\right|} ここで、 det d f 1 − 1 ( z 1 ) d z 1 {\displaystyle \det {\frac {df_{1}^{-1}(z_{1})}{dz_{1}}}} は f 1 − 1 {\displaystyle f_{1}^{-1}} のヤコビ行列の行列式である。 逆関数定理により p 1 ( z 1 ) = p 0 ( z 0 ) | det ( d f 1 ( z 0 ) d z 0 ) − 1 | {\displaystyle p_{1}(z_{1})=p_{0}(z_{0})\left|\det \left({\frac {df_{1}(z_{0})}{dz_{0}}}\right)^{-1}\right|} 恒等式 det ( A − 1 ) = det ( A ) − 1 {\displaystyle \det(A^{-1})=\det(A)^{-1}} により（ A {\displaystyle A} は正則行列）、次が導ける： p 1 ( z 1 ) = p 0 ( z 0 ) | det d f 1 ( z 0 ) d z 0 | − 1 {\displaystyle p_{1}(z_{1})=p_{0}(z_{0})\left|\det {\frac {df_{1}(z_{0})}{dz_{0}}}\right|^{-1}} したがって、対数尤度は次のようになる。 log ⁡ p 1 ( z 1 ) = log ⁡ p 0 ( z 0 ) − log ⁡ | det d f 1 ( z 0 ) d z 0 | {\displaystyle \log p_{1}(z_{1})=\log p_{0}(z_{0})-\log \left|\det {\frac {df_{1}(z_{0})}{dz_{0}}}\right|} 一般に、上記の式は全ての z i {\displaystyle z_{i}} 及び z i − 1 {\displaystyle z_{i-1}} に適用される 。 log ⁡ p i ( z i ) {\displaystyle \log p_{i}(z_{i})} は log ⁡ p i − 1 ( z i − 1 ) {\displaystyle \log p_{i-1}(z_{i-1})} から非再帰的な項を引いたものに等しいので、数学的帰納法より以下が示せる。 log ⁡ p K ( z K ) = log ⁡ p 0 ( z 0 ) − ∑ i = 1 K log ⁡ | det d f i ( z i − 1 ) d z i − 1 | {\displaystyle \log p_{K}(z_{K})=\log p_{0}(z_{0})-\sum _{i=1}^{K}\log \left|\det {\frac {df_{i}(z_{i-1})}{dz_{i-1}}}\right|} 関数の合成によってフローを構築する代わりに、別のアプローチとして、フローを連続時間ダイナミクスとして定式化することができる。 z 0 {\displaystyle z_{0}} を分布 p ( z 0 ) {\displaystyle p(z_{0})} を持つ潜在変数であるとする。以下のフロー関数を使用して、この潜在変数をデータ空間に写す。 x = F ( z 0 ) = z T = z 0 + ∫ 0 t f ( z t , t ) d t {\displaystyle x=F(z_{0})=z_{T}=z_{0}+\int _{0}^{t}f(z_{t},t)dt} ここで f {\displaystyle f} は任意の関数であり、ニューラルネットワークなどでモデル化できるとする。 その場合、逆関数は次のようになる。 z 0 = F − 1 ( x ) = z T + ∫ t 0 − f ( z t , t ) d t {\displaystyle z_{0}=F^{-1}(x)=z_{T}+\int _{t}^{0}-f(z_{t},t)dt} このとき x {\displaystyle x} の対数尤度は以下で与えられる： log ⁡ ( p ( x ) ) = log ⁡ ( p ( z 0 ) ) − ∫ 0 t Tr [ ∂ f ∂ z t d t ] {\displaystyle \log(p(x))=\log(p(z_{0}))-\int _{0}^{t}{\text{Tr}}\left[{\frac {\partial f}{\partial z_{t}}}dt\right]} 実用上では Neural ODE などの数値積分手法が必要になる場合がある。 フローベース生成モデルは、次のようなさまざまなモデリングタスクに適用されている。 音声合成 画像生成 分子グラフ生成 点群モデリング 動画生成