Frage zur Programmierung neuronaler Netze - Seite 6

 
Vinin:


Ich habe ein normales Gitter mit 256 Eingängen und einer versteckten Schicht pro 256 Neuronen erstellt. Und eine Ausgabeschicht mit einem Neuron. Und ich habe das alles perfekt in MT4 trainiert

1. Mit einem genetischen Prüfalgorithmus oder mit einem internen Mesh-Lernalgorithmus?

 
Reshetov:
Durch den genetischen Algorithmus des Testers oder durch einen internen Algorithmus zum Lernen von Netzen?

Alles geschieht über ein Skript. Der interne Algorithmus
 
Obwohl es Varianten mit Optimierung gab. Ich habe einen Zähler erstellt und die besten Optionen in globalen Variablen gespeichert. Ich habe sie umgeschrieben, als das Ergebnis besser wurde. Es hat perfekt gepasst.
 
Der Punkt ist, dass ich alle Gewichte und Schwellenwerte vom Tester GA übernommen habe, siehe Eingabeparameter im Bericht, mit Ausnahme der letzten 3. Die Lernkurve ist hoch, denn die Optimierung von 10000 Takten dauert nicht länger als 5 Minuten. Außerdem benötige ich keine 256 Eingänge, da drei ausreichen - auch bei ihnen wird das Raster schwarz-weiß umgeschult.
 
Reshetov:


Ich brauche keine 256 Eingänge, denn drei reichen aus - auch mit ihnen wird das Raster in Schwarz umgelernt.

Dies würde den Rahmen des Themas bereits sprengen. Das ist nicht diskussionswürdig. Jedem das Seine
 
Vinin:

Dies würde den Rahmen des Themas bereits sprengen. Es gibt keinen Grund, darüber zu diskutieren. Jedem das Seine.


Das Thema ist schon lange ins Stocken geraten, es wird nicht schaden...

Reschetow:


Außerdem brauche ich keine 256 Eingänge, denn drei sind schon schlimm genug - selbst die trainieren das Raster im Schwarzen um.


Sind Sie sicher, dass es sich um eine Umschulung handelt? Vielleicht mangelt es ihm einfach an "Verallgemeinerung und Rechenleistung" aufgrund der Schwäche der Architektur?

Der Experte an der Kreuzung der beiden Wagen wird im Optimierer eingestellt, aber das funktioniert nur bei einem Vorwärtsgang, wenn man viel Glück hat. Und es geht offensichtlich nicht um Übertraining...

Eigentlich ist es einfach, das Überschießen zu bekämpfen - erhöhen Sie die Größe der Trainingsstichprobe auf ein stabiles Plus bei der Kontrolle oder OOS. NS kann sich nicht an die gesamte Stichprobe erinnern und muss einfach verallgemeinern. In diesem Fall ist eine Verringerung der Eigenschaften des Systems unvermeidlich, aber hier hängt es zum Beispiel mehr von den Eingaben ab.

 
Figar0:


Nun, das Thema ist längst überfällig, nichts passiert...

Aber es ist besser, nicht mit Moderatoren zu streiten. Zumindest gegen die Regeln verstoßen wir IMHO nicht, und im Falle dessen haben wir das Recht, uns an die Verwaltung zu wenden.

Figar0:


Sind Sie sicher, dass die Umschulung? Vielleicht fehlt es ihm aufgrund der schwachen Architektur einfach an "Verallgemeinerung und Rechenleistung"?

Ja, ich bin mir sicher.

Das ist leicht zu beweisen. Der Punkt ist, dass, wenn die Ergebnisse der Optimierung sind sehr körnig, die vorwärts sind für sie erfolglos. Aber wir können genau diese Ergebnisse nach Indikatoren sortieren und dann nach bodenständigeren Werten suchen, bei denen die Vorwärtsbewegung bereits Erfolg bringt. Richtiger wäre es zu sagen, dass erfolgreiche Stürmer in Optimierungsergebnisse gedrängt werden, wobei eben diese Ergebnisse nicht zu gravierend, aber auch nicht zu parfuid sind.

