Diskussion zum Artikel "Neuronale Netze leicht gemacht (Teil 50): Soft Actor-Critic (Modelloptimierung)" - Seite 2

 
Viktor Kudriavtsev #:

Und so weiter. Habe ich das richtig verstanden? Was mich verwirrt, ist, dass der Test oft sehr große negative Durchgänge mit -7000 oder sogar -9000 ergibt. Und davon wird es in der Basis eine Menge geben. Wird das Netz nicht darauf trainiert, absichtlich im negativen Bereich zu handeln?

Schauen wir uns den Lernprozess an, ohne zu tief in die Mathematik einzusteigen, sozusagen mit den Fingern. Beim klassischen Verstärkungslernen wird jede Aktion von der Umwelt bewertet, wenn sie uns eine Belohnung gibt. Diese Belohnung geben wir dem Modell als Zielergebnis vor. Wir trainieren das Modell also nicht für die Wahl einer Aktion, sondern für die Vorhersage der erwarteten Belohnung für die Aktion (Q-Funktion) und wählen dann aus den vorhergesagten Belohnungen die maximale Belohnung für die Durchführung der Aktion. Ich möchte gleich anmerken, dass die Option, nichts zu tun, wenn alle Aktionen unrentabel sind, nicht in Frage kommt, weil wir das "Nichtstun" als separate Aktion bewerten, die auch eine eigene Belohnungsstufe hat.

In einem kontinuierlichen Aktionsraum können wir nicht direkt eine Belohnung für eine Aktion angeben. Schließlich muss das Modell den Grad der Auswirkung (Transaktionsvolumen, SL-Level usw.) zurückgeben, nicht die Belohnung. Daher verwenden wir einen Critic, um Aktionen zu bewerten. Wir geben den Zustand und die Aktion aus der Beispieldatenbank in die Eingabe des Critic ein, und er liefert eine vorhergesagte Belohnung. Wir vergleichen diese mit der Modellbelohnung und trainieren den Critic, Aktionen korrekt zu bewerten. Als Ergebnis bildet sich der Critic eine abstrakte Vorstellung über den Einfluss des Zustands und der Aktion auf die erwartete Belohnung. In einem Aufwärtstrend zum Beispiel wird ein Anstieg des Kaufvolumens die Einnahmen erhöhen, während ein Rückgang des Verkaufsvolumens die Verluste verringert.

Als nächstes trainieren wir den Actor. Wir nehmen einen separaten Zustand und füttern ihn mit dem Input des Actors. Der Actor generiert eine Aktion. Wir füttern ihn mit dieser Aktion und dem Anfangszustand der Umgebung, und er wertet die Aktion des Actors aus. Dann sagen wir dem Critic, dass wir das Ergebnis verbessern müssen (wir geben ein Zielergebnis an, das höher ist als das erhaltene Ergebnis). Daraufhin teilt der Critic dem Actor mit, wie er seine Aktion ändern muss (er übermittelt einen Fehlergradienten).

Theoretisch können wir also auch bei negativen Durchgängen ein positives Ergebnis erzielen. Das Problem ist jedoch, dass die Funktion der Einkommensabhängigkeit von der Handlung nicht linear ist. Und für eine korrektere Bewertung von Aktionen brauchen wir bessere Pässe.

Was nun die direkte Arbeit und das Training des Akteurs betrifft. In der Anfangsphase initialisieren wir das Modell mit zufälligen Parametern. Und die Handlungen des Akteurs sind ebenso zufällig. Während des Trainings sagt der Critic zum Beispiel, dass wir eine Position für 1 Lot eröffnen müssen. Aber wir trainieren das Modell mit einer niedrigen Lernrate. Und bei der nächsten Iteration eröffnet der Actor eine Position für 0,01 Lot. Offensichtlich müssen wir 100 solcher Trainingsiterationen durchführen, um das gewünschte Ergebnis zu erzielen.

Warum sollten wir also mit dem Kopf gegen die Wand rennen? Erhöhen wir den Lernkoeffizienten auf 1 und speichern wir die gesammelten Erfahrungen auf einmal ab. Aber es gibt auch eine andere Seite der Medaille. In diesem Fall vergisst das Modell sofort alle gesammelten Erfahrungen und eine Verallgemeinerung kommt nicht in Frage.

Deshalb schlagen wir unseren Kopf so lange gegen die Wand, bis wir eine einfache Wahrheit erfahren. Und der gesamte Prozess des Modelltrainings ist eine gezielte Auswahl von Parametern durch die Methode von Versuch und Irrtum.

 
Dmitriy Gizlyk #:

