set_regularization_params_class_mlpT_set_regularization_params_class_mlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlp (Operator)

Name

set_regularization_params_class_mlpT_set_regularization_params_class_mlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlp — Setzen der Regularisierungsparameter eines mehrschichtigen Perzeptrons.

Signatur

set_regularization_params_class_mlp( : : MLPHandle, GenParamName, GenParamValue : )

Herror T_set_regularization_params_class_mlp(const Htuple MLPHandle, const Htuple GenParamName, const Htuple GenParamValue)

void SetRegularizationParamsClassMlp(const HTuple& MLPHandle, const HTuple& GenParamName, const HTuple& GenParamValue)

void HClassMlp::SetRegularizationParamsClassMlp(const HString& GenParamName, const HTuple& GenParamValue) const

void HClassMlp::SetRegularizationParamsClassMlp(const HString& GenParamName, double GenParamValue) const

void HClassMlp::SetRegularizationParamsClassMlp(const char* GenParamName, double GenParamValue) const

void HClassMlp::SetRegularizationParamsClassMlp(const wchar_t* GenParamName, double GenParamValue) const   (Nur Windows)

static void HOperatorSet.SetRegularizationParamsClassMlp(HTuple MLPHandle, HTuple genParamName, HTuple genParamValue)

void HClassMlp.SetRegularizationParamsClassMlp(string genParamName, HTuple genParamValue)

void HClassMlp.SetRegularizationParamsClassMlp(string genParamName, double genParamValue)

Beschreibung

set_regularization_params_class_mlpset_regularization_params_class_mlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlp setzt die Regularisierungsparameter des mehrschichtigen Perzeptrons (MLP), das in MLPHandleMLPHandleMLPHandleMLPHandleMLPHandle übergeben wurde. Der zu setzende Regularisierungsparameter wird mit GenParamNameGenParamNameGenParamNameGenParamNamegenParamName spezifiziert. Sein Wert wird mit GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue spezifiziert.

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName kann folgende Werte annehmen:

'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations":

Dieser Parameter legt fest, ob die Regularisierungsparameter automatisch (GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue >= 1) oder manuell (GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue = 0, default) bestimmt werden, wie unten in den Abschnitten „Technischer Hintergrund“ und „Automatische Bestimmung der Regularisierungsparameter“ beschrieben. Wie detailliert im Abschnitt „Automatische Bestimmung der Regularisierungsparameter“ beschrieben, sollte 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" nicht zu groß gesetzt werden (im Bereich 1 bis 5), um eine manuelle Überprüfung der Konvergenz der automatischen Bestimmung der Regularisierungsparameter zu ermöglichen.

'num_inner_iterations'"num_inner_iterations""num_inner_iterations""num_inner_iterations""num_inner_iterations":

Dieser Parameter ermöglicht potentiell eine etwas schnellere Konvergenz der der automatischen Bestimmung der Regularisierungsparameter, wie unten im Abschnitt „Automatische Bestimmung der Regularisierungsparameter“ beschrieben. Er sollte im Normalfall auf seinem Standardwert von 1 belassen werden.

'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior":

Dieser Parameter legt einerseits das zu verwendende Regularisierungsmodell fest, wie unten im Abschnitt „Technischer Hintergrund“ beschrieben. Andererseits legt er die Werte der Regularisierungsparameter fest, falls eine manuelle Bestimmung der Regularisierungsparameter eingestellt wurde (d.h. 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" = 0), bzw. die Initialwerte der Regularisierungsparameter, falls eine automatische Bestimmung der Regularisierungsparameter eingestellt wurde (d.h. 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" >= 1), wie unten im Abschnitt „Automatische Bestimmung der Regularisierungsparameter“ beschrieben. Die manuelle Bestimmung der Regularisierungsparameter (siehe den Abschnitt „Regularisierungsparameter“ unten) ist nur realistisch durchzuführen, falls ein einziger Regularisierungsparameter verwendet wird. In allen anderen Fällen sollten die Regularisierungsparameter automatisch bestimmt werden.

'noise_prior'"noise_prior""noise_prior""noise_prior""noise_prior":

