私が取り組んでいるチュートリアルの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を使用しています。)
ありがとうございました!
_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
コードでもリンクされているように、これはdropout
layerとの組み合わせで特にうまく機能するようです。詳細については、5.1を参照してください この論文