web-dev-qa-db-ja.com

[0,1]対[-1,1]に正規化

キーポイントの検出にニューラルネットワークを使用する方法について、いくつかのチュートリアルを行ってきました。入力(画像)の場合、255で除算するのが非常に一般的であることに気付きました(値は0から255の間にあるため、[0,1]に正規化されます)。しかし、ターゲット(X/Y)座標については、[-1,1]に正規化する方が一般的であることに気づきました。この格差の理由。

例: http://danielnouri.org/notes/2014/12/17/using-convolutional-neural-nets-to-detect-facial-keypoints-tutorial/

X = np.vstack(df['Image'].values) / 255.  # scale pixel values to [0, 1]
y = (y - 48) / 48  # scale target coordinates to [-1, 1]
7
megashigger

私によると、技術的には、値を正規化する方法に大きな違いはないはずです。

しかし、これらのことはMLテクニックでは重要です。

ピクセル範囲を(0〜255)から(0〜1)に正規化すると、収束速度が速くなります。ここでは、-1から1までの範囲で行うこともできます。私は多くの問題でこの範囲を使用しました。そして、そのような問題はありません。

しかし、出力については少し注意が必要です。使用しているアクティベーション関数のため、0から1の範囲を使用することはお勧めできません。 ReLUはmax(0、x)であり、負の値を指定した場合にも機能します。それがreluの要点です。また、tanhの範囲の値は-1から1の間です。残された唯一の選択肢は、reluおよびtanh関数と比較してそれほどうまく機能しないシグモイド関数を使用することです。シグモイドの問題は勾配消失であり、ゼロ中心ではないため、重みに対していくらかジグザグの勾配更新が行われます。あなたはそれを探すことができます ここ

3
Sargam Modak

一般にニューラルネットワークの画像正規化で最も一般的なのは、画像の平均を削除し、その標準偏差で割ることだと思います。

X = (X - mean_dataset) / std_dataset

キーポイント検出の問題はそれほど変わらないはずだと思います。

パフォーマンスの違いを見るのは興味深いかもしれません。私の推測では、平均を削除してstd([-1,1])で除算すると、[0,1]の正規化に比べて収束が速くなります。

モデルのバイアスが小さくなり、0で初期化された場合、到達するのに必要な時間が短くなるためです。

1
rAyyy