web-dev-qa-db-ja.com

kernel_constraint = max_norm(3)は何をしますか?

私が取り組んでいるチュートリアルの1つ(下記のリンク)で、著者はベースラインニューラルネットワーク構造の概要を次のように示しています。

たたみ込み入力層、サイズが3x3の32個の特徴マップ、整流器アクティブ化関数、最大ノルムの重み制約が3に設定されています。

model.add(Conv2D(32, (3, 3), input_shape=(3, 32, 32), padding='same', activation='relu', kernel_constraint=maxnorm(3)))

最大ノルムの重み制約は何を意味し、Convレイヤーに対して何をしますか? (Kerasを使用しています。)

https://machinelearningmastery.com/object-recognition-convolutional-neural-networks-keras-deep-learning-library/

ありがとうございました!

9
aztec242

_max_norm_ doの重み制約は何ですか?

maxnorm(m)は、重みのL2ノルムがmを超える場合、ノルムをmに減らす係数で重み行列全体をスケーリングします。 class MaxNorm(Constraint)の-​​ keras code で確認できるように:

_def __call__(self, w):
    norms = K.sqrt(K.sum(K.square(w), axis=self.axis, keepdims=True))
    desired = K.clip(norms, 0, self.max_value)
    w *= (desired / (K.epsilon() + norms))
    return w
_

さらに、maxnormにはaxis引数があり、それに沿ってノルムが計算されます。この例では、軸を指定していないため、ノルムはウェイトマトリックス全体で計算されます。たとえば、tf次元順序付けを使用していると仮定して、すべての畳み込みフィルターのノルムを制約する場合、重み行列は_(rows, cols, input_depth, output_depth)_の形になります。 _axis = [0, 1, 2]_のノルムを計算すると、各フィルターが指定されたノルムに制約されます。

なぜそれをするのですか?

重み行列を直接制約することは、別の種類の正則化です。単純なL2正則化項を使用する場合、損失関数で高い重みにペナルティを課します。この制約により、直接正則化します。 kerasコードでもリンクされているように、これはdropoutlayerとの組み合わせで特にうまく機能するようです。詳細については、5.1を参照してください この論文

19
McLawrence