Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

21

06.07.2012, 21:16

Danke für die Links!
@Mastermind: Bin jetzt bei ca. der Hälfte, hilft echt gut, außer dass ich z.B. aus der schule die sachen mit logaritmus nicht kenne, aber dafür habe ich ja das internet ;)
@dot: bin noch nicht dazu gekommen, es zu lesen, schaue mal, ob ich nicht nach dem brocken von mastermind alles verstehe, ansonsten hab ich ja noch deinen link.
Noch mal danke!
P.S.: Verwirrende Diskussion ;)
MfG, RmbRT
"Dumm ist, wer dummes tut."

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

22

06.07.2012, 22:10

Also ein allerletzes Mal. Ich hab niemals behauptet, dass man Systemtheorie unbedingt braucht um da was von zu kapiern.

In dem Fall hast du dich wohl einfach sehr unglücklich ausgedrückt, denn ich und wohl auch jeder andere hier, hab diese Aussage anders verstanden:

OK, dann korrigiere ich mich dahin gehend, wenn man es wirklich verstehen will kommt man um Systemtheorie nicht rum (und diese erfordert sehr viel Mathematische Kenntnisse).

Und so wie ich das verstanden hab, ist diese Aussage eben einfach nicht korrekt. Wenn ich an Systemtheorie denke, dann denk ich da an Übertragungsfunktionen, Trajektorien, Transitionsmatritzen, Laplace Transformationen, Pol-Nullstellen-Diagramme, Ortskurven etc. Und davon muss man bei NN auch für tiefergehendes Verständnis absolut nichts wissen...

Das hat irgendwer in den Raum geworfen und einige haben sich dran aufgegeilt und wollen mich widerlegen.

Wie du siehst, hast du das schon selbst geschrieben. Wieso sollte man auch etwas widerlegen wollen, was du niemals gesagt hast?

Du hast ja recht damit, dass man Systemtheorie immer betreibt, wenn man irgendwas mit mehreren "Objekten" mathematisch beschreibt. Das ändert aber nichts daran, dass man es tut.

Und jedesmal, wenn ich in mein Auto steige, betreibe ich Physik, Chemie und was weiß Gott noch so alles, sogar Psychologie. Und überhaupt betreibe ich, rein durch meine körperliche Existenz bedingt, ständig Biologie... ;)

Aber ist auch egal, offenbar ist das einfach nur falsch rübergekommen...

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »dot« (06.07.2012, 22:24)


RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

23

07.07.2012, 02:03

Hallo, ich mal wieder ;)
Aller anfang ist klein, aber hier mein erstes ergebnis:
Ich habe jetzt ein Feedforeward-netz erstellt mit 2 inputs und 2 outputs. ich weise den verbindungen anfangs die gewichtung 1 zu, und jede runde weise ich den input-neuronen einen wert zwischen 0.0 und 1.0 zu (stellvertretend für den anteil der leben), input[0] ist der bot, [1] ein gegner. Dann lasse ich trivial die outputs berechnen. dann gucke ich, welcher output der größte ist und merke mir den index d. outputs - [0] für angreifen, [1] für fliehen. dann frage ich den user, wie er das ergebnis findet (-1 - 1) und - je nach eingabe - verstärke / schwäche ich die verbindung von dem bewerteten output zu dem input, welcher den größesten wert auf den output ausübte (faktor der veränderung=1.0125 bzw. 0.9875).
das funktioniert schon nach ca. 5-10 mal solide 8) ;)
aber ist das auch die bzw. eine sinnvolle annäherung an eine ki (bezogen auf topologie des netzes und verwendung der outputs)?
wenn nein, warum nicht / wie sonst?
Natürlich echt super trivial, doch selbst das kann einen beim ersten mal erstaunen: hatte der bot z.b. 5% weniger leben als sein gegner, war ich so optimistisch und habe ihn trotzdem angreifen lassen. und er hatte am ende auch die toleranz von 5%! erstaunlich, wie schnell und solide ein KNN lernt :)
MfG, RmbRT
"Dumm ist, wer dummes tut."

24

07.07.2012, 13:39

Glückwunsch zu Deinem Erfolg :)
Ich habe in der 12. Klasse das erste Mal mit neuronalen Netzen gearbeitet (meine Facharbeit darüber geschrieben). Ich fand dieses Buch http://www.amazon.de/Simulation-neuronal…l/dp/3486243500 ziemlich hilfreich und es bietet meiner Meinung nach einen sehr angenehmen Überblick über das gesamte Spektrum neuronaler Netze. Am Ende habe ich dann über das Neocognitron meine Facharbeit geschrieben und handgeschriebene Nullen und Einsen erkannt. Das war schon sehr spaßig. Wenn einem die normalen KNN zu fern von biologischen neuronalen Netzen sind, kann ich nur empfehlen sich mal das Neocognitron spaßeshalber anzuschauen.

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

25

07.07.2012, 15:21

danke :)
Ich hab noch eine frage: In dem PDF von Mastermind wird eine Funktion (Aktivierungsfunktion):§a_j(t)={\int}_{act}(net_j(t),a_j(t-1),\Theta_j)§ genannt, wobei §j§ das neuron und §t§ die Zeit und §\Theta§ der Schwellenwert.
Die beschreibung im PDF:

