【データ圧縮の基本】テンソルのリダクションとは?平均・合計・最大値を一気に理解しよう!📉📊
機械学習やデータ処理をしているとよく登場する操作――それが**「リダクション(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)**について解説します!
こちらもテンソル操作のキモなので、ぜひチェックしてください📦✨