JSBi Bioinformatics Review
Online ISSN : 2435-7022
総説
行列・テンソル分解によるヘテロバイオデータ統合解析の数理
―第3回 テンソル分解―
露崎 弘毅
著者情報
ジャーナル オープンアクセス HTML

2022 年 3 巻 1 号 p. 20-33

詳細
Abstract

生命科学分野で取得されるデータ集合は、雑多(ヘテロ)な構造になり、ヘテロなデータ構造を扱える理論的な枠組みがもとめられている。本連載では、汎用的なヘテロバイオデータの解析手法である行列・テンソル分解を紹介していく。第3回では、行列を一般化したデータ表現であるテンソルと、行列分解の発展型であるテンソル分解手法について説明する。

テンソルとは

これまでの連載[1, 2]では、行列データを想定して、複雑なデータ構造を扱ってきた。本稿では、さらに柔軟にデータを扱えるようにテンソルを利用する。なお本稿で用いるテンソルという用語は、物理学・数学における作用素、多重線形写像といった意味合いは無く、単に多次元配列を意味する。例えば、スカラ値は0階テンソル、ベクトルは1階テンソル、行列は2階テンソルと、n次元配列のことを、n階テンソルと言う(図1)。通常あえてテンソルと言う場合は、3階以上のテンソルを指すため、本稿でも3階以上の高階テンソルを単にテンソルと呼ぶことにする。慣習的に、スカラやベクトルは小文字、行列は大文字、3階以上のテンソルはカリグラフィー(筆記体、飾り文字)で記述されることが多い(図1)。

図1:テンソルとは

行列をより高いオーダーにまで拡張したもの。通常、あえてテンソルと言う場合、3階以上の場合が多い。

テンソル分解の用語は時として統一されておらず、ややこしい場合があるため、以降は縦、横、奥行きの様なテンソルの各方向のことをモード(相)、各モードが持つ要素数を次元、テンソルの各モードの次元を全て掛け合わせたものをサイズ、テンソルが持つモード数をオーダー(階数)と呼ぶこととする。例えば、添字が3つあるテンソルχ∈RI×J×Kのオーダーは3(3階テンソル)であり、サイズはI×J×K、1つ目のモードの次元はI、2つ目のモードの次元はJ、3つ目のモードの次元はKである。後述するように、テンソル分解という手法で、行列分解と同様、データテンソルを次元圧縮するが、その際に、モードごとに何次元まで次元を圧縮するか事前に設定するパラメーターがあり、これをランクという。

論文によっては、3階テンソルを3次元配列と言ったり、ランクの方を階数と言ったりする場合もあるため、注意が必要である。また、厳密には、同じ要素を持つ方向が重複している場合、重複を除いてユニークな方向が幾つあるのかを数えた値がモードであり、重複を許して単に方向が幾つあるのかを数えた値は元(way)として区別される。例えば、N個のデータ間の総当たりの距離関係を表すN×Nの対称行列(距離行列)は、1相2元データとなる。

データとしてのテンソル

生命科学において、観測データとしてテンソルが発生する場合は少なくとも2つある。1つは、データが自然と高階なテンソル構造を持っている場合である。生命科学においては、実験条件を振った場合に相当する。例えば、通常、複数のサンプルで複数の生体分子を計測するオミックスデータを、さらに複数の異なる条件で取得した場合、サンプル(例:臓器、個人)×生体分子(例:DNA、RNA)×実験条件(健常者/患者、試薬投与、時空間)のように3階テンソルとなる。または、メタデータに記述された属性情報(例:集団、性別、バッチ)をもとに、後からデータを層別化する場合も同様に、サンプル×生体分子×属性のような3階テンソルになる。ただし生命科学の実験は基本的に高コストであるため、そのようなリッチなデータは、ENCODE[3, 4, 5, 6]やGTEx[7, 8]、ICGA/TCGA[9, 10]、GWAS Catalog[11]など、大規模プロジェクトデータによるものが多い。なお、このようなオミックスデータにおいて、生体分子の異なる条件下での計測値は、非侵襲的に計測されない限りは、異なる細胞から得られることになる。しかしながら、共通性を考慮して(例:共通の細胞株から培養した細胞集団や共通の細胞型から得られているので)、同じ細胞から得られたものとみなすことが通例になっている。