Dieser Parameter erlaubt es die inverse Varianz des Rauschens der Daten festzulegen, falls das MLP für Regressionsaufgaben konfiguriert wurde, wie unten im Abschnitt „Anwendungsgebiete“ beschrieben. Falls eine manuelle Bestimmung der Regularisierungsparameter eingestellt wurde, wird die inverse Varianz mit GenParamNameGenParamNameGenParamNameGenParamNamegenParamName gesetzt, während ihr Initialwert festgelegt wird, falls eine automatische Bestimmung der Regularisierungsparameter eingestellt wurde. Im Normalfall ist es nur sinnvoll, diesen Parameter zu verwenden, falls die Regularisierungsparameter automatisch bestimmt werden.

Es ist zu beachten, dass die automatische Bestimmung der Regularisierungsparameter sehr viel Speicher und Laufzeit benötigt, wie im Detail im Abschnitt „Komplexität“ unten beschrieben. Deshalb sollte NumHiddenNumHiddenNumHiddenNumHiddennumHidden nicht zu groß gewählt werden, wenn das MLP mit create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp erzeugt wird. So sind zum Beispiel für normale OCR-Anwendungen selten größere Werte für NumHiddenNumHiddenNumHiddenNumHiddennumHidden als 30-60 notwendig.

Anwendungsgebiete

Wie bei create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp beschrieben, kann es wünschenswert sein, das MLP zu regularisieren, um einen glatteren Übergang der Konfidenzen zwischen zwei Klassen zu erzwingen und um eine Überanpassung des MLPs an die Trainingsdaten zu verhindern. Um dies zu erreichen, kann ein Strafterm für große MLP-Gewichte (die den Hauptgrund für scharfe Übergänge zwischen Klassen darstellen) zum Training des MLPs in train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp hinzugefügt werden. Hierzu muss GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf einen Wert > 0 gesetzt werden.

Falls das MLP für eine Regressionsaufgabe konfiguriert wurde (d.h., falls OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction in create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp auf 'linear'"linear""linear""linear""linear" gesetzt wurde), kann die inverse Varianz des in den Daten zu erwartenden Rauschens spezifiziert werden, indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'noise_prior'"noise_prior""noise_prior""noise_prior""noise_prior" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf einen Wert > 0 gesetzt wird. Das Setzen der A-Priori-Varianz des Rauschens hat nur dann einen Effekt, falls auch eine A-Priori-Varianz für die MLP-Gewichte spezifiziert wurde. In diesem Fall kann die A-Priori-Varianz des Rauschens dazu verwendet werden, den Datenfehlerterm (den Ausgabefehler des MLPs) gegen den Gewichtsfehlerterm zu gewichten.

Wie weiter unten im Detail beschrieben, können die Regularisierungsparameter des MLPs automatisch bestimmt werden (auf Kosten von signifikant höheren Trainingszeiten), indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf einen Wert > 0 gesetzt werden.

Technischer Hintergrund

Es werden drei verschiedene Arten von Straftermen bei 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior" unterstützt. Im folgenden bezeichnen die Parameter und die Gewichte der unterschiedlichen Schichten des MLPs, wie in create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp beschrieben.

Falls ein einzelner Wert spezifiziert wird, werden alle MLP-Gewichte gleichmäßig bestraft, indem der folgende Term zur Optimierung in train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp hinzugefügt wird:

Alternativ können vier Werte spezifiziert werden. Diese Parameter ermöglichen es, die vier Gruppen von Gewichten individuell zu regularisieren:

Schließlich können Werte spezifiziert werden. Diese Parameter ermöglichen es, die einzelnen Eingabevariablen sowie die übrigen drei Gruppen von Gewichten individuell zu regularisieren: Diese Art der Regularisierung ist nur in Verbindung mit der unten beschriebenen automatischen Bestimmung der Regularisierungsparameter sinnvoll. Falls die automatische Bestimmung der Regularisierungsparameter einen sehr großen Wert für (im Vergleich zu dem kleinsten der Werte ) zurückliefert, hat die entsprechende Eingabevariable eine geringe Relevanz für die Ausgabe des MLPs. Falls dies der Fall ist, sollte überprüft werden, ob die Eingabevariable aus der Eingabe des MLPs gelöscht werden kann, ohne die Leistung des MLPs negativ zu beeinflussen. Der Vorteil, irrelevante Eingabevariablen aus der Eingabe zu entfernen, ist eine höhere Geschwindigkeit des MLPs bei der Klassifikation.

