画像をCNNに入れる前に正規化する必要があるのはなぜですか?


回答:


34

最初の注意:実際に各特徴(ピクセル)値の標準偏差で割る必要もあります。平均を減算すると、入力が0に中央揃えされ、標準偏差で割ると、スケーリングされたフィーチャ値が平均から離れた標準偏差の数になります。

質問に答えるには:ニューラルネットワークがその重みを学習する方法を検討します。C(NN)sは、トレーニング例が通過するときに、バックプロパゲーションから計算された勾配誤差ベクトル(学習率を乗算)をネットワーク全体のさまざまな重み行列に継続的に追加して学習します。

ここで注意すべきことは、「学習率を乗じた」です。

入力トレーニングベクトルをスケーリングしなかった場合、特徴値の分布の範囲は特徴ごとに異なる可能性が高いため、学習率により、各次元で補正が行われます(比例的に言えば)。ある重み次元では補正を過剰に補正し、別の重み次元では補正を低くしている場合があります。

これは、理想的な状態ではありません。振動状態(コスト(ウェイト)スペースのより良い最大値に集中することができない)状態、またはスローモーション(より良い最大値に到達するには遅すぎて移動する)状態になります。

もちろん、重みごとに学習率を設定することは可能ですが、すでに複雑なネットワークに導入するハイパーパラメーターはまだ多く、それを見つけるために最適化する必要があります。通常、学習率はスカラーです。

したがって、NN(または任意の勾配ベース)アルゴリズムへの入力として使用する前に、画像を正規化しようとします。


1
カラー画像はどうですか?カラーチャンネルごとにそれをしますか?それは色分布を台無しにしませんか?
user10024395

2
あなたがイエスになるはずだと信じています。次のようなことができます(image - image.mean()) / (image.std() + 1e-8)
。– JohnAllen

これはトレーニングに本当に役立ちますか?私はオブジェクト検出器をトレーニングしていますが、このフィトラーを使用すると、画像が本当に混乱します。検出しているオブジェクトが見づらくなります
Darlyn

学習性と正確性の観点からトレーニングに非常に役立ちます-モデル用ではありません:)デバッグ中に非正規化画像を出力して、人間の目に正常に見えるようにすることができます。
lollercoaster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.