Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datenaufbereitung (Normalisierung) für neuronale Netze
progi123
myCSharp.de - Member

Avatar #avatar-3317.gif


Dabei seit:
Beiträge: 71
Herkunft: Süddeutschland

Themenstarter:

Datenaufbereitung (Normalisierung) für neuronale Netze

beantworten | zitieren | melden

Hallo,

so wie ich das verstehe müssen die Outputs dem Wertebereich der verwendeten Aktivierungsfunktion entsprechen.
Bei den Inputs können alle reelen Zahlen verwendet werden. Stimmt das soweit?

Welche Vorteile würde eine Normalisierung der Inputs mit sich bringen?
Beschleunigung des Lernens? Vermeidung von Fehlern?

In der Praxis läuft das Programm zu meiner vollsten Zufriedenheit aber das theoretische Verständnis hinkt noch etwas hinterher ;
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.813
Herkunft: Waidring

beantworten | zitieren | melden

Hallo progi123,

Zitat
aber das theoretische Verständnis hinkt noch etwas hinterher
und das kann dir in der Allgemeinhat der neuronalen Netze im Forum auch nicht beigebracht werden. Dazu ist die Fülle an Informationen zu riesig.


Da du nicht schreibst welchen Netztyp* du verwendest gehe ich mal vom Mehrschichtperzeptron (MLP) mit sigmoider Aktivierungsfunktion aus. Der Vortiel der Normalisierung ist dass die Aktivierungsfuntion nicht in den Sättigungsbereich kommt. Oder ander dass di/do möglichst groß ist um beim Lernen vorteile zu haben.

* bitte den Netztyp angeben, sonst könnten Antworten komplett in die falsche Richtung zielen

Hinzu kommt dass je nach Eingaben durch die Normalisierung alle gleich viel an Bedeutung zum Lernen haben. So ist zB die (0,1)-Normalisierung oft verwenden um "Chancengleicheit" beim Lernen zu ermöglichen.
Zitat
müssen die Outputs dem Wertebereich der verwendeten Aktivierungsfunktion entsprechen.
Das ergibt sich beim MLP zwangsläufig aus der Aktivierungsfunktion.
Zitat
Bei den Inputs können alle reelen Zahlen verwendet werden.
Ja, aber es sinnvoller auch diese zu bescrhänken - siehe oben.


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo progi123,

um mal in die gleiche Kerbe zu hauen:
Zitat
die Outputs [müssen] dem Wertebereich der verwendeten Aktivierungsfunktion entsprechen.
ich würde eher sagen, sie tun es automatisch.
Zitat
Bei den Inputs können alle reelen Zahlen verwendet werden.
Kommt auf das verwendete Modell an, aber reelen Zahlen (sofern von solchen auf Rechner mit endlicher Genauigkeit überhaupt die Rede sein kann) sind nicht unüblich.
Zitat
Welche Vorteile würde eine Normalisierung der Inputs mit sich bringen?
Beschleunigung des Lernens? Vermeidung von Fehlern?
Zweimal ja.

herbivore
private Nachricht | Beiträge des Benutzers
progi123
myCSharp.de - Member

Avatar #avatar-3317.gif


Dabei seit:
Beiträge: 71
Herkunft: Süddeutschland

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für die rasche Hilfe erstmal .

Bei dem verwendeten Netz handelt es sich um ein MLP mit 3 Schichten und sigmoider Aktivierungsfunktion. 4 Schichten haben sich nicht als vorteilhaft erwiesen d.h. längere Trainingszeit ohne zusätzlichen Erfolg.

Ich hab die Daten instinktiv normalisiert und erst im Nachhinein herausgefunden, dass die Inputs nicht auf einen Wertebereich beschränkt sind. Man hat z.B. bei Wetterdaten Variablen wie Temperatur (5.2 Grad C) oder Höhe über dem Meeresspiegel (5000m). Dann ist es logisch nachvollziehbar, dass die Werte zu Instabilität führen können.

Noch eine Frage. Hat es Vorteile -1 statt 0 für einen nicht vorhandenen Wert zu nehmen? Gibt es dafür Beispiele?
Bei 0 weiß das Netz gar nicht, dass der Wert existiert. -1 stellt aber eine Information da und könnte einen Effekt auf die Zielvariable haben.
Oder man macht eine Korrelations-/Regressionsanalyse mit beiden Varianten und überprüft die Erklärungskraft.
Gibt es bei der Inputauswahl ein best practice mit den oben erwähnten Verfahren oder ist es eher try and error?
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.813
Herkunft: Waidring

