正規化フロー:可逆変換と厳密尤度
近似に頼らず生成モデルの尤度を厳密に計算したい。可逆写像とヤコビアン行列式で変数変換し、log 尤度を正確に最適化する仕組みと、設計上の制約まで腑に落ちます。
- 1.単純な分布 p(z) のサンプルを可逆変換 x=f(z) に通すと、変数変換公式により log p(x) = log p(z) − log|det J| で尤度を厳密に計算できる。VAE の下界や GAN の暗黙分布と違い、近似なしで対数尤度そのものを最適化できる。
- 2.鍵はヤコビアン行列式 det J を安く計算できる変換を設計すること。RealNVP のカップリング層は入力を2分割し片方を恒等写像にすることで J を三角行列にし、det を対角成分の積へ落とす。自己回帰フローも同じく三角構造を使う。
- 3.厳密尤度と引き換えに、潜在 z と観測 x の次元が一致し変換が全単射という強い制約を負う。表現力は層を重ねて稼ぐが、拡散モデルのような次元削減や暗黙の自由度は持てない。
問題設定:尤度を「近似せず」最適化したい
生成モデルの理想は、データ分布 p(x) を学習し、新しいサンプルを生成しつつ、各点の確率密度 p(x) を正確に評価できることです。ところが主要な生成モデルは、この尤度の扱いで妥協しています。VAE は周辺尤度 p(x) の積分が解けず、下界 ELBO で代用します。GAN はそもそも密度を陽に持たず、判別器との敵対だけで学習する暗黙モデルです。
正規化フロー(normalizing flow)は別の道を取ります。単純な基底分布(標準正規分布 N(0, I) など)から引いたサンプル z を、学習可能な可逆変換 x = f(z) に通して複雑な p(x) を作ります。このとき後述の変数変換公式により、log p(x) を厳密に・解析的に計算できます。下界でも近似でもなく、対数尤度そのものを 最尤推定 で直接最大化できる——これがフローの核心的な強みです。
z ~ p_Z(z)(単純な基底分布, 例: N(0,I))
x = f(z) 生成(サンプリング方向)
z = f⁻¹(x) 推論(尤度評価方向)
f が全単射(可逆)であることが決定的に重要です。生成は f を順方向に、尤度評価は逆方向 f⁻¹ に走らせる——同じ1つの関数を両向きに使い回せるからこそ、尤度が閉じた式で書けます。
変数変換公式:ヤコビアン行列式が密度を補正する
なぜ可逆変換だと尤度が計算できるのか。出発点は確率の**変数変換公式(change of variables)**です。1次元で直感を掴むと、z を x = f(z) に写したとき、確率は保存される(全確率は 1 のまま)ので、密度は局所的な伸び縮みの分だけ補正されます。
p_X(x) = p_Z(z) · |dz/dx| 1次元
f がある区間を引き伸ばせば、そこの確率は薄く広がり密度は下がる。縮めれば濃くなる。この伸縮率が微分 dz/dx です。多次元ではこの伸縮率がヤコビアン行列 J = ∂f⁻¹(x)/∂x の行列式の絶対値 |det J| に置き換わります。行列式は、変換が微小体積要素をどれだけ拡大・縮小するかを表す量だからです。
p_X(x) = p_Z(f⁻¹(x)) · |det( ∂f⁻¹(x)/∂x )|
対数を取れば、学習で使う形になります。
log p_X(x) = log p_Z(z) + log|det( ∂f⁻¹(x)/∂x )|, z = f⁻¹(x)
右辺第1項 log p_Z(z) は、基底分布を N(0, I) に選べば −(1/2)·zᵀz − 定数 という閉じた式です。つまり厄介なのは第2項のヤコビアン行列式だけ。フロー設計のほぼ全努力は「det J を安く正確に計算できる可逆変換をどう作るか」に注がれます。
層を重ねるときも話は単純です。f = f_K ∘ … ∘ f_1 と合成すると、可逆性は合成で保たれ、行列式は積の対数(=対数の和)に分解されます。
log p_X(x) = log p_Z(z_0) + Σ_{k=1..K} log|det( ∂z_{k-1}/∂z_k )|
各層の log|det| を足すだけ。だから「変換を多段に積めば積むほど表現力が上がる」のに、尤度計算は層ごとの和で素直に伸びます。名前の「正規化(normalizing)」は、データを順に変換して最終的に正規分布(正規化された基底分布)へ整える流れ(flow)を指します。
計算量の壁:なぜ素朴な変換では破綻するか
理論は綺麗ですが、実装には2つの計算量の壁があります。
第一に、一般の D×D ヤコビアン行列式の計算は O(D³) かかります。画像のように D が数万〜数十万のデータでは、層ごとにこれを回すのは非現実的です。第二に、可逆ニューラルネット f を任意に作っても、その逆写像 f⁻¹ を解析的に書ける保証はありません。逆が数値求解になると、生成か尤度評価のどちらかが極端に重くなります。
フローの変換 f は、(1) 可逆であり逆 f⁻¹ が安く求まる、(2) ヤコビアン行列式 det J が安く求まる、(3) それでいて表現力がある、の3条件を同時に満たさねばなりません。普通のニューラル層はこのどれも保証しないので、専用の構造を設計する必要があります。鍵は次節のヤコビアンを三角行列にする工夫です。
突破口は線形代数の事実です。ヤコビアンが三角行列なら、その行列式は対角成分の積で済み、計算は O(D) に落ちます。フローの主要な設計はすべて、この「ヤコビアンを三角構造にする」一点に収束します。
カップリング層(RealNVP):恒等写像で三角化する
RealNVP のカップリング層は、ヤコビアンを三角化する最も明快な方法です。入力ベクトル x を2つに分割します(例 x = [x_a, x_b])。前半 x_a はそのまま通し(恒等写像)、後半 x_b だけを x_a に条件づけたアフィン変換で動かします。
y_a = x_a 前半は恒等
y_b = x_b ⊙ exp(s(x_a)) + t(x_a) 後半をアフィン変換
s(スケール)と t(シフト)は任意のニューラルネットで、入力は x_a だけです。逆変換も四則演算で即座に書けます。
x_a = y_a
x_b = (y_b − t(y_a)) ⊙ exp(−s(y_a)) 引いて割るだけ
ここが巧妙な点です。s と t がどれだけ複雑なネットでも、それらは y_a(= x_a)だけに依存するので、逆を求めるときに s・t を逆向きに解く必要がない。ネット本体は非線形で表現力豊か、しかし逆変換は単純な代数演算で済みます。
ヤコビアンを書くと、∂y_a/∂x_b = 0(前半は x_b に依存しない)なので下三角行列になります。
J = | I 0 |
| ∂y_b/∂x_a diag(exp(s)) |
行列式は対角成分の積、すなわち det J = Π exp(s_i) = exp(Σ s_i)。log|det J| = Σ s(x_a)_i という、スケールネット出力の総和そのものです。三角化のおかげで O(D) で厳密に求まります。
1層だと前半 x_a は固定されたまま。そこで層ごとにマスク(どちらを恒等にするか)を反転し、x_a と x_b の役割を交互に入れ替えます。チェッカーボード状やチャネル単位のマスクを交互に積むことで、数層で全次元が互いを変換し合い、複雑な依存関係を表現できます。これが RealNVP が深さで表現力を稼ぐ仕組みです。
自己回帰フロー:三角性を別の角度から得る
ヤコビアンを三角にするもう一つの定石が自己回帰(autoregressive)構造です。各次元 x_i を、それより前の次元 x_{<i} だけに条件づけて変換します。
x_i = z_i · σ_i(x_{<i}) + μ_i(x_{<i}) i 番目は i 未満にだけ依存
x_i が z_{>i} に依存しないため、∂x_i/∂z_j(j が i より大)は 0 となり、ヤコビアンは再び三角行列になります。行列式は対角の積で O(D)。この族は、変換方向と評価方向で計算特性が真逆になるのが特徴です。
| 観点 | カップリング層 (RealNVP) | 自己回帰フロー (MAF/IAF) |
|---|---|---|
| 三角化の仕組み | 入力を2分割し片方を恒等写像にする | 次元 i を i 未満にだけ条件づける |
| 順・逆の対称性 | 順方向・逆方向とも 1 パスで並列計算可 | 片方向は逐次(D 回)でしか解けない |
| 得意な用途 | 生成・尤度評価のどちらも高速で実用的 | MAF は密度評価が速く IAF はサンプリングが速い |
| ヤコビアン | 下三角・det は exp(Σs) | 下三角・det は対角の積 |
自己回帰フローは表現力が高い一方、逐次依存のため片方向が D 回のループになり、高次元では遅くなります。MAF(Masked Autoregressive Flow)は尤度評価が並列で速く学習向き、IAF(Inverse Autoregressive Flow)はサンプリングが並列で速く生成向き、と役割が分かれます。カップリング層は両方向を1パスで回せる折衷案で、実用上扱いやすいため広く使われます。
位置づけと制約:厳密さの代償
正規化フローの長所は、対数尤度の厳密計算と、安定した最尤学習、そして高速な密度評価です。GAN のモード崩壊や訓練不安定、VAE の下界ギャップといった問題から自由で、異常検知のように「この点の密度はいくつか」を正確に知りたい用途と特に相性が良い設計です。
代償もはっきりしています。可逆=全単射という要請から、潜在 z と観測 x の次元は必ず一致します。VAE のように低次元へ圧縮することはできず、高次元データではメモリと計算が嵩みます。さらに各層が可逆でなければならない制約は、自由なアーキテクチャ設計を縛ります。表現力は層を深く積んで稼ぐしかなく、1層あたりの変換が単純な分、層数が必要です。
フローは log 尤度を厳密に最大化しますが、高い尤度と人間が見て良いサンプルは一致しないことが知られています。高次元では、訓練データと無関係な領域に高密度が割り当てられる現象(OOD データにかえって高い尤度を与えるなど)も報告されています。厳密尤度は強力な道具ですが、生成品質の十分条件ではない点に注意が必要です。
この制約を別の形で解いたのが、後続の連続時間モデルです。離散層の積み重ねを常微分方程式に置き換えた連続正規化フローは、ヤコビアンの跡(trace)推定で det 計算を回避します。さらに発想を推し進めると、可逆変換でデータを徐々にノイズへ崩す過程は、スコアベースモデル や 拡散モデルの数理 と同じ「データと単純分布を結ぶ変換」という枠組みに繋がります。正規化フローは、厳密尤度という最も原理的な立脚点から生成モデルを捉え直す出発点として、今も理論的な基準点であり続けています。
AI/機械学習 Article
正規化フロー:可逆変換と厳密尤度を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
正規化フロー
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
鍵はヤコビアン行列式 det J を安く計算できる変換を設計すること。RealNVP のカップリング層は入力を2分割し片方を恒等写像にすることで J を三角行列にし、det を対角成分の積へ落とす。自己回帰フローも同じく三角構造を使う。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「正規化フロー / 生成AI」に近いか確認する。
- 強みである「単純な分布 p(z) のサンプルを可逆変換 x=f(z) に通すと、変数変換公式により log p(x) = log p(z) − log|det J| で尤度を厳密に計算できる。VAE の下界や GAN の暗黙分布と違い、近似なしで対数尤度そのものを最適化できる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。