Keras: Unterschied zwischen Kernel- und Aktivitäts-Regularisierern


85

Ich habe festgestellt, dass weight_regularizer in Keras nicht mehr verfügbar ist und dass an seiner Stelle Aktivitäts- und Kernel- Regularizer vorhanden sind. Ich würde gerne wissen:

  • Was sind die Hauptunterschiede zwischen Kernel- und Aktivitäts- Regularisierern?
  • Könnte ich activity_regularizer anstelle von weight_regularizer verwenden ?

Antworten:


84

Der Aktivitäts-Regularisierer funktioniert als Funktion der Ausgabe des Netzes und wird hauptsächlich zum Regularisieren versteckter Einheiten verwendet, während weight_regularizer, wie der Name schon sagt, die Gewichte bearbeitet und sie zerfallen lässt. Grundsätzlich können Sie den Regularisierungsverlust als Funktion der Ausgabe ( activity_regularizer) oder der Gewichte ( weight_regularizer) ausdrücken .

Das neue kernel_regularizerersetzt weight_regularizer- obwohl es aus der Dokumentation nicht sehr klar ist.

Aus der Definition von kernel_regularizer:

kernel_regularizer: Regularizer-Funktion, die auf die kernelGewichtsmatrix angewendet wird (siehe Regularizer).

Und activity_regularizer:

activity_regularizer: Regularizer-Funktion, die auf die Ausgabe der Ebene angewendet wird (ihre "Aktivierung"). (siehe Regularizer).

Wichtige Änderung : Beachten Sie, dass im activity_regularizer ein Fehler vorliegt , der nur in Version 2.1.4 von Keras behoben wurde (zumindest mit Tensorflow-Backend). In den älteren Versionen wird die Aktivitätsregelungsfunktion auf die Eingabe der Ebene angewendet, anstatt auf die Ausgabe (die tatsächlichen Aktivierungen der Ebene, wie beabsichtigt). Wenn Sie also eine ältere Version von Keras (vor 2.1.4) verwenden, funktioniert die Regularisierung der Aktivitäten möglicherweise nicht wie beabsichtigt.

Sie können das Commit auf GitHub sehen

Vor fünf Monaten hat François Chollet einen Fix für den Aktivitäts-Regularisierer bereitgestellt, der dann in Keras 2.1.4 enthalten war


Sind Sie sich über diesen kernel_regularizerErsatz völlig sicher weight_regularizer?
Simone

3
Ich finde viele Beispiele mit kernel_regularizer, aber nicht für activity_regularizer. Können Sie die Anwendungsfälle für activity_regularizer kommentieren?
Milad M

1
Warum sollten Sie die Ausgabe versteckter Ebenen regulieren? Ist es aus dem gleichen Grund, warum wir Eingaben auf den Bereich (-1, 1) oder (0, 1) normalisieren. Das heißt, die Eingaben in nachfolgende Schichten kleiner zu halten, um den SGD-Prozess zu unterstützen?
Nagabhushan Baddi

@ NagabhushanBaddi siehe diese Antwort: datascience.stackexchange.com/a/15195/32811
Michele Tonutti

1
@FinncentPrice Ich kann nur annehmen, dass es früher da war und jetzt nicht mehr
Michele Tonutti

32

Diese Antwort ist etwas spät, aber nützlich für die zukünftigen Leser. Die Notwendigkeit ist also die Mutter der Erfindung, wie sie sagen. Ich habe es nur verstanden, als ich es brauchte.
In der obigen Antwort wird der Unterschied nicht wirklich angegeben, da beide die Gewichte beeinflussen. Was ist also der Unterschied zwischen der Bestrafung der Gewichte selbst oder der Ausgabe der Ebene?
Hier ist die Antwort: Ich bin auf einen Fall gestoßen, in dem die Gewichte des Netzes klein und schön sind und zwischen [-0,3] und [+0,3] ​​liegen.
Also, ich kann sie wirklich nicht bestrafen, es ist nichts falsch mit ihnen. Ein Kernel-Regularisierer ist nutzlos. Die Ausgabe der Schicht ist jedoch in 100er Jahren RIESIG.
Beachten Sie, dass die Eingabe in die Ebene ebenfalls klein ist und immer weniger als eins beträgt. Diese kleinen Werte interagieren jedoch so mit den Gewichten, dass diese massiven Ergebnisse erzielt werden. Hier wurde mir klar, dass ich eher einen Aktivitäts-Regularisierer als einen Kernel-Regularisierer brauche. Damit bestrafe ich die Schicht für diese großen Ausgaben. Es ist mir egal, ob die Gewichte selbst klein sind. Ich möchte sie nur davon abhalten, einen solchen Zustand zu erreichen, da dies meine Sigmoid-Aktivierung sättigt und Unmengen anderer Probleme wie das Verschwinden verursacht Gefälle und Stagnation.


Wirklich intuitiv.
Sarang Manjrekar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.