Neural networks tutorial
Geplaatst: za 16 jan 2010, 16:50
Hoi,
Ik heb geprobeerd om in VB6 een programmaatje te maken dat m.b.v. een neural network boter-kaas-en-eieren speelt.
Daarvoor heb ik natuurlijk eerst wat tutorials gezocht over het maken van een neural network.
In kort was het allemaal samen te vatten tot:
Je hebt een laag input-neurons. Die geef je enkel de input die het neural network krijgt, ze doen er verder niets mee.
Dan heb je 1 of meerdere tussen lagen met neurons, die doen de nodige operations. Elke neuron van een laag X is verbonden met elke neuron van laag X-1 d.m.v. dendrites. Dendrites hebben "gewichten". Die geeft aan hoeveel de verbinding tussen 2 neuronen meetelt. Elke neuron van laag X krijgt dus alle informatie van elke neuron in laag X-1 met een bepaald "gewicht". Die doet daar wat leuke berekeningen mee (met een zogenaamde "bias", dat is een constante waarde die in elke neuron zit ingebouwd. De bias verschilt per neuron.) en geeft dat weer door aan elke neuron in laag X+1.
Dan heb je nog een output-layer die eventueel nog een laatste berekening doet en dan de output terug geeft.
Nou, ik heb dus een class gemaakt die een neural network maakte en letterlijk álles kon variabel gemaakt worden, het aantal lagen, het aantal neuronen in elke laag, de gewichten van de dendrites, de bias-waarden, álles...
Toen probeerde ik met evolutie (ja in die tuts stonden ook dat ik evolutie moest gebruiken) de beste boter-kaas-en-eieren-spelers te selecteren en laten voortplanten en de rest te laten sterven.
Helaas is het hard gefaald, want alle, echt ALLE neural networks met ELKE variatie deden 1 zet en dan bleven ze steeds die eerste zet doen, maakt niet uit hoe het bord veranderde. En ik heb echt honderden neural networks geladen. Het was een ramp.
Later bedacht ik mij dat dit neural network helemaal geen neural network is zoals ik dacht dat het zou zijn. Het hele idee achter neural networks is toch juist dat het kan leren? Niet dat je de domme networks gewoon laat sterven?
Volgens mij heb ik het helemaal verkeerd aangepakt en heb ik de verkeerde tuts gevonden.
Kan iemand mij vertellen hoe je een neural network maakt dat daadwerkelijk leert?
Tot dusver heb ik het volgende begrepen:
Je moet de gewichten van de dendrites een constante daling geven, dus elke verbinding wordt langzamerhand steeds minder belangrijk. En dan als er 2 neurons zijn die tegelijk "vuren" dan wordt de verbinding tussen die neurons sterker, dus het gewicht van de dendrite wordt hoger. Maar wat ik dan niet begrijp is, wat beslist dan of 2 neurons "vuren"? Want in mijn oude model zoals hierboven beschreven "vuurt" elke neuron altijd wel iets.
Kan iemand mij hier bij helpen?
Ik heb geprobeerd om in VB6 een programmaatje te maken dat m.b.v. een neural network boter-kaas-en-eieren speelt.
Daarvoor heb ik natuurlijk eerst wat tutorials gezocht over het maken van een neural network.
In kort was het allemaal samen te vatten tot:
Je hebt een laag input-neurons. Die geef je enkel de input die het neural network krijgt, ze doen er verder niets mee.
Dan heb je 1 of meerdere tussen lagen met neurons, die doen de nodige operations. Elke neuron van een laag X is verbonden met elke neuron van laag X-1 d.m.v. dendrites. Dendrites hebben "gewichten". Die geeft aan hoeveel de verbinding tussen 2 neuronen meetelt. Elke neuron van laag X krijgt dus alle informatie van elke neuron in laag X-1 met een bepaald "gewicht". Die doet daar wat leuke berekeningen mee (met een zogenaamde "bias", dat is een constante waarde die in elke neuron zit ingebouwd. De bias verschilt per neuron.) en geeft dat weer door aan elke neuron in laag X+1.
Dan heb je nog een output-layer die eventueel nog een laatste berekening doet en dan de output terug geeft.
Nou, ik heb dus een class gemaakt die een neural network maakte en letterlijk álles kon variabel gemaakt worden, het aantal lagen, het aantal neuronen in elke laag, de gewichten van de dendrites, de bias-waarden, álles...
Toen probeerde ik met evolutie (ja in die tuts stonden ook dat ik evolutie moest gebruiken) de beste boter-kaas-en-eieren-spelers te selecteren en laten voortplanten en de rest te laten sterven.
Helaas is het hard gefaald, want alle, echt ALLE neural networks met ELKE variatie deden 1 zet en dan bleven ze steeds die eerste zet doen, maakt niet uit hoe het bord veranderde. En ik heb echt honderden neural networks geladen. Het was een ramp.
Later bedacht ik mij dat dit neural network helemaal geen neural network is zoals ik dacht dat het zou zijn. Het hele idee achter neural networks is toch juist dat het kan leren? Niet dat je de domme networks gewoon laat sterven?
Volgens mij heb ik het helemaal verkeerd aangepakt en heb ik de verkeerde tuts gevonden.
Kan iemand mij vertellen hoe je een neural network maakt dat daadwerkelijk leert?
Tot dusver heb ik het volgende begrepen:
Je moet de gewichten van de dendrites een constante daling geven, dus elke verbinding wordt langzamerhand steeds minder belangrijk. En dan als er 2 neurons zijn die tegelijk "vuren" dan wordt de verbinding tussen die neurons sterker, dus het gewicht van de dendrite wordt hoger. Maar wat ik dan niet begrijp is, wat beslist dan of 2 neurons "vuren"? Want in mijn oude model zoals hierboven beschreven "vuurt" elke neuron altijd wel iets.
Kan iemand mij hier bij helpen?