Graph-MoE:GNN各層を専門家にし、ルーティングで『今のレジーム』を暗黙に選ぶ

大きな病院の救急外来を思い浮かべてほしい。患者が来たとき、1人の医者が全部診るのではなく、症状に応じて最適な専門医チームへ振り分ける ―― 外傷なら外科、胸痛なら循環器、高熱なら感染症科へ。ここで面白いのは、どの専門医を呼んだかという判断そのものが、患者の状態を映している ことだ。「外科と感染症科が同時に呼ばれた」なら「外傷+感染の複合症例」だとわかる。

この発想を多変量時系列の異常検知に持ち込んだのが Graph-MoE(Huang et al., “Graph Mixture of Experts and Memory-augmented Routers for Multivariate Time Series Anomaly Detection,” AAAI 2025)だ。Graph-MoE は GNN(グラフニューラルネット)の各層を「専門家(エキスパート)」として扱い、メモリ拡張ルーター が「今の状態に最適な層の組み合わせ」を選ぶ。そして、そのルーティングパターン自体が 暗黙のレジーム(運転状態)選択 になる。本記事では、階層グラフ MoE・メモリルーター・正規化フロー密度推定という3つの構成要素を、アーキテクチャと決定的なデモで掘り下げる。

なぜこれを学ぶのか。応用先は2つある。ひとつは、運転状態が切り替わる多変量データで「状態に応じて見るべき関係の抽象度を変える」適応的な異常検知の作り方を理解すること。もうひとつは、本シリーズで扱ってきた「文脈・関係ベース」の異常検知に、MoE という適応的計算 の軸を加えることだ。

Graph-MoEの概念:救急外来で症状に応じて専門医を呼び、その選び方が患者の状態を映す

まず直感を固めよう。Graph-MoE の「専門家」は GNN の異なる層に対応する。患者の状態(入力時系列)を見てトリアージ(ルーター)が専門医(層)を選ぶように、ルーターが層を重み付けする。その選び方が状態を映す ―― この核心を、まず GNN の層が何を捉えているかから見ていく。

GNN の階層情報 ― 浅い層は局所、深い層は広域

GNN は層を重ねるごとに、より遠くの変量からの情報を集約する。だから層ごとに捉える関係の抽象度が違う。

GNNの各層が捉える関係:浅い層は直接接続、深い層は広域の間接依存

浅い層は直接つながった変量どうしの 局所的な関係 を捉える。層が深くなると、A→B→C のように間接的に伝播する 広域の依存 まで捉える。ここで Graph-MoE が突くのは、従来の GNN ベース手法が最終層の出力しか使わず、途中の豊かな情報を捨てている という点だ。

これは机上の話ではない。論文は実データ(MTGFlow が学習したグラフ)を観察し、ノードが平均何個の近傍とつながるかを数えている。

実データのグラフ構造。各ノードが時系列の1変量(エンティティ)に対応し、エッジが学習された変量間依存を表す

出典: Huang et al., “Graph Mixture of Experts and Memory-augmented Routers for Multivariate Time Series Anomaly Detection,” AAAI 2025, Fig.1(arXiv:2412.19108)

論文が報告する平均近傍数は 1-hop で 2.3、2-hop で 12.5、3-hop で 18.9。つまり「直接つながっている変量はわずか 2〜3 個だが、2 ホップ・3 ホップと辿ると一気に十数個へ広がる」。1 層の GNN では最も単純な局所関係しか張れず、広域の関係を作るには層を深く積む必要がある、という事実がここから読み取れる。だからこそ各層が別々の抽象度の関係を担い、その途中層を捨てるのは惜しい ―― これが Graph-MoE の出発点だ。

まず全体像を1枚で掴んでおこう。Graph-MoE は「RNN エンコーダ → グラフ構築 → 多層 GNN → 各層を専門家とする MoE → メモリ拡張ルーター → 正規化フロー」という一本道のパイプラインだ。

Graph-MoEの全体アーキテクチャ。左からRNN/グラフ構築/多層GNN、中央が各層を専門家とするMoE、右がメモリ拡張ルーターとMLE損失

出典: Huang et al., AAAI 2025, Fig.2(arXiv:2412.19108)。図中の Cross-Modal Attention / Expert / Dynamic Expert Router / Memory Update が本記事で順に解説する構成要素にあたる。

