Was ist die Maxnorm-Einschränkung? Wie ist es in Faltungs-Neuronalen Netzen nützlich?

12

Hier ist ein Keras-Codebeispiel, das es verwendet:

from keras.constraints import max_norm

model.add(Convolution2D(32, 3, 3, input_shape=(3, 32, 32), 
                        border_mode='same', activation='relu', kernel_constraint=max_norm(3)))
Jatin
quelle

Antworten:

16

Von http://cs231n.github.io/neural-networks-2/#reg :

ww2<c.csind in der Größenordnung von 3 oder 4. Einige Leute berichten über Verbesserungen, wenn sie diese Form der Regularisierung verwenden. Eine seiner ansprechenden Eigenschaften ist, dass das Netzwerk selbst dann nicht „explodieren“ kann, wenn die Lernraten zu hoch eingestellt sind, da die Aktualisierungen immer begrenzt sind.

Franck Dernoncourt
quelle
8

Ich fand eine Antwort von McLawrence in einer anderen Frage sehr hilfreich. Unten wiedergegeben:

Was macht eine Gewichtsbeschränkung max_norm?

maxnorm(m)Wenn die L2-Norm Ihrer Gewichte überschreitet m, skalieren Sie Ihre gesamte Gewichtsmatrix um einen Faktor, der die Norm auf reduziert m. Wie Sie im Keras-Code finden können in class MaxNorm(Constraint):

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

Zusätzlich maxnormhat ein axisArgument, nach dem die Norm berechnet wird. In Ihrem Beispiel geben Sie keine Achse an, daher wird die Norm über die gesamte Gewichtsmatrix berechnet. Wenn Sie beispielsweise die Norm jedes Faltungsfilters einschränken möchten, vorausgesetzt, Sie verwenden die tfDimensionsreihenfolge, hat die Gewichtsmatrix die Form (rows, cols, input_depth, output_depth). Wenn Sie die Norm über berechnen, axis = [0, 1, 2]wird jeder Filter auf die angegebene Norm beschränkt.

Warum es tun?

Das direkte Einschränken der Gewichtsmatrix ist eine andere Art der Regularisierung. Wenn Sie einen einfachen L2-Regularisierungsbegriff verwenden, bestrafen Sie hohe Gewichte mit Ihrer Verlustfunktion. Mit dieser Einschränkung regulieren Sie direkt. Wie auch im kerasCode verlinkt , scheint dies in Kombination mit einer dropoutEbene besonders gut zu funktionieren . Weitere Informationen finden Sie in Kapitel 5.1 dieses Dokuments

jeremysprofile
quelle
Schöne Antwort, aber Vorsicht: "In Ihrem Beispiel geben Sie keine Achse an, daher wird die Norm über die gesamte Gewichtsmatrix berechnet." - Dies scheint nicht wahr zu sein (zumindest ab sofort). Vielmehr wird die Norm dann über den Standard berechnet axis=0.
Bobson Dugnutt
||w||