Neuronales Netz in Form eines Skripts - Seite 9

 
Andy_Kon писал (а) >>

Wie wichtig ist die Genauigkeit bei sigmoid?

Nach 20 liegt die Genauigkeit in der 9. Stelle...


In der Ausbildung hat sie eine Wirkung. Manchmal kann dies sehr schwerwiegende Auswirkungen auf die Konvergenz haben, bis hin zur Verleugnung.

Dies sollte kein Problem darstellen, wenn GA für die Ausbildung verwendet wird.

 
YuraZ писал (а) >>

3-was eingeben (es ist klar, wie viele Eingaben)

4 - wann umgeschult werden muss

5-welcher Lernalgorithmus zu wählen ist

GA - genetisch

BP -


3. Wirklich ein Problem, es hängt alles von der Vorstellungskraft ab :) .

4. Hier können Sie schummeln. Schaffen Sie ein Netzwerk mit der Fähigkeit, zu vergessen. Das ist gar nicht so schwer.

Nehmen wir an, Sie könnten Folgendes tun (gut zum Lernen mit BP):

Begrenzen Sie die Anzahl der Muster - sagen wir 1000.

Wenn das nächste Muster erscheint (z. B. eine neue TF)

- das älteste Muster löschen

- Einen Lernzyklus durchführen

- Für ein neues Muster sollten wir es 5 Mal unterrichten.



Was bekommen Sie?

+ Der Ausbildungszyklus dauert nicht lange.

+ Das alte Muster wird nicht sofort vergessen.

- das neue Muster wird auch nicht sofort erlernt, sondern

+ aber schneller, als das alte Muster durch aggressives Lernen (5 mal EINMAL) vergessen wird.

- nur für BP-Lernen geeignet



5. Es ist ein Dilemma,

GA - geht stetig zum Optimum hinunter, ist aufgrund seiner Eigenschaften vor lokalen Minima geschützt, frisst aber viel Speicher und ist extrem langsam.

BP garantiert kein Ergebnis, obwohl die Wahrscheinlichkeit sehr hoch ist (d.h. wenn GA in der Lage ist zu lehren, wird BP auch lehren), es ist schneller, verbraucht keinen Speicher, aber benötigt Funktionen wie Momentum (lokale Minima werden übersprungen) und adaptive Schritte (Minima werden auch übersprungen, plus die Lerngeschwindigkeit steigt um ein Vielfaches).



Ich bin für BP.

 
TheXpert писал (а) >>

3. Wirklich ein Problem, es hängt alles von der Vorstellungskraft ab :) .

4. Hier können Sie schummeln. Schaffen Sie ein Netzwerk mit der Fähigkeit, zu vergessen. Das ist gar nicht so schwer.

Nehmen wir an, Sie könnten Folgendes tun (gut zum Lernen mit BP):

Begrenzen Sie die Anzahl der Muster - sagen wir 1000.

Wenn das nächste Muster erscheint (z. B. eine neue TF)

- das älteste Muster löschen

- Einen Lernzyklus durchführen

- Für ein neues Muster sollten wir es 5 Mal unterrichten.



Was bekommen Sie?

+ Der Ausbildungszyklus dauert nicht lange.

+ Das alte Muster wird nicht sofort vergessen.

- das neue Muster wird auch nicht sofort erlernt, sondern

+ aber schneller, als das alte Muster durch aggressives Lernen (5 mal EINMAL) vergessen wird.

- nur für BP-Lernen geeignet



5. Es ist ein Dilemma,

GA - geht stetig zum Optimum hinunter, ist aufgrund seiner Eigenschaften vor lokalen Minima geschützt, frisst aber viel Speicher und ist extrem langsam.

BP garantiert kein Ergebnis, obwohl die Wahrscheinlichkeit sehr hoch ist (d.h. wenn GA in der Lage ist zu lehren, werden 95% von BP auch lehren), es ist schneller, verbraucht keinen Speicher, aber benötigt Funktionen wie Momentum (lokale Minima werden übersprungen) und adaptive Schritte (Minima werden ebenfalls übersprungen und die Lerngeschwindigkeit steigt um ein Vielfaches).



Ich bin für BP.


Dies ist ein Beispiel für die Arbeit der GA

Quelle in SI...


GA wird für seine Schnelligkeit gelobt, da es

Es gibt auch MGA, was noch mutiger ist.