Schauen wir uns den Lernprozess an, ohne uns zu sehr in die Mathematik zu vertiefen, sozusagen mit den Fingern. Beim klassischen Verstärkungslernen wird jede Handlung von der Umwelt bewertet, wenn sie uns eine Belohnung gibt. Diese Belohnung geben wir dem Modell als Zielergebnis vor. Wir trainieren das Modell also nicht für die Wahl einer Aktion, sondern für die Vorhersage der erwarteten Belohnung für die Aktion (Q-Funktion) und wählen dann aus den vorhergesagten Belohnungen die maximale Belohnung für die Durchführung der Aktion. Lassen Sie mich gleich sagen, dass die Option, nichts zu tun, wenn alle Aktionen unrentabel sind, nicht funktioniert, weil wir das "Nichtstun" als separate Aktion bewerten und es auch eine eigene Belohnung hat.

In einem kontinuierlichen Aktionsraum können wir nicht direkt eine Belohnung für eine Aktion angeben. Schließlich muss das Modell den Grad der Auswirkung (Transaktionsvolumen, SL-Level usw.) zurückgeben, nicht die Belohnung. Daher verwenden wir einen Critic, um Aktionen zu bewerten. Wir geben den Zustand und die Aktion aus der Beispieldatenbank in die Eingabe des Critic ein, und er liefert eine vorhergesagte Belohnung. Wir vergleichen diese mit der Modellbelohnung und trainieren den Critic, Aktionen korrekt zu bewerten. Als Ergebnis bildet sich der Critic eine abstrakte Vorstellung über den Einfluss des Zustands und der Aktion auf die erwartete Belohnung. In einem Aufwärtstrend zum Beispiel erhöht ein Anstieg des Kaufvolumens die Belohnung, während ein Rückgang des Verkaufsvolumens den Verlust verringert.

Als nächstes trainieren wir den Actor. Wir nehmen einen separaten Zustand und füttern ihn mit dem Input des Actors. Der Actor generiert eine Aktion. Wir füttern den Actor mit dieser Aktion und dem Anfangszustand der Umgebung, und er wertet die Aktion des Actors aus. Dann sagen wir dem Critic, dass wir das Ergebnis verbessern müssen (wir geben ein Zielergebnis an, das höher ist als das erhaltene Ergebnis). Daraufhin teilt der Critic dem Actor mit, wie er seine Aktion ändern soll (er übermittelt einen Fehlergradienten).

Theoretisch können wir also auch bei negativen Durchgängen ein positives Ergebnis erzielen. Das Problem ist jedoch, dass die Funktion der Einkommensabhängigkeit von der Aktion nicht linear ist. Und für eine korrektere Bewertung von Aktionen sollten wir besser Passagen verwenden.

Was nun die direkte Arbeit und das Training des Schauspielers betrifft. In der Anfangsphase initialisieren wir das Modell mit zufälligen Parametern. Und die Aktionen des Actors sind ebenso zufällig. Im Laufe des Trainings sagt der Critic zum Beispiel, dass wir eine Position für 1 Lot eröffnen müssen. Aber wir trainieren das Modell mit einer niedrigen Lernrate. Und bei der nächsten Iteration eröffnet der Actor eine Position für 0,01 Lot. Um das gewünschte Ergebnis zu erzielen, müssen wir natürlich 100 solcher Trainingsiterationen durchführen.

Warum sollten wir also mit dem Kopf gegen die Wand rennen? Erhöhen wir den Lernkoeffizienten auf 1 und speichern wir die gesammelten Erfahrungen auf einmal ab. Aber es gibt auch eine andere Seite der Medaille. In diesem Fall vergisst das Modell sofort alle gesammelten Erfahrungen und eine Verallgemeinerung kommt nicht in Frage.

Deshalb schlagen wir unseren Kopf so lange gegen die Wand, bis wir eine einfache Wahrheit erfahren. Und der gesamte Prozess des Modelltrainings ist eine gezielte Auswahl von Parametern durch die Methode von Versuch und Irrtum.

Aha. Vielen Dank für diese klare Erklärung.

Dann stellt sich die Frage, warum das Modell durch 100 000 Iterationen trainiert wird und eine Basis von 200 Trajektorien hat und der Prozess der Sammlung neuer Beispiele ständig wiederholt wird. Warum kann ein Expert Advisor nicht eine Basis von z.B. 1000 Trajektorien erstellen und 10 000 000 Iterationen in das Training stecken und es dort über Nacht, einen Tag oder eine Woche lernen lassen? Warum ist es notwendig, die Basis ständig aufzufüllen und eine kleine Anzahl von Iterationen zu lernen?

 
Viktor Kudriavtsev #:

Aha, ich verstehe. Vielen Dank für diese klare Erklärung.