Die Parameter können als inverse Varianz einer Gaußschen A-Priori-Wahrscheinlichkeitsverteilung der MLP-Gewichte angesehen werden, d.h. sie drücken eine Erwartung der Größe der MLP-Gewichte aus. Je größer die gewählt werden, desto kleiner werden die MLP-Gewichte.

Regularisierungsparameter

Je größer die Regularisierungsparameter 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior" gewählt werden, desto glatter wird der Übergang der Konfidenzen zwischen den verschiedenen Klassen. Die notwendigen Werte der Regularisierungsparameter hängen vom MLP ab, speziell von der Anzahl der Einheiten in der versteckten Schicht, von den Trainingsdaten und von der Skalierung der Trainingsdaten (falls keine Normalisierung verwendet wird). Normalerweise ist ein größerer Wert der Regularisierungsparameter notwendig, falls das MLP mehr versteckte Einheiten hat und falls der Trainingsdatensatz mehr Punkte umfasst. In typischen Anwendungen werden die Regularisierungsparameter bestimmt, indem die Qualität des MLPs auf Testdaten, die unabhängig von den Trainingsdaten sind, überprüft wird. Falls kein unabhängiger Testdatensatz zur Verfügung steht, kann ein Kreuzvalidierungsverfahren verwendet werden. Kreuzvalidierungsverfahren teilen den Datensatz in zwei separate Teile auf (z.B. 80% der Daten für das Training und 20% der Daten für das Testen). Das MLP wird mit dem Trainingsdatensatz trainiert (die 80% der Daten im obigen Beispiel). Die Qualität des MLPs wird auf dem Testdatensatz (die 20% der Daten im obigen Beispiel) überprüft. Die Prozedur kann mit den anderen möglichen Aufteilungen der Daten wiederholt werden (in dem 80%-20%-Beispiel gibt es fünf mögliche Aufteilungen). Diese Prozedur kann z.B. mit relativ großen Werten der Gewichtsregularisierungsparameter starten (was normalerweise zu Fehlklassifikationen auf den Testdaten führt). Die Gewichtsregularisierungsparameter können dann sukzessive verkleinert werden, bis eine akzeptable Qualität auf den Testdatensätzen erreicht wird.

Automatische Bestimmung der Regularisierungsparameter

Die Regularisierungsparameter, d.h. die A-Priori-Gewichte und das A-Priori-Rauschen, können auch automatisch durch train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp mittels der sogenannten Evidenzprozedur bestimmt werden (für Details zur Evidenzprozedur wird auf die Artikel im Abschnitt „Literatur“ verwiesen). Dieser Trainingsmodus kann slektiert werden, indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf einen Wert > 0 gesetzt werden. Es ist zu beachten, dass dies die Trainingszeiten um ein bis drei Größenordnungen im Vergleich zum Training mit festen Regularisierungsparametern erhöht.

Die Evidenzprozedur ist ein iterativer Algorithmus, der die folgenden zwei Schritte für eine Anzahl äußerer Iterationen durchführt: zunächst wird das Netz mit den aktuellen Werten der Regularisierungsparameter trainiert; danach werden die Regularisierungsparameter basierend auf den optimierten Gewichten des MLPs neu geschätzt. In der ersten Iteration werden die A-Priori-Gewichte und das A-Priori-Rauschen, die mit 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior" und 'noise_prior'"noise_prior""noise_prior""noise_prior""noise_prior" spezifiziert wurden, verwendet. Die vom Benutzer spezifizierten Regularisierungsparameter dienen daher der automatischen Bestimmung als Startwerte für die Evidenzprozedur. Die Startwerte der A-Priori-Gewichte sollten nicht zu groß gesetzt werden, da dies das Training überregularisieren könnte und zu schlecht bestimmten Regularisierungsparametern führen könnte. Die Startwerte für die A-Priori-Gewichte sollten typischerweise in dem Bereich 0.01-0.1 gewählt werden.

Die Anzahl der äußeren Iterationen kann festgelegt werden, indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf einen Wert > 0 gesetzt wird. Falls GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf 0 gesetzt wird (dies ist die Voreinstellung des Wertes), wird die Evidenzprozedur nicht ausgeführt und das MLP wird einfach mit den benutzerspezifizierten Regularisierungsparametern trainiert.