Das einfachste Beispiel. Wir nehmen ein anständiges Intervall der Historie, entfernen Take und Stop und stellen TS so ein, dass er bei jedem Balken TC-Werte von VS abliest und diese für den Handel verwendet. D.h. wenn die Messwerte des Gitters nicht mit der Wolle der offenen Position übereinstimmen, drehen wir es um. Das Raster ist so aufgebaut, dass es nur wenige Geschäfte eröffnet und alle gewinnen (es gibt keinen Gewinnfaktor). Beim einschichtigen Perzeptron und sogar bei Standardnetzen ist mir dies noch nicht begegnet. Das Raster ist oft falsch dort, so dass es eine anständige Menge von Geschäften auch ohne Stops und Übernahmen auf eine lange Geschichte macht.

Ich vermute, dass dies darauf zurückzuführen ist, dass ich die erste Schicht geändert habe und es nun irgendwie gelingt, die Eingänge der versteckten Schicht mit streng linear trennbaren Daten zu füttern. Wer weiß das schon, denn mein Entwurf ist viel einfacher als der von Rosenblatt? Das liegt wahrscheinlich daran, dass das gesamte Netz mit GA für alle Eingangsparameter in einem Durchgang angepasst wird und GA wie ein Panzer ist, der nach Extremen sucht, wenn auch nicht direkt, aber multifaktorielle Daten für eine solche Optimierung sind wie zwei Finger auf Asphalt, solange es ein deutliches Extremum oder mehrere Extrema gibt. Andererseits ist die erste Schicht aufgrund ihrer Einfachheit sehr schnell und angemessen abgestimmt.

IMHO sind moderne neuronale Netze bei der Komplizierung der Eingabeschichten zu weit gegangen. Infolgedessen funktionieren sie nicht besonders gut. Und in einem mehrschichtigen Netz ist die erste Schicht die wichtigste, da sie das Endergebnis beeinflusst, je nachdem, was sie an die versteckte Schicht ausgibt. Schließlich ist ein normales Gitter in den meisten Fällen dreischichtig, und die verborgenen und die Ausgabeschichten sind bereits eine primitive lineare Ebene im mehrdimensionalen Raum.

Ein weiterer Trick ist die dynamische Normalisierung der Eingabedaten. Bei einer statischen Betrachtung wird jede Änderung der Volatilität (die sich mit Sicherheit bei den Termingeschäften ändern wird) das Ergebnis beeinflussen. Ich habe dieses Problem zu Gunsten der Dynamik gelöst.

 
Reshetov:

....

Und die Eingänge wie auf der vorherigen Seite? Das ist eine schlüpfrige Angelegenheit... Ich kann mir nicht einmal vorstellen, welche Zauberei mit NS betrieben werden könnte, um Ergebnisse mit einem so primitiven Gerät zu erzielen. Und was ist die Wahrheit, wo immer Sie eine Ausbildungsprobe nehmen, geht es mit SOS bergauf? Ist das Ergebnis wirklich stabil? Was ist mit anderen Paaren und Instrumenten? EURUSD ist am einfachsten vorherzusagen.

Reschetow:

Ich musste an der Handelsstrategie herumschrauben, um zu verhindern, dass sich das Netz anpasst.

Ich verstehe das auch nicht. Die NS sollten Signale geben, und es erscheint mir persönlich unlogisch, die NS in der Ausbildungsphase mit Hilfe von TS zu lenken. Hier ist der Ansatz irgendwie genau das Gegenteil... In welche Richtung wurde der TS verdreht?

Reschetow:

Ein weiterer Trick ist die dynamische Normalisierung der Eingabedaten. Bei einer statischen Betrachtung wird jede Änderung der Volatilität (die sich mit Sicherheit bei den Termingeschäften ändern wird) das Ergebnis beeinflussen. Ich habe dieses Problem zu Gunsten der Dynamik gelöst.

