HOSVD(高次特異値分解)完全ガイド:理論・アルゴリズム・実装・応用

はじめに

HOSVD(Higher-Order Singular Value Decomposition、高次特異値分解)は、多次元配列(テンソル)に対する特異値分解の一般化です。テンソルデータは画像、動画、時系列×センサ、推薦システムなど多くの分野で生じ、行列だけでは表現しきれない多様な相互関係を持ちます。HOSVDはテンソルをモードごとの直交基底とコアテンソルに分解することで、次元削減、圧縮、ノイズ除去、特徴抽出などに強力な手段を提供します。

基本概念と位置づけ

テンソルXを次数Nの配列とすると、各モード(軸)に対応する直交行列U^(n)と、それらの基底で表現されたコアテンソルGから構成されます。数学的には次のように表されます:

G = X ×_1 U^(1)T ×_2 U^(2)T ... ×_N U^(N)T

そして近似再構成は

X ≈ G ×_1 U^(1) ×_2 U^(2) ... ×_N U^(N)

ここで ×_n はn-モード積(n-mode product)、X_(n) はモード-n展開(unfolding / matricization)を表します。HOSVDはTucker分解の一種であり、Tuckerモデルにおける直交因子行列を求める手法として位置づけられます。

数学的定義(要点)

  • モード-n展開 X_(n) ∈ R^{I_n × (Π_{m≠n} I_m)} を作成する。

  • 各展開に対して SVD を行い、X_(n) = U^(n) Σ^(n) V^(n)T を求める。U^(n) の列はモード-nの主成分基底を表す。

  • コアテンソルは G = X ×_1 U^(1)T ×_2 U^(2)T ... ×_N U^(N)T によって得られる。

Truncated HOSVD(切り詰めHOSVD)では、各 U^(n) の先頭 R_n 列のみを保持して低ランク近似を作ります。近似テンソルは X_approx = G_trunc ×_1 U_trunc^(1) ×_2 ... ×_N U_trunc^(N) となります。

アルゴリズムの手順

典型的なHOSVDの手順は次の通りです:

  • 入力:テンソル X ∈ R^{I_1×I_2×...×I_N} と各モードの目標ランク R_n(またはエネルギー閾値)。

  • 各モード n=1..N について:

    • テンソルをモード-nで展開して行列 X_(n) を作る。

    • X_(n) に対して SVD を実行し、左特異行列 U^(n) を取得する。

    • 必要に応じて U^(n) を R_n 列に切り詰める(U_trunc^(n))。

  • コアテンソルを G = X ×_1 U^(1)T ×_2 ... ×_N U^(N)T で計算する(切り詰め版では U_trunc を用いる)。

  • 再構成 X_approx = G ×_1 U^(1) ×_2 ... ×_N U^(N) を得る。

代表例(3次テンソル)

3次テンソル X ∈ R^{I×J×K} の場合:

  • X_(1) は I × (J·K)、X_(2) は J × (I·K)、X_(3) は K × (I·J) となる。

  • それぞれの SVD で U1 ∈ R^{I×I}, U2 ∈ R^{J×J}, U3 ∈ R^{K×K} を得る(切り詰めれば I→R1 など)。

  • G = X ×_1 U1^T ×_2 U2^T ×_3 U3^T。

HOSVDの理論的性質

  • 直交性:各 U^(n) は直交行列であり、コアテンソル G は「全直交(all-orthogonality)」の性質を持つ。つまり、コアテンソルの異なるモード方向の部分テンソルは直交する。

  • 順序性:HOSVD のコアテンソルには「順序性(ordering)」に類する性質があり、各モードに沿った部分テンソルのノルムが非増加に並べられる(擬対角的な配置)。

  • 最適性の限界:切り詰めHOSVDは直感的で計算が安定だが、行列の最良近似がSVDで得られるのと異なり、一般に与えられた多様体(ランク指定)に対する最良(Frobeniusノルム最小)近似を保証しない。最良近似を求めるには反復的手法であるHOOI(Higher-Order Orthogonal Iteration)などが使われる。

  • 一意性:因子行列は特異値の多重度や符号の選択で若干の不確定性があるが、固有値が単純であれば(および符号を固定すれば)実用上十分安定である。