---

Grundsätzlich ist GA oder MGA eine schnelle Maximum- oder Minimum-Suche.

zumindest METAQUOTES verwendet GA für die Geschwindigkeit, nicht etwas anderes ...

Dateien:
dio.zip  4 kb
 
YuraZ писал (а) >>


Was die Geschwindigkeit betrifft, so wird GA als schnell gepriesen.

Es gibt auch MGA, das noch lebendiger ist.


---

GA oder MGA ist im Grunde eine schnelle Maximum- oder Minimum-Suche.

Wenigstens haben die METAQUOTES-Experten in ihrem Test GA für Geschwindigkeit verwendet und nicht etwas anderes ...


GA ist definitiv langsamer als BP.

Metaquotes hat es ganz richtig angewandt, denn GA ist eine sehr vielseitige Sache. Und natürlich wird es schneller sein als einfache rohe Gewalt.

Die Frage ist dieselbe wie in der Neuronik - es ist nicht die Neuronik, die Buchstaben erkennt, sondern spezielle Algorithmen, die FR-Netzwerke nicht verwenden.

Ebenso ist es besser, spezialisierte Algorithmen für das Training zu verwenden, da diese a priori besser sind.

 
TheXpert писал (а) >>

GA ist eindeutig langsamer als BP.

Metaquotes hat es ganz richtig angewendet, denn GA ist äußerst vielseitig. Und natürlich wird es schneller sein als einfache rohe Gewalt.

Die Frage ist anders, genau wie bei Neuronen - Buchstaben werden nicht von Neuronen erkannt, sondern von speziellen Algorithmen, die FR-Netzwerke nicht verwenden.

Ebenso ist es besser, spezialisierte Algorithmen für das Training zu verwenden, da diese a priori besser sind.

Und woher kommen diese Informationen, wenn sie nicht geheim sind? Wie wäre es dann, FR mit Beispielen zu trainieren?

Und was ist der (prinzipielle) Unterschied zwischen einem spezialisierten Algorithmus und einem trainierten neuronalen Netz?

 
Sergey_Murzinov писал (а) >>

Woher stammen diese Informationen, wenn sie nicht geheim sind? Wie wäre es mit einer FR-Ausbildung mit Beispielen?

Und was ist der (prinzipielle) Unterschied zwischen einem spezialisierten Algorithmus und einem trainierten (trainierten) neuronalen Netz?

Nun, zunächst einmal sind neuronale Netze nicht die beste Lösung für die Zeichenerkennung. Obwohl neocognitron 99,7 % mit dem Wörterbuch erreicht, auf Zeichen mit Drehungen, wirklich nicht der Punkt.

Gehen Sie zu RSDN.ru und lesen Sie die Themen zu neuronalen Netzen. Es gibt dort übrigens sehr schlaue Leute, ich denke, einige von ihnen findet man auch hier :) .


Über das Lernen am Beispiel, wie hier:

- vektorisieren (ein Skelett erstellen)

- Kreuzungen und deren relative Positionen zählen

- Nehmen Sie z. B. ein paar Koeffizienten der ersten Fourier-Transformation und normalisieren Sie vorher, um die Größe nicht zu beeinflussen. Übrigens, mit FT kann man rotationsunempfindlich werden, EMMNIP.

- Durchschnitt für Beispiele

- als Referenz in die Basis einfügen


Inwiefern ist sie anders?

Wenn Sie einen speziellen Algorithmus verwenden, wissen Sie, wie er funktioniert.

Sie wissen nicht, wie ein neuronales Netz das macht. Sie wissen nur, dass diese spezielle Funktion, die von einem neuronalen Netz definiert wird, in der Lage ist, Eingaben mit einem hohen Maß an Genauigkeit in Ausgaben zu interpolieren.

 

Yaaaaaaaaa!!!!!!!

Übrigens ist RSDN.RU ein Forum für Programmierer, nicht für Entwickler von neuronalen Netzwerkalgorithmen und deren Anwendungen.

Ich informiere Sie darüber, dass FineReader Blöcke von neuronalen Netzwerktechnologien verwendet (neueste Versionen). Außerdem empfehle ich Ihnen, spezielle (nicht populärwissenschaftliche) Literatur zu lesen und sich in Fachforen einen Überblick über neuronale Netze zu verschaffen.