Die Anzahl der äußeren Iterationen sollte groß genug gesetzt werden, um die Konvergenz der Regularisierungsparameter sicherzustellen. Im Gegensatz zum Training der Gewichte des MLPs ist es typischerweise sehr schwer, ein numerisches Konvergenzkriterium anzugeben und die Konvergenz wird typischerweise durch Beurteilung des Benutzers bestimmt. Daher kann es sein, dass es nicht möglich ist, die Anzahl der äußeren Iterationen a priori festzulegen und dabei die Konvergenz der Regularisierungsparameter sicherzustellen. In diesen Fällen kann die äußere Schleife über die Schritte der Evidenzprozedur explizit implementiert werden, indem 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" auf 1 gesetzt wird und train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp wiederholt aufgerufen wird. Dies hat den Vorteil, dass die A-Priori-Gewichte und das A-Priori-Rauschen nach jeder Iteration abgefragt werden und manuell auf Konvergenz überprüft werden können. Mit diesem Ansatz kann sogar nach jeder Iteration die Leistung des MLPs auf einem unabhängigen Testdatensatz überprüft werden, um die Generalisierungseigenschaften des Klassifikators zu überprüfen.

Falls für eine bestimmte Klasse von Anwendungen die Anzahl der äußeren Iterationen (näherungsweise) bestimmt worden ist, kann versucht werden, die Laufzeit des Trainings zu reduzieren (falls MLPs mit ähnlichen zukünftig trainiert werden sollen), indem 'num_inner_iterations'"num_inner_iterations""num_inner_iterations""num_inner_iterations""num_inner_iterations" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue auf einen Wert > 1 gesetzt wird (die Voreinstellung ist 1) und die Anzahl der äußeren Iterationen reduziert wird. Die Anzahl der äußeren Iterationen kann dabei aber typischerweise um denselben Faktor reduziert werden, wie die Anzahl der inneren Iterationen erhöht wird. Mit diesem Vorgehen kann eine optimale Laufzeit des Traininigs erreicht werden. Dieses Vorgehen lohnt sich aber nur, falls viele MLPs mit ähnlichen Datensätzen trainiert werden sollen. Falls dies nicht der Fall ist, sollte 'num_inner_iterations'"num_inner_iterations""num_inner_iterations""num_inner_iterations""num_inner_iterations" auf 1 gelassen werden.

Die automatisch bestimmten A-Priori-Gewichte und das A-Priori-Rauschen können nach dem Training mit get_regularization_params_class_mlpget_regularization_params_class_mlpGetRegularizationParamsClassMlpGetRegularizationParamsClassMlpGetRegularizationParamsClassMlp abgefragt werden, indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior" bzw. auf 'noise_prior'"noise_prior""noise_prior""noise_prior""noise_prior" gesetzt wird.

Zusätzlich zu den A-Priori-Gewichten und dem A-Priori-Rauschen bestimmt die Evidenzprozedur eine Schätzung der Anzahl der Parameter des MLPs, die durch das Training anhand der Trainingsdaten eindeutig bestimmt werden können. Dieses Ergebnis kann mit get_regularization_params_class_mlpget_regularization_params_class_mlpGetRegularizationParamsClassMlpGetRegularizationParamsClassMlpGetRegularizationParamsClassMlp abgefragt werden, indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'num_well_determined_params'"num_well_determined_params""num_well_determined_params""num_well_determined_params""num_well_determined_params" gesetzt wird. Alternativ hierzu kann der Anteil der eindeutig bestimmbaren Parameter abgefragt werden, indem GenParamNameGenParamNameGenParamNameGenParamNamegenParamName auf 'fraction_well_determined_params'"fraction_well_determined_params""fraction_well_determined_params""fraction_well_determined_params""fraction_well_determined_params" gesetzt wird. Falls die Anzahl eindeutig bestimmbarer Parameter signifikant kleiner als ist (wobei die Anzahl der Gewichte des MLPs ist, wie im Abschnitt „Komplexität“ unten beschrieben) oder falls der Anteil der eindeutig bestimmbaren Parameter signifikant kleiner als 1 ist, sollte in Erwägung gezogen werden, die Anzahl der Einheiten in der versteckten Schicht zu reduzieren oder, falls sich die Anzahl der Einheiten in der versteckten Schicht nicht reduzieren lässt, ohne die Fehlerrate des MLPs signifikant zu erhöhen, eine Vorverarbeitung durchzuführen, die die Anzahl der Eingabevariablen reduziert, d.h. kanonische Merkmale oder eine Hauptachsentransformation.

