rubik's cube oplossende KI



  • mijn PWS gaat over het maken van een neuraal netwerk dat leert om een rubik's kubus op te lossen aan de hand van mijn gegeven zogeheten "scrambles" en oplossingen. ik kom nu alleen op een probleem. namelijk dat er in de eerste laag altijd 13 enen zijn + 0--12 en 143 - 0--12 nullen omdat de invoer een array is van 156 elementen waarvan de eerste twaalf aangeven welke positie de eerste rand heeft en het 13e element geeft de oriëntatie van de rand. voor de volgende 11 randen hetzelfde. ik denk dat ik een lokale verbinding tussen de lagen moet toepassen maar ik heb geen idee hoe ik dit moet toevoegen in mijn netwerk.

    ps: scripttaal is javascript


  • PWS TU Delft admin

    Hey owendeheer!

    Je hebt het jezelf niet gemakkelijk gemaakt zeg, neurale netwerken kwamen pas in het 2de jaar van mijn studie aan bod. Uit je vraag lees ik dat je wel het een en ander weet erover, maar mocht ik een woord of term gebruiken die je niet kent moet je het vooral zeggen.

    Dat zeg ik omdat ik je vraag niet volledig begrijp.

    Je input is een array van 156 elementen. Maar je vind het gek dat die alleen uit enen en nullen bestaat? Ik kan je vertellen dat de netwerken waarmee ik werkte ook als input alleen enen en nullen hadden, ook al waren er een paar standaard één of nul.

    Een lokale verbinding tussen je lagen zal zeker nodig zijn, en dan heb ik het over de verbinding van input laag naar de ‘hidden’ laag en vervolgens naar je output laag. Enig verbinding in een laag zelf zal niet nodig, als het klopt zal je netwerk vanzelf patronen zien tussen de verschillende inputs.

    Als je vraag erop neer komt, hoe maak ik dan die verbindingen waar je het over hebt hierboven, zal ik daar niet zomaar het antwoord op geven. Lees dan bijvoorbeeld deze artikelen voor meer informatie: The Nature of Code & Build a simple neural network
    En probeer die verbindingen niet zozeer als een verbinding te zien maar meer als een waarde die invloed heeft op wat er de volgende laag in gaat. Als je uit verder onderzoek een wat concretere vraag omtrent het maken van die verbindingen krijgt wil ik die graag beantwoorden.

    Als uit wat van mijn gedachtes hierboven een antwoord op je vraag is gekomen, geweldig! En anders moet je mij maar wat meer vertellen over je netwerk, hoe ziet je output er bijvoorbeeld uit, wat voor manier van leren pas je toe? Misschien dat ik je dan alsnog wel verder kan helpen!

    Groetjes,
    Jip



  • @jip_rietveld heel erg bedankt voor je reactie! ik waardeer het heel erg dat je me wilt helpen.

    die twee links heb ik bekeken en gelezen maar ik kon er niks vinden over lokale verbindingen. ik heb namelijk nu een 'fully connected' netwerk maar ik wil weten hoe ik bijvoorbeeld een neuron in de eerste 'hidden layer' alleen verbindingen met de eerste 12 neuronen van de input kan geven.

    ik had zelf bedacht om tijdens het 'backpropagation' voor het doorvoeren van de input de gewichten van de verbindingen die ik niet wil nul te maken, maar om dit voor elke training te doen is heel kostelijk qua tijd dus ik vroeg me af of er een makkelijke manier is?

    zou het misschien helpen als ik je mijn code laat zien?

    groetjes,
    Owen


  • PWS TU Delft admin

    Hey hey,

    Ik vind het leuk om je te helpen Owen. Door dit berichtje weet ik waar je het over hebt want als ik het goed begrijp is het probleem dus dat elke hidden neuron gelinkt is aan alle input neuronen terwijl dat niet per se nodig is.

    Er zijn verschillende manieren om dat op te lossen. Hetgeen wat jij voorstelt zou dat prima kunnen doen, maar wat je zegt, met tijd in het achterhoofd is dat niet praktisch.

    Ik zou zelf eventueel kijken naar of het nodig is. Ligt je input zo overduidelijk opgesplitst in die 12 verschillende delen? Bij iets als fotos herkennen is dat wel zo, bijvoorbeeld bij een portret heb je het hoofd van diegene en de achtergrond. Maar bij zo'n rubix cube zal dat wel anders zijn. Probeer in ieder geval daarover na te denken, en dat onderzoek zal zeker terug mogen komen in je verslag.

    Als het opsplitsen dan toch echt nodig is wordt je neuraal netwerk een zogenaamde 'convolutional' netwerk. Daar kun je wat meer vinden op het internet. Je zou dan van die 12 inputs naar een enkele moeten gaan via een eerste 'hidden' laag voordat je weer in een ´fully connected´ tweede ´hidden´ laag komt en heb je niet meer maar 1 ´hidden´ laag maar meerdere. Dat is wel wat ingewikkelder maar moet te doen zijn.

    Naast het op zo´n manier oplossen kan je ook kijken naar je input een ander format geven, eentje waarin een 'fully connected' netwerk wel vanzelfsprekend is. Maar zoiets zet je misschien weer terug bij af dus dat zou je zelf moeten inschatten.

    Ik hoop dat dit je verder kan helpen!
    Jip



  • @jip_rietveld bedankt voor de tips.

    ik heb nagedacht over de zogeheten 'filters' die het netwerk zou moeten hebben. ik ben alleen bang dat ik teveel invloed heb want wat ik nu doe is eigenlijk voor elke neuron in de eerste hidden layer bepalen welke specifieke verbindingen hij moet hebben.

    dit klink alsof ik het antwoord voorzeg maar ik kan niets anders bedenken..

    vind jij dat dit verantwoord is zeg maar of niet? ik ben bang dat ik me er te veel mee bemoei als je snapt wat ik bedoel.

    Owen


  • PWS TU Delft admin

    Hey @owendeheer

    Wat je zegt kan wel kloppen. Om zo'n netwerk 'convolutional' te maken zou je inderdaad het zelf wat meer moeten hardcoden. Dan snap ik het gevoel van teveel invloed hebben, ik zou me niet teveel zorgen maken want wat je doet klinkt verantwoord.

    Om je dan al helemaal goed op weg te helpen, misschien is het een idee om alle twee de netwerken te maken. Een 'fully connected' netwerk en een 'convolutional' netwerk (waar je dan [te]veel invloed op heb). Dan kun je in je verslag de twee vergelijken. Kijken welke sneller traint, betere antwoorden vindt etc. Dan beantwoord je op die manier gelijk je eigen vraag!

    Groet,
    Jip


Aanmelden om te reageren
 

Het lijkt erop dat je verbinding naar Forum verloren is gegaan, wacht even terwijl we de verbinding proberen te herstellen.