Auch ein trainiertes Netz ist ein spezieller Algorithmus. Das einfachste Beispiel sehen Sie, wenn Sie C-Code in dem Programm NeuroShell2 erzeugen. Der Netzcode ist gut sichtbar.

 
Sergey_Murzinov писал (а) >>

Nur damit Sie es wissen: FineReader verwendet Blöcke mit neuronaler Netzwerktechnologie (neueste Versionen). Und um eine Vorstellung von neuronalen Netzen zu bekommen, empfehle ich die Lektüre spezieller (nicht populärwissenschaftlicher) Literatur und die Lektüre von Zweigen spezialisierter Foren.

OK, kann ich einige Links zu diesem Thema haben?
 

2 Jurassic

Zunächst einmal möchte ich mich für den Code des neuronalen Netzes bedanken.

Nach einer detaillierten Analyse habe ich verstanden, dass Sie die neuronale Offset-Methode (Arrays _threshold und _t_change) und auch die Impulsmethode (Momentum-Parameter) verwenden, um die Berechnungen zu beschleunigen.

Ich habe ein paar Fragen zu seiner Umsetzung.
1) Sie ändern _t_change in der Korrekturfunktion für die Gewichte, verwenden diese Korrektur aber nirgends, um die neue _Schwellenwertreihe der Gewichte zu berechnen.

2) Wenn Sie die Ausgabe an die Sigmoidfunktion weitergeben, subtrahieren Sie den Parameter _threshold von der Summe, obwohl dieser Schwellenwert in der Literatur nicht -1, sondern +1 ist. Sie sollten also addieren, nicht subtrahieren. Umso mehr, wenn Sie beim Einstellen der Gewichte genau +1 und nicht -1 eingeben.
Ich habe mit diesem Schwellenwert und dem Impuls herumgespielt, und es hat sich herausgestellt, dass dies der Geschwindigkeit der Berechnungen sehr zuträglich ist. Die Zeit wird um ein Vielfaches verkürzt.

3) Ich war auch an der Sigmoidfunktion interessiert. So wie ich es verstehe, sind diese Parameter auf Ihre praktische Erfahrung in diesem Bereich zurückzuführen, aber ich denke, Sie haben Ussermans Bücher gelesen, in denen er schreibt, dass der Bereich {0,1} nicht optimal ist. Der Wert der Gewichtskorrektur ist proportional zum Ausgangspegel, und ein Ausgangspegel von Null führt dazu, dass sich das Gewicht nicht ändert. Und da bei binären Eingangsvektoren im Durchschnitt die Hälfte der Werte Null ist, werden auch die Gewichte, denen sie zugeordnet sind, nicht lernen!
Die Lösung besteht darin, die Eingänge in den Bereich {-0,5,0,5} zu bringen und dem Sigmoid ebenfalls einen Offset von 0,5 hinzuzufügen. Ein solches Sigmoid [1/(1+Exp(-x))-0.5] mit einem Bereich {-0.5,0.5} reduziert die Konvergenzzeit um 30-50%.
Das einzige Problem in diesem Fall ist die Reduzierung des Eingabevektors auf einen Bereich von {-0.5,0.5}. Ich werde es wahrscheinlich normalisieren müssen. Ich habe es versucht, aber aus irgendeinem Grund war das Ergebnis des Sigmas immer positiv. Ich würde gerne Ihre Meinung zu diesem Thema hören.

4) Wie sieht es nun mit der Art und Weise aus, wie die Eingänge eingestellt sind? Vielleicht sollten wir diesen Prozess automatisieren. Was halten Sie von diesem Ansatz: Bei der Ausgabe erwarten wir die Werte 100, 010, 001, wie üblich.
Um automatisch eine Reihe von Ausgängen zu setzen, schlage ich vor, für jeden Balken das Verhältnis von Höchst- und Tiefstpreis im nächsten Intervall festzulegen (z. B. 5000 Balken bei einminütigen Balken). Der Wert dieses Verhältnisses zeigt an, wohin sich der Preis bewegt hat. Liegt er bei 1, ist er flach. Liegt er über 1, ist er gestiegen. Liegt der Wert zwischen 0 und 1, ist der Wert gesunken. Aber ich denke, der optimale Bereich für die Analyse ist nicht [0, +Є], sondern [-EЄ, -A; -A, A; A, +Є], was im Übrigen unseren Ausgangsvektoren
entsprechen würde. Der Eingang des Netzes sind die letzten K Werte von N gleitenden Durchschnitten (oder die Differenz zwischen MA und dem durchschnittlichen Barpreis). Die Eingaben sind also insgesamt N*K.