Ich praktiziere es auch - manchmal funktioniert es, manchmal nicht so gut. Es hängt auch vom Input ab, aber diese Inputs werden definitiv profitieren. Natürlich erhöht die dynamische Normalisierung den Informationsgehalt der Eingabe, erschwert aber das Lernen, und da das Lernen "einfach" ist, ist es sinnvoll, dass es zu einem positiven Ergebnis führt.

 
Figar0:

Und die Eingänge wie auf der vorherigen Seite? Das mit dem Abwinken ist eine schlüpfrige Angelegenheit...

Ich habe die Zeit des Abwinkens als Konstante. Früher war es ein Eingabeparameter, aber ich habe verschiedene erfolgreiche Vorwärtstests gesammelt und bin zu dem Schluss gekommen, dass sie um diese Konstante herumtanzen.

Figar0:


Ich kann mir nicht einmal vorstellen, welchen Zaubertrick ein NS anwenden könnte, um mit einem so primitiven Mittel Ergebnisse zu erzielen...

...

Ich verstehe das auch nicht. NS sollten Signale geben, und NS durch TS in der Ausbildungsphase zu leiten, erscheint mir persönlich unlogisch. Hier ist der Ansatz irgendwie genau das Gegenteil... In welche Richtung haben Sie mit TS gespielt?

Das alles wurde nicht an einem Tag zusammengebaut, sondern über einen langen Zeitraum und Stück für Stück. Einige Dinge wurden nach und nach hinzugefügt, einige Dinge wurden poliert und einige Dinge wurden aus dem Algorithmus entfernt.

Die Arbeit wurde durchgeführt von:

1. Um den Code zu minimieren. Michelangelos Methode: Wir nehmen einen Steinblock, schneiden Unnötiges ab und erhalten eine Skulptur (später wurde diese Methode Occam und seinem Rasiermesser zugeschrieben).

2. Umgehung der Zwänge der Testeroptimierung

3. Belastetes TC in einer solchen Stärke, dass es nicht mehr passt

Figar0:

Stimmt es also, dass es überall dort, wo man eine Ausbildungsprobe nimmt, mit OOS bergauf geht? Ist das Ergebnis wirklich stabil? Was ist mit anderen Paaren und Instrumenten? EURUSD ist am einfachsten vorherzusagen.

Die Ergebnisse auf OOS sind unterschiedlich, es gibt auch Lote. Es wäre verwunderlich, wenn das Netz nach der wissentlichen Anpassung der Ergebnisse nicht auf den Spread abfließen würde. Ich habe nicht gesagt, dass sie alle gewinnbringend sind, sondern dass ich die "schmackhaftesten" ausgewählt habe (vielleicht gibt es sogar noch mehr "schmackhafte", denn ich habe mir nicht alle angeschaut - es gibt einfach zu viele davon).

Der einzige Unterschied zu anderen Strategien: erfolgreiche Vorwärtsbewegungen können leicht manuell gefunden werden (sie werden überfüllt, wenn die Optimierungsergebnisse aussortiert werden) und die Auswahl ist recht breit + dezente Unterteilung nach einzelnen Eingabeparametern, d.h. Extrema mit leichtem Gefälle.

Neben anderen Paaren habe ich ein wenig Gold und GBPUSD getestet - ungefähr dasselbe.

 
Reshetov:

Der Pessimismus wird durch die Grenzen des Strategietesters bestimmt, d.h. wenn die Eingabewertebereiche groß sind oder die Anzahl der gleichen Werte die Grenze überschreitet, weigert sich der Optimierer zu starten. Es gibt also doch Grenzen.

Heute habe ich endlich den Aufbau eines neuronalen Netzes komplett in MQL4 mit 3:3:1 Architektur (drei Neuronen am Eingang, drei versteckte Eingänge, ein Ausgang). Alle Ebenen werden mit dem Tester GA konfiguriert. Das Problem ist jedoch, dass man für eine Schicht mindestens 12 Eingabeparameter benötigt, zumindest mit Werten von -1 bis 1 in Schritten von 1 (wie Rosenblatt). Aber so viele kann der Optimierer nicht verarbeiten. Ich musste mich herauswinden und die erste Schicht vereinfachen.

