Tucker分解とは|理論・アルゴリズム・実装・応用までの完全ガイド

概要:Tucker分解とは何か

Tucker分解は多次元配列(テンソル)を低ランクなコアテンソルと複数の因子行列に分解する手法で、1960年代にTuckerらによって提案されました。行列の特異値分解(SVD)を高次元に拡張したもので、テンソルのモードごとに線形変換を行い、データの主要構造を抽出します。多変量データ解析、信号処理、画像・動画圧縮、レコメンデーションや機械学習の前処理として広く使われます。

数学的定義と表記

N次テンソルを X ∈ R^{I1×I2×…×IN} とすると、Tucker分解は次の形で表されます。

  • X ≈ G ×1 A^{(1)} ×2 A^{(2)} … ×N A^{(N)}

ここで G ∈ R^{R1×R2×…×RN} はコアテンソル(小さなテンソル)、A^{(n)} ∈ R^{In×Rn} は各モード n の因子行列、×n はモード積(n-mode product)を表します。ベクトルの次元削減はモードごとに異なるランク(R1,…,RN)を指定でき、これをマルチリニアランク(multilinear rank)と呼びます。

主要アルゴリズム:HOSVD と HOOI

代表的な推定法は大きく2つあります。

  • HOSVD(Higher-Order SVD): 各モードの展開行列(unfolding)に対してSVDを行い、因子行列を主成分として取得し、コアはそれらの逆変換で得ます。計算が直接的で安定している点が長所です。特に初期値生成や解釈が容易という利点がありますが、最適な近似(最小二乗誤差)を保証するわけではありません。
  • HOOI(Higher-Order Orthogonal Iteration): HOSVDで得た因子行列を初期値として反復的に最適化する手法で、各ステップで他の因子を固定して最適な因子を求めるALS(代替最小二乗)に相当します。通常は近似誤差が改善され、より良い低ランク近似が得られますが反復コストがかかります。

HOSVDの手順(概略)

  • 各モード n について、テンソル X をモード n 展開して行列 X_{(n)} ∈ R^{In×(I1…I_{n-1}I_{n+1}…IN)} を作る。
  • X_{(n)} の特異値分解を計算し、上位Rnの左特異ベクトルを A^{(n)} とする。
  • コアテンソルは G = X ×1 A^{(1)T} ×2 A^{(2)T} … ×N A^{(N)T} で与えられる。

HOOIの手順(概略)

  • HOSVDで初期因子 A^{(n)} を得る。
  • 各反復でモード n を選び、他の因子を固定した状態で最適な A^{(n)} を SVD により更新する。これを全モードに対して順次行う。
  • 誤差収束または所定回数で停止。最終的にコア G を計算する。

理論的性質:一意性・可逆性・解釈

Tucker分解は一般に一意ではありません。任意の可逆行列 Q^{(n)} を因子に適用し、コアを対応して変換すれば同じ元のテンソルを表現できます(G ×1 Q^{(1)} ×2 Q^{(2)} … のように)。したがって、正則化(直交性制約や非負制約など)を課すことが多いです。対してCP分解(CANDECOMP/PARAFAC)は強い一意性条件を満たすことがあり、モデル選択の観点で対比されます。CPはコアがスーパー対角(対角化)したTuckerの特殊ケースと考えられます。

計算量と記憶量

最も重い処理はモード展開行列に対するSVDで、一般にモード n のSVDコストは O(In * (Π_{m≠n} Im)^2 ) のように見積もられますが、実際は行列の形状と使用するSVDアルゴリズム(ランダム化SVD、経済的SVDなど)によって大きく変わります。コアのサイズ Π_n Rn が十分小さければ保存すべきパラメータ数は Σ_n (In * Rn) + Π_n Rn となり、元のデータΠ_n In と比べて大幅な圧縮が可能です。

ランク選択とモデル選定

ランク(R1,…,RN)の決定は実務上重要で難しい問題です。代表的な手法:

  • 各モードの特異値累積エネルギーに基づき閾値(例:90%)で切る。
  • クロスバリデーションや検証データ上の再構成誤差で選ぶ。
  • 情報量基準(AIC/BIC 等、テンソル版の指標)を用いる試み。
  • アプリケーションによっては解釈可能性や計算コストで決定する。

正規化・制約

実用では以下のような制約を導入することが多いです。

  • 因子行列の直交性:HOSVD/HOOI で自然に得られる場合がある。
  • 非負制約(Nonnegative Tucker):解釈可能性を高め、NMF的な分解にする。
  • スパース化(L1正則化):因子やコアを疎にしてモデルを単純化。
  • 平滑化や低ランク制約:過学習防止のために導入。

応用例

  • 画像/動画圧縮:空間×時間×色などのモードに対して低ランク近似を行い、データ圧縮・ノイズ除去を実現。
  • レコメンデーション:ユーザー×アイテム×時間など多様な側面を考慮する多モード協調フィルタリング。
  • 脳波・fMRI解析:空間×時間×被験者などから共通パターンを抽出。
  • 信号処理・アンテナアレイ:多次元の相関構造解析やパラメータ推定。
  • 特徴抽出・次元削減:機械学習前処理として高次元データを圧縮して下流モデルに供給。

実装上の注意点・実務的ヒント

  • 前処理:中心化(平均除去)やスケーリングをモードごとに検討。ノイズが多い場合は正則化やスパース化が有効。
  • 初期化:HOSVDで初期化すればHOOIの収束が安定しやすい。ランダム初期化を複数回試し最良解を選ぶことも有効。
  • 収束基準:相対誤差低下率や因子変化のノルムを用いる。過度に厳しい基準は計算コストを押し上げる。
  • 大型テンソル:ランダム化SVD、ミニバッチ、オンライン手法を用いてスケールさせる。
  • 欠損値:欠損を考慮した最適化(重み付き最小二乗)を組み込むことで実データに対応可能。

ライブラリとツール

  • TensorLy(Python):Tucker/HOSVD/HOOI を含む豊富なテンソル分解実装。
  • MATLAB Tensor Toolbox:テンソル分解の古典的実装(Bader & Kolda 等)。
  • scikit-tensor(Python):簡易なテンソル解析ライブラリ。

Tucker分解とCP分解の比較

両者は用途により使い分けられます。Tuckerはモードごとに異なるランクを許容し、表現力が高くデータ構造の柔軟な把握に向いていますが一意性が弱い。CPはパラメータ数が少なく一意性条件があるため解釈性の高いモデルを得やすい反面、表現力が制限される場合があります。どちらを選ぶかは、解釈性、計算コスト、データ特性によって決めるとよいでしょう。

簡単な例(概念的)

例えばカラー動画データを (高さ)×(幅)×(時間)×(色チャネル) の4次テンソルと考えると、各モードの因子行列は空間的特徴、時間的特徴、色特徴を分離して抽出します。小さなコアテンソルはモード間の相互作用を記述し、ストレージを大幅に削減しつつ再構成が可能です。

限界と今後の研究課題

主な限界は次の通りです:大規模データに対する計算負荷、一意性の欠如、ランク選択の難しさ、非線形相互作用のモデル化が難しい点。現在はランダム化アルゴリズム、スパース・構造化制約、深層学習との融合(Tensorized Neural Networks)などが研究されています。

まとめ

Tucker分解はテンソル解析の基礎かつ強力な道具であり、モードごとに異なる低ランク近似を行うことで複雑な多次元データの要約、圧縮、特徴抽出が可能です。実務ではHOSVDで初期化しHOOIで最適化、ランクはデータ特性や検証誤差で決め、必要に応じて非負制約やスパース化を導入するのが一般的なワークフローです。

参考文献