Zoals voorgenomen, een stukje over neurale netwerken.
Neurale netwerken of indien men op de details let, artificïele neurale netwerken (ANNs), zijn een functie approximatie techniek die ingangwaarden (inputs) en uitgangwaarden (outputs) aan elkaar kan relateren.
Dit stuk zal zich beperken tot globale feedforward neurale netwerken, waarbij globaal slaat op het feit dat de gewichten, die worden aangepast, de totale elementenruimte (ook wel state space of feature space genoemd) beïnvloeden en niet enkel lokaal effect hebben. Feedforward slaat op het feit dat de outputs van het netwerk niet teruggekoppeld worden, waarbij ze zouden dienen als inputs elders in het netwerk.
Het element waarop ieder neuraal netwerk is gebaseerd is het perceptron; een perceptron heeft een aantal ingangen en één uitgang. De inputs (xi) komen binnen bij de ingangen, waar ze vermenigvuldigd worden met gewichten (wi). De som van het product van de inputs met de gewichten, dient als input voor een sigmoïde functie; een sigmoïde functie is een functie die als maximum 1 heeft en als minimum 0 of -1, en strict stijgend is (vb: tanh). Een bijkomend voordeel bij de meest gebruikte sigmoïde functies, dat later van belang zal zijn, is het feit dat de afgeleide een functie is van de functie zelf. De output van het perceptron is de waarde die uit de sigmoïde functie komt rollen. Alhoewel de inputs niet genormaliseerd hoeven te zijn, gebeurt dit in het algemeen wel omdat anders de gewichten op een bepaalde manier genormaliseerd zouden moeten zijn. Beschouw ter illustratie het volgende voorbeeld:
h = tanh(sumi(wixi))
Een neuraal netwerk bestaat uit een aantal lagen van perceptronen; de inputlaag, (inputlayer) waar de inputs binnen komen, één of meerdere verborgen lagen (hidden layers) en een outputlaag, (outputlayer) waar de output van het neurale netwerk vandaan komt. De outputs van de ene laag perceptronen zijn de inputs van de volgende laag. Om alles enigzins te verduidelijken, beschouwen we een neuraal netwerk met één hidden layer, L inputs (index i -> xi), M perceptronen in de hidden layer (index j -> hj) en N outputs (index k -> yk). De gewichten tussen input en de hidden layer worden aangegeven met wij en de gewichten tussen de hidden en de output layer met vjk. Dit levert het volgende op:
hj = tanh(sumiL(wijxi)) en
yk = tanh(sumjM(vjkhj)) oftewel
yk = tanh(sumjM(vjktanh(sumiL(wijxi)))).
Net als elke andere functie approximatie techniek heeft ook een neuraal netwerk een input-output paar (x,d) nodig om te leren. De fout tussen de werkelijke output van het netwerk (y) en de gewenste output (d) wordt veelal gedefinieerd als E = 0.5(||y - d||)2.
Het leren of trainen van een neuraal netwerk gaat middels het updaten van de gewichten van het neurale netwerk aan de hand van de gradiënt. De meestgebruikte methode is van de eerste orde en lijkt op de Eulermethode, ter illustratie:
wij(t+1) = wij(t) - alpha*dE/dwij
Alpha is hierin een leerfactor die ervoor zorgt dat het neurale netwerk niet overtraind raakt, zich gaat focussen op een bepaald deel van de elementenruimte. Wanneer men de partiële afgeleide van E naar wij neemt zal men opmerken dat 'deelafgeleiden' een functie blijken te zijn van de functie zelf. Dit als gevolg van het gebruik van de gebruikte sigmoïde functie.
Een mogelijk probleem dat wordt veroorzaakt door de gradiënt is dat het neurale netwerk terecht komt in een lokaal optimum in plaats van in een globaal optimum. Dit probleem wordt in sommige gevallen veroorzaakt door verkeerde initialisatie van de gewichten. Er zijn manieren voorgesteld om dit tegen te gaan, maar dit gaat te diep in op de stof.
Cybenko toonde in 1989 aan dat één hidden layer in principe genoeg is om elke functie te benaderen, al zegt dit uiteraard niks over het benodigd aantal perceptronen die nodig is in de hidden layer.