Beleg Neuronale Netze

Aufbau der Netze

 

Generelle Überlegungen zum Aufbau der Netze

Für die Realisierung unseres Pokerbots haben wir uns entschieden vier verschiedene Neuronale Netze zu konstruieren, da sich ein Pokerspiel (wie in Punkt 2 beschrieben) aus vier verschiedenen Spielphasen zusammensetzt. Dabei ist es sehr wichtig in nachfolgenden Spielphasen (Netzen) alle Informationen zu verarbeiten, die in vorangegangenen Spielphasen und Netzen bereits ermittelt oder gesammelt wurden. Beim Entwurf der Netze ist es sehr wichtig zu wissen, dass Poker ein Spiel von unvollständigen Informationen ist, die über die verschieden Spielphasen gesammelt werden, so dass in der ersten Spielphase (Preflop) die wenigsten Informationen vorliegen, in der letzten Spielphase (Postriver) die meisten.
Als Konsequenz ergaben sich die folgenden Netze mit ihren charakteristischen Werten:

 

Eingabe-Neuronen

Ausgabe-Neuronen

Hiddenschichten

Hidden-Neuronen

Verbindungen

PreFlop.mbr

14

6

1

18

179

PostFlop.mbr

36

7

1

34

514

PostTurn.mbr

55

7

1

44

882

PostRiver.mbr

74

7

1

53

1342

 

Struktur der Netze

Allen Netzen ist ein charakteristischer Aufbau gemeinsam: sie bilden sensorische Felder aus bestimmten Gruppen von Eingabeinformationen. Solche Felder setzen verschiedene Funktionen (in unserem Fall Informationen) in einen gemeinsamen Zusammenhang. Wichtig zu beachten ist, dass ein einzelnes Feld nicht alleine für die Funktion des Netzes zuständig ist, sondern dass die Gesamtfunktionalität des Netzes erst durch das korrekte Zusammenspiel mehrerer solcher Gruppen möglich wird.

Eingabeinformationen

Betrachten wir also im Folgenden die Eingabeinformationen der vier Netze und ihre semantischen Gruppen, die sie bilden. Bitte beachten sie, dass jedes Folgenetz auch die Eingabeinformationen des oder der vorangegangenen Netze verarbeitet. Diese sind aus Gründen der Übersichtlichkeit hier nicht nochmals aufgeführt.

PreFlop

Position

Chipstände

Spielentscheidungen des Gegners

eigene Karten

Position

OwnStake_PreFlop
OpponentStake_PreFlop
Potsize_PreFlop

Opponent_Fold_PreFlop
Opponent_Check_PreFlop
Opponent_Call_PreFlop
Opponent_Raise_PreFlop
Opponent_ReRaise_PreFlop
Opponent_All-In_PreFlop

HoleCard1_Value
HoleCard2_Value
HoleCard1_Suite
HoleCard2_Suite

 

PostFlop:

Chipstände

Spielentscheidungen des Gegners

Gemeinschaftskarten

eigene Spielentscheidungen

OwnStake_PostFlop
OpponentStake_PostFlop
Potsize_PostFlop

Opponent_Fold_PostFlop
Opponent_Check_PostFlop
Opponent_Bet_PostFlop
Opponent_Call_PostFlop
Opponent_Raise_PostFlop
Opponent_ReRaise_PostFlop
Opponent_All-In_PostFlop

CommCard1_Value
CommCard2_Value
CommCard3_Value
CommCard1_Suite
CommCard2_Suite
CommCard3_Suite

Own_Fold_PreFlop
Own_Check_PreFlop
Own_Call_PreFlop
Own_Raise_PreFlop
Own_ReRaise_PreFlop
Own_All-In_PreFlop

 

PostTurn

Chipstände

Spielentscheidungen des Gegners

Gemeinschaftskarten

eigene Spielentscheidungen

OwnStake_PostTurn
OpponentStake_PostTurn
Potsize_PostTurn

Opponent_Fold_PostTurn
Opponent_Check_PostTurn
Opponent_Bet_PostTurn
Opponent_Call_PostTurn
Opponent_Raise_PostTurn
Opponent_ReRaise_PostTurn
Opponent_All-In_PostTurn

CommCard4_Value
CommCard4_Suite

Own_Fold_PostFlop
Own_Check_PostFlop
Own_Bet_PostFlop
Own_Call_PostFlop
Own_Raise_PostFlop
Own_ReRaise_PostFlop
Own_All-In_PostFlop

 

PostRiver

Chipstände

Spielentscheidungen des Gegners

Gemeinschaftskarten

eigene Spielentscheidungen

OwnStake_PostRiver
OpponentStake_PostRiver
Potsize_PostRiver

Opponent_Fold_PostRiver
Opponent_Check_PostRiver
Opponent_Bet_PostRiver
Opponent_Call_PostRiver
Opponent_Raise_PostRiver
Opponent_ReRaise_PostRiver
Opponent_All-In_PostRiver

CommCard5_Value
CommCard5_Suite

Own_Fold_PostTurn
Own_Check_PostTurn
Own_Bet_PostTurn
Own_Call_PostTurn
Own_Raise_PostTurn
Own_ReRaise_PostTurn
Own_All-In_PostTurn

 

