Normalization
正規化がモデルのトレーニングと精度を向上させる方法を確認します。Min-Maxスケーリング、Z-score標準化、およびUltralytics YOLO26プロジェクトでの役割について学びます。
正規化は、数値属性を標準的な範囲に再スケーリングする、データ前処理における基本的な手法です。機械学習 (ML)では、データセットに、年齢の範囲(0~100)と収入レベル(0~100,000)のように、スケールが異なる特徴量が含まれていることがよくあります。未処理のままにすると、こうした差異によって最適化アルゴリズムが大きな値に偏り、収束の遅延や性能の低下につながる可能性があります。データを正規化することで、エンジニアはすべての特徴量が最終結果に比例して寄与するようにし、ニューラルネットワークがより効率的に学習できるようにします。
一般的な正規化手法#
データを変換する標準的な手法はいくつかあり、それぞれ異なる分布やアルゴリズムの要件に適しています。
- Min-Maxスケーリング: これは最も直感的な正規化の形式です。データを通常 [0, 1] の固定範囲に再スケーリングします。この変換では、最小値を引いてから、範囲(最大値から最小値を引いた値)で割ります。画素強度が0~255の範囲に限定されていることがわかっている画像処理で広く使用されています。
- Zスコア標準化: 正規化と同じ意味で使われることも多い一方、標準化は、データの平均を0、標準偏差を1にする変換を指します。これは、データがガウス分布に従う場合に特に有用であり、正規分布のデータを前提とするサポートベクターマシン (SVM)などのアルゴリズムには不可欠です。
- 対数スケーリング: 極端な外れ値を含むデータやべき乗則に従うデータには、対数変換を適用することで値の範囲を圧縮できます。これにより、推論エンジンが、極端に大きな値の急増による偏りを受けずに、分布をより適切に解釈できるようになります。
実世界での利用例#
正規化は、さまざまな業界の高性能AIシステムのパイプラインで標準的に実行されるステップです。
-
コンピュータービジョン (CV): 物体検出や画像分類などのタスクでは、デジタル画像は0~255の画素値で構成されています。これらの大きな整数をネットワークに直接入力すると、勾配降下法が遅くなる可能性があります。標準的な前処理では、画素値を255.0で割って [0, 1] の範囲に正規化します。この手法により、Ultralytics Platformでの学習安定性が向上し、YOLO26などの高度なモデルに一貫した入力を提供できます。
-
医用画像解析: ヘルスケアにおけるAIで使用されるものなど、医療スキャンは、強度スケールが異なるさまざまな装置から取得されることがよくあります。正規化により、MRIまたはCTスキャンの画素強度を、患者や装置が異なっても比較可能にできます。この一貫性は正確な腫瘍検出に不可欠であり、モデルが明るさの違いではなく構造上の異常に集中できるようにします。
関連する概念との違い#
ディープラーニングで使用される、類似した前処理やアーキテクチャに関する用語と正規化を区別することが重要です。
- 対 バッチ正規化: データの正規化は、ネットワークに入力される前の生の入力データセットに適用する前処理ステップです。一方、バッチ正規化は、モデル学習中にネットワーク全体の各層の間で内部的に実行されます。前の活性化層の出力を正規化して、学習プロセスを安定させます。
- 対 画像拡張: 正規化が画素値のスケールを変更するのに対し、拡張は画像の内容やジオメトリ(反転、回転、色の変更など)を変更して、データセットの多様性を高めます。Albumentationsなどのツールは拡張に使用されますが、正規化は数学的なスケーリング操作です。
実装例#
コンピュータービジョンでは、正規化はパイプラインの最初のステップになることがよくあります。次の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()}")








