Toon posts:

[Alg] Vier op een rij in een neuraal netwerk

Pagina: 1
Acties:
  • 253 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben op dit moment bezig om een programma te schrijven wat vier op een rij kan spelen. Hierbij kun je tegen een virtuele speler spelen. Deze virtuele speler wordt gerepresenteerd door een neuraal netwerk. Dit neurale netwerk heeft een variabel aantal input-nodes, een variabel aantal hidden-nodes (dus maar 1 layer) en één output-node. Het neurale netwerk kan zichzelf trainen door tegen zichzelf te spelen.
Nu ben ik echter op zoek naar een goede representatie van vier op een rij voor een neuraal netwerk. Ik ben zelf op de volgende twee representaties gekomen:
  • Iedere input-node bij dit netwerk vertegenwoordigt een mogelijkheid van het aantal gele en rode "schijfjes" in een rij of kolom van het spel. De inputwaarde van iedere node wordt dus bepaald door het aantal rijen en kolommen wat een aantal gele en rode "schijfjes" bevat.
  • Iedere input-node beschrijft het aantal gele en rode "schijfjes" in een veld van 3x3 vakjes van het spelbord. Het aantal input-nodes is dus het aantal mogelijke 3x3 vakjes (= 20). De waarde van de input-node wordt bepaald door het aantal "schijfjes" van de tegenstander (met een waarde -1) op te tellen bij het aantal "schijfjes" van de speler (met een waarde 1).
Als ik echter deze representaties gebruik voor het neurale netwerk en ik laat het netwerk zichzelf trainen (bijv. 100.000 wedstrijden tegen zichzelf spelen) wordt het netwerk niet veel intelligenter.
Ik ben zelf nog niet zo lang bezig met neurale netwerken maar volgens mij kan het aan een aantal zaken liggen dat het netwerk niet intelligenter wordt:
  • De representatie van vier op een rij in het neurale netwerk is niet goed.
  • Het neurale netwerk heeft niet genoeg aan 1 hidden layer.
  • Er zit een foutje in de code.
Nu ga ik er zelf vanuit dat mijn representaties niet goed zijn maar misschien dat er mensen anders tegenaan kijken of een voorstel voor een andere representatie hebben.

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 17-11-2025
Tjidje terug dat ik net neurale netwerkjes bezig ben geweest :)
Maare, ik begrijp niet helemaal hoe je de input nodes aan waardes verziet.
Kan je een voorbeeldje geven?
Wat mij het makkelijkste lijkt, is dat als je een veld hebt van 6 bij 7 vakjes, dat je dan dus 6x7 = 42 input nodes hebt.
De waarden die ze dan krijgen is bv -1 voor de vakjes van het netwerk zelf, 1 voor de vakjes van de tegenspeler en 0 voor ongebruikte vakjes.
Hoe laat je het netwerkje zichzelf eigenlijk trainen?
Ik heb een keer een netwerkje gemaakt die een rondje moest lopen, hoever die eraf zat was dan een strafwaarde.
Volgens mij nam ik telkens de 10 beste netwerkjes die ik dan copyeerde en aanpaste, en vervolgens van de 20 (10 oude plus 10 nieuwe) de beste 10 weer nam, enz.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • Buffy
  • Registratie: April 2002
  • Laatst online: 26-12-2024

Buffy

Fire bad, Tree pretty

Als je een neural netwerk zich zelf laat trainen hoe kan het netwerk dan iets leren?
Je zult toch ergens een feedback moeten gegeven over de "waarde" van de door het netwerk gemaakte zet. Met die feedback moeten dan de nodes worden aangepast.

De input nodes hoeven alleen de state van het speelveld door te geven. De representatie van de input wordt als het goed is door het neurale netwerk zelf "gegenereerd".

Een mogelijk feedback zou kunnen zijn het aantal goede schrijven op een rij. Of een weging van het aantal goede rijen met hun lengte.

@PiepPiep: Is wat jij beschrijft niet genetisch programmeren waarbij "random" programma's telkens geslecteerd worden op hun output een daarna "gerecombineerd" en opnieuw getest. Volgens mij is dat iets anders dan een neuraal netwerk trainen.
Natuurlijk kan je genetisch programmeren wel gebruiken om meerdere (verschillend getrainde) neurale netwerken te combineren om zou betere netwerken te krijgen.


disclaimer: ik heb nooit zelf een neuraal netwerk gebouwd dus het kan zijn dat ik onzin praat :)

[ Voor 12% gewijzigd door Buffy op 14-11-2003 14:00 ]

That which doesn't kill us, makes us stranger - Trevor (AEon FLux)
When a finger points at the moon, the imbecile looks at the finger (Chinese Proverb)


Verwijderd

Topicstarter
Een voorbeeldje van een netwerk wat gebruik maakt van de tweede representatie:

XO
XOXOX
OOOXX
OXXOO
OXOXOO

Hierboven zie je een willekeurig spelbord. Ieder spelbord kun je opdelen in 20 vakjes van 3 bij 3. Zo heb je in het voorbeeld hiernaast de volgende vakjes van 3 bij 3.

Etc.
X0X
OOO
OXX
OXO
OOX
XXO

==>
OOO
OXX
OXO
OOX
XXO
XOX
OXX
XOO
OXO

==>

Voor ieder van deze vakjes kun je een waarde bepalen die afhankelijk is van het aantal "schijfjes" van de tegenstander en van jezelf. Deze waarde kun als invoerparameter gebruiken. Voordeel van deze representatie is dat het aantal input-nodes met een factor 2 kleiner wordt waardoor het aantal gewichten wat berekend moet worden veel kleiner wordt.
Verder kan een neuraal netwerk zichzelf trainen door tegen zichzelf te spelen en vervolgens de zetten waarmee gewonnen wordt positief te beoordelen en de zetten waarmee verloren wordt negatief te beoordelen.
Dawns_sister schreef op 14 november 2003 @ 13:52:
...
@PiepPiep: Is wat jij beschrijft niet genetisch programmeren waarbij "random" programma's telkens geslecteerd worden op hun output een daarna "gerecombineerd" en opnieuw getest. Volgens mij is dat iets anders dan een neuraal netwerk trainen.
Natuurlijk kan je genetisch programmeren wel gebruiken om meerdere (verschillend getrainde) neurale netwerken te combineren om zou betere netwerken te krijgen.
...
De beschrijving die PiepPiep geeft heeft inderdaad ontzettend veel weg van een genetisch algoritme. Iets wat ik overigens later ook nog wil implementeren.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

PiepPiep schreef op 14 november 2003 @ 13:32:
Volgens mij nam ik telkens de 10 beste netwerkjes die ik dan copyeerde en aanpaste, en vervolgens van de 20 (10 oude plus 10 nieuwe) de beste 10 weer nam, enz.
Dat is geen echt neuraal netwerk, daarbij blijft alle kennis namelijk behouden.

Wat jij beschrijft is een "Survival of the Fittest" algoritme, dat je gewoon met randoms kunt uitvoeren.

Professionele website nodig?


  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 17-11-2025
Mijn manier is idd genetisch, maar ik dacht dat mijn manier wel als neuraalnetwerk beschouwd kon worden.
Mgoe, ik kan het mis hebben :)

Als ik het stukje van b. ugel snap dan geeft een vakje met

OOO
XXO
XOO

Iets van 6x O, 3x X dus 2 inputs, 1 op 3 en 1 op 6.
Dan geeft deze

XOO
OXO
OXO

Dezelfde inputs als mijne eerste...
Je moet dus elke positie van het bord afzonderlijk opgeven lijkt mij.

Heeft iemand een link met duidelijke uitleg naar dat leren met feedback?

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


Verwijderd

Zoek op Back-propagation

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Euh, wel leuk op zich, maar het topic is bijna een jaar oud :P Ik heb zo'n vermoeden dat de TS niet nog dagelijks kijkt of er nog iemand op reageert ;) Volgende keer ff op letten ajb.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Neurale netwerken voor dit soort toepassingen is erg lastig te maken omdat je het netwerk moeilijk kan laten leren met back-propagation. Je kan pas bepalen of een netwerk goed is, als het wint of verliest. En dan nog weet je niet wat er goed of slecht aan was, dus welke richting je nodes zich moeten aanpassen.
Ik denk dat een genetisch algoritme zich beter leent voor een 'AI' aanpak. Door random veranderingen te selecteren past beter op het spelletje.
Je kan natuurlijk wel een combinatie van de 2 technieken gebruiken, maar back-propagation gaat denk ik niet werken. Dat kan alleen als je handmatig je netwerk traint.
Dan moet je voor het netwerk spelen, zodat hij met jou "mee" kijkt. Het beste is dan om het netwerk handmatig (of met een ander algoritme) een heel groot aantal potjes te leren en dan de rest door de tegenstander te laten leren. (veranderingen alleen doorvoeren als het netwerk verliest van zijn tegenstander)

Verder wel een leuk projectje. Ik heb zelf met beide methoden aardig wat gespeeld en het is grappig om in beweging te zien.

[ Voor 2% gewijzigd door Macros op 20-09-2004 00:29 . Reden: Crap, heb ik dit helemaal zitten tikken voor jan lul :+ ]

"Beauty is the ultimate defence against complexity." David Gelernter


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

hm, ik dacht dat men m'n hint wel zou snappen 8)7 Verder discussieren kan natuurlijk, open dan even een nieuwe topic :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1

Dit topic is gesloten.