もう一つは、なんらかの操作によってデータのオーダーを上げる、テンソル化(Tensorization)を行った場合である。例えば、行を共有する2つ以上の行列で、直積(Outer product)をとる場合が挙げられる[10, 12, 13]。2行列Xn×p、例えば細胞×遺伝子)、Yn×q、例えば細胞×タンパク質)において、i行目の行ベクトル同士の直積 x i y i = x i y i T p×qの2階テンソル(行列)になる。この操作をn行分繰り返し行うことで、n個の2階テンソルが生成されるためオーダーが1つ上がり、p×q×nの3階テンソルになる。また、時系列データでは、時間遅れを考慮して、データ間の相関関係をとらえる必要があり、Sliding Window方式で、時刻を一つずつずらしてはテンソルに格納する、ハンケル化(Hankelization)という操作がよく利用され、これもオーダーが大きくなる操作である[14, 15]。それ以外にも、Löwnerizationという操作や、最適化アルゴリズム内での高階モーメントの算出などでもテンソルが発生する[14, 15]。

テンソル分解

第1回[1]で紹介した、行列データにおける行列分解と同様、データテンソルにもテンソル分解のアルゴリズムがある[16, 17, 18, 19, 20, 21, 22]。パターンの和としての行列分解のイメージに倣うと、テンソル分解もまたデータテンソルχに含まれる少数のパターン(ランク1テンソル)を取り出すことに相当する(図2)。射影としてのテンソル分解をイメージすることも可能だが、紙面の関係から[23, 24]の文献を参照してほしい。テンソル分解では、細かい工夫により行列分解以上に数多くのアルゴリズムが存在する。そこで、ここでは、幾つかの項目に分けて、これまで提案されたテンソル分解に、どのような工夫がなされているのかを紹介する。なおここでは、データテンソルχは3階テンソルを想定するが、さらに高階なテンソルにも拡張可能であることに留意してほしい。

図2:パターンの和としてのテンソル分解

行列分解と同様、テンソル分解もデータテンソルを少数のパターン(ランク1テンソル)の和として近似することに相当。

1.コアテンソルの設定:第1回[1]の行列分解の式(1)の中央の対角行列Λは、取り出したパターンの大きさを示していたが、テンソル分解でそれに相当するものは、コアテンソルという。コアテンソルの設定の仕方で、テンソル分解アルゴリズムは、CANDECOMP/PARAFAC(CP)分解とTucker分解に大別される[16, 17, 18, 19, 20, 21, 22]。CP分解は、コアテンソルが対角、すなわち、縦、横、奥行きのパターンの数が同じであり、かつそれらが1対1対1の対応関係であることを制約としており(図3上)、データテンソルχを以下のように分解する。

  

(30) min U , V , W χ i = 1 J g i u i v i w i F 2

図3:CP分解とTucker分解

CP分解(上)の場合は、コアテンソルが対角で、縦・横・奥行きのパターンの数が同じであり、かつそれらが1対1対1の対応関係。Tucker分解の場合は、コアテンソルが密で、縦・横・奥行きのパターンの数を別々の値に設定することが可能で、それらが多対多対多の関係。

ただし、データテンソルのサイズはI1×I2×I3、コアテンソルgのサイズはJ×J×JJ≤min(I1,I2,I3))、因子行列UVWのサイズはそれぞれI1×JI2×JI3×J、∘は直積である。 Σ i = 1 J g i u i v i w i の部分は、モード積×m(テンソルと行列間の演算の一種、mは作用するテンソルのモード[16, 17, 18, 19, 20, 21, 22])を利用してg×1U×2V×3Wと書く場合もある。CP分解の最適化手法としては、データテンソルをモードごとに行列状に引き伸ばし(行列化)、最小二乗法ベースのAlternating Least Squares(ALS)を適用する手法CP-ALSや、固有値分解アルゴリズムの一つであるべき乗法(Power method)などがあり、U、V、Wを逐次的に最適化する。

