GANF:ベイジアンネットで同時密度を分解する正規化フロー異常検知

ラベルなしで多変量時系列の異常を見つけたい ―― この問題に「密度推定」で答える系譜がある。正常データの確率密度 $p(x)$ を学び、低密度の点を異常とする発想だ。だが多変量時系列には固有の難しさがある。変量(系列)が何十・何百もあり、しかもそれらが互いに依存している。この高次元の同時密度を、どうやって精密かつ解釈可能に推定するか。

ここに ベイジアンネットワーク(DAG)による因数分解 を持ち込んだのが GANF(Dai & Chen, “Graph-Augmented Normalizing Flows for Anomaly Detection of Multiple Time Series,” ICLR 2022)である。GANF は変量間の条件付き依存関係を有向非巡回グラフ(DAG)として学習し、同時密度を「各変量を親で条件付けた確率」の積に分解する。そして、グラフで条件付けた正規化フローで各条件付き密度を推定する。これは、本シリーズで先に扱った MTGFlow直接の先行手法 であり、MTGFlow が「固定的なグラフを前提とする」と対比した相手でもある。

本記事は論文(ICLR 2022)の方法論を一次情報から読み込み、ベイジアンネット因数分解・dependency encoder・条件付きフロー・NOTEARS制約による同時学習までを数式で深掘りする。なぜこれを学ぶのか ―― グラフ構造を密度推定に組み込むことが、なぜ異常検知の精度と解釈性を同時に高めるのかを、原理から掴むためだ。正規化フローの基礎は別記事を参照してほしい。

GANFの概念:多変量の同時密度をDAGで条件付き確率の積に分解して密度推定

出発点は密度推定だ。正常データは高密度に集中し、異常は低密度に現れる。だから $p(X)$ を学べばラベルなしで異常を判定できる。問題は「多変量の複雑な同時密度をどう扱うか」。GANF の答えが、変量間の関係を DAG として学習し、同時密度を分解することだ。

ベイジアンネットによる同時密度の因数分解

GANF の数学的な背骨は、ベイジアンネットワークによる因数分解だ。変量 $(X_1, \dots, X_n)$ の依存関係を有向非巡回グラフ(DAG)で表すと、同時密度は各変量を その親で条件付けた確率の積 に書ける。

ベイジアンネットによる因数分解 p(X)=Π p(Xi|pa(Xi))

$$ \begin{equation} p(X_1, \dots, X_n) = \prod_{i=1}^{n} p\!\left(X_i \mid \mathrm{pa}(X_i)\right) \end{equation} $$

ここで $\mathrm{pa}(X_i) = \{X_j : A_{ij} \neq 0\}$ は変量 $X_i$ の親集合で、$A$ は DAG の重み付き隣接行列だ。ベイジアンネットは「各ノードは親を与えると非子孫と条件付き独立」という構造を表す。この因数分解の威力は2つある。ひとつは、高次元の同時密度を 扱いやすい条件付き密度の積 に落とせること。もうひとつは、学習された DAG が変量間の条件付き依存を表すので、データ分布の解釈 が得られることだ(どの変量がどの変量に依存するか)。

GANF は競合手法 GDN(グラフ+構造学習)とここで差別化する。GDN が学習するグラフは単なる関係グラフだが、GANF のグラフは ベイジアンネット なので密度推定が可能になり、条件付き依存というより明確な意味を持つ。次の課題は「条件付き密度 $p(X_i \mid \mathrm{pa}(X_i))$ をどうパラメータ化するか」だ。

dependency encoder ― 親の情報を固定長に要約する

条件付き密度の条件部分 $\mathrm{pa}(X_i)$ と過去履歴 $x^i_{1:t-1}$ は、サイズが固定でない(親の数も履歴の長さも可変)。そのままではニューラルネットの入力にできない。GANF は graph-based dependency encoder で、この条件情報を固定長ベクトル $d^i_t$ に要約する。

dependency encoder:RNNで履歴を要約しグラフ畳み込みで親の情報を集約

まず RNN で各変量の履歴を固定長の隠れ状態にまとめる。

$$ \begin{equation} h^i_t = \mathrm{RNN}(x^i_t, h^i_{t-1}) \end{equation} $$

RNN のパラメータは 全ノードで共有 する ―― 過学習を防ぎ、計算コストを抑えるためだ。次に、グラフ畳み込みで親の隠れ状態を集約する。

$$ \begin{equation} D_t = \mathrm{ReLU}(A H_t W_1 + H_{t-1} W_2)\, W_3 \end{equation} $$

$A H_t W_1$ が「隣接行列 $A$ に従って親ノードの隠れ状態を集約(空間)」、$H_{t-1} W_2$ が「自分の直前の状態(時間)」だ。隣接行列 $A$ を介して集約することで、$x^i_t$ が 自分自身と親以外には依存しない ことを微分可能な形で保証する。こうして得た依存表現 $d^i_t$ が、条件付きフローの条件になる。