beantworten | zitieren | melden

Hallo progi123,

mit 3 Schichten meinst du Input-Hidden-Output? Das reicht in den (aller-) meisten Fällen. Ein 2. Hiddenlayer bringt fast nie etwas positives. Aber das hast du ja erkannt und braucht hier nicht weiter diskutiert werden (würde den Rahmen sprengen).
Zitat
Man hat z.B. bei Wetterdaten Variablen wie Temperatur (5.2 Grad C)
oder Höhe über dem Meeresspiegel (5000m). Dann ist es logisch nachvollziehbar, dass die Werte zu
Instabilität führen können.
Gerade bei so extremen Wert-Unterschieden ist die (0,1)-Normalisierung (in der Statistik auf Z-Transformatino genannt, also Mittelwert = 0 und Standardabweichung = 1) vorteilhaft. Dann haben alle Daten den gleichen Einfluss. Würde wie im Beispiel eben 5.2 und 5000 vewendet werden so ist 5000 klar dominant während der Einfluss von 5.2 vernachlässigbar ist.

Es gibt auch die "Normalisierung" welche die Werte einfach in das Eingabeintervall [-1, 1] skaliert. Das hat den Vorteil dass die steile Flanke der Sigmoid-Funktion optimal genutz wird, aber den Nachteil (ohne gehts nie ;-)) dass die statischtischen Informationen wesentlich schlechter berücksicht werden wie dies bei der (0,1) der Fall. Und i.d.R. folgen die Eingangsdaten einer Verteilung derart dass nach der Normalisierung nur wenige Ausreißer in den Sättigungsberich der Sigmoid kommen. Dies kann sogar von Vorteil sein, denn diese Ausreißer werden dann weniger berücksichtig - sozusagen eine implizite Filertung :-)
Zitat
Hat es Vorteile -1 statt 0 für einen nicht vorhandenen Wert zu nehmen?
Das MLP ist ein skalarproduktbasiertes Netzwerk und somit ergibt sich bei einem 0-Eingang eben für den Summanden auch 0 -> der Einfluss ist nicht da.
Einfach -1 (oder einen anderen Wert zu nehmen) wäre ein verfälschen der Eingangsdaten. Dies könnte höchsten verwendet werden wenn das Netz speziell ausgerichtet ist indem es jeden Eingang prüft ob dieser -1 ist und den dann enstprechend ignoriert. Der Aufwand (sowohl Coden als auch Laufzeit) ist allerdings schrecklich.
Zitat
Gibt es bei der Inputauswahl ein best practice
Ich wieß jetzt nciht worauf du genau hinauswillst, aber ich denke das wurde bereits geschrieben: (0,1)-Transformation. Das soll zwar kein Allheilmittel sein, aber für die meisten realen Fälle ist es die beste Wahl.

Nebenbemerkung 1:
Zitat
d.h. längere Trainingszeit ohne zusätzlichen Erfolg.
Welches Trainingsverfahren verwendest du? Mit ResilientPropagation hab ich eigentlich die besten und zuverlässigsten Ergebnisse in kürzester Zeit erreicht. Es ist mMn um Ecken besser als das (klassisiche) Backpropagation.

Nebnebemerkung 2:
Wozu verwendest du das Netz? Eventuell gibt es besser Möglichkeiten als das MLP.
Wenn du nicht willst brauchst du dies nicht zu beantworten, auch nicht wenn du den Code eh nicht (Komplett) um-/neuschreiben willst (ich hab natürlich keine Ahnung wie dein Code ausschaut, es kann also mehr oder weniger aufwändig sein).


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
progi123
myCSharp.de - Member

Avatar #avatar-3317.gif


Dabei seit:
Beiträge: 71
Herkunft: Süddeutschland

Themenstarter:

beantworten | zitieren | melden

Zitat
Ich wieß jetzt nciht worauf du genau hinauswillst, aber ich denke das wurde bereits geschrieben: (0,1)-Transformation. Das soll zwar kein Allheilmittel sein, aber für die meisten realen Fälle ist es die beste Wahl.

