張量(テンソル)とは何か?概念・定義・変換則から機械学習・物理への実用ガイド
張量(テンソル)とは — 概要と直感
張量(ちょうりょう、英: tensor)は、線形代数と微分幾何学における基本的な概念で、「スカラー(0次)・ベクトル(1次)・行列(2次)を一般化したもの」です。もっと正確には、張量は複数のベクトルや双対ベクトル(線形汎関数)に対して多重線形(各引数に対して線形)に作用する写像、あるいはベクトル空間とその双対空間のテンソル積として定義されます。
直感的な理解
- スカラーは値(例: 温度)で、座標変換に不変。
- ベクトルは矢印(例: 速度)で、座標系を変えると成分が線形に変換される。
- 行列は「ベクトルを別のベクトルに写す線形写像」で、成分は行列要素。
- 張量はこれらの一般化で、入出力が複数ある「多重線形写像」。座標系を変えたときに成分が決まった法則(変換則)に従う点が重要。
数学的な定義(有限次元の場合)
有限次元ベクトル空間 V の上で、(r,s)-張量(しばしば「次数」や「階」あるいは「型」と呼ぶ)は次のように定義できます。
- (r,s)-張量は V の r 個の双対空間(V*)要素と V の s 個の要素を入力として、実数(または基底体)の値を返す多重線形写像。
- 同値な表現として、(r,s)-張量は V の r 回のテンソル積と V* の s 回のテンソル積の直積空間に属する元、すなわち V^{⊗ r} ⊗ (V^*)^{⊗ s} の元。
特別な場合:
- スカラー:(0,0)-張量(ただの数)。
- ベクトル:(1,0)-張量。
- 双対ベクトル(共変ベクトル、線形汎関数):(0,1)-張量。
- 行列や線形写像は通常 (1,1)-張量 と見なせる(あるいは bilinear form は (0,2)-張量)。
成分表示と変換則
座標系(基底)を選ぶと、張量は成分で表現できます。例えば、(r,s)-張量 T の成分を T^{i1...ir}_{j1...js} と書くと、座標変換 x → x' の下で成分はヤコビ行列(偏導関数)を用いて次のように変換します:
T^{i'1...i'r}_{j'1...j's} = (∂x^{i'1}/∂x^{i1}) ... (∂x^{i'r}/∂x^{ir})
(∂x^{j1}/∂x^{j'1}) ... (∂x^{js}/∂x^{j's}) T^{i1...ir}_{j1...js}.
ここで上付き添字(超脚)は「反変(contravariant)」、下付き添字(脚)は「共変(covariant)」を表します。反変成分はヤコビ行列で、共変成分はその逆(逆ヤコビ、または偏導関数の逆順)で変換されます。
標記法(アインシュタイン和記法)と演算
- アインシュタインの縮約規則(和記法)では、上下に同じ添字が現れれば自動的にその添字で和を取る。これにより式が簡潔になる。
- テンソル積(⊗):2つのテンソルを結合して高次のテンソルを作る。例えばベクトル v と w のテンソル積 v ⊗ w は (2,0)-張量。
- 縮約(contract):一つの上付き添字と一つの下付き添字で和を取る操作。次数を2だけ減らす(例: 行列のトレースは縮約の一例)。
- 対称化・反対称化:添字を交換して平均を取ることで対象部分や反対象部分を取り出す。
計量(metric)とインデックスの上げ下げ
計量テンソル g (通常は (0,2)-張量) は二つのベクトルを取りスカラーを返す双線形形式です。計量によりベクトルと双対ベクトルを対応させ(インデックスを上下に変換)、共変成分と反変成分の変換が可能になります(例: v_i = g_{ij} v^j)。
物理・幾何での例
- 応力テンソルや電磁テンソル、エネルギー運動量テンソル(特に相対論的場の理論の T^{μν})などは物理学で中心的役割を果たす。
- 曲率テンソル(リーマン曲率テンソル)は微分幾何学における(1,3)または(0,4)型の張量で、曲率を記述する。
- 計量テンソルは距離や角度を測るために必要。
情報技術・機械学習における「テンソル」
ITや機械学習の文脈で「テンソル」と言う場合、多くは「多次元配列(多次元の数値データ)」を指します。TensorFlow や PyTorch、NumPy の ndarray のように、次数(rank)や形状(shape)を持つデータ構造です。ただし注意点として、これらの「テンソル」は数学的な張量(座標変換則を満たすオブジェクト)とは厳密には同じ意味ではありません。機械学習では「テンソル」という語が「多次元配列」の意味で広く使われています。
実務上は次のような違いを意識するとよい:
- 数学的張量:基底変換に対して特定の変換則を満たす抽象的な対象。
- ML のテンソル:メモリ上に連続して格納された数値配列。形状(例: [batch, height, width, channel])と演算(足し算、行列積、テンソル積、tensordot, einsum など)が中心。
多くの機械学習ライブラリは、テンソル演算を効率化するためにブロードキャストやベクトル化、GPU/TPU 上での実行を提供しています。数学的な張量の概念はアルゴリズムや物理モデリングの理解に役立ちますが、コード上のテンソルは「データ構造」として取り扱うのが実際的です。
実用上の重要ポイント・用語の混乱
- 「階(order)」「次数(degree)」「ランク(rank)」などの用語は文脈によって意味が変わります。テンソルの「階」は添字の数(例: 2次テンソルは行列)を指すことが多い一方、線形代数の「行列のランク」は別の概念です。機械学習では「ランク」は次元数(軸の数)を指すことがあるので注意。
- 「テンソル = 多次元配列」と使うのは実用的ですが、物理や微分幾何学での「張量」は変換則が本質であることを意識する。
計算例とよく使われる演算(実務目線)
- テンソル積(tensor product): 高次元特徴を作る、あるいはテンソル表現を結合する際に用いられる。
- テンソル縮約(tensordot / einsum): 添字同士を合成・和をとって次数を落とす。NumPy の einsum や tensordot、深層学習ライブラリの tensordot はこれに相当。
- 行列積やバッチ行列積(batched matmul): 2次テンソル(行列)演算の一般化で、ニューラルネットワークのバッチ処理に不可欠。
まとめ
張量は「多重線形性」と「座標変換則」を核とする数学的概念で、スカラー・ベクトル・行列の一般化です。物理や微分幾何では変換則を満たす抽象的対象として使われ、IT領域(特に機械学習)では主に「多次元配列」として実装・操作されます。両者を混同しないこと、文脈に応じて「テンソル」の意味を切り分けることが重要です。
参考文献
- Wikipedia: 張量(線形代数) — 日本語
- Wikipedia: Tensor (mathematics)
- Wikipedia: Einstein notation
- TensorFlow Guide: Tensors — TensorFlow
- PyTorch: Tensors — Documentation
- NumPy: numpy.einsum — Documentation
- Wikipedia: Tensor field