Dann stellt sich die Frage, warum wir das Modell 100 000 Iterationen lang trainieren und eine Basis von 200 Trajektorien haben und den Prozess des Sammelns neuer Beispiele ständig wiederholen sollten? Warum kann ein Expert Advisor nicht eine Basis von z.B. 1000 Trajektorien erstellen und 10 000 000 Iterationen trainieren und das Modell über Nacht, einen Tag oder eine Woche lernen lassen? Warum ist es notwendig, die Basis ständig aufzufüllen und eine kleine Anzahl von Iterationen zu lernen?

Theoretisch ist das möglich, aber es kommt immer auf die Ressourcen an. Wir sprechen zum Beispiel von einer TA-Größe von 1000 Punkten. Im Konzept eines kontinuierlichen Aktionsraums sind das 1000 Optionen. Selbst wenn wir sie in 10er-Schritten nehmen, sind das 100 Varianten. Lassen Sie die gleiche Anzahl von SLs oder sogar die Hälfte davon (50 Varianten). Fügen Sie mindestens 5 Varianten des Handelsvolumens hinzu und wir erhalten 100 * 50 * 5 = 25000 Varianten. Multiplizieren Sie mit 2 (Kauf / Verkauf) - 50 000 Varianten für eine Kerze. Multiplizieren Sie mit der Länge der Trajektorie und Sie erhalten die Anzahl der Trajektorien, um den gesamten möglichen Raum abzudecken.

Beim schrittweisen Lernen werden Trajektorien in der unmittelbaren Umgebung der Aktionen des aktuellen Akteurs ausgewählt. So grenzen wir das Untersuchungsgebiet ein. Und wir untersuchen nicht alle möglichen Varianten, sondern nur einen kleinen Bereich mit der Suche nach Varianten zur Verbesserung der aktuellen Strategie. Nach einem kleinen "Tuning" der aktuellen Strategie sammeln wir neue Daten in dem Bereich, in den uns diese Verbesserungen geführt haben, und bestimmen den weiteren Bewegungsvektor.

Dies kann an die Suche nach einem Ausweg in einem unbekannten Labyrinth erinnern. Oder an den Weg eines Touristen, der die Straße entlang läuft und Passanten nach dem Weg fragt.

 
Dmitriy Gizlyk #:

Theoretisch ist das möglich, aber es hängt alles von den Ressourcen ab. Wir sprechen zum Beispiel von einer TP-Größe von 1000 Punkten. Im Konzept eines kontinuierlichen Aktionsraums sind das 1000 Varianten. Selbst wenn wir in 10er-Schritten vorgehen, sind das 100 Varianten. Lassen Sie die gleiche Anzahl von SLs oder sogar die Hälfte von ihnen (50 Varianten). Fügen Sie mindestens 5 Varianten des Handelsvolumens hinzu und wir erhalten 100 * 50 * 5 = 25000 Varianten. Multiplizieren Sie mit 2 (Kauf / Verkauf) - 50 000 Varianten für eine Kerze. Multiplizieren Sie mit der Länge der Trajektorie und Sie erhalten die Anzahl der Trajektorien, um den gesamten möglichen Raum abzudecken.

Beim schrittweisen Lernen werden Trajektorien in der unmittelbaren Umgebung der Aktionen des aktuellen Akteurs ausgewählt. So grenzen wir das Untersuchungsgebiet ein. Und wir untersuchen nicht alle möglichen Varianten, sondern nur einen kleinen Bereich mit der Suche nach Varianten zur Verbesserung der aktuellen Strategie. Nach einem kleinen "Tuning" der aktuellen Strategie sammeln wir neue Daten in dem Bereich, in den uns diese Verbesserungen geführt haben, und bestimmen den weiteren Bewegungsvektor.

Dies kann an die Suche nach einem Ausweg in einem unbekannten Labyrinth erinnern. Oder an den Weg eines Touristen, der die Straße entlang läuft und Passanten nach dem Weg fragt.

Aha. Ich danke Ihnen.

Mir ist aufgefallen, dass bei der Sammlung Research.mqh die Ergebnisse irgendwie in Gruppen mit einem sehr engen Gleichgewicht in der Gruppe gebildet werden. Und es scheint, als ob es in Research.mqh einen gewissen Fortschritt gibt (positive Gruppen von Ergebnissen begannen häufiger zu erscheinen oder so). Aber bei Test.mqh scheint es überhaupt keinen Fortschritt zu geben. Es gibt eine gewisse Zufälligkeit und im Allgemeinen endet ein Durchgang häufiger mit einem Minus. Manchmal geht es nach oben und dann nach unten, und manchmal geht es direkt nach unten und bleibt dann stehen. Er scheint auch das Volumen der Eingabe am Ende zu erhöhen. Manchmal handelt er nicht im Minus, sondern nur um die Null herum. Mir ist auch aufgefallen, dass er die Anzahl der Trades ändert - seit 5 Monaten eröffnet er 150 Trades, und jemand eröffnet 500 (ungefähr). Ist das alles normal, was beobachte ich da?

 
Viktor Kudriavtsev #:

