【データ圧縮の基本】テンソルのリダクションとは?平均・合計・最大値を一気に理解しよう!📉📊

機械学習やデータ処理をしているとよく登場する操作――それが**「リダクション(reduction)」**です。

ブロードキャストが「形状を広げて」演算するのに対し、リダクションは「形状を縮める」操作

この記事では、**リダクションとは何か?どんな場面で使うのか?どう書くのか?**を、初心者にもわかりやすく解説していきます💪😊


✅ リダクションとは?

リダクションとは、テンソルの特定の次元(axis)に沿って、要素をまとめて1つの値にする処理です。

たとえば、合計、平均、最大値、最小値などが典型的なリダクション操作です。

import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6]])

このテンソルに対して…

np.sum(a)         # 全要素の合計 → 21
np.mean(a)        # 全体の平均   → 3.5
np.sum(a, axis=0) # 列ごとの合計 → [5, 7, 9]
np.sum(a, axis=1) # 行ごとの合計 → [6, 15]

ポイントは axis の指定!

  • axis=0: 縦(列方向)にまとめる

  • axis=1: 横(行方向)にまとめる


🔁 主なリダクション関数一覧

関数 内容
sum() 合計
mean() 平均
max() 最大値
min() 最小値
prod() 積(すべて掛ける)
argmax() 最大値のインデックス
argmin() 最小値のインデックス
std() 標準偏差(ばらつき)

どれもリダクション操作で、テンソルの次元を1つ縮める役割を持っています。


🧪 PyTorchでも使える!

import torch

x = torch.tensor([[1.0, 2.0, 3.0],
                  [4.0, 5.0, 6.0]])

# 全体の平均
print(torch.mean(x))  # tensor(3.5000)

# 行ごとの平均
print(torch.mean(x, dim=1))  # tensor([2., 5.])

PyTorchでは、axis の代わりに dim を使います。 また、keepdim=True を付ければ元の次元を保ったままリダクションできます!

torch.sum(x, dim=1, keepdim=True)
# → tensor([[ 6.],
#            [15.]])

🎯 リダクションの活用例

📌 損失関数(loss function)計算
→ 平均や合計で損失を縮約し、1つのスカラーにする

📌 特徴量の統計量取得
→ 入力テンソルの平均・標準偏差などを求めることで、正規化が可能

📌 テンソルのサイズをそろえる
→ 不要な次元をリダクションして削除、次のレイヤーに渡す処理に便利


⚠️ 注意点

  • axis/dimの指定ミスに注意! → 結果の形が崩れてしまう原因になります

  • keepdimの有無でshapeが変わる → 後続処理との整合性が必要

  • PyTorchではfloat型でないとmeanが使えない → 必要なら .float() で変換!


✅ まとめ

  • リダクションはテンソルの形状を縮める操作

  • 合計・平均・最大値などの関数がこれに該当

  • axis(NumPy) / dim(PyTorch)を正しく指定することがポイント

  • 損失計算や特徴量の集約など、実務でも超重要!

テンソルのブロードキャストとリダクションを理解すれば、あらゆるデータ処理が自由自在に!🌈


次回は、**テンソルの形状変換(reshape, squeeze, unsqueeze)**について解説します!

こちらもテンソル操作のキモなので、ぜひチェックしてください📦✨