Naja ein Softwareentwickler ist nicht zwangsläufig ein Experte (in diesem Fall ist der Begriff gut gemeint) in Wettervorhersagen, Aktienprogranosen usw. d.h. man muss rausfinden welche Variablen einen Erklärungswert auf die Zielvariablen haben und dementsprechend seine Inputs gestalten.

Dafür gibt es ja einige Verfahren z.B.:
Korrelationsanalyse: Gibt es einen Zusammenhang?
Regressionsanalyse: Welche Art von Zusammenhang besteht usw.?
Zitat
Welches Trainingsverfahren verwendest du? Mit ResilientPropagation hab ich eigentlich die besten und zuverlässigsten Ergebnisse in kürzester Zeit erreicht. Es ist mMn um Ecken besser als das (klassisiche) Backpropagation.

Backpropagation. AForge hat das oben erwähnte Lernverfahren nicht.
Zitat
Nebnebemerkung 2:
Wozu verwendest du das Netz? Eventuell gibt es besser Möglichkeiten als das MLP.
Wenn du nicht willst brauchst du dies nicht zu beantworten, auch nicht wenn du den Code eh nicht (Komplett) um-/neuschreiben willst (ich hab natürlich keine Ahnung wie dein Code ausschaut, es kann also mehr oder weniger aufwändig sein).

Ich muss nur 3 Werte vorhersagen, wobei das größte Netz 49 Inputs hat. Die wichtigste Bedingung ist Simulierbarkeit d.h. Millionen von Zugriffen sollten nicht länger als ein paar Sekunden dauern. Zwar bieten Entscheidungsbäume ein größeres Maß an Genauigkeit, sind aber langsamer und haben keine Generalisierungsfähigkeit.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.813
Herkunft: Waidring

beantworten | zitieren | melden

Hallo progi123,

ok - darum gehts dir. Habs anders aufgefasst (und deshalb ja nachgefragt).

Das Finden einer Korrelation ist immer von Vorteil - je kleiner der Eingabestimulus ist desto besser ist - bzw. die Eregebnisse werden weniger vom Rauschen verfälscht.

Eine Regressionsanalyse ist nicht unbedingt notwendig, denn das MLP kann als f(I) -> O, also als Funktion von Eingabe nach Ausgabe, verstanden werden bzw. exakter als Funktionsapproximator. Durch das Training wird die Regression durchgeführt.
Da du die Generalisierungsfähigkeit erwähnt hast gebe ich noch den Hinweis zur Technik von Pruning, also dem entfernen von nicht/wenig aktiven Neuronen in der Hidden-Schicht. Damit kann die Generalisierungsfähigkeit teilweise um einiges verbessert werden ohne dass dabei die Ergebnisse schlechter werden.

Würde die Regressionsanalyse durchgeführt und ein funktionaler Zusammenhang beschrieben werden können dann erübrigst sich das Netz. Hier wäre es dann besser direkt mit den Resultaten der Analyse zu arbeiten.
Zitat
Ich muss nur 3 Werte vorhersagen
Als Hinweis zur Vorhersage: oft ist auch besser wenn nicht die absoluten Werte verwenden werden, sondern die relative Änderung zum Vorgängerwert. Als Result kommt dann auch nicht zB 32°C raus, sondern -3°C.
Für Aktien ist es ja nach Anwendungsfall gar nicht notwendig den Zahlenwert zu Vorhersagen sondern es genügt eine Klassifizierung gem. Kaufen/Verkaufen/Halten.
Jedes Thema für sich ist sehr speziell und auch mit NN kann nicht alles erschlagen werden. Das Thema Vorhersage wurde im Forum auch schon ein paar mal behandelt. Suche mal danach - da gibts interessante Infos.
Zitat
Die wichtigste Bedingung ist Simulierbarkeit d.h. Millionen von Zugriffen sollten nicht länger als ein paar Sekunden dauern.
Das (trainierte) MLP selbst ist nix anderes als ein Berechner von Skalarprodukten. Also Matrix-Operationen und diese lassen sich hier sogar sehr gut parallelisieren. Noch besser parallelisieren lässt sich das Ganze indem pro CPU ein MLP werkt. Hierzu kann ein Producer/Consumer erstellt werden (zB mittels BlockingCollection<T> ab .net 4.0 oder vorher mittels SyncQueue <T> - Eine praktische Job-Queue). Wichtig dabei ist nur dass jeder Thread sein eigenes MLP instanziiert damit gemeinsame Zugriffe vermieden werden können.