Aha, ich verstehe. Ich danke Ihnen.

Mir ist aufgefallen, dass bei der Sammlung von Research.mqh die Ergebnisse irgendwie in Gruppen mit einem sehr engen Endsaldo in der Gruppe gebildet werden. Und es scheint , als ob es in Research.mqh einige Fortschritte gibt (positive Gruppen von Ergebnissen begannen häufiger zu erscheinen oder so). Aber bei Test.mqh scheint es überhaupt keinen Fortschritt zu geben. Es gibt eine gewisse Zufälligkeit und im Allgemeinen endet ein Durchgang häufiger mit einem Minus. Manchmal geht es nach oben und dann nach unten, und manchmal geht es direkt nach unten und bleibt dann stehen. Er scheint auch das Volumen der Eingabe am Ende zu erhöhen. Manchmal handelt er nicht im Minus, sondern nur um die Null herum. Mir ist auch aufgefallen, dass er die Anzahl der Trades ändert - seit 5 Monaten eröffnet er 150 Trades, und jemand eröffnet 500 (ungefähr). Ist das alles normal, was beobachte ich da?

Die Zufälligkeit ist ein Ergebnis der Stochastik des Akteurs. Je mehr Sie lernen, desto weniger wird sie auftreten. Sie wird vielleicht nicht ganz verschwinden, aber die Ergebnisse werden ähnlich sein.

 
Dmitriy Ich habe jetzt etwas mit neuronka geändert - Es begann zu öffnen Trades seltsam (öffnet auf eine Kerze und schließt auf der nächsten) und aus irgendeinem Grund Gleichgewicht und Eigenkapital nicht ändern. Es zeichnet einfach eine gerade Linie auf dem Chart. Und die Änderung der Balance auf das Ergebnis der Pässe 0. Außerdem geschieht dies sowohl bei Test.mqh als auch bei Research.mqh. Und die gesamte Basis ist jetzt mit solchen Pässen gefüllt. Ist das normal? Was ist zu tun - weiter zu lehren oder ich habe eine Idee zu reißen die Basis und trainierte Modelle von einem Ordner zu einem anderen vorübergehend zu verschieben und eine neue Basis mit zufälligen Modellen zu schaffen, und dann bringen die Modelle zurück und weiterhin zu lehren sie. Um irgendwie bekommen sie aus der geraden Linie.
 
Viktor Kudriavtsev zeichnet einfach eine gerade Linie auf dem Chart. Und die Änderung der Balance auf das Ergebnis der Pässe 0. Außerdem geschieht dies sowohl bei Test.mqh als auch bei Research.mqh. Und die gesamte Basis ist jetzt mit solchen Pässen gefüllt. Ist das normal? Was ist zu tun - weiter zu lehren oder ich habe eine Idee zu reißen die Basis und trainierte Modelle von einem Ordner zu einem anderen vorübergehend zu verschieben und eine neue Basis mit zufälligen Modellen zu schaffen, und dann bringen die Modelle zurück und weiterhin zu lehren sie. Um sie irgendwie aus der geraden Linie zu bringen.

Die Datenbank mit den Beispielen wird nicht durch Durchläufe ohne Abschlüsse "verstopft". Research.mq5 hat eine Prüfung und speichert solche Durchgänge nicht. Aber es ist gut, dass ein solcher Durchgang von Test.mq5 gespeichert wird . Es gibt eine Strafe für das Fehlen von Deals bei der Generierung des Rewards. Und es sollte dem Modell helfen, aus einer solchen Situation herauszukommen.

 

Dmitriy Ich habe mehr als 90 Zyklen (Training-Test-Sammlung von Datenbank) gemacht und ich habe immer noch das Modell gibt zufällig. Ich kann sagen, dass von 10 Läufen von Test.mqh 7 Abflüsse 2-3 auf 0 und 1-2 mal für etwa 4-5 Zyklen gibt es einen Lauf im Plus. Sie in dem Artikel angegeben, dass Sie ein positives Ergebnis für 15 Zyklen bekam. Ich verstehe, dass es eine Menge von Zufälligkeiten im System, aber ich verstehe nicht, warum ein solcher Unterschied? Nun, ich verstehe, wenn mein Modell nach 30 Zyklen ein positives Ergebnis liefert, sagen wir 50, dann sind es schon 90 und man kann keinen großen Fortschritt sehen.....

Sind Sie sicher, dass Sie denselben Code gepostet haben, den Sie selbst trainiert haben? Vielleicht haben Sie etwas für Tests korrigiert und versehentlich vergessen und die falsche Version gepostet.....?

Und wenn zum Beispiel der Trainingskoeffizient um eine Stufe erhöht wird, lernt er dann nicht schneller?

Ich verstehe etwas nicht......