一方、Tucker分解の場合は、コアテンソルは対角要素意外にも値を持つ密テンソルであり、縦、横、奥行きのパターンの数を別々の値に設定することが可能である(図3下)。Tucker分解では、データテンソルχを以下のように分解する。

  

(31) min U , V , W χ i = 1 J 1 j = 1 J 2 k = 1 J 3 g i , j , k u i v j w k F 2

ただし、コアテンソルgのサイズはJ1×J2×J3、因子行列UVWのサイズはそれぞれ、I1×J1J1≤min(I1,I2×I3))、I2×J2J2≤min(I2,I3×I1))、I3×J3J3≤min(I3,I1×I2))である。Tucker分解の最適化手法としては、CP分解と同様、データテンソルをモードごとに行列化し、Singular Value Decomposition(SVD、第1回[1]を参照)を適用することで、モードごとの因子行列をとりだすHigher-Order SVD(HOSVD)や、ALSベースのTucker分解であるHigher-Order Orthogonal Iteration of Tensors(HOOI)などが利用される。HOSVDは、CP-ALSHOOIなど、他のテンソル分解アルゴリズムの初期値としても利用される。

2.各因子行列の推定に利用される行列分解手法:多くの場合、因子行列は、行列化されたテンソルに対して、行列分解手法を適用することで推定される。CP-ALSHOSVDHOOIで利用される最小二乗法やSVD以外にも、様々な行列分解手法が適用され、利用した手法の性質が反映された結果になる。例えば、Non-negative Matrix Factorization(NMF、第1回[1]を参照)ベースのCP分解であるNon-negative Tensor Factorization(NTF17])や、NMFベースのTucker分解Non-negative Tucker Decomposition(NTD17])では、非負値の因子行列が得られる。また、互いに独立な成分を取り出すIndependent Component Analysis(ICA、第1回[1]を参照)をベースとした、テンソル分解であるMultilinear ICA[25]やTensorial ICA[26]もある。さらに、また縦の因子行列はSVD、横の因子行列はICA、奥行きの因子行列はNMFという風に、複数の行列分解を自由に組み合わせてテンソル分解に適用するMulti-way Component Analysis(MCA16])という手法もある。

3.分解しないモードの設定:あるテンソルの全モードごとに因子行列を1つずつ設定するだけでなく、ある方向には分解をしないでおくことも可能である。例えば、Tucker-2分解では、3階テンソルのうち、2つのモードでの因子行列だけを取り出し、1つのモードでは分解を行わない[17]。これは、m番目の分解しないモードでの因子行列は単位行列IIm×ImImm番目のモードの次元)とした上で、その因子行列の推定ステップはスキップすることに相当する。同様に、Tucker-1では、縦、横、奥行きのどれか1方向だけ因子行列を取り出し、2つのモードでは分解を行わない[17]。このような分解は、あるモードのパターンには興味が無かったり、内在するパターンがそもそも無い(全ての要素がばらばらで似ていない)ことが事前にわかっている場合に有効である。

4.対称なモードの設定:例えば、あるデータテンソルχが、サイズがI×I×Jの2相3元データであった場合、1番目と2番目のモードからは、同じ因子行列が推定される。その場合、2番目のモードでの因子行列の推定ステップは省略される。DEDICOM[16, 17, 18, 19, 20, 21, 22, 27, 28]、RESCAL[16, 17, 18, 19, 20, 21, 22, 27, 28, 29]、INDSCAL[16, 17, 18, 19, 20, 21, 22]、IMSCAND[16, 17, 18, 19, 20, 21, 22]といった、テンソル分解モデルでそのような工夫がなされる。

5.因子行列のさらなる分解:テンソル分解で得られた因子行列をさらに分解することで、より小さい因子行列の積にできる。それによりモデルをより複雑化させたものとしては、H-Tucker[16, 17, 18, 19, 20, 21, 22]、Tensor Train[16, 17, 18, 19, 20, 21, 22, 30, 31]といったものがある。欠損値補完のような問題設定では、深層学習と同様、モデルが複雑になるほど、予測精度も向上するため、このような複雑な分解の仕方が提案されていると思われる。

