Antworten:
Von http://cs231n.github.io/neural-networks-2/#reg :
sind 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.
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 überschreitetm
, skalieren Sie Ihre gesamte Gewichtsmatrix um einen Faktor, der die Norm auf reduziertm
. Wie Sie im Keras-Code finden können inclass 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
maxnorm
hat einaxis
Argument, 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 dietf
Dimensionsreihenfolge, 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
keras
Code verlinkt , scheint dies in Kombination mit einerdropout
Ebene besonders gut zu funktionieren . Weitere Informationen finden Sie in Kapitel 5.1 dieses Dokuments
axis=0
.