Es ist zu beachten, dass die Anzahl der eindeutig bestimmbaren Parameter nur bestimmt werden kann, nachdem die A-Priori-Gewichten und das A-Priori-Rauschen bestimmt wurden. Dies ist der Grund, warum die Evidenzprozedur mit der Bestimmung der Regularisierungsparameter endet und nicht mit dem Training der MLP-Gewichte. Das MLP wird im Rahmen der Evidenzprozedur daher nicht mit den letzten Werten der Regularisierungsparameter trainiert. Dies sollte keine Auswirkung haben, sofern die Regularisierungsparameter konvergiert sind. Falls das Training mit einer Optimierung der MLP-Gewichte enden soll, wobei die letzten Werte der Regularisierungsparameter verwendet werden, kann 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" auf 0 gesetzt werden und train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp noch einmal aufgerufen werden. Falls dies gemacht wird, ist zu beachten, dass sich die Anzahl der eindeutig bestimmbaren Parameter ändern kann und somit der von get_regularization_params_class_mlpget_regularization_params_class_mlpGetRegularizationParamsClassMlpGetRegularizationParamsClassMlpGetRegularizationParamsClassMlp zurückgelieferte Wert technisch gesehen inkonsistent ist.

Abgespeicherte Parameter

Es ist zu beachten, dass die Parameter 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations" und 'num_inner_iterations'"num_inner_iterations""num_inner_iterations""num_inner_iterations""num_inner_iterations" nur das Training des MLPs beeinflussen. Daher werden sie nicht gespeichert, wenn das MLP mit write_class_mlpwrite_class_mlpWriteClassMlpWriteClassMlpWriteClassMlp oder serialize_class_mlpserialize_class_mlpSerializeClassMlpSerializeClassMlpSerializeClassMlp gespeichert wird. Sie müssen daher neu gesetzt werden, falls das MLP mit read_class_mlpread_class_mlpReadClassMlpReadClassMlpReadClassMlp oder deserialize_class_mlpdeserialize_class_mlpDeserializeClassMlpDeserializeClassMlpDeserializeClassMlp wieder geladen wird und falls das Training unter der automatischen Bestimmung der Regularisierungsparameter fortgesetzt werden soll. Alle anderen oben beschriebenen Parameter ('weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior", 'noise_prior'"noise_prior""noise_prior""noise_prior""noise_prior", 'num_well_determined_params'"num_well_determined_params""num_well_determined_params""num_well_determined_params""num_well_determined_params" und 'fraction_well_determined_params'"fraction_well_determined_params""fraction_well_determined_params""fraction_well_determined_params""fraction_well_determined_params") werden gespeichert.

Ausführungsinformationen

Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:

Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.

Parameter

MLPHandleMLPHandleMLPHandleMLPHandleMLPHandle (input_control, Zustand wird modifiziert)  class_mlp HClassMlp, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des MLP.

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Name des zu setzenden Regularisierungsparameters.

Defaultwert: 'weight_prior' "weight_prior" "weight_prior" "weight_prior" "weight_prior"

Werteliste: 'noise_prior'"noise_prior""noise_prior""noise_prior""noise_prior", 'num_inner_iterations'"num_inner_iterations""num_inner_iterations""num_inner_iterations""num_inner_iterations", 'num_outer_iterations'"num_outer_iterations""num_outer_iterations""num_outer_iterations""num_outer_iterations", 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue (input_control)  number(-array) HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Wert des Regularisierungsparameters.

Defaultwert: 1.0

Wertevorschläge: 0.01, 0.1, 1.0, 10.0, 100.0, 0, 1, 2, 3, 5, 10, 15, 20

Beispiel (HDevelop)

* This example shows how to determine the regularization parameters
* automatically without examining the convergence of the
* regularization parameters.
* Create the MLP.
create_class_mlp (NumIn, NumHidden, NumOut, 'softmax', \
                  'normalization', NumIn, 42, MLPHandle)
* Generate and add the training data
for J := 0 to NumData-1 by 1
    * Generate training features and classes.
    * Data = [...]
    * Class = [...]
    add_sample_class_mlp (MLPHandle, Data, Class)
endfor
* Set up the automatic determination of the regularization
* parameters.
set_regularization_params_class_mlp (MLPHandle, 'weight_prior', \
                                     [0.01,0.01,0.01,0.01])