テンソル分解の適用事例

テンソル分解は、当初ヒトの脳波(Electroencephalogram、EEG)解析分野で発展したが[16, 17, 20, 21]、近年は幅広い分野で利用されるようになり、オミックスデータ解析(遺伝子発現[8, 9, 12, 13, 32, 33, 34]、一塩基多型(Single Nucleotide Polymorphism: SNP)[10]、エピジェネティクス[3, 5, 6, 7, 8, 35]、マルチオミックス[25]、Quantitative Trait Locus(QTL)[8, 11]、マイクロバイオーム[35])、血清学データ(新型コロナウイルスに対する中和抗体価)[37]、医療情報解析[38]、文献情報解析[39, 40]、ドラッグリポジショニング[12, 26, 27, 28, 31]、時空間情報を伴う生態学データの解析[41]、神経活動データ[42, 43]など、様々な分野でその有用性が示されている。テンソル分解を利用した研究では、モード間の複雑な関係性を可視化したり、分解して得た因子行列を特徴量としてその後の解析(クラスタリングなど)に活用したりする話が多い。因子行列やコアテンソルでテンソルを再構築することで、欠損値補完にも利用でき、まだ計測されたことがない変数の組み合わせでの値(例:ある薬剤がある疾患に効くかどうか)を推定することも可能である[31]。情報検索の分野では、手元のデータテンソルを事前にテンソル分解をしておいてデータベースとし、新たに得られるデータ(またはユーザーの知りたいこと)をクエリとして検索を行うことにも利用されており、Folding-in(第1回[1]を参照)のテンソル拡張という位置づけで、Higher-order Folding-in[44, 45]と呼ばれている。

よりヘテロな行列・テンソル同時分解

Partial Least Squares Regression(PLS-R、第2回[2]を参照)やPartial Least Squares Discriminant Analysis(PLS-DA、第2回[2]を参照)のように、複数の行列・テンソル間を関連付けるように因子行列を学習し、新たに得られるデータに対する予測モデルを構築するということも、テンソル分解の枠組みで行える。例えば、説明変数がn(≥3)階テンソルで、目的変数は行列としたN-way PLS(Multi-way PLS、Multilinear PLS、またはTensor PLSとも言う)や、説明変数も目的変数も高階テンソルとしたHigher-order PLSといった手法があり、マルチオミックス解析に利用されている[46, 47, 48, 49]。Linear Discriminant Analysis(LDA、第2回[2]を参照)をデータテンソルに拡張したMultilinear Discriminant Analysisという手法もあり、EEGデータを用いたBrain-Computer Interfaceのデータ解析に利用されている[50]。

1つのテンソルだけでなく、Collective Matrix Factorization(CMF、第2回[2]を参照)のように、縦、横、奥行きのどれかのモードをテンソルと共有する行列が付加情報として与えられていた場合、それらとも関連づけて行列・テンソルの同時分解が行える。このような問題設定をCoupled Matrix Tensor Factorization(CMTF51])という(図4)。CMTFはまだ、バイオインフォマティクス分野での利用実績がそれほど多くは無いが、MRIとLC-MSの統合解析[51]や、ドラッグリポジショニング[52]、遺伝子発現データ解析[53]、血清学データ[36]で利用されたことがある。

図4:CMTF

CMFと同様、共有するモードがあるデータ同士は、共通因子を設定し、この共通因子の最適化にそれらデータを参加させることで、複数のデータで再現があるパターンだけを取り出す。

テンソルネットワークとeinsum関数