Zitat

Sei j Neuron. Die Aktivierungsfunktion
ist definiert als [... Die obige Formel ...]
und verarbeitet also die Netzeingabe netj und den alten Aktivierungszustand aj(t − 1)
zu einem neuen Aktivierungszustand aj(t), wobei der Schwellenwert  wie oben schon
erläutert eine große Rolle spielt.

Aber es wird gar nicht gesagt, wie die Funktion intern aussehen könnte, z.B. was genau mache ich in der funktion mit dem Schwellenwert, wofür ist der alte aktivierungswert bzw. inwiefern beeinflusst er den neuen wert?
und mit dem aj(t) = (...,aj(t-1),...) ist die funktion doch rekursiv und geht bis zum urzustand des Neurons zurück, oder?
Soll ich dann etwa für jedes neuron einen vektor mit allen bisherigen aktivierungswerten speichern? :S
Edit: meine Jetzige Propagate-funktion ist die Gewichtete summe, die aktivierungsfunktion lautet:

C-/C++-Quelltext

1
float activate(void) { return tanh(propagate() - treshold); }

treshold (also schwellwert) = 0.5
MfG, RmbRT
"Dumm ist, wer dummes tut."

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »RmbRT« (07.07.2012, 15:34)


Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

26

07.07.2012, 18:21

Prinzipiell ist fast jede (stückweise) stetige Funktion zulässig, wenn ich mich recht erinnere. Nicht selten wird einfachheithalber eine Heaviside Funktion genommen. Den alten Zustand brauchst du wenn du z.B. eine Totzeit/Regenerationsphase berücksichtigen willst oder das ganze eine Art Gedächtnis (Integration über die Zeit) erreichen willst.
Ich finde es ja wacker, dass du dich mit NN rumschlägst aber nach meinem Kenntnisstand kannst du NN für Echtzeitspiele vergessen, da sie sich leider Analysevorgängen wie sie beim Debuggen notwendig sind oft entziehen. Vorallem die Kausalität (welche Ursache steht genau hinter welcher Wirkung) ist nicht immer einsichtig. Paradebeispiel war eine Software zum Erkennen von Panzern. Bei den Testbildern hat alle wunderbar geklappt, aber bei dem Test in der Realität versagte das NN. Später fand man raus, dass der Grund das erhöhte Auftreten von niedrigen Sonnenständen bei dem Bildern mit Panzer war und das NN sich so auf das Erkennen der Sonne fixierte.
Kurz zusammen gefasst:
NN scheinen chic aber mein weiß oft nicht was genau es eigentlich gelernt hat bzw. erkennt. Auch sind sie sehr langsam und oft sidn fuzzy/if-else etc. nicht wesentlich schlechter. Aber wenn dich das Thema aus reiner Wissbegierde interessiert, will ich dich nicht von abhalten. Spannend ist es allemal.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

27

07.07.2012, 18:53

Ja.
Es klappt irgendwie schon nicht mehr, sobald ich z.B. Schaden und Leben vom Bot & seinem Gegner als input nehme, da spinnen die werte total...
Naja, aber ich bin ja bei der suche nach techniken zur implementierung einer KI für spiele darauf gekommen, da KNNs oft genannt wurden.
Also muss ja irgendwas dran sein, aber ich glaube ich mach's einfach falsch... ;)
aber kann mir jemand eine Beispielfunktion geben? oder ist meine oben genannte schon ok?
MfG, RmbRT
"Dumm ist, wer dummes tut."

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

28

08.07.2012, 00:47

Versuch mal "propagate() > threshold ? 1 : 0" (was einer heaviside funktion entsprechen würde. tanh könnte linear über eine zu große Breite um den Wendepunkt sein.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

29

08.07.2012, 01:44

ich probiers "morgen" mal aus, hatte mich anfangs gegen die funktion entschieden, da sie mir nicht "genau" genug erschien.
Wie genau ist die heavyside gegenüber tanh und der anderen ähnlichen funktion, die nur von 0 bis 1 geht eigentich?
tanh & Co. simulieren ja noch eine stärke des signals.
MfG, RmbRT
"Dumm ist, wer dummes tut."

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

30

08.07.2012, 11:26

Über die Eigenschaften etc. klärt wiki ganz gut auf. Rein formal kann man damit ein NN mit einer n-dim Ebenengleichung idenifizieren. Vorteil ist halt dass es eine sehr einfache Funktion ist und das Verhalten damit vergleichsweise stabil. Wenn ich mich recht erinnere ist z.B. eine (zu) lineare response Funktion ungeeignet weil es schnell zum Tod eine NN führt (durch Über- bzw. Unteraktivität). Alternativ kann man schon tanh ähnliche Funktionen ala §f(x)= \frac{1}{\exp(\beta x)+1}§ nutzen, wenn die Breite für den Sprung klein genug ist. Ich hörte auch davon, dass es geschickt sein kann, wenn man solche Funktionen mit einem Term versieht der das Ausgangssignal wieder Null setzt, wenn die Eingangsaktivität zu hoch ist um den Epilepsiähnlichenzustand zu vermeiden.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige