テンソルネットワークの入り口

はじめに

 今回は、機械学習の分野でもしばしば聞くようになってきたテンソルネットワークを紹介する。テンソルネットワークとは、物性物理や統計力学の分野で発展してきた計算手法である(と私は理解している)。この分野で開発された計算手法が、近年、量子コンピュータや機械学習の分野にも応用されるになってきた。

テンソルとは

 テンソルネットワークを説明する前に、テンソルについて説明する。まず最初に、D次元ベクトルVを考える。

     \begin{align*} V=(V_1,\cdots,V_D) \end{align*}

ベクトルの要素は添え字1つの変数V_dで表すことができる。次に、M\times Nの行列Wを考える。

     \begin{align*} W=\begin{pmatrix} W_{11} & \cdots & W_{1n} & \cdots & W_{1N}\\ \vdots & \ddots & & & \vdots \\ W_{m1} & & \ddots & & W_{mN} \\ \vdots & & & \ddots & \vdots \\ W_{M1} & \cdots & W_{mn} & \cdots & W_{MN} \end{pmatrix} \end{align*}

この要素は添え字2つの変数W_{mn}で表すことができる。添え字1つの変数がベクトルを、添え字2つの変数が行列を表した。これを一般化して任意の個数の添え字を持つ変数を考える。

     \begin{align*} T_{abc\cdots} \end{align*}

この変数で表される量をテンソルと呼ぶ(厳密なテンソルの定義は例えば[1]を参照のこと)。ベクトルは1階テンソル、行列は2階テンソルである。また、スカラは0階テンソルに相当する。図で示すと以下のようになる。

図1

テンソルネットワークとは

 線形代数によると、任意のM\times N行列Aを特異値分解することができる(証明は線形代数の教科書を参照のこと)。

     \begin{align*} A= U\Sigma V^{\dagger} \end{align*}

ここで、UM\times Nの一般化されたユニタリ行列、VN\times Nのユニタリ行列、\SigmaN\times Nの対角行列(対角成分は全て非負実数)である。また、V^{\dagger}Vのエルミート共役を表す。上式を成分で書くと

     \begin{align*} A_{mn}= \sum_{k=1}^{N}U_{mk}\Sigma_{k} V^{\dagger}_{kn} \end{align*}

となる。M\ge Nのときの様子は以下の通り。

図2


いま、\tilde{V}_{kn}=\Sigma_kV^{\dagger}_{kn}と置くと

     \begin{align*} A_{mn}= \sum_{k=1}^{N}U_{mk}\tilde{V}_{kn} \end{align*}

となり、再び行列で表記すると

     \begin{align*} A= U\tilde{V} \end{align*}

となる。さて、この変形の過程を図で示すと以下になる。

図3

この変形は下図のように一般化できる(証明は略)。

図4

式で書くと

(1)    \begin{align*} T_{i_1i_2\cdots i_n}= G^{(1)}_{i_1\;j_1}G^{(2)}_{j_1\;i_2\;j_2}\cdots G^{(n)}_{j_{n-1}\;i_n} \end{align*}

となる。上式において、2度出現する添え字については和をとるという約束をし、和記号を省略した(アインシュタイン縮約記法)。テンソルネットワークとは、階数の大きなテンソル(例えば上のT_{i_1i_2\cdots i_n})を、階数の小さなテンソル(例えば上のG^{(i)}_{a\;b}G^{(j)}_{a\;b\;c})の積に分解したものである。式(1)は、テンソルネットワークの一例であり、Matrix Product State(MPS)と呼ばれる。その他のテンソルネットワークの例を図4に示す(引用元)。下図では各テンソルが丸で表記されていることに注意する。また、それぞれの名称についてもここでは言及しない。いろいろな分解の仕方があるという点だけを抑えておけばよい(詳細は私も知らない)。

図5

テンソルネットワークのご利益

 大きなテンソルを小さなテンソルに分解すると何がうれしいのかを見るために、上で議論した特異値分解を再度とりあげる。

     \begin{align*} A_{mn}= \sum_{k=1}^{N}U_{mk}\Sigma_{k} V^{\dagger}_{kn} \end{align*}

ここで、AM\times Nの行列、UM\times Nの一般化されたユニタリ行列、VN\times Nのユニタリ行列である。また、行列\SigmaN\times Nの正方対角行列であり、要素は全て非負の実数である。対角成分は左上から右下に向けて降順に並んでおり、0が並ぶこともあり得る。図で書くと以下のようになる。

図6

さて、K+1番目以降の対角成分が0となる場合

     \begin{align*} A_{mn}= \sum_{k=1}^{K}U_{mk}\Sigma_{k} V^{\dagger}_{kn} \end{align*}

と書くことができる。M\ge Nのとき下図の緑色の領域が計算に寄与する部分である。

図7

このとき、計算に寄与するU_{mk}の成分数はMK\Sigma_{k}の成分数はKV^{\dagger}_{kn}の成分数はK^2であるから、右辺の総成分数はMK+K+K^2となる。一方、左辺のA_{mn}の成分数はMNである。いま、M=N=1000K=100として見積もってみると左辺の成分数は10^6、右辺の成分数は110100\sim10^5となる。同じテンソルを保存するために必要とされる容量を節約できることが分かる。0に近い特異値も適度に無視するようにすればもっと節約することができる。このことは一般のMPSに対しても成り立つ。つまり下図の右辺のテンソル間をつなぐ添え字j_lの取り得る次元を減らすことができれば記憶容量を節約できるのである(もちろん、添え字j_lの取り得る次元を減らすということは近似に相当するので、精度と記憶容量というトレードオフは発生する)。

図8

まとめ

 今回は、テンソルネットワークの触りの部分だけを紹介した。私自身もこの手法に関しては素人なので、テンソルネットワークに関するこれ以上の深い議論はしないことにする。次回は、今回紹介したMPSを深層学習のネットワークに適用し、精度を維持しつつ重みパラメータの数を劇的に減らすことができる例を紹介したい。

参考文献

  1. 情報幾何学の基礎
  2. テンソルネットワーク入門
  3. 物理学の手法「テンソルネットワーク」を用いて計算の圧倒的効率化を図る
Kumada Seiya

Kumada Seiya

仕事であろうとなかろうと勉強し続ける、その結果”中身”を知ったエンジニアになれる

最近の記事

  • 関連記事
  • おすすめ記事
  • 特集記事

アーカイブ

カテゴリー

PAGE TOP