Die vorherigen Herausforderungen im Bereich des Golfsports mit neuronalen Netzen ( dies und das ) haben mich zu einer neuen Herausforderung inspiriert:
Die Herausforderung
Finden Sie das kleinste neuronale Feedforward-Netzwerk, sodass bei einem beliebigen 4-dimensionalen Eingabevektor mit ganzzahligen Einträgen in das Netzwerk ausgibt mit einem Koordinatenfehler von weniger als .
Zulässigkeit
Für diese Herausforderung wird ein vorwärts gerichtetes neuronales Netzwerk als eine Zusammensetzung von Schichten definiert . Eine Schicht ist eine Funktion , die durch eine Matrix von Gewichten , einem Vektor , spezifiziert ist von Verzerrungen und eine Aktivierungsfunktion , die koordinativ angewendet wird: b ∈ R m f : R → R
Da Aktivierungsfunktionen für eine bestimmte Aufgabe optimiert werden können, müssen wir die Klasse der Aktivierungsfunktionen einschränken, um diese Herausforderung interessant zu halten. Folgende Aktivierungsfunktionen sind zulässig:
Identität.
ReLU.
Softplus.
Hyperbolischer Tangens.
Sigmoid.
Insgesamt hat ein zulässiges neuronales Netz für einige die Form , wobei jede Schicht durch Gewichte , Vorspannungen und eine Aktivierungsfunktion spezifiziert ist aus der obigen Liste. Das folgende neuronale Netz ist beispielsweise zulässig (obwohl es das Leistungsziel dieser Herausforderung nicht erfüllt, kann es ein nützliches Gadget sein):
Dieses Beispiel zeigt zwei Schichten. Beide Schichten haben keine Vorspannung. Die erste Schicht verwendet die ReLU-Aktivierung, während die zweite die Identitätsaktivierung verwendet.
Wertung
Ihre Punktzahl ist die Gesamtzahl der Gewichte und Verzerrungen ungleich Null .
(ZB hat das obige Beispiel eine Punktzahl von 16, da die Vorspannungsvektoren Null sind.)
quelle
Antworten:
Octave ,
96 88 87 84 76 5450 Gewichte & VorspannungenDieses 6-lagige neuronale Netz ist im Wesentlichen ein 3-stufiges Sortiernetz, das aus einem sehr einfachen
min
/max
Netzwerk als Komponente aufgebaut ist. Es handelt sich im Grunde genommen um das Beispielnetzwerk aus Wikipedia (siehe unten) mit einer kleinen Änderung: Die ersten beiden Vergleiche werden parallel durchgeführt. Um negative Zahlen durch die ReLU zu umgehen, addieren wir zuerst 100 und subtrahieren am Ende erneut 100.Dies sollte nur als Basis betrachtet werden, da es sich um eine naive Implementierung handelt. Es werden jedoch alle möglichen Zahlen, die keine zu große Größe haben, perfekt sortiert. (Wir können den Bereich anpassen, indem wir 100 durch eine andere Zahl ersetzen.)
Probieren Sie es online!
max / min-Komponente
Es gibt eine Möglichkeit (
wesentlich weniger elegant, dank @xnor!), Das Minimum und Maximum von zwei Zahlen mit weniger Parametern zu ermitteln:Dies bedeutet, dass wir viel weniger Gewichte und Vorspannungen verwenden müssen.
Vielen Dank an @Joel für den Hinweis, dass es ausreicht, alle Zahlen im ersten Schritt positiv zu machen und im letzten Schritt umzukehren, was -8 Gewichte ergibt. Vielen Dank an @xnor für den Hinweis auf eine noch kürzere Max / Min-Methode, die -22 Gewichte ergibt! Vielen Dank an @ DustinG.Mixon für den Tipp, bestimmte Matrizen zu kombinieren, die zu weiteren -4 Gewichten führen!
Probieren Sie es online!
quelle
(a - relu(a-b), b + relu(a-b))
?