条件付き正規化フローと対数密度

各変量の条件付き密度 $p(x^i_t \mid d^i_t)$ を、依存表現 $d^i_t$ で条件付けた正規化フローで評価する。正規化フローは可逆変換 $f$ でデータを標準分布 $q$(ガウス)へ写像し、変数変換公式で厳密に密度を計算する。因数分解(式1)と組み合わせると、多変量時系列全体の対数密度が得られる。

条件付き正規化フローによる対数密度の計算

$$ \begin{equation} \log p(X) = \sum_{i=1}^{n} \sum_{t=1}^{T} \left[ \log q\!\left(f(x^i_t; d^i_t)\right) + \log\left| \det \nabla_{x^i_t} f(x^i_t; d^i_t) \right| \right] \end{equation} $$

第1項は潜在空間(ガウス)での対数密度、第2項はヤコビアン行列式の対数(体積補正)だ。フローには MAF や RealNVP を使える(論文では MAF が概ね優勢)。条件 $d^i_t$ により、フローは「親と過去を踏まえると、この値はどれくらい起こりやすいか」という 条件付き密度 を計算できる。この「条件付き」であることが、次に見る異常検知の核心になる。

異常スコア ― 低密度と、崩れた変量の特定

異常は低密度に現れるという仮定のもと、GANF は式(4)で計算した 対数密度をそのまま異常スコア(低いほど異常)とする。さらに重要なのは、因数分解のおかげで 個別の変量の条件付き密度 $\log p(X_i \mid \mathrm{pa}(X_i)) = \sum_t \log p(x^i_t \mid d^i_t)$ も得られることだ。全体の低密度が、どの変量の低い条件付き密度から来ているかを辿れば、異常の根本原因となる変量を特定 できる。

この「条件付き密度」であることがなぜ効くのか。条件付き密度の意義を、簡単な実験で確かめてみよう。2つの変量があり、$X_2$ は $X_1$ に強く依存している($X_2 \approx 0.9 X_1$)。ある区間で、$X_2$ を $X_1$ から切り離す(同じ振れ幅のまま、$X_1$ との連動だけを壊す)。値域は正常なままだ。

周辺密度は関係崩壊を見逃すが、条件付き密度は低密度として検出

上段は 周辺密度 $-\log p(X_2)$($X_2$ 単独で見た密度)だ。$X_2$ の値域は正常のままなので、関係が崩れた区間でもスコアはほとんど変わらず、異常を見逃す(実測で異常区間 0.32 ≒ 正常 0.43)。下段は 条件付き密度 $-\log p(X_2 \mid X_1)$ で、$X_1$ を条件に $X_2$ を評価する。すると、$X_1$ から予測される値と実際の $X_2$ が食い違うため、関係崩壊が 低密度(高スコア)として明確に検出 される(異常区間 8.74 ≫ 正常 −0.89)。

これが GANF が DAG で因数分解する意義だ。変量を独立に見る周辺密度では「値は正常だが関係が崩れた異常」を取りこぼすが、親で条件付けた密度ならそれを捉えられる。では、その肝心の DAG をどう学習するのか。

DAG構造とフローの同時学習 ― NOTEARS制約

ベイジアンネットの学習は、本来は超指数的な探索空間を持つ組合せ最適化で、極めて難しい。GANF は NOTEARS(Zheng et al., 2018)の 微分可能な非巡回性制約 を使って、これを連続最適化に変える。

DAG構造とフローの同時学習:NOTEARS制約を拡張ラグランジュ法で解く

最適化問題は、対数密度の最大化(=負の対数尤度の最小化)に、隣接行列 $A$ が非巡回であるという制約を課したものだ。

$$ \begin{equation} \min_{A, \theta}\ \frac{1}{|D|} \sum_{i=1}^{|D|} -\log p(X_i) \quad \text{s.t.}\quad h(A) = \mathrm{tr}(e^{A \circ A}) – n = 0 \end{equation} $$

ここで $h(A) = \mathrm{tr}(e^{A \circ A}) – n$ が NOTEARS の非巡回性制約だ($\circ$ はアダマール積、$e$ は行列指数)。$h(A) = 0$ であることが $A$ の表すグラフが非巡回であることと同値で、しかも微分可能な勾配 $\nabla h(A) = (e^{A \circ A})^\top \circ 2A$ を持つ。この等式制約付き最適化を、GANF は 拡張ラグランジュ法 で解く。

$$ \begin{equation} L_c = L(A, \theta) + \lambda h(A) + \frac{c}{2}|h(A)|^2 \end{equation} $$

ポイントは、隣接行列 $A$(グラフ構造)と $\theta$(dependency encoder + フローのパラメータ)を 同時に学習 することだ。論文のアブレーションでは、$A$ を別途 NOTEARS で先に学習してからフローを学ぶ変種(GANF\T)よりも、同時学習する GANF の方が優れることが示されている ―― グラフとフローが互いに整合するように学ぶのが効く。学習された DAG には、もうひとつ嬉しい使い道がある。

