テンソルネットワークとは
テンソルネットワーク(Tensor Network)は、量子物理学・量子情報・機械学習・統計力学などの分野で使われる強力な数値的および概念的ツールであり、複雑な高次元データ(多体量子状態、確率分布、ニューラルネットワークなど)を、低ランクテンソルのネットワーク構造に分解して表現・計算する手法となる。
テンソルとは、多次元配列を一般化した数学的概念であり、データや物理量を階層的に表現するために用いられるものとなる。
最も単純なテンソルはスカラーで、これは1つの数値を表す0階テンソルに相当する。次に、1列の数値からなるベクトルは1階テンソル、行と列を持つ表形式の行列は2階テンソルとして扱われ、さらに、3階以上のテンソルは、高次元の構造を持つデータ、たとえばカラー画像(高さ×幅×RGBチャンネル)や量子状態、多次元時系列データなどを表現するために利用されている。
テンソルネットワークはこのようなテンソルに対して、複雑で高次元なテンソル(たとえば、多体量子状態のように指数的に大きくなるデータ)を、複数の小さなテンソルの集合としてネットワーク状に分解・表現する手法で、このアプローチにより、大規模なデータ構造を効率よく扱うことが可能となる。
テンソルネットワークの大きな特徴のひとつは、局所的な相互作用や依存関係を活用して情報を圧縮できることで、これにより、元のテンソル全体を直接扱う必要がなくなり、計算量やメモリ使用量を大幅に削減可能としている。また、テンソル同士の縮約(contract)、内積、トレースといった操作を通じて、物理的な量や確率的な情報を効率的に計算することも可能となる。
さらに、テンソルネットワークは量子エンタングルメント(絡み合い)の構造と深く関わっており、量子物理や量子情報の分野で特に重要なツールとされている。
テンソルネットワークには以下に示すような代表的な構造がある。
-
MPS(Matrix Product States):テンソルを線形の鎖状に連結した構造で、主に一次元の量子系を効率的に表現するのに用いられる。また、自然言語処理などの機械学習でも応用されている。
-
PEPS(Projected Entangled Pair States):MPSを二次元格子に拡張した構造で、二次元量子スピン系など、高次元の量子状態の表現に使われる。
-
MPO(Matrix Product Operator):MPSの作用素バージョンであり、量子系のハミルトニアンや時間発展演算子の効率的な記述に適している。
-
TT(Tensor Train):MPSと類似した形式で、機械学習における高次元テンソルの近似やパラメータ圧縮に広く用いられている。
-
Tree Tensor Network:テンソルが木構造(ツリー状)に接続されたネットワークで、階層的な構造を持つ物理系や深層モデルなどの表現に適している。
-
MERA(Multiscale Entanglement Renormalization Ansatz):多スケールの階層構造を持つネットワークで、量子臨界点付近の複雑なエンタングルメント構造を効率的に記述できる。
このように、テンソルネットワークは構造の工夫によって特定の物理系やデータ構造に最適化された表現を可能にし、以下に示すようなさまざまな分野で高い計算効率と表現力を両立する手法として注目されている。
物理学
テンソルネットワークはもともと多体系量子物理の研究で発展してきた技術であり、現在でも量子系のシミュレーションにおいて重要な役割を果たしている。特に、一次元の量子系における多体量子状態の近似において非常に高い精度を誇り、複雑な量子状態の計算を現実的な計算資源で可能にしている。また、量子スピン系の基底状態の探索や、量子もつれ(エンタングルメント)の構造を解析する際にも有効であり、量子情報科学や量子計算の理論研究にも応用されている。
機械学習
近年では、テンソルネットワークの圧縮性と構造性に注目が集まり、機械学習の分野でも活用が進んでいる。特に、入力データやモデルパラメータが高次元になる深層学習モデルにおいては、テンソル分解を用いることでモデルのサイズを大幅に削減できます。たとえば、Tensor Train Layer(TT-Layer)のように全結合層をテンソル形式で表現する手法や、RNNやCNNの重み行列をテンソルネットワークで圧縮することで、精度を保ちながらパラメータ数を削減することが可能となっている。これにより、省メモリ・高速推論が求められるエッジデバイスやモバイル環境での深層学習の実用化にもつながっている。
その他の分野
テンソルネットワークは、物理やAI以外の分野でも有効に活用されている。たとえば、統計力学における格子モデル(イジングモデル、ポッツモデルなど)の解析では、パーティション関数や相関関数の効率的な計算にテンソルネットワークが使われている。また、データ圧縮や信号処理、さらには画像処理といった分野でも、テンソル分解による次元削減やノイズ除去が行われており、複雑なデータをコンパクトに扱うための手法として注目されている。
このように、テンソルネットワークは物理学的直感と数理的基盤に裏付けられた表現力と計算効率の高さにより、幅広い応用分野で活用される強力なフレームワークとなっている。
テンソルネットワークに関連するアルゴリズム
テンソルネットワークに関連する代表的なアルゴリズムは、主に以下の3つの目的に沿って分類できる。
1. テンソルネットワークの構築・分解アルゴリズム
[SVD(特異値分解)]
-
用途:テンソルを低ランクに近似、MPSやTTなどへの分解に使用。
-
操作:テンソルを行列にreshape → SVD → 小さいテンソルに切り分け。
-
特徴:トランケーションにより情報損失を抑えて圧縮できる。
[テンソルトレイン分解(TT decomposition)]
-
用途:高次テンソルを連鎖状の小テンソルに分解。
-
類似:MPSとほぼ同じ構造(機械学習ではTTが一般的な名称)。
[CP分解(CANDECOMP/PARAFAC)]
-
用途:テンソルをランク1テンソルの和として表現。
-
形式:
Ti,j,k≈∑r=1Rai(r)bj(r)ck(r)
[Tucker分解]
-
用途:主成分分析のテンソル版(低ランクコアテンソル+モード行列)。
2. テンソルネットワークの縮約アルゴリズム(Contracting Algorithms)
テンソルネットワークでは、全体のスカラー量や部分テンソルを求めるために「縮約(contract)」操作が必要となる。
[ネットワーク縮約(Tensor Contraction)]
-
操作:共通インデックスを持つテンソル間で総和を取る。
-
ツール:NumPy、opt_einsum、
@
演算子、einsum
関数など。
[Greedy contraction]
-
毎回、最も小さい計算コストのペアを縮約する方法。
[Optimal contraction path search]
-
全縮約順序の中から最小計算量になる順番を探索(NP困難だが近似可能)。
-
opt_einsum
、cotengra
、quimb
などがサポート。
3. テンソルネットワークを使った物理シミュレーションアルゴリズム
[DMRG(Density Matrix Renormalization Group)]
-
目的:1D量子スピン系の基底状態をMPSで高精度に近似。
-
仕組み:MPSを一対ずつ更新しながらエネルギー最小化。
-
応用:量子化学、スピン鎖、格子模型など。
[TEBD(Time Evolving Block Decimation)]
-
目的:MPSの時間発展を近似計算。
-
仕組み:Trotter分解により局所演算に分解 → SVDでMPS更新。
[iTEBD / iDMRG]
-
目的:無限長(周期的)系での状態・時間発展を計算。
-
i
は”infinite”の意味。
4. 機械学習分野でのテンソルネットワークアルゴリズム
[Tensorized Neural Networks]
-
目的:重みテンソルをTTやMPS形式で圧縮して計算量削減。
-
例:TT-Layer(テンソルトレイン層)、MPS-LSTMなど。
[テンソルリグレッション / 分類]
-
高次元テンソル特徴を直接扱い、CP/Tucker/TTで重みを圧縮。
-
応用:医用画像、時空間データ、自然言語処理など。
実装支援ライブラリ(Python)
ライブラリ | 説明 |
---|---|
opt_einsum |
縮約順序の最適化と効率的なテンソル計算 |
quimb |
テンソルネットワークの作成・操作・DMRG/TEBD実装あり |
TensorNetwork (by Google) |
汎用テンソルネットワーク構築・機械学習統合 |
ITensor / TeNPy |
具体的な適用事例
テンソルネットワークに関連する代表的なアルゴリズム(DMRG, TEBD, TT分解, MPS分類器など)の具体的な適用事例について述べる。
1. DMRG(Density Matrix Renormalization Group)
主に物理学で使用されるが、量子化学や材料設計にも応用拡大中。
適用事例
分野 | 具体例 | 内容 |
---|---|---|
量子スピン系 | 1D Heisenberg模型 | 基底状態の高精度計算に使用。大規模量子系も扱える。 |
量子化学 | 多電子分子の基底状態(例:BeH₂, LiF) | Full-CIに匹敵する精度で分子軌道のエネルギーを計算。 |
材料開発 | 高温超伝導体のモデル化 | ハバード模型の解析により電子相関を解明。 |
論文例:
-
Matrix product states and DMRG for quantum chemistry (Chan & Sharma, 2011)
2. TEBD(Time Evolving Block Decimation)
時間発展の模擬(量子動力学、熱化、情報伝播)に用いられる。
適用事例
分野 | 具体例 | 内容 |
---|---|---|
量子計算 | スピン鎖の時間発展 | 初期状態を与えて局所演算子で動かす。量子ウォークの解析。 |
熱力学 | イジング模型の熱平衡到達過程 | 非平衡初期状態がどう熱化していくかを見る。 |
情報論 | エンタングルメントエントロピーの時間発展 | エンタングルメントの速度や波動の伝播を計測。 |
-
Time-evolving block decimation for numerical simulation of 1D quantum systems (Vidal, 2003)
3. TT分解(Tensor Train Decomposition)
高次元テンソルの圧縮・操作に最適。AIでも活用が進む。
適用事例
分野 | 具体例 | 内容 |
---|---|---|
機械学習 | TT-Layer(PyTorch)によるモデル圧縮 | MNISTやCIFARのCNNで1000x圧縮、精度維持。 |
数値解析 | 10次元ポアソン方程式の解法 | 次元の呪いを回避して解ける(TT-Cross法) |
パラメータチューニング | ハイパーパラメータ最適化のテンソル表現 | 複数パラメータ軸をTT形式で管理、探索空間縮小。 |
-
Tensorizing Neural Networks (Novikov et al., NIPS 2015)
-
TT-cross: A black-box cross approximation algorithm for very high-dimensional tensors (Oseledets, 2010)
4. MPS分類器(Matrix Product State Classifier)
量子インスパイアされた画像分類・自然言語処理の新手法。
適用事例
データ | 内容 | 精度 |
---|---|---|
MNIST手書き数字 | 各画像をベクトル化 → MPSで分類器構築 | CNNに近い精度(~98%)をテンソル1列で達成 |
CIFAR-10 | カラーチャネルと位置情報をMPSにエンコード | 通常CNNよりやや劣るが圧縮率高い |
自然言語処理 | 文を文字ごとに1-hot → MPS分類器 | 短文分類にてRNNの圧縮版として活用可 |
-
Supervised Learning with Tensor Networks (Stoudenmire & Schwab, NIPS 2016)
5. CP / Tucker 分解
医療・画像処理・推薦システムにおけるテンソル分析の主力。
適用事例
分野 | 具体例 | 内容 |
---|---|---|
医用画像 | 脳MRI分類(Tucker回帰) | 高次元画像データの次元圧縮+分類 |
レコメンド | ユーザー×商品×時間テンソル | 潜在要因を抽出し推薦精度向上(CP) |
動画像解析 | ビデオを3Dテンソルとして処理 | 背景差分、異常検知などに応用 |
-
Tensor decompositions and applications (Kolda & Bader, 2009)
実装例
以下に、代表的なテンソルネットワークアルゴリズムのうち、MPS(Matrix Product State)分類器によるMNIST画像分類の具体的なPyTorch実装例について述べる。
タスク:MPS分類器でMNIST画像を分類する
- 各画像(28×28)をベクトル化し、1列のテンソルネットワーク(MPS)で処理
- 各ピクセルを**1次元テンソル(局所状態)**としてエンコード
- MPSを左から右へ順に縮約し、最終的にクラス確率を得る
前提条件
pip install torch torchvision matplotlib
実装コード(シンプル版)
import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
# --- 1. データ読み込み ---
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
train_loader = DataLoader(datasets.MNIST('.', train=True, download=True, transform=transform), batch_size=64)
test_loader = DataLoader(datasets.MNIST('.', train=False, transform=transform), batch_size=1000)
# --- 2. MPS Layer ---
class MPSLayer(nn.Module):
def __init__(self, input_dim, bond_dim, output_dim):
super().__init__()
self.input_dim = input_dim
self.bond_dim = bond_dim
self.output_dim = output_dim
self.length = input_dim # 784
self.mps = nn.ParameterList([
nn.Parameter(torch.randn(bond_dim, 2, bond_dim)) for _ in range(input_dim)
])
self.first_tensor = nn.Parameter(torch.randn(1, 2, bond_dim))
self.last_tensor = nn.Parameter(torch.randn(bond_dim, 2, output_dim))
def forward(self, x):
# x: [B, L] -> Bバッチ、Lピクセル(784)
B = x.shape[0]
x = (x > 0).float().long() # 0 or 1
result = []
for b in range(B):
psi = self.first_tensor[:, x[b, 0], :] # [1, bond]
for i in range(1, self.input_dim - 1):
psi = torch.einsum('ab,bcd->acd', psi, self.mps[i])
psi = psi[:, x[b, i], :]
out = torch.einsum('ab,bcd->acd', psi, self.last_tensor)
out = out[:, x[b, -1], :] # [1, class]
result.append(out.squeeze(0))
return torch.stack(result)
# --- 3. モデル定義 ---
class MPSClassifier(nn.Module):
def __init__(self):
super().__init__()
self.flatten = nn.Flatten()
self.mps = MPSLayer(784, bond_dim=10, output_dim=10)
def forward(self, x):
x = self.flatten(x)
return self.mps(x)
model = MPSClassifier()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss()
# --- 4. 訓練ループ ---
for epoch in range(3):
model.train()
total_loss = 0
for data, target in train_loader:
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
total_loss += loss.item()
print(f"Epoch {epoch+1}, Loss: {total_loss:.4f}")
# --- 5. 評価 ---
model.eval()
correct = 0
with torch.no_grad():
for data, target in test_loader:
output = model(data)
pred = output.argmax(dim=1)
correct += (pred == target).sum().item()
print(f"Test Accuracy: {correct / len(test_loader.dataset) * 100:.2f}%")
特徴と補足
特徴 | 内容 |
---|---|
圧縮率 | 通常の全結合層(784×10=7,840パラメータ)に対し、MPSでは ≒ 784×bond_dim² 程度に制限可能 |
可読性 | torch.einsum() でテンソル縮約を明示的に行う |
拡張性 | 局所状態のエンコード方式や bond dimension を変更して精度を向上可能 |
実装例の用途
- 量子風分類モデルの学習
- モデルサイズ制約のあるエッジ環境への応用
- 教師あり学習のテンソルネットワーク応用入門
参考図書・リソース
テンソルネットワーク(Tensor Networks)に関連するアルゴリズム・理論・応用(特にAIや量子物理)の参考図書について述べる。
総合・理論入門書
-
Simons Collaboration on the Many-Electron Problem
-
内容:MPS、PEPS、DMRGなどを数式・図で丁寧に解説した決定版入門書
アルゴリズムと数値解析(DMRG, TEBD, TT分解など)
2. 『An Efficient Matrix Product Operator Representation of the Quantum-Chemical Hamiltonian』
-
内容:DMRGを量子化学に応用するための理論・実装を解説
-
読者層:量子系やテンソルネットワークを数値的に扱いたい人向け
3. 『Tensor Spaces and Numerical Tensor Calculus』
-
著者:Wolfgang Hackbusch
-
内容:TT、HT(Hierarchical Tucker)など数値解析分野でのテンソル分解手法を理論とともに解説
-
対象:工学・数値計算分野の研究者
AI・機械学習との融合
4. 『Tensor networks in machine learning』
-
内容:テンソルネットワークによる深層学習圧縮・分類・生成モデル応用の解説
-
おすすめ論文:
-
Supervised Learning with Quantum-Inspired Tensor Networks(Stoudenmire & Schwab)
-
Tensorizing Neural Networks(Novikov et al., NIPS 2015)
-
-
著者:Tamara G. Kolda, Brett W. Bader
-
内容:CP, Tucker, TTなどのテンソル分解とその応用を包括的に整理
実装・ツール利用に役立つ書籍
6. 『Hands-On Quantum Machine Learning With Python』
-
著者:Frank Zickert
-
内容:テンソルネットワークを含む量子ML技術をPythonで実装しながら学べる
-
対応ライブラリ:PennyLane、TensorNetwork、Qiskit
オンラインリソース・講義
リソース名 | 内容 |
---|---|
ITensor Tutorials | Julia/C++によるテンソルネットワークの数値計算入門 |
TeNPy (Tensor Network Python) | Python製DMRG/TEBDライブラリとチュートリアル |
Google TensorNetwork Docs | AIとテンソルネットワークを統合するGoogle製ライブラリ |
書籍
ソフトウェア
-
ITensor:C++/Juliaベースのテンソルネットワークライブラリ
-
TeNPy:Pythonで書かれたMPS系テンソルネットワークフレームワーク
-
TensorNetwork:Google製。機械学習との連携あり
コメント