set_regularization_params_class_mlp (MLPHandle, \
                                     'num_outer_iterations', 10)
* Train the MLP.
train_class_mlp (MLPHandle, 100, 1, 0.01, Error, ErrorLog)
* Read out the estimate of the number of well-determined
* parameters.
get_regularization_params_class_mlp (MLPHandle, \
                                     'fraction_well_determined_params', \
                                     FractionParams)
* If FractionParams differs substantially from 1, consider reducing
* NumHidden appropriately and consider performing a preprocessing that
* reduces the number of input variables to the net, i.e., canonical
* variates or principal components.
write_class_mlp (MLPHandle, 'classifier.mlp')



* This example shows how to determine the regularization parameters
* automatically while examining the convergence of the
* regularization parameters.
* Create the MLP.
create_class_mlp (NumIn, NumHidden, NumOut, 'softmax', \
                  'normalization', NumIn, 42, MLPHandle)
* Generate and add the training data.
for J := 0 to NumData-1 by 1
    * Generate training features and classes
    * Data = [...]
    * Class = [...]
    add_sample_class_mlp (MLPHandle, Data, Class)
endfor
* Set up the automatic determination of the regularization
* parameters.
set_regularization_params_class_mlp (MLPHandle, 'weight_prior', \
                                     [0.01,0.01,0.01,0.01])
set_regularization_params_class_mlp (MLPHandle, \
                                     'num_outer_iterations', 1)
for OuterIt := 1 to 10 by 1
    * Train the MLP
    train_class_mlp (MLPHandle, 100, 1, 0.01, Error, ErrorLog)
    * Read out the regularization parameters
    get_regularization_params_class_mlp (MLPHandle, 'weight_prior', \
                                         WeightPrior)
    * Inspect the regularization parameters manually for
    * convergence and exit the loop manually if they have
    * converged.
    * [...]
endfor
* Read out the estimate of the number of well-determined
* parameters.
get_regularization_params_class_mlp (MLPHandle,\
                                     'fraction_well_determined_params',\
                                     FractionParams)
* If FractionParams differs substantially from 1, consider reducing
* NumHidden appropriately and consider performing a preprocessing that
* reduces the number of input variables to the net, i.e., canonical
* variates or principal components.
write_class_mlp (MLPHandle, 'classifier.mlp')

Komplexität

Sei die Anzahl der Eingabeeinheiten des MLPs (d.h. oder , je nachdem, auf welchen Wert PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing gesetzt wurde, wie bei create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp beschrieben), die Anzahl der Einheiten in der versteckten Schicht und die Anzahl der Ausgabeeinheiten. Dann ist die Anzahl der Gewichte des MLPs gegeben durch . Sei die Anzahl der Trainingsmuster. Sei die Anzahl der Iterationen, die mit MaxIterationsMaxIterationsMaxIterationsMaxIterationsmaxIterations in train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp gesetzt wird. Seien und die Anzahl der äußeren bzw. inneren Iterationen.

Die Laufzeit des Trainings ohne Regularisierung oder mit Regularisierung mit festen Regularisierungsparametern ist von der Komplexität . Im Gegensatz hierzu ist die Laufzeit des Trainings mit automatischer Bestimmung der Regularisierungsparameter von der Komplexität .

Das Training ohne Regularisierung oder mit Regularisierung mit festen Regularisierungsparametern benötigt mindestens Bytes Speicher. Das Training mit automatischer Bestimmung der Regularisierungsparameter benötigt mindestens Bytes Speicher. Unter speziellen Umständen werden weitere Bytes Speicher benötigt.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert set_regularization_params_class_mlpset_regularization_params_class_mlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlp den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp

Nachfolger

get_regularization_params_class_mlpget_regularization_params_class_mlpGetRegularizationParamsClassMlpGetRegularizationParamsClassMlpGetRegularizationParamsClassMlp, train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp

Literatur

David J. C. MacKay: „Bayesian Interpolation“; Neural Computation 4(3):415-447; 1992.
David J. C. MacKay: „A Practical Bayesian Framework for Backpropagation Networks“; Neural Computation 4(3):448-472; 1992.
David J. C. MacKay: „The Evidence Framework Applied to Classification Networks“; Neural Computation 4(5):720-736; 1992.
David J. C. MacKay: „Comparison of Approximate Methods for Handling Hyperparameters“; Neural Computation 11(5):1035-1068; 1999.

Modul

Foundation