Wie und warum würden sich MLPs für die Klassifizierung von MLPs für die Regression unterscheiden? Unterschiedliche Backpropagation- und Übertragungsfunktionen?

8

Ich verwende zwei 3-Schicht-Feedforward-Mehrschicht-Perzeptrone (MLPs). Mit den gleichen Eingabedaten (14 Eingangsneuronen) mache ich eine Klassifizierung (wahr / falsch) und eine Regression (wenn wahr, "wie viel") ¹. Bis jetzt habe ich faul Matlabs Patternnet bzw. Fitnet verwendet. Faul, weil ich mir nicht die Zeit genommen habe, wirklich zu verstehen, was los ist - und ich sollte. Darüber hinaus muss ich den Übergang zu einer OSS-Bibliothek (wahrscheinlich FANN) vornehmen, die wahrscheinlich mehr manuelle Einrichtung erfordert als die Matlab NN Toolbox. Deshalb versuche ich genauer zu verstehen, was los ist.

Die von patternnetund fitnetnahezu identischen Netzwerke sind: 14 Eingangsneuronen, 11 versteckte Neuronen, 1 Zielneuron (2 für die fitnet, aber nur 1 Information). Aber sie sind nicht ganz identisch. Die Unterschiede sind standardmäßig:

Sollten diese Unterschiede sein?

Welche Art von Backpropagation-Funktionen sind für die Klassifizierung optimal und welche für die Regression und warum?

Welche Übertragungsfunktionen sind für die Klassifizierung optimal und welche für die Regression und warum?


¹ Die Klassifizierung erfolgt für "bewölkt" oder "wolkenfrei" (2 komplementäre Ziele), die Regression dient zur Quantifizierung von "wie viel Wolke" (1 Ziel).

gerrit
quelle

Antworten:

2

Der Hauptunterschied liegt im Trainingskriterium. Ein Trainingskriterium der kleinsten Quadrate wird häufig für die Regression verwendet, da dies eine (bestrafte) maximale Wahrscheinlichkeitsschätzung der Modellparameter ergibt, wobei angenommen wird, dass Gaußsches Rauschen die Antwortvariable (Zielvariable) verfälscht. Bei Klassifizierungsproblemen wird häufig ein Cross-Entropy-Trainingskriterium verwendet, um eine Maximum-Likelihood-Schätzung unter der Annahme eines Bernoilli- oder Multinomialverlusts zu erhalten. In beiden Fällen können die Modellausgaben als Schätzung der Wahrscheinlichkeit einer Klassenmitgliedschaft interpretiert werden. Es ist jedoch üblich, logistische oder Softmax-Aktivierungsfunktionen in der Ausgabeschicht zu verwenden, sodass die Ausgaben zwischen 0 und 1 liegen und sich zu 1 summieren müssen. Wenn Sie die tanh-Funktion verwenden, können Sie diese einfach auf Wahrscheinlichkeiten neu abbilden, indem Sie eins hinzufügen und durch zwei teilen (ansonsten ist es dasselbe).

Der Unterschied zwischen skalierten konjugierten Gradienten und Levenberg-Marquardt ist in Bezug auf die Generalisierungsleistung wahrscheinlich relativ gering.

Ich würde die NETLAB- Toolbox für MATLAB gegenüber MATLABs eigener Toolbox für neuronale Netze wärmstens empfehlen . Es ist wahrscheinlich eine gute Idee, die Bayes'sche Regularisierung zu untersuchen, um eine Überanpassung zu vermeiden (Chris Bishops Buch ist lesenswert und das meiste davon ist in der NETLAB-Toolbox enthalten).

Dikran Beuteltier
quelle
Interessant - warum empfehlen Sie NETLAB gegenüber MATLABs eigener NN-Toolbox? Ich war mit letzterem ziemlich zufrieden, aber ich möchte wegziehen, um frei von kommerziellen Lizenzen zu werden. Netlab ist eindeutig immer noch Matlab, daher löst es nur die Hälfte des Problems in Bezug auf die Unabhängigkeit. Ich würde vorzugsweise etwas verwenden, das ich mit Python verwenden kann.
Gerrit
Ich vermute, dass NETLAB auch mit Oktave arbeitet, wodurch das Problem der kommerziellen Lizenz gelöst wird. Ich bevorzuge NETLAB, da es die grundlegenden Werkzeuge für die Klassifizierung und Regression recht einfach eingerichtet hat und die Verwendung regulierter Netzwerke fördert, was sehr wichtig ist, um eine Überanpassung zu vermeiden. Es ergänzt auch Chris Bishops Buch sehr gut, und das ist das Buch, das ich jedem empfehlen würde, der im Zorn neuronale Netze verwenden wollte. Gaußsche Prozesse sind jedoch eine modernere Option. Die GPML-Toolbox und das Buch werden ebenfalls dringend empfohlen ( gaussianprocess.org/gpml ).
Dikran Beuteltier
OK, ich verstehe. Es hat immer ganz gut für mich funktioniert, ich hatte keine übermäßigen Probleme mit dem frühen Anhalten. Ich verstehe den Punkt mit Octave, aber wenn ich trotzdem einen Übergang vornehmen muss, würde ich lieber sofort zu Python wechseln (ich begrüße Octave und wünschte, ich könnte meinen Matlab-Code darin ausführen, der stark von Klassen nach R2008a abhängt ; aber ich liebe Matlab nicht als Sprache genug, um einen FOSS Matlab-Klon anstelle von Octave zu wählen. Wie auch immer, diese Diskussion wird nicht mehr zum Thema).
Gerrit
Ich wollte Python schon eine ganze Weile selbst lernen. In der Community des maschinellen Lernens wird es häufig verwendet. Ich gehe daher davon aus, dass einige gute Bibliotheken verfügbar sind.
Dikran Marsupial