図の左側で各変量(エンティティ)の時系列が RNN で符号化され、それらをノードとしてグラフが構築される。中央で GNN の各層出力 $H^1, H^2, \dots, H^L$ がそれぞれ Cross-Modal Attention と FFN を経て「専門家」になり、右側のメモリ拡張ルーターが出す重み $R$ で統合される。順番に分解していこう。

グラフ構築 ― 自己注意で動的な隣接行列を作る。 変量間の依存は時間とともに変わる。そこで Graph-MoE は固定グラフを与えず、時間窓ごとに 自己注意で隣接行列を学習 する。窓 $c$ のノード $i, j$(変量 $i, j$)に2つの線形変換 $\phi^1_e, \phi^2_e$ をかけ、内積で関係スコアを取る。

$$ \begin{equation} e^c_{ij} = \big(\phi^1_e(x^c_i)\big)\cdot\big(\phi^2_e(x^c_j)\big)^\top \end{equation} $$

これを行方向に softmax 正規化して隣接行列 $A^c$ の要素 $a^c_{ij}$ とする。

$$ \begin{equation} a^c_{ij} = \frac{\exp(e^c_{ij})}{\sum_{j=1}^{K}\exp(e^c_{ij})} \end{equation} $$

$A^c$ は変量間の相互依存そのものを表し、入力が変われば $A^c$ も変わる ―― つまり時々刻々と組み替わる動的グラフだ。これは GANF / MTGFlow から受け継いだ設計で、Graph-MoE はこの上に「層の使い分け」を載せる。

グラフ更新 ― 時空間を融合する。 構築した $A^c$ を使い、各層は時空間情報を融合しながら更新される。

$$ \begin{equation} H^l_t = \mathrm{ReLU}\!\left(A^c H^{l-1}_t W_1 + H^{l-1}_{t-1} W_2\right) W_3 \end{equation} $$

第1項 $A^c H^{l-1}_t W_1$ がグラフ畳み込み(同時刻 $t$ で隣接変量から情報を集約する空間方向)、第2項 $H^{l-1}_{t-1} W_2$ が1ステップ前の自分自身の情報(時間方向)で、$W_3$ が表現力を高める射影だ。$W_1, W_2$ はそれぞれグラフ畳み込みと履歴情報の重みになっている。空間(グラフ)と時間の両方を1つの層に融合するのがミソだ。上付き $l$ が第 $l$ 層の出力を表す。問題は「どの層(抽象度)を、いつ重視すべきか」だ。これを解くのが MoE である。

階層グラフ MoE ― 各層をエキスパートとして統合

Graph-MoE は各層の出力 $H^l$ を1人のエキスパートとして扱い、MoE の枠組みでこう定式化する。専門家関数 $f_l$ の出力をルーティング重み $R_l$ で足し合わせるのが MoE の基本形だ。

$$ \begin{equation} C = \sum_{l=1}^{L} R_l \cdot f_l(H^l) = \sum_{l=1}^{L} R_l \cdot \bar{H}^l \end{equation} $$

ここで専門家関数 $f_l$ の中身が肝心だ。各層は2段階で「専門家らしい」特徴に整えられる。

第1段:クロスアテンションによる層内集約。 現在の時間埋め込み $H$(RNN エンコーダ出力)を クエリ、第 $l$ 層の時空間条件 $H^l$ を キー・バリュー として注意をかけ、層内のノード特徴を集約する。

$$ \begin{equation} \tilde{H}^l = \mathrm{LN}\big(\mathrm{Attention}(H, H^l)\big)\big|_{Q:H,\ \{K,V\}:H^l} \end{equation} $$

「現在の状態 $H$ から見て、第 $l$ 層が捉えた関係 $H^l$ のどこに注目すべきか」を取り出す操作で、$\mathrm{LN}$ は層正規化。これにより各層の出力が「いまの状態に整合した」グローバル誘導特徴になる。

第2段:FFN で専門家特徴に変換。 続いて層ごとに別々の FFN(2層 MLP + ReLU)を通し、専門家整合特徴 $\bar{H}^l$ を得る。

$$ \begin{equation} \bar{H}^l = \mathrm{FFN}_l(\tilde{H}^l) = \phi^2_l\big(\mathrm{ReLU}(\phi^1_l(\tilde{H}^l))\big) \end{equation} $$

$\phi^1_l, \phi^2_l$ が層 $l$ 固有の MLP なので、各層は独立に「その抽象度に特化した」表現を学べる。さらに全層の注意出力を連結して階層グローバル誘導特徴 $\tilde{H} = [\tilde{H}^1, \tilde{H}^2, \dots, \tilde{H}^L]$ を作り、これがルーター(後述)の入力になる。

