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

1

06.07.2012, 14:19

Verständnisproblem zu Künstlichen Neuronalen Netzen

Hallo Community,
Ich habe mich in den letzten beiden Wochen mit KI beschäftigt, erst mit der Hard-gecodeten (z.B. AntMe!, Robocode), und zuletzt bin ich auf Neuronale Netze gestoßen, verstehe sie aber nicht.
Das Thema lässt mich einfach nicht mehr los!
Ich habe hier ein Paar Fragen an euch:
  1. Wie genau kann ich die Differenz des Outputs mit dem Perfekten Ergebnis vergleichen (Back propagation), wenn ich doch gar nicht weis, was das Perfekte ergebnis ist (oder doch :S )?
  2. Wie wende ich ein Netzwerk auf eine Situation an?
  3. Wie weis ich, wie viele hidden Layers ich benötige, und wie viele Neuronen in diese jeweils reingehören (also genausoviele wie in der Input-Schicht, oder (nInput+nOutput)/2 (mittelwert) )?
  4. Was mache ich mit dem Output / wofür ist er da?
Ich habe mir schon mehrere Tutorials und wikipedia durchgelesen, aber sobald es etwas komplexer als OR / XOR wird, verstehe ich nurnoch bahnhof :pillepalle:
Meine Jetzige vorstellung ist:
  1. Ich gebe als input die einzelnen Umwelteinflüsse ein (Sehe Spieler, Habe genug Leben, etc.)
  2. Ich habe in der Output-Schicht für jede auszuführende aktion ein Outputneuron: Angreifen, Wegrennen, Anschleichen, etc.
  3. Ich verbinde Die einflüsse der (ge)Wichtigkeit entsprechend zu den Outputs (also Aktionen) z.B. Sehe Spieler und Habe genug Leben mit gleicher / ähnlicher gewichtung zum Output für Angreifen, aber z.B. Habe Hunger garnicht mit Angreifen.
  4. Dann Schiebe ich die aktuellen einflüsse durchs netz und kann am ende sowas machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
enum { ANGREIFEN, WEGRENNEN };
Neuronetz Netz;
Netz.init(); // Inputs der Situation entsprechend setzen
bool out[] = Netz.berechneOutput();
if(output[ANGREIFEN] && !output[WEGRENNEN])
    GreifeAn(Spieler);
else if(output[WEGRENNEN])
    GeheWegVon(Spieler);
else
    return;  //Nichts wurde "getriggert"

Aber ich denke, das stelle ich mir noch viel zu leicht vor, allein schon, da ich nichts von den Formeln verstehe, die in den Tutorials stehen (mit dem "Summen-E" (heist doch so, oder?) etc.).
Kann mir jemand vielleicht einen Link zu einem idiotensicher erklärten Tutorial schicken oder vielleicht sogar schritt für schritt erklären (also, wo nicht ein Mathematisches
Vorwissen auf Abi-Niveau angenommen wird - komme erst in die 10.! ;))?
Wäre super nett!
P.S.: Ich weiß, dass ich eigentlich die finger davon lassen sollte, weil es zu komplex ist, aber es lässt mich nicht mehr los! :rolleyes:
Hoffe, ich habe mich ausreichend präzise formuliert ;)
MfG, RmbRT
"Dumm ist, wer dummes tut."

Mastermind

unregistriert

2

06.07.2012, 14:45


Wie genau kann ich die Differenz des Outputs mit dem Perfekten Ergebnis vergleichen (Back propagation), wenn ich doch gar nicht weis, was das Perfekte ergebnis ist (oder doch :S )?

Entweder du weißt es. Siehe: http://de.wikipedia.org/wiki/%C3%9Cberwachtes_Lernen, der Artikel ist wie wikipedia schon selbst gemerkt hat nicht so dolle aber als Stichwortgeber sollte es reichen.
Oder du weißt es zumindest für bestimmte Inputs: Siehe: http://en.wikipedia.org/wiki/Temporal_difference_learning

Zitat


Wie wende ich ein Netzwerk auf eine Situation an?

Kommt auf die Situation drauf an.

Zitat


Wie weis ich, wie viele hidden Layers ich benötige, und wie viele Neuronen in diese jeweils reingehören (also genausoviele wie in der Input-Schicht, oder (nInput+nOutput)/2 (mittelwert) )?