ランク選択とエネルギー基準

各モードのランク R_n はユーザが決める必要があります。一般的な選び方:

  • 固有値(特異値)分布に基づく閾値(累積エネルギーが90〜99%になるR_n)。

  • 下位の特異値がノイズレベル以下になった点をカットオフ。

  • モデル選択指標(クロスバリデーション、AIC/BIC的基準)を用いる。

切り詰めによる近似誤差は切り捨てた特異値に依存し、各モードごとに寄与を評価できますが、全体の最適性は保証されない点に注意が必要です。

計算コストと実装上の工夫

計算コストは主に各モード展開行列のSVDに依存します。モード-n展開のサイズは I_n × (Π_{m≠n} I_m) となるため、次元数や各モードのサイズが大きいと急速に計算負荷が増大します。実践的な対処法:

  • ランダム化SVD(Randomized SVD)や確率的行列分解を用いて大規模データのSVDを近似する。

  • スパースデータではスパース行列演算を活用する。

  • 逐次/オンライン手法やブロック処理でメモリを節約する。

  • 切り詰めを早めに行う(各モードで必要なR_nのみ求める)ことで低次元の計算に留める。

  • HOOIを用いる場合は反復が必要なので、初期値としてHOSVDを使うことが一般的。HOSVDはHOOIの良い初期化法であり、局所解収束を早める。

応用例

HOSVDは多くの応用分野で用いられています:

  • テンソル圧縮・符号化:高次データを低次元コアと因子に分解して保存容量を削減。

  • ノイズ除去・デノイジング:低ランク近似によりノイズ成分を除去。

  • 特徴抽出・テンソルPCA:多次元の主成分を抽出して機械学習の前処理に利用。

  • レコメンデーションやマルチモーダルデータ解析:ユーザ×アイテム×コンテキスト等の多次元相互作用の解析。

  • 画像・映像処理:カラー画像(高さ×幅×色チャネル)や動画(高さ×幅×時間)をテンソルとして扱う。

実装上の注意点とベストプラクティス

  • データの前処理:各モードに沿った中心化(平均除去)やスケーリングを行うと解釈性と性能が改善する場合がある。

  • 数値安定性:SVDは一般に安定だが、非常に大きな条件数を持つ場合は正則化やトリミングが有効。

  • 初期化と反復:最適近似が必要ならHOOIをHOSVD初期値で実行する。計算予算が限られる場合はHOSVDで妥協する。

  • 解の解釈:因子行列の列は各モードの基底(成分)を示す。コアテンソルの要素は基底間の相互作用の強さを示す。

  • ソフトウェア:PythonではTensorly(https://tensorly.org)がHOSVDとTucker分解の実装を提供。MATLABではTensor Toolboxや関連ツールが使える。

よくある誤解

  • 「切り詰めHOSVDはいつも最良近似」:これは誤り。行列の場合と異なり、テンソルの低ランク近似に対して切り詰めHOSVDは必ずしも最小誤差解を与えない。

  • 「因子は一意である」:テンソル分解の一意性はモデルと条件に依存する。HOSVDで得られる直交因子はSVDに基づくため安定だが、符号や順序の不定性は残る。

まとめ

HOSVDはテンソル解析の基本かつ強力な手法で、テンソルを直交基底とコアに分解することで多次元データの次元削減、圧縮、解釈を可能にします。計算は各モードの展開行列に対するSVDに還元され、実装は比較的直接的です。ただし、切り詰めによる低ランク近似が常に最適とは限らない点、計算コストが高くなり得る点には注意が必要で、必要に応じてHOOIやランダム化SVDなどの補助手法を組み合わせるのが実務上の有効な戦略です。

参考文献