Normalization
正規化(ノーマライゼーション)がモデルのトレーニングと精度をどのように向上させるかを探求します。Min-Maxスケーリング、Zスコア標準化、およびUltralytics YOLO26プロジェクトにおけるその役割について学びましょう。
正規化は、数値属性を標準的な範囲にリスケーリングするデータ前処理における基本的な手法です。機械学習 (ML)の文脈では、データセットには年齢(0〜100)と所得水準(0〜100,000)のように、スケールの異なる特徴量が含まれることがよくあります。これらをそのまま放置すると、最適化アルゴリズムがより大きな値に偏る可能性があり、収束が遅くなったり、パフォーマンスが最適でなくなったりします。エンジニアはデータを正規化することで、すべての特徴量が最終結果に均等に貢献できるようにし、ニューラルネットワークがより効率的に学習できるようにします。
Link to this section一般的な正規化手法#
データを変換するための標準的な手法にはいくつかの種類があり、それぞれ異なる分布やアルゴリズムの要件に適しています。
- Min-Maxスケーリング: これは最も直感的な正規化の形式です。データを固定された範囲、通常は [0, 1] にリスケーリングします。この変換は、最小値を引き、範囲(最大値マイナス最小値)で割ることで実行されます。これは、ピクセル強度が0から255の間にあることがわかっている画像処理で広く使用されています。
- Zスコア標準化: 正規化と混同されて使われることが多いですが、標準化は具体的にデータを平均0、標準偏差1になるように変換します。これは、データがガウス分布に従う場合に特に有用であり、データが正規分布に従うことを前提とするサポートベクターマシン (SVM)のようなアルゴリズムには不可欠です。
- 対数スケーリング: 極端な外れ値を含むデータやべき乗則に従うデータに対して、対数変換を適用することで値の範囲を圧縮できます。これにより、推論エンジンが巨大な値のスパイクに偏ることなく、効果的に解釈できるような分布に整えることができます。
Link to this section実社会での応用#
正規化は、さまざまな業界における高性能なAIシステムのパイプラインにおいて標準的なステップです。
-
コンピュータビジョン (CV): 物体検出や画像分類のようなタスクでは、デジタル画像は0から255の範囲のピクセル値で構成されます。これらの大きな整数をそのままネットワークに入力すると、勾配降下法が遅くなる可能性があります。標準的な前処理ステップでは、ピクセル値を255.0で割って [0, 1] の範囲に正規化します。このプラクティスにより、YOLO26のような高度なモデルに対して一貫した入力が保証され、Ultralytics Platform上での学習の安定性が向上します。
-
医療画像解析: 医療AIで使用されるような医療スキャンは、強度のスケールが異なるさまざまなマシンから生成されることがよくあります。正規化により、MRIやCTスキャンのピクセル強度が、患者や機器を問わず比較可能になります。この一貫性は、正確な腫瘍検出にとって非常に重要であり、モデルが明るさの変化ではなく構造的な異常に集中できるようにします。
Link to this section関連概念の区別#
ディープラーニングにおいて、正規化と類似した前処理やアーキテクチャ上の用語を区別することは重要です。
- vs. バッチ正規化: データ正規化は、ネットワークに入る前の生の入力データセットに適用される前処理ステップです。対照的に、バッチ正規化はモデル学習中にネットワーク全体の層の間で内部的に機能します。これは前の活性化層の出力を正規化して、学習プロセスを安定させます。
- vs. 画像拡張: 正規化がピクセル値のスケールを変更するのに対し、拡張はデータセットの多様性を高めるために画像の内容やジオメトリ(反転、回転、色変更など)を変更します。Albumentationsのようなツールは拡張に使用されますが、正規化は数学的なスケーリング操作です。
Link to this section実装例#
コンピュータビジョンにおいて、正規化はパイプラインの最初のステップになることが多いです。以下のPythonの例は、NumPyライブラリを使用して手動で画像データを正規化する方法を示しています。このプロセスは、学習中にUltralytics YOLO26のデータローダー内で自動的に行われます。
import numpy as np
# Simulate a 2x2 pixel image with values ranging from 0 to 255
raw_image = np.array([[0, 255], [127, 64]], dtype=np.float32)
# Apply Min-Max normalization to scale values to [0, 1]
# This standardizes the input for the neural network
normalized_image = raw_image / 255.0
print(f"Original Range: {raw_image.min()} - {raw_image.max()}")
print(f"Normalized Range: {normalized_image.min()} - {normalized_image.max()}")