複数のテンソルで構成されるヘテロなデータや、4階以上の高階なデータテンソルはモデリング作業が煩雑になりやすい。なぜならば、どのテンソルのどのモードは分解するか、どのデータからどの因子行列を取り出すか、どの因子行列をどのテンソル間で共有させるか、データテンソルや因子行列やコアテンソルのサイズや次元は幾つか…といった詳細な情報を把握しづらくなり、モデリングの見通しが立てづらくなるためである。そのため、ここではテンソルネットワークというテンソルの図示の仕方[16, 54, 55, 56, 57]を紹介しておく。テンソルネットワークは、複雑なデータ構造におけるモデリングの設計図として利用できる強力なツールである。テンソルネットワークでは、1つのテンソルを1つのノードとし、テンソルのモードはノードに接続されたエッジ(テンソルの“脚”という)で表現する。例えば、ベクトル、行列、3階テンソルはそれぞれ、脚が1本、2本、3本生えたノードとして表現される(図5)。長さ1の脚は省略するため、スカラ値は脚の無いノードとなる。脚には、そのモードの次元(脚の長さ)を書く場合もあれば、添字を書く場合もある。

図5:テンソルネットワーク

ノードは各テンソルデータを、エッジはテンソルの各モードを、エッジの本数はテンソルのオーダーを意味する。脚には脚の長さを書く場合と、テンソルの添字を書く場合とがある。

2つのテンソルに同じ脚(共通するモード)がある場合、積をとることで1つのテンソルにマージできる(図6a)。この時に、そのモードの添字に対して和をとる(脚を消す)ことも、和をとらずにそのまま脚を残しておくこともできる。同じサイズのテンソル同士で積をとり、全ての脚を消す演算は内積(スカラ積)、2つのテンソルの脚を全て残す演算は直積、共通する脚は消し、残りの脚はそのままとする操作は縮約積(contracted product)という[16, 54, 55, 56, 57]。行列分解で頻出するトレースは、両端の脚を繋げることに相当する。

図6:複数のテンソルのマージ

テンソルネットワークを利用して、行列・テンソルに対する各種演算を図示できる。(a)テンソルネットワークによる各種演算の図示化、(b)アインシュタインの縮約記法、(c)einsum関数による演算の実行。

数式でこのような操作を記述すると、テンソルの数やオーダーが増えるに従い、和記号が増えて煩雑になりやすい。そのため、和記号を省略し、単に添字だけで演算を表現することもできる。考案者の名前をもじり、この記法をアインシュタインの縮約記法という(図6b)。einsumは、この縮約記法をベースにした関数であり、縮約記法と同様、添字だけを記述することで、その演算をシンプルに記述できる(図6c)。einsumは元々Pythonパッケージであるnumpyの関数の一つとして実装されたが、現在では、PythonのTensorFlow[58]、Pytorch[59]、Chainer[60]、Rのeinsum[61]、著者が開発したDelayedTensor[62]やJuliaのEinsum.jl[63]、ITensors.jl[64]など、様々なツール内でも実装されている。einsumで表現できる演算は非常に多いので、是非[65, 66]の文献を確認してほしい。

テンソルネットワークを利用して、これまで紹介してきたヘテロなデータ解析手法を再考してみる。例えば、行を共有した2行列Xn×p)、Yn×q)に共通するパターンを調べたいとする。最も単純なやり方は、2行列の連結(concatenate)である(図7a)。これは、長さpと長さqの2つの脚がマージされて、新たに長さpqの脚が生えることに相当する。連結した後は、第1回[1]で紹介したような、行列分解を適用すれば良い。Multiple Factor Analysis(MFA67])という手法では、複数の行列に重みをかけてから連結してPrincipal Component Analysis(PCA、第1回[1]を参照)を適用することで、行列ごとのスケールの違いを補正する工夫が入る。

図7:ヘテロな行列・テンソル分解手法

テンソルネットワークを利用して、各種行列・テンソル分解を図示できる。(a)1行列における行列分解(第1回を参照)。(b)2行列における射影としての行列同時分解(第2回を参照)。(c)2行列におけるパターンの和としての行列同時分解(第2回を参照)。(d)直積による2行列のテンソル化とテンソル分解。