Im Gegensatz zu einer fremden Masche ist die selbstgemachte besser, weil sie aufgerüstet werden kann. Zum Beispiel habe ich nicht nur die erste Ebene nicht standardisiert, sondern auch eine dynamische Normalisierung der Eingabedaten hinzugefügt.

Die Signale an den Eingängen sind recht primitiv:

Trotz der oben erwähnten Primitivität erweist sich das Raster als sehr trainierbar, d.h. Gewichte und Schwellenwerte sind leicht zu wählen, so dass die Testergebnisse ohne einen einzigen Fehler (kein Gewinnfaktor) ausfallen. Aber nach einer solchen Anprobe beginnt der Vorwärtstest sofort, auf den Spread zu sinken. Ich musste an der Handelsstrategie herumschrauben, damit sich das Raster nicht verändert.

Die Mühe hat sich gelohnt, auch wenn sich mein Gehirn dabei von innen nach außen gedreht hat:

Dies sind die Ergebnisse des Tests. Von 1 bis 273 Geschäfte - Optimierung, als nächstes kommt der Vorwärtstest.

Und hier ist der Vorwärtstest:

Hier sind die Ergebnisse des Vorwärtstests:

Strategie-Tester-Bericht
RNN
Alpari-Demo (Build 409)

Symbol EURUSD (Euro gegenüber US Dollar)
Zeitraum 1 Stunde (H1) 2011.10.24 00:00 - 2012.01.13 23:59 (2011.10.24 - 2012.01.14)
Modell Nach Eröffnungskursen (nur für Expert Advisors mit expliziter Bar Opening Control)
Parameter t1=54; t2=4; t3=48; x1=194; x2=128; x3=68; y1=1; y2=1; y3=-1; t4=136; sl=900; lots=1; mn=888;

Bars in der Geschichte 2431 Modellierte Zecken 3862 Qualität der Simulation k.A.
Diagrammabweichungsfehler 0




Ersteinlage 10000.00



Reingewinn 14713.00 Gesamtgewinn 40711.60 Totalverlust -25998.60
Rentabilität 1.57 Erwartete Auszahlung 88.10

Absolute Absenkung 2721.60 Maximale Absenkung 4800.00 (39.74%) Relative Absenkung 39.74% (4800.00)

Handel insgesamt 167 Short-Positionen (% Gewinn) 101 (67.33%) Long-Positionen (% Gewinn) 66 (92.42%)

Gewinnbringende Geschäfte (% von allen) 129 (77.25%) Verlustgeschäfte (% von allen) 38 (22.75%)
Größte ertragreicher Handel 900.00 Verlustgeschäft -907.20
Durchschnitt profitables Geschäft 315.59 Verlustgeschäft -684.17
Maximum kontinuierliche Gewinne (Gewinn) 13 (2557.00) Kontinuierliche Verluste (Verlust) 4 (-3605.40)
Maximum Kontinuierlicher Gewinn (Anzahl der Siege) 3511.60 (11) Kontinuierlicher Verlust (Anzahl der Verluste) -3605.40 (4)
Durchschnitt laufende Gewinne 4 kontinuierlicher Verlust 1





Das Interessanteste ist, dass wir sogar auf dem Diagramm sehen können, dass der Optimierungsabschnitt schlechter ist als der Vorwärtsabschnitt. Dies geschieht selten. Obwohl ich diesen als den besten Stürmer unter vielen anderen ausgewählt habe, d.h. andere Stürmer haben viel schlechtere Ergebnisse als die Optimierer, aber trotzdem haben sie die besten.


Danke für den Tipp! Sie und Vinin sind für mich eine Autorität. Das Interessanteste ist, dass ihr beide Recht habt und nicht wisst, dass ihr parallel zueinander auf das gleiche Ziel zusteuert. Ich habe von dem einen genommen und von dem anderen genommen, und jetzt warte ich auf das Ergebnis. Sie schlagen eine neue Richtung ein, aber eine sehr schwierige!!!