Ausgabeinformationen

Aus den genannten Eingabeinformationen sollten durch das Netz folgende Ausgabeinformationen gewonnen werden:

PreFlop

PostFlop

PostTurn

PostRiver

Fold_PreFlop
Check_PreFlop
Call_PreFlop
Raise_PreFlop
ReRaise_PreFlop
All-In_PreFlop

Fold_PostFlop
Check_PostFlop
Bet_PostFlop
Call_PostFlop
Raise_PostFlop
ReRaise_PostFlop
All-In_PostFlop

Fold_PostTurn
Check_PostTurn
Bet_PostTurn
Call_PostTurn
Raise_PostTurn
ReRaise_PostTurn
All-In_PostTurn

Fold_PostRiver
Check_PostRiver
Bet_PostRiver
Call_PostRiver
Raise_PostRiver
ReRaise_PostRiver
All-In_PostRiver

 

Hidden-Schichten und Neuronen

Um eine geeignete Anzahl an Hidden-Neuronen für das jeweilige Netz zu ermitteln, wurde (unter der Strukturvorgabe der Nutzung von sensorischen Feldern) folgende Faustregel verwendet:
(„Anzahl der Neuronen in einer Informationsgruppe“ + „Anzahl der Ausgabeneuronen des Netzes“) / 2

Als Beispiel soll hier das PreFlop Netz dienen, da es von der Menge an verarbeiteten Informationen das kleinste aller Netze ist und damit am überschaubarsten ist:

1

Wie in der Abbildung zu sehen, gibt es vor dem Austeilen des Flops vier Informationsgruppen (siehe Tabelle 4.2.1.1). In der zweiten Gruppe von links werden die Informationen eingelesen, die sich mit den Chipständen befassen: die Stakegröße des Gegners, die eigene Stakegröße und die Größe des Gewinnpots. Insgesamt besitzt das Netz sechs Ausgabeneuronen, so dass die Summe aus der Gruppe der Eingabeneuronen und den Ausgabeneuronen neun ergibt. Teilt man diese Anzahl durch zwei erhält man die Kennzahl für die Anzahl der Neuronen für die Hiddenschicht (für eben diese Gruppe). Anschließend wurden alle Neuronen der Eingabeschicht mit allen der Hiddenschicht (für diese Gruppe) verbunden. Die Hidden-Neuronen einer Gruppe wurden ihrerseits wiederum mit allen Ausgabeneuronen in Beziehung gesetzt.

 

Wertebereiche der Ein- und Ausgabeinformationen (Normalisiserung)

Die folgende Übersicht zeigt die Wertebereiche auf, nach denen die Netze ihre Eingabedaten erwarten und ihre Ausgabeinformationen ausgeben. Dabei wird nicht auf alle Neuronen einzeln eingegangen, sondern sie werden zu logischen Gruppen zusammengefasst.

 

Min

Max

Bedeutung

Chipstände

1

10000

die Stake oder Potgrößen gemessen in der Anzahl der Big Blinds

Spielaktionen

0

1

0: Aktion wurde nicht ausgeführt
1: Aktion wurde ausgeführt

Kartenwerte

2

14

2: Karte mit dem Wert 2
3: Karte mit dem Wert 3
...
11: Bube
12: Dame
13: König
14: Ass

Kartensymbole

1

4

1: Kreuz (Club)
2: Karo (Diamond)
3: Herz (Heart)
4: Pik (Spade)

Sitzposition

1

2

1: BigBlind
2: Small Blind (Button)

1Die Normalisierung der Werte auf einen Wertebereich zwischen 0 und 1 wird von Membrain selbständig durchgeführt.

Die nebenstehende Abbildung zeigt ein Beispiel für den Wert der eigenen Stakegröße vor dem Flop. Aufgerechnet in BigBlinds liegt dieser zwischen 1 und 1000 und wird von Membrain selbstständig normalisiert.

 

 

 

 

 

 

 

 

 

 

 

 

Aktivierungsfunktionen

Eingabeneuronen

1

Alle Eingabeneuronen besitzen die Identitätsfunktion als Aktivierungsfunktion. Sie reicht aus, da die Werte in den Neuronen zunächst auf einen Wertebereich zwischen 0 und 1 normalisiert werden, bevor eben genau diese normalisierte Information an die Hidden-Schicht weiter gegeben wird.

 

 

 

 

Hidden- und Ausgabe-Neuronen

11Alle Hidden- und Ausgabe-Neuronen besitzen als Aktivierungsfunktion die Logistische Funktion. Sie ist neben dem Tan Hyp die am häufigsten genutzte Aktivierungsfunktion. Tests mit verschiedenen Aktivierungsfunktionen zeigten, dass die Logistische die besten Resultate für die Ausgabe in unserem Beleg liefert.
Der gekennzeichnete Parameter stellt die Steilheit der Kurve ein. Je höher der Parameter desto steiler wird die Kurve. Ist der Parameter recht klein, führt dies zu einer größeren Varianz in den Ergebnissen des Netzes. Ist der Parameter dagegen steiler eingestellt, sind die Ergebnisse schärfer und für unsere Zwecke besser geeignet.

 

2007 Richard Wähner / Richard Meyer