第2回[2]で紹介したCo-inertia Analysis(CIA)、PLS、Canonical Correlation Analysis(CCA)のような行列同時分解では、2つの行列を互いに関連付けながらそのまま分解する(図7b)。これらは一度行列積XTYを計算してから、特異値分解(体格化、トレース最大化)を適用する操作に当たり、トレースはテンソルネットワーク上では、前述したように両端の脚を繋げる操作に相当する。また、第2回[2]で紹介したJoint Non-negative Matrix Factorization(JointNMF)、Group Independent Component Analysis(GroupICA)、Generalized Singular Value Decomposition(GSVD)のような行列同時分解では、各々の行列で分解する際に、共通因子行列を仮定する(図7c)。

直積でオーダーを上げてテンソル化し、テンソル分解を適用する方法[8, 10, 11]では、奥行き方向の脚を消してしまう行列積とは異なり、奥行き方向のパターンも後から取得できることがわかる(図7d)。

今後の展開

最後に、行列・テンソル分解の発展的なトピックにも触れておくことにする。ヘテロなデータを互いに繋ぎ合わせて解析する際に、以下のような部分が問題になると考えられる。まだそれほど解決されていない問題も含まれているため、熱意ある読者にもぜひ挑戦して欲しい。

データやモデルの任意性問題 行列・テンソル分解を実データに適用する際に、どういったデータを入力とするかというところで任意性がある。上記のeinsumによって、複数のテンソルを1つのテンソルに縮約することは、簡便な方法ではあるが、データサイズが雪だるま式に膨れ上がってしまい、それを防ぐために脚を消す場合は、どの脚を残すべきかが自明ではない。また、テンソルの数やオーダーが大きくなると、数値がオーバーフロー(またはアンダーフロー)したり、積をとる演算が誤差分布に悪影響を及ぼす可能性はある。

一方で、行列同時分解のように、複数のテンソルをマージせずに、複雑なデータ構造を複雑なまま分解する方針では、データサイズは小さいままで済むが、モデルが複雑になることで、最適化がうまく収束しない可能性もある[53]。また、そのような複雑な分解をサポートするOpen Source Software(OSS)が少ないため、自分でスクラッチからモデルを実装することになるが、かなり煩雑な作業になりやすく、ソースコードにバグを含みやすくなる。著者は現在このようなモデリングを支援すべく、RパッケージmwTensorを開発している。深層学習分野におけるフレームワークと同様、今後はこの分野でも幾つもフレームワーク開発が行われるかもしれない。

Semi-paired/Unpaired問題 本稿で紹介したCMFCMTFのように、複数の行列・テンソルを同時に分解する解析では、行や列や奥行きのモードの少なくともどれかは完全に共有することを想定していた。しかしながら、実世界では、モードの一部の要素だけを共有するようなSemi-pairedなデータセットも考えられる。このような問題設定では、対応付けがついている要素間では行列同時分解とし、それ以外の部分は付加情報としてグラフ正則化で関連づけさせる方法が幾つか提案されている[68]。また、列が共有されていなくても、行が共有されていた場合、個々に次元圧縮した後にMutual Nearest Neighbors(MNN、双方向BLASTベストヒットのアナロジー)でペアリングしたり[69]、CCAで射影された低次元空間上で、Dynamic Time Warping(DTW、ペアワイズアライメントのアナロジー)でペアリングした例もある[70, 71]。

さらに難しい問題設定として、共有するモードが存在しない(ただし、何かしら互いに関連したサンプルからデータは取られている)Unpairedなデータセットの統合も考えられる([71]の文献では、このようなデータ構造をDiagonalと呼んでいる)。このような解析を可能とするアプローチとして、データを別々に次元圧縮しておき、圧縮次元先でのデータの分布形状で、データ点間の対応付けを行う、多様体アライメント[72]や、最適輸送問題[73]、オートエンコーダー[74]が提案されている。CCAをこのようなデータ構造向けに拡張したBi-CCAという手法も提案されている[75]。また、データを別々に次元圧縮して、コアテンソルを互いに共有・転移学習するという方法も提案されている[76, 77]。