階層グラフMoE:各層をエキスパートとしルーティング重みで加重統合

ここがポイントだ。一部の層だけを選ぶ(top-k)のではなく、全層を重み付きで足し合わせる(全層加重方式)。重み $R_l$ が大きい層ほど統合結果 $C$ への寄与が大きい。つまり $R_l$ の配分が「今は局所(浅い層)を見るべきか、広域(深い層)を見るべきか」を決める。では、その重み $R_l$ をどうやって賢く選ぶのか。鍵は 過去の記憶 だ。

メモリ拡張ルーター ― 過去のパターンを覚えて選ぶ

Graph-MoE のルーターは、ただ現在の入力を見て重みを決めるのではなく、メモリ行列 $M$ に過去のグローバルな時間パターンを蓄えておき、それを参照して重みを決める。メモリは推論を進めながら逐次更新される再帰的な構造で、その内部はゲート機構で守られている。

メモリ拡張ルーターのフレームワーク。下から M_{t-1}と現在特徴 H~ をConcatしMulti-head attention、残差とMLPで M~_t、Gateで M_t を更新しExpert Routerで重み R を出す

出典: Huang et al., AAAI 2025, Fig.3(arXiv:2412.19108)

順を追おう。まず 前ステップのメモリ $M_{t-1}$ をクエリ、$M_{t-1}$ と現在特徴 $\tilde{H}_t$ を連結したもの $Y=[M_{t-1};\tilde{H}_t]$ を キー・バリュー としてマルチヘッド注意をかける。

$$ \begin{equation} Z = \mathrm{Attention}(M_{t-1}, Y)\big|_{Q:M_{t-1},\ \{K,V\}:Y} \end{equation} $$

「過去の記憶 $M_{t-1}$ から見て、過去+現在 $Y$ のどこに注目すべきか」を取り出す。再帰更新は勾配消失・爆発を起こしやすいので、残差接続を二重にかけて中間メモリ $\tilde{M}_t$ を作る。

$$ \begin{equation} \tilde{M}_t = \phi_M(Z + M_{t-1}) + Z + M_{t-1} \end{equation} $$

そして LSTM に似た忘却ゲート $G^f$・入力ゲート $G^i$ を現在特徴 $\tilde{H}_t$ と $\tanh(M_{t-1})$ から作る。

$$ \begin{equation} G^f_t = \tilde{H}_t W^f + \tanh(M_{t-1})\cdot U^f, \qquad G^i_t = \tilde{H}_t W^i + \tanh(M_{t-1})\cdot U^i \end{equation} $$

$W^f, W^i$ が現在特徴側、$U^f, U^i$ がメモリ側の学習重みだ。この2つのゲートで古い記憶と新しい情報をブレンドし、メモリを更新する。

$$ \begin{equation} M_t = \sigma(G^f_t) \odot M_{t-1} + \sigma(G^i_t) \odot \tanh(\tilde{M}_t) \end{equation} $$

$\sigma$ はシグモイド、$\odot$ はアダマール積。忘却ゲート $\sigma(G^f_t)$ が古い記憶 $M_{t-1}$ をどれだけ残すか、入力ゲート $\sigma(G^i_t)$ が新しい中身 $\tanh(\tilde{M}_t)$ をどれだけ取り込むかを要素ごとに制御する ―― LSTM のセル更新とまったく同じ形だ。更新したメモリを線形変換 $\phi_R$ に通し、softmax でルーティング重みにする。

$$ \begin{equation} R = \mathrm{Softmax}(\phi_R(M_t)) \end{equation} $$

この $R = [R_1; R_2; \dots; R_L]$ が、先ほどの MoE 統合 $C = \sum_l R_l \bar{H}^l$ にそのまま入る。メモリを介すことで、瞬間的なノイズに振り回されず、過去の時間文脈を踏まえて 層の重みを決められる ―― これが「メモリ拡張ルーター」の正体だ。このルーターの振る舞いこそ、Graph-MoE の最も面白い性質 ―― 暗黙のレジーム選択 ―― を生む。

ルーティングが暗黙のレジーム選択になる ― デモ

ルーターが「浅い層を重視するか、深い層を重視するか」は入力の特性で変わる。定常運転中は局所関係(浅い層)が安定なので浅い層を重視し、モードが遷移している最中は広域の伝播パターン(深い層)が効くので深い層を重視する ―― この 重みの配分パターンの違いが、運転状態(レジーム)の区別に対応 する。これを模擬したのが次の図だ。

