テンソル 階数 形状 ブロードキャスト アインシュタイン記法
テンソルとは
テンソル(Tensor)
多次元配列の一般化。
・0階テンソル:スカラー(単一の数)
・1階テンソル:ベクトル(1次元配列)
・2階テンソル:行列(2次元配列)
・3階以上:テンソル(多次元配列)
深層学習での「テンソル」は、主に多次元配列を指す。物理学のテンソルとは厳密には異なる概念だが、プログラミングでは同義的に使われる。
形状(Shape)
テンソルの構造を表す最も重要な概念が形状。
| データ | 形状 | 説明 |
|---|---|---|
| スカラー | () | 0次元 |
| ベクトル(長さ5) | (5,) | 1次元、5要素 |
| 行列(3×4) | (3, 4) | 2次元、3行4列 |
| RGBイメージ | (H, W, 3) | 高さ×幅×チャンネル |
| 画像バッチ | (N, H, W, C) | バッチ×高さ×幅×チャンネル |
| 動画バッチ | (N, T, H, W, C) | バッチ×時間×高さ×幅×チャンネル |
テンソル演算
要素ごとの演算
同じ形状のテンソル同士、対応する要素に演算を適用。
A + B, A * B, A ** 2 など
ブロードキャスト
ブロードキャスト(Broadcasting)
形状が異なるテンソル間の演算を可能にする仕組み。
小さいテンソルが自動的に拡張される。
例:(3, 4) と (4,) の和 → (4,) が各行に適用
軸(Axis)に沿った演算
sum, mean, max などを特定の軸に沿って計算。
形状 (3, 4) のテンソルで axis=0 の sum → 形状 (4,)
形状 (3, 4) のテンソルで axis=1 の sum → 形状 (3,)
深層学習での慣例
| フレームワーク | 画像の形状 |
|---|---|
| PyTorch | (N, C, H, W) チャンネルファースト |
| TensorFlow/Keras | (N, H, W, C) チャンネルラスト |
実務での応用
WEB開発での応用
画像処理:画像は3階テンソル(高さ×幅×チャンネル)。
時系列データ:複数の時系列を2階テンソルで表現。
JavaScript:TensorFlow.js でブラウザ上でテンソル計算。
AI/MLでの応用
バッチ処理:複数サンプルをまとめて処理するために次元を追加。
Attention:Query, Key, Value は (batch, seq_len, dim) の3階テンソル。
畳み込み:カーネルは4階テンソル (out_ch, in_ch, H, W)。
形状変換:reshape, transpose, squeeze, unsqueeze で形状操作。
深掘りリンク
- PyTorch: Tensors Tutorial
- NumPy: Broadcasting
- 動画:3Blue1Brown「What's a Tensor?」
- 関連:einsum(アインシュタイン記法)、テンソル積