共通/独自因子の分離問題 本稿で紹介したアルゴリズムでは、複数のデータ行列・テンソル間で共通の因子行列を仮定し、その因子行列の推定に複数のデータ行列・テンソルを参加させることで、互いに再現性がある因子行列を推定する。しかしながら、データの種類が異なり、共通しないパターンも個々のデータに含まれる場合、誤差項でそれらを吸収できず、最適化がうまく収束しない場合もある。このような状況では、共通因子行列とは別に、個々のデータが独自に持っているパターン(独自因子行列)を設定することで、最適化が改善する場合がある。または、共通因子の方は取り除きたい交絡バイアスとして各データから分離し、独自因子のほうを注目して解析する問題設定もある。共通/独自因子を考慮したモデルを利用した手法やツールとしてOmicsPLS(O2PLS)[78]、JIVE[79]、CSMF[80]、LIGER[81]、GroupICA82]、scPLS[83]、Differential PCA[84]、Contrastive PCA[85]などがある。

重みづけ問題 本稿では、複数のデータを扱う際には、基本的にどのデータもそのまま統合していた。しかしながら、実際はよりパターンが大きい、またはパターンが多いデータや、サイズが大きいデータが最適化において支配的となり、複数のデータを平等に扱えない場合もある。または、クオリティが低いデータを混ぜると、全体の最適化の性能が落ちるので、最適化に参加させたくない場合も考えられる。どちらの場合にせよ、第2回[2]で紹介したグラフ正則化のように、最適化時に個々のデータの分解項に重みをかけてから、同時に最適化する必要があるだろう。

現在まで、重み付けの根拠として採用されている尺度としては、各テンソルのL2ノルム[86]、要素数[87, 88]、分散[89]、再構築誤差[90]、第一固有値[91]、情報量基準[67]、外的尺度との相関係数[92]などが挙げられる。または重みを自動的に推定できるテンソル分解手法も存在する[93]。その分解で得られた因子行列を利用した下流のタスクを事前に設定できれば、そのタスクの精度を最大にする重み付けを後述するCross Validation(CV)で推定するという方針も考えられる。

ランク推定・欠損値補完問題 本連載ではそれほどとりあげなかったが、行列・テンソル分解では事前に設定する必要があるパラメーターとしてランクがある。ランクが小さいと扱いやすいが、その分生物学的なシグナルを取りこぼす危険性がある一方(未学習)、ランクが大きいほど、ノイズのパターンも取り出すことになり、誤った結論を導きやすくなる(過学習)。これらのトレードオフの関係の中で、適切なランクを推定することは、実用上重要な問題である。

ad hocな解決法として、PCAでは、データ行列が持つ分散のうち8~9割程度を保持する次元までを保持するようにランクを決定するやり方が採用される場合が多いが、特に強い根拠がある訳ではない。似たような考え方で、NMFICAでは、誤差をある程度取り除ける次元までをランクに設定したり、スパース性、計算結果の安定性を利用してランク推定する[94, 95]。テンソル分解の場合は、CP分解ではCORCONDIA、Tucker分解ではDIFFITといったランク推定法が利用されている[18]。

もう少し体系化された方法としては、モデルが確率モデルである場合に利用できるモデル選択基準[96]や、データを部分的に欠損させて、その部分をモデルから推定することで、モデルの汎化性能が最大となるランクを推定するCV97]が挙げられる。CVを行列・テンソル分解で行う場合、データの欠損位置を1、そうではない部分に0を代入した、マスク行列・テンソルを利用する。このマスク行列・テンソルをデータテンソルにかけ、データをわざと欠損させて、後から推定させるCVと、データが最初から欠損している時に、その部分を推定したい欠損値補完問題は、本質的に同じことをしているため、両タスクはマスク行列・テンソルで統一的に扱える[28, 30, 41, 97]。著者の経験上は、Akaike Information Criterion(AIC)は、大きいランクを選ぶ傾向があり、一方Bayesian Information Criterion(BIC)やCVは、逆に小さいランクを選びがちであり、どちらも常に生物学的解釈に有効なランクを設定できるとは限らず、理論的方面でもう少し工夫が必要だと思われる。

多くのデータを統合していく過程で、自ずと分解モデル自体も複雑になり、扱うパラメーター数が増加する。その場合、どのようなランク推定法であれ、パラメーターの全探索がそもそも不可能になる。そのため、限られた計算資源の中でなるべく最善な解を得ようとする試みとして、ベイズ最適化[4]などのアプローチが提案されている。

おわりに

今回は、第1回で紹介した行列分解の発展型である、テンソル分解を紹介した。また、第2回で紹介した行列同時分解と同様に、複数のテンソルを互いに関連づけながら、同時に分解できることを示した。考え方としては、複数のテンソル間で共有するモードがあった場合に、共通因子行列を仮定し、その因子行列の推定に、それらテンソルを参加させることで、複数のテンソルで再現するようなパターンを抽出するというものであり、これまで解説してきた「パターンの和としての行列分解」の発展型に相当する。

生命科学で得られるデータは、背後にあるシステム自体が複雑に絡み合っているということもあり、データ間にも複雑な繋がりがある。数あるデータサイエンス分野の中でも、生命科学のこのデータ構造の複雑さはトップレベルであり、どのようにこれら繋がりを考慮したモデリングをしていくのかは、今後のバイオインフォマティクス研究の重要な課題となるだろう。そのようなタスクにおいて、行列・テンソル分解を利用するメリットとしては、あらゆるデータ構造に対して統一的、汎用的に適用できることだと著者は考えている。一方で、同時に扱えるデータが増えることで、今後新たに発生する課題もあることを紹介した。

これまでの連載で紹介したデータは、何かしらの実験装置の実測値を想定していたが、行列・テンソル分解が適用できるデータはそれにとどまらない。第4回では、アンケートのようなカテゴリカルなデータや、データ間の距離、ノードとエッジで構成されるグラフといったデータにも利用できるように拡張された行列・テンソル分解手法を紹介する。

References
略語リスト

・CP分解

CANDECOMP/PARAFAC分解

・ALS

Alternative Least Square

・CP-ALS

CANDECOMP/PARAFAC- Alternative Least Square

・SVD

Singular Value Decomposition

・HOSVD

Higher-Order Singular Value Decomposition

・HOOI

Higher-Order Orthogonal Iteration of Tensors

・NMF

Non-negative Matrix Factorization

・NTF

Non-negative Tensor Factorization

・NTD

Non-negative Tucker Decomposition

・ICA

Independent Component Analysis

・MCA

Multi-way Component Analysis

・EEG

Electroencephalogram

・SNP

Single Nucleotide Polymorphism

・QTL

Quantitative Trait Locus

・PLS-R

Partial Least Squares Regression

・PLS-DA

Partial Least Squares Discriminant Analysis

・LDA

Linear Discriminant analysis

・CMF

Collective Matrix Factorization

・CMTF

Coupled Matrix Tensor Factorization

・MFA

Multiple Factor Analysis

・PCA

Principal Component Analysis

・CIA

Co-inertia Analysis

・CCA

Canonical Correlation Analysis

・JointNMF

Joint Non-negative Matrix Factorization

・GroupICA

Group Independent Component Analysis

・GSVD

Generalized Singular Value Decomposition

・OSS

Open Source Software

・MNN

Mutual Nearest Neighbors

・DTW

Dynamic Time Warping

・CV

Cross Validation

・AIC

Akaike Information Criterion

・BIC

Bayesian Information Criterion

著者略歴

露崎 弘毅
2015年、東京理科大学生命創薬科学科博士後期課程終了。博士(薬科学)。同年より、理化学研究所情報基盤センターバイオインフォマティクス研究開発ユニット(現在の所属1)に在籍。現在、基礎科学特別研究員及びJSTさきがけ研究員を兼任。パッケージングに特化したハッカソンBio “Pack” athonを主催。
ホームページ:https://sites.google.com/view/kokitsuyuzaki

 
© 2022 日本バイオインフォマティクス学会

This article is licensed under a Creative Commons [Attribution-NonCommercial-ShareAlike 4.0 International] license.
https://creativecommons.org/licenses/by-nc-sa/4.0/
feedback
Top