ルーティングパターンが暗黙のレジーム選択になる:遷移中は深い層を重視

3層のルーティング重みの推移を積み上げて描いている。定常区間では浅い層(青、$R_1$)の重みが支配的だ(平均 0.70)。一方、2つの遷移区間に入ると重みが一気に組み替わり、深い層(緑、$R_3$)が優勢になる(平均 0.73)。モデルはどこにも「いま遷移中」というラベルを与えられていない のに、ルーティングの配分がそれを暗黙的に表現している。これが「ルーティング=レジーム選択」の意味だ。救急外来で呼ばれた専門医の組み合わせが症例を語るのと同じである。統合された表現は、最後に異常スコアに変換される。

異常スコア ― 正規化フローの密度推定

Graph-MoE は統合表現を 条件付き正規化フロー に通し、密度推定で異常を測る。正規化フローは可逆な変換 $f_\theta$ でデータを既知分布(ガウス)へ写像し、変数変換の公式で厳密な確率密度を計算できる。

$$ \begin{equation} P_\mathcal{X}(x) = P_\mathcal{Z}\big(f_\theta(x)\big)\left|\det \frac{\partial f_\theta(x)}{\partial x^\top}\right| \end{equation} $$

正規化フロー密度推定:正常を高密度領域に写像し低密度を異常とする

正常データのみで最大尤度学習し、正常パターンを潜在空間の 高密度領域 に写像する。推論時は、写像先が低密度(分布の裾)に来る点 ―― つまり負の対数尤度が大きい点 ―― を異常とする。Graph-MoE 自体は、この正規化フローの前段で「どの抽象度の関係を見るか」を適応的に整える役割を担う。だからこそ、既存の手法に後付けできる。

プラグアンドプレイ ― 既存手法に後付けで効く

Graph-MoE の実用上の強みは、既存の GNN ベース異常検知手法にモジュールとして後付けできる ことだ。論文は GANF・MTGFlow・USD という3つのベース手法に Graph-MoE を足して検証している。

プラグアンドプレイ:既存GNN手法に後付けで一貫して性能向上

AUC-ROC で見ると、GANF は 79.8% → 82.6%(+3.5%)、MTGFlow は 84.8% → 87.2%(+2.8%)、USD は 90.2% → 92.3%(+2.3%)と、いずれも一貫して向上する。階層情報を適応的に統合する層を挟むだけで底上げできる、という汎用性が魅力だ。複数のデータセットでも同じ傾向が出る。

評価 ― 5データセットで一貫した向上

論文は SWaT・WADI・PSM・MSL・SMD の5つで評価している。いずれも多変量時系列異常検知の定番ベンチで、SWaT は水処理プラントの 51 センサ、WADI は 123 センサ・アクチュエータ、PSM は eBay のサーバノード 25 特徴、MSL は探査ローバーの 55 次元、SMD は大規模 IT インフラの 38 次元(28 サブデータセット)からなる。窓サイズ 60・ストライド 10、評価指標は AUROC で、5 回の試行平均を報告している。

5データセットでのMTGFlow vs +Graph-MoEのAUC-ROC比較

MTGFlow をベースにすると、SWaT 84.8→87.2%、WADI 91.9→94.2%、PSM 85.7→88.0%、MSL 67.2→72.1%(+4.9%)、SMD 91.3→93.3% と、全データセットで向上する。特に難しい MSL での +4.9% が目立つ。階層的なグラフ情報を捨てずに、状態に応じて適応的に重み付けすることが、検知性能の底上げにつながっている。

8つの既存手法と並べた表で見ると、Graph-MoE の優位はさらにはっきりする。

5データセットでのSOTA比較表(DeepSVDD/DAGMM/ALOCC/DROCC/DeepSAD/USAD/GANF/MTGFlow vs Graph-MoE のAUROC)

出典: Huang et al., AAAI 2025, Table 1(arXiv:2412.19108)

DeepSVDD・DAGMM・USAD のような古典的手法から、直近の SOTA である MTGFlow(AAAI 2023)まで、全データセットで Graph-MoE が最高値を取っている。特に半教師あり手法 DROCC に対して SWaT で +20.1 ポイント、超球面に押し込めるアプローチの限界が露呈している。多層 GNN で局所から広域まで関係を捉え、MoE とメモリ拡張ルーターで適応的に統合する、という設計が効いている読み取りだ。

異常スコアの分布を見ると、検出力の差が直接わかる。

GANF/MTGFlow/Graph-MoEの正常・異常スコア分布。Graph-MoEは正常が0付近に集中し重なりが小さい

出典: Huang et al., AAAI 2025, Fig.4(arXiv:2412.19108)

正常系列(青)のスコアを比べると、Graph-MoE は GANF・MTGFlow より 0 付近に鋭く集中 している。さらに正常(青)と異常(橙)の重なり領域が小さい。重なりが小さいほど閾値を引いたときの誤検知(False Positive)が減るので、この分布のシャープさがそのまま検出性能の高さに対応している。

アブレーション ― 「3層が最適」「MoE の寄与が大きい」

設計判断の根拠も論文は丁寧に検証している。まず層(専門家)の数は 3層が最適 だ。SWaT で 1→2→3 層と増やすと 86.2→86.8→87.2% と上がるが、4 層にすると 85.6% へ下がる。層が少なすぎると広域の関係を張れず、多すぎると過平滑化(over-smoothing)でノード特徴の区別がつかなくなる ―― GNN の典型的なトレードオフがそのまま現れている。

各モジュールの寄与も切り分けている。MoE も MAR(メモリ拡張ルーター)もない素のグラフ構造では SWaT 85.5%。MAR だけ足すと 86.2%、MoE だけ足すと 86.8% と、MoE 単体の方が効く。両方入れると 87.2% で、MAR の「グローバル履歴特徴抽出」と MoE の「多層情報統合」が相乗的に働くことがわかる。

なお限界もある。Graph-MoE は単体では動かず、ベースとなる GNN 手法が必要だ。またルーティングがどの層を選んだかは観察できるが、その意味の解釈は事後的になる。メモリも固定長なので、長期の概念ドリフトへの追従には限りがある。

まとめ

Graph-MoE のエッセンスを整理する。

  • GNN 各層をエキスパート化:浅い層は局所、深い層は広域の変量間関係を捉える。従来は最終層しか使わなかった階層情報を全部活かす。
  • 階層グラフ MoE:各層の出力を $C = \sum_l R_l \bar{H}^l$ と 全層加重 で統合する。重み $R_l$ の配分がどの抽象度を見るかを決める。
  • メモリ拡張ルーター:LSTM 風ゲートで過去のグローバル時間パターンを記憶し、それを参照して重み $R = \mathrm{Softmax}(\phi_R(M_t))$ を出す。
  • 暗黙のレジーム選択:定常中は浅い層、遷移中は深い層を重視するというルーティングの配分が、ラベルなしに運転状態を表現する。
  • 正規化フロー+プラグアンドプレイ:統合表現を条件付き正規化フローに通し低密度を異常とする。既存の GNN 手法(GANF/MTGFlow/USD)に後付けで +2〜3.5%、5データセットで一貫向上(MSL +4.9%)。

「どの専門家を呼ぶかが状態を映す」という Graph-MoE の発想は、関係の崩壊を見る SARAD・OracleAD や、相関構造でレジームを発見する TICC とはまた違う角度から「文脈」に切り込む。適応的計算(MoE)で文脈を扱うこの路線と、関係ベース・確率モデルの諸手法を読み比べると、多変量時系列異常検知の設計地図がさらに広がるはずだ。

OracleAD:安定潜在構造からの逸脱で異常を捉える
正常な関係構造をSLSとして覚え逸脱を測る関係ベース手法。Graph-MoEがルーティングで状態を選ぶのと、文脈の扱い方を比較したい。
TICC:相関構造で時系列の『レジーム』を発見する
相関構造でレジームを明示的に発見する手法。Graph-MoEがルーティングで暗黙にレジームを選ぶのと対照的。
SARAD:変量間の関係の崩壊を異常として捉える
関連の減少を異常とする関係ベース手法。GNNの関係モデリングを異常検知にどう使うかの比較対象。
Bi-Attention × MoE:時間・チャネル両方向の注意と専門家分担
MoEを多変量時系列異常検知に使う別の系統。Graph-MoEがGNNの層を専門家にするのと、専門家の切り方を比較したい。
CAD:指標ごとの目標衝突をMoEで分担する
多変量の目標衝突をMMoE型ゲートで解くConflict-aware Anomaly Detection。Graph-MoEと同じMoE×異常検知の系譜。