Jahrelange Erfahrung. Nein ernsthaft, für die meisten ML-Verfahren ist ziemlich gut untersucht wie man den Input am besten kodiert und was du als Output haben willst ist meist auch klar. Soweit ich mich erinnere braucht man immer nur ein hidden layer (mehrere sind nicht mächtiger). Wieviele Neurone das braucht kann man entweder semantisch motivieren, oder eben per Erfahrung abschätzen. Eine Regel dazu ist mir nicht bekannt. Mittelwert ist jedenfalls quatsch.

Zitat


Was mache ich mit dem Output / wofür ist er da?

Kommt auf die Anwendung drauf an. Wenn du nicht weißt was du mit dem KNN vorhast wofür willst du es dann überhaupt benutzen. KNNs können (z.B.) als Klassifikator oder als Funktionsapproximator verwendet werden. Für Klassifikation verwenden die coolen Kinder aber lieber die Support Vector Machine (SVM).

Zitat


Meine Jetzige vorstellung ist:

Im Prinzip ist das gar nicht mal so verkehrt.

Zitat


Aber ich denke, das stelle ich mir noch viel zu leicht vor, allein schon, da ich nichts von den Formeln verstehe, die in den Tutorials stehen (mit dem "Summen-E" (heist doch so, oder?) etc.).

Der Buchstabe den du vermutlich meinst heißt Sigma und wird als Summenzeichen verwendet. Und ohne die Formeln zu verstehen wirst du nicht weit kommen.

Zitat


Kann mir jemand vielleicht einen Link zu einem idiotensicher erklärten Tutorial schicken

Ne, für Idioten ist das Thema prinzipiell unzugänglich. Bishop hat einen sensationell guten Ruf, ich konnte das Buch bislang leider nicht selbst lesen:
http://www.amazon.co.uk/Pattern-Recognit…/dp/0387310738/

Zitat


oder vielleicht sogar schritt für schritt erklären (also, wo nicht ein Mathematisches Vorwissen auf Abi-Niveau angenommen wird - komme erst in die 10.! ;))?

Soweit ich mich erinnere brauchts gar nicht soo viel Vorwissen. Also ich bitte dich, ein Summenzeichen...

Zitat


Wäre super nett!

Geht aber eben nicht.

Zitat


P.S.: Ich weiß, dass ich eigentlich die finger davon lassen sollte, weil es zu komplex ist, aber es lässt mich nicht mehr los! :rolleyes:
Hoffe, ich habe mich ausreichend präzise formuliert ;)
MfG, RmbRT


Ja wenn du das schon weißt. Hoffe ich konnte trotzdem etwas helfen.

Mastermind

unregistriert

3

06.07.2012, 14:59

Also jetzt ohne mich selbst mit neuronalen Netzen auszukennen(hab gerade mal reingeschaut):


Ja, das merkt man :)

Mastermind

unregistriert

4

06.07.2012, 15:14

Naja es ist eine Blackbox mit input und output, was dazwischen stattfindet ist natürlich schon ein System (wobei ich jetzt wieder nicht genug über diesen Systembegriff weiß). Wenn du dir Backpropagation mal anschaust, stellst du aber fest dass man dafür eigentlich nur ableiten können muss:

http://de.wikipedia.org/wiki/Backpropagation

Mein Wissen ist ehrlich gesagt auch relativ lückenhaft (bin wie gesagt eher Fan der SVM) aber es würde mich sehr wundern, wenn man zur Implementierung und Betrieb eines KNN außer Differentialrechnung irgendwas von den von dir genannten brauchen würde. Für Herleitung bzw. Korrektheitsbeweis eventuell noch Laplace Lagrange (so macht man es zumindest bei der SVM, man optimiert die duale Form).

EDIT: Ich hab mich von deinem Laplace jetzt ganz irritieren lassen und meinte lagrange.

Mastermind

unregistriert

5

06.07.2012, 15:51

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).

Allerdings hab ich das auch so vom TE verstanden, dass er sich ausgibig damit Beschäftigen will. Und wenn man das Summenzeichen nicht kennt , halte ich das für unrealisitsch.


Jetzt beweg ich mich auf dünnes Eis, aber könnte es sein dass du da einen glänzenden neuen Hammer hast? Systemtheorie hilft AFAIK Systeme zu verstehen, deren Innenleben nicht bekannt ist. Beim KNN kennst du das innenleben und den Zusammenhang zwischen Input und Output sehr gut. Das mit der BlackBox war aus sicht des Anwenders gesprochen. Das Prinzip KNN würde ich dann als "verstanden" bezeichnen, wenn die Motivation/Herleitung verstanden wurde. Und dafür braucht es nicht sooo viel.

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