分布ドリフトのDAG進化

GANF が学習する DAG は、データの 分布ドリフト(関係の変化) を可視化する道具にもなる。訓練・検証・テストのデータを時間方向にずらしながら学習すると、DAG の構造が時間とともにどう変わるかを追える。

学習されたDAGの時間進化:エッジの出現・消失が分布ドリフトを可視化

エッジが現れたり消えたりする様子が、変量間の関係(条件付き依存)がどう移ろうかを示す。これは単なる異常スコアを超えた洞察 ―― システムの構造変化そのものを読み取れる。密度推定でラベルなしに異常を検出しつつ、グラフでその背後の関係変化を解釈できる、というのが GANF の二重の価値だ。

評価と位置づけ

論文は2つの電力グリッドデータ(PMU-B 38系列、PMU-C 132系列)、水処理データ SWaT(51系列)、交通データ METR-LA(207系列、ラベルなしで探索的分析のみ)で評価している。ベースラインは DeepSVDD・DROCC・ALOCC・DeepSAD・EncDecAD など。GANF は AUROC で全ベースラインを上回り、特に 低偽陽性率の領域での優位 が顕著だった。

アブレーションも示唆に富む。変量を独立と仮定する変種(GANF\G、$p(X)=\prod p(X_i)$)や、DAG なしの全分解(GANF\D)に対して GANF が大きく上回り、変量間の依存をモデル化することの重要性 が裏づけられた。とりわけ GANF\D(全系列を連結して1本のフローに通す)は、高次元入力がフロー学習を妨げて性能が著しく低い ―― 「DAG で適切に分解する」ことの効果がここに表れている。

GANFとMTGFlowの位置づけ:静的DAG vs 動的グラフ

GANF と MTGFlow の関係を整理しておく。どちらも「正規化フローで密度推定し、低密度を異常とする」点は共通だ。違いはグラフの扱いにある。GANF は ベイジアンネット(DAG) で因数分解し、NOTEARS+拡張ラグランジュで構造を学ぶ ―― グラフは(月単位で再学習すれば追えるが)基本的に準静的で、その分 解釈性(条件付き依存・分布ドリフト) に優れる。MTGFlow は self-attention で 窓ごとに動的なグラフ を学び、entity-aware に各変量を固有分布へ写像する ―― 時間変化する関係への 追従性 に優れる。GANF が静的グラフの解釈を、MTGFlow が動的グラフの追従を、それぞれ強みとする系譜だ。

まとめ

GANF のエッセンスを整理する。

  • ベイジアンネット因数分解:同時密度を $p(X) = \prod_i p(X_i \mid \mathrm{pa}(X_i))$ と分解。高次元密度を扱いやすい条件付き密度の積に落とし、DAG が条件付き依存の解釈を与える。
  • dependency encoder:RNN(共有パラメータ)で履歴を固定長に、グラフ畳み込み $D_t = \mathrm{ReLU}(A H_t W_1 + H_{t-1} W_2) W_3$ で親の情報を集約。条件情報を固定長ベクトル $d^i_t$ に要約する。
  • 条件付きフロー:$\log p(X) = \sum_{i,t} [\log q(f(x^i_t; d^i_t)) + \log|\det \nabla f|]$ で対数密度を計算。条件付きだから「値は正常でも関係が崩れた異常」を捉えられる(デモで周辺密度0.32 vs 条件付き8.74)。
  • 同時学習:NOTEARS の微分可能制約 $h(A) = \mathrm{tr}(e^{A \circ A}) – n = 0$ を拡張ラグランジュ法で課し、DAG とフローを同時最適化。別学習よりも優れる。
  • 二重の価値:低密度で異常を検出し、個別変量の条件付き密度で根本原因を特定。学習 DAG の時間進化で分布ドリフトも可視化。

GANF は、グラフ構造を密度推定に組み込むことで、正規化フロー異常検知に「解釈性」をもたらした。この静的 DAG の系譜が、動的グラフの MTGFlow、さらに MoE で底上げする Graph-MoE へとつながっていく。密度推定(GANF・MTGFlow)・関係の崩壊(SARAD・GCAD)・再構成(USAD)と、異常を測る原理を並べて読むと、多変量時系列異常検知の地図が立体的に見えてくるはずだ。

MTGFlow:正規化フローと動的グラフでラベルゼロの異常検知
GANFの後継。固定DAGの代わりにself-attentionで動的グラフを学ぶ。GANFと読み比べ、静的DAG vs 動的グラフの違いを掴みたい。
DyCAST:因果グラフの時間発展をNeural ODEで学ぶ
GANFが使うNOTEARS制約を、因果構造の連続的な時間発展へ拡張する手法。DAG学習の発展形として。
画像なし
正規化フロー:可逆変換による密度推定
GANFの土台となる正規化フローの基礎。変数変換公式とヤコビアンを詳しく解説。