afmeting neural netwerk vs complexiteit probleem?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • RickD007
  • Registratie: December 2018
  • Laatst online: 01-05 12:19
Hallo Allen,

Ik heb op basis van dit youtube voorbeeld een basis neural network gemaakt.

Ik heb de code geschreven in free-pascal, maar dat maakt voor de vraag niet uit.

YouTube: Create a Simple Neural Network in Python from Scratch

Het is een zogenaamde "perceptron" met maar 1 node, 3 inputs en 1 output.

Hierbij de trainingsopgave (als input1, 1 is, dan is out ook 1)

in vs uit
001 0
111 1
101 1
011 0

Dit werkt prima!

Helaas stopt de pret zodra ik iets moeilijkere taken ga proberen zoals "kolom 1 en 2 moeten 1 zijn" oid toevoegen in het voorbeeld, of and/or/xor schema's of de parity van de input.

Ik wil het netwerk nu opschalen naar meer "hidden layer" nodes, maar heb eigenlijk geen idee hoe groot het moet gaan worden (en welke vorm qua nodes) om de bovenstaande of andere basis problemen op te lossen.

Kan iemand met meer ervaring met deze materie me vertellen hoe groot ik m'n volgende netwerk moet maken om te kunnen omgaan met and/or/xor tabellen en de parity van de input. Ik ben dus op zoek naar hoe groot een netwerk moet zijn om een bepaald probleem op te lossen, en eigenlijk ook naar een aantal leuke basisproblemen die ik zo'n netwerk kan voorleggen.

Zou een netwerk van 2a3 * input, 3 nodes, 2 nodes en 1 output al voldoende zijn voor zo iets, of moet het echt flink groter?

Online kon ik niet echt veel simpele bit-logica voorbeelden e.d. vinden, meer complexe patroonherkenning, maar ik wil aan de gang met de basis en het daarna gaan uitbouwen en kijken hoe ver ik kom.

Alle informatie en hulp hierover is welkom!


Met vriendelijke groet,
Rick

Alle reacties


Acties:
  • +1 Henk 'm!

  • whoopy_
  • Registratie: November 2010
  • Laatst online: 29-09 17:36
Hallo Rick,

De vraag die je stelt is een vrij fundamenteel probleem in machine learning, namelijke hoe bepaal ik of de capaciteit van mijn model geschikt is voor een type probleem. Het simpele antwoord is dat hier simpelweg geen theoretisch antwoord voor is. Of je neurale netwerk de juiste capaciteit heeft zou je dus empirisch moeten onderzoeken. In jouw geval zou je dus kunnen stellen dat een model geschikt is op het moment dat het een mapping van maken van elke input naar elke gegeven output.

Je neurale netwerk kan je op 2 manieren een grotere capaciteit geven:

1) Door het aantal nodes in een hidden layer te vergroten. Er is een theorie, namelijk die van universal approximators, die stelt dat mits je het aantal nodes van een neuraal netwerk met een enkele laag maar groot genoeg maakt je in principe elke functie zou kunnen nabootsen

2) Door het toevoegen van meer hidden layers. In dit geval voeg je meer non-lineariteit toe aan je netwerk met bijvoorbeeld een ReLU activatie per layer. Non-lineariteit kan je voorstellen als het nemen van een stuk papier waarbij je bij elke ReLU activatie laag die je toevoegt je het stuk papier weer 1 keer mag vouwen. Dus stel voor je neemt een netwerk met 3 hidden layers, dan kan je proberen de datapunten op je papiertje te scheiden van elkaar door 3 keer dit papiertje te vouwen. Je gaf aan dat je wilde onderzoeken of je bijvoorbeeld een XOR instructie kan nabootsen met een neuraal netwerk. Als je dit uittekent op papier zal je zien dat je met alleen een lineaire transformatie niet de datapunten van elkaar kunt scheiden. Hiervoor zal je dus een non-lineare transformatie voor nodig hebben.

In de praktijk betekent het dat je deze 2 punten in je achterhoofd neemt en draait aan de 2 knoppen om tot een juist model te maken. Dit is natuurlijk een enorme versimpeling van wat er daadwerkelijk aan de hand is en het is op dit moment een zeer relevant onderzoeksveld.

Groeten,

Acties:
  • 0 Henk 'm!

  • fiftyhillswest
  • Registratie: Oktober 2009
  • Laatst online: 02-10 14:57
Vanuit de kunstmatige intelligentie theorie kan dit worden uitgedrukt middels de Vapnik-Chervonenkis dimensie. Voor dit soort kleinere problemen kun je uitrekenen hoeveel capaciteit (of parameters) je nodig hebt om de probleemruimte te "shatteren" (zoals dat dan heet). Hierdoor kun je wiskundig hard maken hoe groot je netwerk moet zijn om een bepaalde statistische fout te halen.

In de praktijk is dit uit te rekenen voor kleinere problemen zoals jij die hier presenteert, maar voor grote, complexe taken (bijvoorbeeld image classification zoals ImageNet) met 100-en klasses en miljoenen samples is dit niet te doen (dwz in de praktijk gebruikt niemand dit).

Dit komt mede omdat er empirisch duidelijk is geworden dat sterk overgeparameteriseerde modellen in de praktijk goed trainbaar zijn en werken, maar ook mede door het theoretische werk van Hinton over het trainen van Restricted Boltzmann Machines https://en.wikipedia.org/wiki/Restricted_Boltzmann_machine.

Dit is misschien een leuke start om te beginnen met lezen. Destijds had ik dit boek hiervoor, maar misschien zijn er inmiddels wel betere: https://mitpress.mit.edu/...ne-learning-third-edition