Ich versuche, andere Aktivierungsfunktionen als die vorimplementierten "logistic" und "tanh" im R-Paket-Neuralnetz zu verwenden. Genauer gesagt würde ich gerne rektifizierte lineare Einheiten (ReLU) f (x) = max {x, 0} verwenden. Bitte sehen Sie meinen Code unten.
Ich glaube, dass ich benutzerdefinierte Funktionen verwenden kann, wenn sie beispielsweise ()
definiert sind %Vor%Aber wenn ich max (x, 0) anstelle von x * 2 setze, dann sagt mir R, dass 'max nicht in der Derivatentabelle ist' und dasselbe für '& gt;' Operator. Daher suche ich nach einer vernünftigen Problemumgehung, da ich denke, dass die numerische Integration von max in diesem Fall kein Problem wäre.
%Vor% Irgendwelche Ideen? Ich bin etwas verwirrt, da ich nicht glaube, dass das neuralnet
-Paket eine analytische Differenzierung vornehmen würde.
Die Interna des Pakets neuralnet
versuchen, jede bereitgestellte Funktion nach act.fct
zu differenzieren. Sie können den Quellcode hier sehen.
In Zeile 211 finden Sie den folgenden Codeblock:
%Vor% Die Funktion differentiate
ist eine komplexere Verwendung der Funktion deriv
, die Sie auch im obigen Quellcode sehen können. Daher ist es derzeit nicht möglich, max(0,x)
für act.fct
bereitzustellen. Es würde eine Ausnahme im Code erfordern, um die ReLU zu erkennen, und weiß die Ableitung. Es wäre eine großartige Übung, um den Quellcode zu erhalten, fügen Sie dies hinzu und senden Sie es an die Betreuer zu erweitern (aber das kann ein bisschen viel sein).
In Bezug auf eine sinnvolle Problemumgehung könnten Sie jedoch softplus verwenden ist eine glatte Annäherung der ReLU. Ihre benutzerdefinierte Funktion würde folgendermaßen aussehen:
%Vor%Sie können diese Approximation auch in R anzeigen:
%Vor%Tags und Links neural-network r machine-learning