Ich füge einen etwas leichteren und klareren Basiscode ein (Bibliothek mit Ihren Funktionen). Im Allgemeinen ist es in einem so frühen Entwicklungsstadium wahrscheinlich nicht notwendig, ein vollständiges Expert Advisor-Produkt zu erstellen. Lassen Sie uns zunächst eine klare Logik der Berechnungen in das Skript implementieren. Testen wir alles und schreiben wir dann einen Standardindikator auf dessen Grundlage. Und auf dieser Basis werden wir dann weiter vorankommen - Backlinks und Gremien von Netzwerken, und wahrscheinlich eine Menge interessanter Dinge.

P.S.
Ich hoffe, Sie werden weiterhin Ihre Entwicklungen mit uns teilen, deshalb habe ich eine kleine Bitte. Wenn es Ihnen nichts ausmacht, entfernen Sie bitte "Leerzeichen einfügen" in den Editor-Optionen, es ist ein bisschen schwierig, Code zu lesen. Ich freue mich auf die neue Version. Vorschläge für gemeinsame Tests sind möglich.

Dateien:
 
sergeev писал (а) >>

2 Jurassic


2) Wenn Sie die Ausgabe an die Sigmoidfunktion senden, subtrahieren Sie den Parameter _Schwellenwert von der Summe, obwohl dieser Schwellenwert in der Literatur nicht -1, sondern +1 ist. Sie sollten also addieren, nicht subtrahieren. Umso mehr, wenn Sie beim Einstellen der Gewichte genau +1 und nicht -1 eingeben.
Ich habe mit diesem Schwellenwert und dem Impuls herumgespielt, und es hat sich herausgestellt, dass dies der Geschwindigkeit der Berechnungen sehr zuträglich ist. Die Zeit wird um ein Vielfaches verkürzt.

3) Ich war auch an der Sigmoidfunktion interessiert. So wie ich es verstehe, sind diese Parameter auf Ihre praktische Erfahrung in diesem Bereich zurückzuführen, aber ich denke, Sie haben Ussermans Bücher gelesen, in denen er schreibt, dass der Bereich {0,1} nicht optimal ist. Der Wert der Gewichtskorrektur ist proportional zum Ausgangspegel, und ein Ausgangspegel von Null führt dazu, dass sich das Gewicht nicht ändert. Und da bei binären Eingangsvektoren die Hälfte der Werte im Durchschnitt Null ist, werden auch die Gewichte, denen sie zugeordnet sind, nicht lernen!
Die Lösung besteht darin, die Eingaben auf den Bereich {-0.5,0.5} zu reduzieren und dem Sigmoid ebenfalls einen Offset von 0.5 hinzuzufügen. Ein solches Sigmoid [1/(1+Exp(-x))-0.5] mit einem Bereich {-0.5,0.5} reduziert die Konvergenzzeit um 30-50%.
Das einzige Problem in diesem Fall ist die Reduzierung des Eingabevektors auf einen Bereich von {-0.5,0.5}. Ich werde es wahrscheinlich normalisieren müssen. Ich habe es versucht, aber aus irgendeinem Grund war das Ergebnis des Sigmas immer positiv. Ich würde gerne Ihre Meinung zu diesem Thema hören.

2 Die ursprüngliche Formel sieht wie folgt aus: S[j] = Summe(i)(y[i]*w[i,j] - t[j]). Das heißt, die Schwelle wird aufgehoben, weshalb sie auch Schwelle genannt wurde. Und zwei Minuspunkte in der Formel für die Neuberechnung ergeben ein Plus, d. h. es gibt keinen Fehler bei der Verwendung von Schwellenwerten und der Neuberechnung von Parametern.

Wenn ich mich irre, kann mich der Autor korrigieren.

3 Es handelt sich nicht um ein Sigmoid, sondern um ein Halbsigmoid. Die Konvergenzzeit für diese Funktionen hängt von den Eingabedaten für das Netz ab. Es kann vorkommen, dass das Bisigmoid um ein Vielfaches schneller konvergiert, aber mit anderen Daten kann sich ein völlig anderes Bild ergeben.