Aber wir sollten darauf achten dass wir beim Thema Datenaufbereitung bleiben.

Zitat
Aktienprogranosen
Dafür gibt es sowieso keine Experten, auch wenn es richtig geschrieben worden wäre :-)



mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
progi123
myCSharp.de - Member

Avatar #avatar-3317.gif


Dabei seit:
Beiträge: 71
Herkunft: Süddeutschland

Themenstarter:

beantworten | zitieren | melden

Zitat
Aber wir sollten darauf achten dass wir beim Thema Datenaufbereitung bleiben.
Der Zug ist schon abgefahren
Zitat
Noch besser parallelisieren lässt sich das Ganze indem pro CPU ein MLP werkt. Hierzu kann ein Producer/Consumer erstellt werden (zB mittels BlockingCollection<T> ab .net 4.0 oder vorher mittels SyncQueue <T> - Eine praktische Job-Queue). Wichtig dabei ist nur dass jeder Thread sein eigenes MLP instanziiert damit gemeinsame Zugriffe vermieden werden können.

Naja die Software ist für eine Bachelorarbeit und muss auch nicht ausgehändigt werden. Hab schon ohne Multi-Threading das Gefühl übers Ziel hinauszuschießen.

Danke nochmal für die verständliche Wissensvermittlung
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von progi123 am .
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.813
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

bei
Zitat
d.h. man muss rausfinden welche Variablen einen Erklärungswert auf die Zielvariablen haben und dementsprechend seine Inputs gestalten.
haben wir die Faktorenanalyse und Principal Component Analysis noch gar nicht erwähnt - und sonst alles was die Daten in eine orthogonale Form überführt. Diese sind gut brauchbare Verfahren um die unabhängigen Variablen zu finden.


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
progi123
myCSharp.de - Member

Avatar #avatar-3317.gif


Dabei seit:
Beiträge: 71
Herkunft: Süddeutschland

Themenstarter:

beantworten | zitieren | melden

Hi,

jetzt stellt sich für mich die Frage, ob eine dieser (oder eine beliebige) Techniken vernünftig mit der Dynamik komplexer Bedingungen innerhalb der Daten umgehen kann z.B. haben 20 Grad C an einem Wintertag die selbe Erklärungskraft wie 20 Grad C an einem Sommertag? Die Erklärungskraft kann doch je nach Bedingung unterschiedlich sein?
Mit neuronalen Netzen löst man das Problem in dem man einfach mehrere Netze verwendet. Im Wetterbeispiel für jeden Monat oder jede Woche ein eigenes Netz.

Wird der Effekt von nur jeweis einer Variable auf die Zielvariable erklärt oder kann auch die gemeinsame Wirkung von 2, 3, 4,.., 100 Variablen erklärt werden? Die Frage bezieht sich auf statistische Verfahren.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von progi123 am .
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.813
Herkunft: Waidring

beantworten | zitieren | melden

Hallo progi123,
Zitat
an einem Wintertag die selbe Erklärungskraft wie 20 Grad C an einem Sommertag?
Dazu kann die Zeitreihe in Saisonkomponenten zerlegt werden.
Zitat
Die Erklärungskraft kann doch je nach Bedingung unterschiedlich sein?
Ja - und deshalb gibt es auch keinen allgemeingültigen Weg. Es muss immer von Fall zu Fall unterschieden werden und entsprechende Modelle (auch lokale Modelle) zurecht gelegt werden.
Zitat
Wird der Effekt von nur jeweis einer Variable auf die Zielvariable erklärt oder kann auch die gemeinsame Wirkung von 2, 3, 4,.., 100 Variablen erklärt werden? Für die letzte Frage fällt mir leider kein Beispiel ein.
Das ist allgemein einfach eine Linearkombination - und diese tritt (fast immer) bei Messungen von mehreren (Eingangs-) Werten auf.

Du kannst auch schauen was in Prognose/Vorhersage Verfahren zum Punkt Datenaufbereitung erwähnt wurde.


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers