ブロードキャストとテンソル演算

TensorFlowにおける**ブロードキャスト(broadcasting)テンソル演算(tensor operations)**は、NumPyと同様に、多次元配列(テンソル)同士の演算を効率的に行うための重要な概念です。以下に、それぞれについて詳しく説明します。


1. テンソル演算とは

テンソル演算は、テンソル(多次元配列)に対して行われる数値計算を指します。TensorFlowでは、以下のような基本的な演算が提供されています。

基本的なテンソル演算の例

演算 関数名
加算 tf.add tf.add(x, y)
減算 tf.subtract tf.subtract(x, y)
乗算 tf.multiply tf.multiply(x, y)
除算 tf.divide tf.divide(x, y)
行列積 tf.matmul tf.matmul(a, b)

これらの演算は通常、同じ形状のテンソルに対して要素ごとに行われます。しかし、異なる形状のテンソルに対して演算を行う場合には、ブロードキャストが適用されます。


2. ブロードキャスト(Broadcasting)とは

ブロードキャストとは、異なる形状のテンソル間で演算を行う際に、形状を自動的に調整して計算を成立させるルールです。これは、テンソルの次元を仮想的に拡張して、形状を揃える操作です。

ブロードキャストのルール

次のように、後ろの次元(右側)から比較して、以下の条件を満たす必要があります:

  • 次元のサイズが同じ

  • どちらかの次元が1である(この場合、その次元は繰り返される)

例1:スカラーとベクトルの加算

python
import tensorflow as tf x = tf.constant([1, 2, 3]) # shape: (3,) y = tf.constant(10) # shape: () result = tf.add(x, y) # shape: (3,) → [11, 12, 13]

y はスカラー(形状なし)ですが、x に合わせて自動的に各要素に加算されます。

例2:行列とベクトルの加算

python
x = tf.constant([[1, 2, 3], [4, 5, 6]]) # shape: (2, 3) y = tf.constant([10, 20, 30]) # shape: (3,) result = tf.add(x, y) # shape: (2, 3)

ここでは、y の形 (3,)(1, 3) とみなされ、x の2行にブロードキャストされます。


3. ブロードキャストが失敗する例

ブロードキャストはすべての組み合わせで可能なわけではありません。次のような形状は互換性がないため、エラーになります:

python
a = tf.constant([[1, 2], [3, 4]]) # shape: (2, 2) b = tf.constant([1, 2, 3]) # shape: (3,) # tf.add(a, b) はエラー:次元が一致せず、1にもなっていないためブロードキャスト不可

4. 応用例:テンソルのスケーリングと正規化

ブロードキャストを利用すると、テンソル全体に一定の値を掛けたり、列ごとの平均を引いたりする処理が簡潔に記述できます。

python
# 行ごとの平均を引いて正規化 x = tf.constant([[1., 2., 3.], [4., 5., 6.]]) mean = tf.reduce_mean(x, axis=1, keepdims=True) # shape: (2, 1) x_normalized = x - mean # shape: (2, 3), mean がブロードキャストされる

まとめ

項目 内容
テンソル演算 TensorFlowで提供される基本的な数学演算
ブロードキャスト 形状の異なるテンソル間で自動的に形状を合わせて演算を行う仕組み
利点 コードが簡潔・高速になり、ループ不要で計算可能

ブロードキャストとテンソル演算を理解することで、TensorFlowでの数値処理が効率的に行えるようになります。さらに複雑な深層学習モデルでも、ブロードキャストは頻繁に利用されるため、習得は非常に重要です。

生成日:2025/05/21