6

06.07.2012, 16:14

So. Dann melde ich mich auch mal wieder.
Ich hab mir das mit dem Summenzeichen mal angeschaut. Ist eigentlich so gesehen "nur" ein For loop, bei dem Addiert wird, was dahinter steht.
Ich habe glaube ich schon die motivation, mir das anzueignen, schließlich habe ich mir schon alle meine Programmierkenntnisse angeeignet usw. Daran sollte es nicht scheitern. Nur - Wie gesagt - die Grundlagen für das thema der KNNs fehlen mir. Kann mir jemand stichwörter / themen nennen, die ich mir dafür anschauen müsste?
MfG, RmbRT
"Dumm ist, wer dummes tut."

Mastermind

unregistriert

7

06.07.2012, 16:17

Glänzender neuer Hammer? Was meinst du damit?


Genau das:

Zitat


Systemtheorie ist universell auf anwendbar und beschreibt ein Systemverhalten mathematisch. Dafür muss das Innenleben insofern bekannt sein, dass man eine Übertragungsfunktion hat. Der Vorteil der Systemtheorie ist einfach, dass man jegliche Systeme mathematisch beschreiben kann und auch aneinander hängen kann. (Blackbox)

Man kann sogut wie alles damit beschreiben. Das wird sowohl in der E-Technik als auch in der Ökonomie, Finanzmathematik und eben auch bei neurralen Netzen gemacht.



Edit: Vielleicht weniger kurz angebunden beschrieben: Das verhalten eines KNN wird mathematisch bereits durch das Neuronenmodell selbst hinreichend beschrieben. Eine zusätzliche Theorie ist zur Beschreibung strenggenommen nicht notwendig.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

06.07.2012, 16:27

Also ich hab im Rahmen meines Studiums sowohl einen schönen Batzen Systemtheorie als auch Neuronale Netze abbekommen und auch wenn ein NN sicherlich systemtheoretisch erfassbar ist, erschließt sich mir nicht ganz, was der Zweck einer solchen systemtheoretischen Herangehensweise in Zusammenhang mit NN sein sollte!?

Was die Wahl der Netzwerktopologie angeht: Das ist nicht so einfach, in der Regel ist ein hidden Layer aber genug.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (06.07.2012, 16:34)


Mastermind

unregistriert

9

06.07.2012, 16:33

Also ich hab im Rahmen meines Studiums sowohl einen schönen Batzen Systemtheorie als auch Neuronale Netze abbekommen und auch wenn ein NN sicherlich systemtheoretisch erfassbar ist, erschließt sich mir nicht ganz, was der Zweck einer solchen systemtheoretischen Herangehensweise in Zusammenhang mit NN sein sollte!?


Das freut mich doch wenn jemand der wirklich Ahnung hat mir beim dilletieren zustimmt :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

06.07.2012, 16:40

Ich kenn die Systemtheorie jedenfalls aus der Perspektive der Signalverarbeitung und Regelungstechnik und da geht es eben tatsächlich genau darum, was Mastermind schon gesagt hat: Ein komplexes System als Black Box mit Inputs, Outputs und einer Übertragungsfunktion zu behandeln, eben um z.B. das System zu regeln. Und ein NN will ich nicht regeln. Zumindest nicht im herkömmlichen Sinn. Natürlich könnte man das Training eines NN möglicherweise als Regelung auffassen, dann muss man das Netz aber in Teilsysteme zerlegen und ist bestenfalls erst wieder bei Gruppen einzelner Neuronen. Abgesehen davon ist die Übertragungsfunktion eines NN dermaßen nichtlinear, das willst du gar nicht wissen...

Um zum ursprünglichen Thread auch noch was zu sagen: Ich hab nicht wirklich Erfahrung mit NN im Zusammenhang mit KI für Computerspiele, ich bezweifle allerdings, ob NN für derartige Anwendungen wirklich so gut geeignet sind. Vielleicht kann David mal was dazu sagen, die KI von diesem Shooter Game, das er mal gemacht hat, basiert afaik auf NN. Den Code davon findest du hier auch irgendwo...

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (06.07.2012, 16:53)


Werbeanzeige