前処理(標準化、正規化、データ拡張など)

PyTorchにおけるデータ処理と前処理は、モデルの性能を向上させ、学習を安定させるために非常に重要なステップです。特に標準化(standardization)正規化(normalization)、**データ拡張(data augmentation)**は画像・テキスト・数値データに共通して活用される代表的な手法です。以下にそれぞれについて詳しく説明します。


1. 標準化(Standardization)

定義

データの平均(mean)を0、標準偏差(standard deviation)を1に変換する操作です。

数式

xstandardized=xμσx_{\text{standardized}} = \frac{x – \mu}{\sigma}

  • μ\mu:平均値

  • σ\sigma:標準偏差

利点

  • 勾配のスケールが安定し、学習が高速になる。

  • 多くのニューラルネットワークでは標準化済みの入力を前提に設計されている(例:ResNetなど)。

PyTorchでの実装例(画像データ)

python
import torchvision.transforms as transforms transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) ])

2. 正規化(Normalization)

定義

データの値を特定の範囲(例:0〜1)にスケーリングする操作です。

数式(Min-Max Normalization)

xnormalized=xmin(x)max(x)min(x)x_{\text{normalized}} = \frac{x – \text{min}(x)}{\text{max}(x) – \text{min}(x)}

利点

  • 特徴量間のスケールを揃え、学習が安定。

  • 特に距離ベースの手法(k-NNやSVM)で重要。

PyTorchでの使用(ToTensor による簡易正規化)

python
transform = transforms.ToTensor() # [0, 255] → [0.0, 1.0] に変換

3. データ拡張(Data Augmentation)

定義

元のデータを様々な方法で変形し、疑似的に学習データを増やす手法です。

主な手法(画像データの場合)

  • 水平方向反転(horizontal flip)

  • 回転(rotation)

  • クロップ(crop)

  • カラージッタ(brightness, contrast 変化)

  • ランダムノイズ付与

利点

  • 過学習の防止

  • データの多様性向上により、汎化性能が上がる

PyTorchでの実装例

python
transform = transforms.Compose([ transforms.RandomHorizontalFlip(), transforms.RandomRotation(15), transforms.ColorJitter(brightness=0.2, contrast=0.2), transforms.ToTensor(), transforms.Normalize(mean=[0.5], std=[0.5]) ])

まとめ

手法 主な目的 PyTorchでの主な方法
標準化 平均0・分散1にして学習を安定化 transforms.Normalize()
正規化 値を一定範囲にスケーリング transforms.ToTensor() など
データ拡張 疑似データの生成による汎化性能向上 transforms.Random* 系列の関数群

必要に応じて、これらの前処理は独自の関数やtorchvision.transforms.Lambdaなどを用いてカスタムすることも可能です。

生成日:2025/05/22