@reborn, ja klar, so gehts natürlich auch, is wurscht, du kannst das ganze ja auch noch verfeinern und die Klassifikation der "Güte" des gespielten Zuges des Gegenspielers zuordnen und das wäre sicher auch angebracht
Der Kreativität sind da keine Grenzen gesetzt....
@Eldarion72
ich korregier mich, natürlich kannst du keine einzelnen Karten bewerten, aber Konfigurationen von Karten, ... und du brauchst rein formal 2 Ouputneuronen, da K = {0, 1} und |K| = 2.
@yosh,
Inputs sind nur die Karten die gespielt wurden in dem jetzigen Zug n. Es gibt 2 große Phasen die Lernphase, von der sprechen wir jetzt und die "Erkennungsphase".
Die Lernphase ist dazu gedacht in das noch dumme netz Konfigurationen von Karten einzulernen, dazu oben der Algorithmus. Du als Programmierer gibst den Netz Konfigurationen und das Netz passt seine Schwellen, Gewichte so an, das es diese Konfigurationen hoffentlich irgendwann erkennt.
Das JA/NEIN ist deine Klassifikation - wie schon gesatz z.B. 0 für NEIN geht nicht, 1 für JA oder auch anders, siehe reborns Beitrag. Um die einzelnen Neuronen kümmert sich der Algortithmus, er stellt die Gewichte und Schwellen ein.
Das JA NEIN sagt aber nur ob der Zug geht oder nicht, nicht ob er klug ist oder nicht!
Für deinen speziellen Fall brauchst du natürlich wesentlich mehr als 2 Klassifikationen.
Du brauchst also ein Lernszenario mit Beispielen vom Typ ‘Karte_1 ist höher bewertet als Karte_z’ also ist es besser Karte_1 zu ziehen.
Kleiner Nachtreag zur Erkennungsphase:
-------------------------------------------------
Wir wissen ja jetzt das unsere Output Neuronen sozusagen sagen welcher Klasse unser Muster gehört. Gegeben sind die Gewichte und Schwellen aus dem oben gennanten Lernalgorithmus, als dieser also nicht mehr so große Fehler machte und in einem lokalen Minimum angekommen ist.
Wir wissen das wir die Ausgabe des i. Neurons wie folgt berechnen:
|
Quellcode
|
1
|
yi(s) = H( SUM_j=1^n(s-1) (wij(s) * yj(s-1) + bi))
|
oder kurz:
|
Quellcode
|
1
2
3
|
yi(s) = H( hi(s) ) wobei natürlich gilt das:
hi(s) = SUM_j=1^n(s-1) (wij(s) * yj(s-1) + bi)
|
D.h. das unser gewünschter Output für ein Muster der Klasse k € K:
|
Quellcode
|
1
2
3
4
5
6
7
|
m... sei die letzte Schicht, siehe m-schichtiges Feed Forward Netz
-
| 1 fallls i = k
yi(m) = kn = -
| 0 sonst
-
|
Auf Deutsch, heisst das das unser erstes Outputneuron (von links gesehen) das erste Muster repräsentiert und wenn y0 = 1 dieses Muster gefunden wurden. Wir definieren uns jetzt eine schöne Funktion die uns das Muster direkter ausspuckt aus den obigen Definitionen.
Sei wie gesagt K eine Menge mit K = { k0, ..., kn } aller Klassifkationen kn.
|
Quellcode
|
1
2
3
4
5
|
Wir bestimmen die Summe Z der Ausgabe aller Neuronen in der Ausgabeschicht. :
Z = SUM_i=1^n(m) (H(hi(m)))
Z muss dann mit unserer gefunden Klassifikation in einem bestimmten Intervall übereinstimmen. Also Z entspricht einem k € K. (mit Abweichungen)
|
Weiterführende Litheratur:
Vortrag über ein Mühle Spiel, mit der oben angesprochenen Bewertungsfunktion
Der gleiche Vortrag etwas ausführlicher