11

Un algoritmo genetico è il modo più efficiente per ottimizzare il numero di nodi nascosti e la quantità di formazione eseguita su una rete neurale artificiale?Neural Net Optimize w/Genetic Algorithm

Sto codificando reti neurali utilizzando NNToolbox in Matlab. Sono aperto a qualsiasi altro suggerimento sulle tecniche di ottimizzazione, ma sono più familiare con GA.

risposta

11

In realtà, ci sono più cose che è possibile ottimizzare utilizzando GA per quanto riguarda NN. È possibile ottimizzare la struttura (numero di nodi, livelli, funzione di attivazione ecc.). Puoi anche allenarti usando GA, che significa impostare i pesi.

Gli algoritmi genetici non saranno mai i più efficienti, ma di solito vengono utilizzati quando si hanno pochi indizi su quali numeri utilizzare.

Per la formazione, è possibile utilizzare altri algoritmi compresi backpropagation, nelder-mead ecc ..

hai detto che volevi per ottimizzare i nodi numero nascosto, per questo, algoritmo genetico può essere sufficiente, anche se lontano da "ottimale". Lo spazio che stai cercando è probabilmente troppo piccolo per usare gli algoritmi genetici, ma possono ancora funzionare e afaik, sono già implementati in MATLAB, quindi niente da fare.

Che cosa intendi con l'ottimizzazione della quantità di formazione fatta? Se intendi un numero di epoche, allora va bene, ricorda che l'allenamento è in qualche modo dipendente dal peso iniziale e di solito sono casuali, quindi la funzione fitness utilizzata per GA non sarà realmente una funzione.

+0

grazie. questa è l'informazione esatta che stavo cercando. – ServAce85

+0

Mi piacerebbe codificarlo in C/C++, quindi accendere 1000 server Amazon EC2 per alcune ore. –

+0

Qual è il vantaggio dell'allenamento di una ANN utilizzando GA rispetto all'utilizzo di GP? Le RNA hanno il vantaggio di imitare un cervello e di usare metodi per aggiornare i pesi in modo intelligente, come il backpropagation, per garantire che la rete si evolva nella giusta direzione (proprio come nel cervello). Ma quando si usa GA per aggiornare i pesi, perdi tutto questo, e non mi sembra che tu abbia più alcun vantaggio sul GP, dal momento che ora è solo al caso se la rete migliorerà o meno. Qual'è la tua posizioni in merito? – HelloGoodbye

0

Non sono sicuro se è necessario utilizzare un algoritmo genetico per questo.

Suppongo che la popolazione iniziale della soluzione per il tuo algoritmo genetico consisterà in set di allenamento per la tua rete neurale (dato un metodo di allenamento specifico). Di solito la popolazione iniziale della soluzione consiste in soluzioni casuali al tuo problema. Tuttavia, i set di allenamento casuali non addestrerebbero realmente la tua rete neurale.

L'algoritmo di valutazione per il tuo algoritmo genetico sarebbe una media pesata della quantità di formazione necessaria, la qualità della rete neurale nella risoluzione di un problema specifico e il numero di nodi nascosti.

Quindi, se si esegue questo, si otterrà il set di allenamento che ha prodotto il miglior risultato in termini di qualità della rete neurale (= tempo di allenamento, numero di nodi nascosti, capacità di risoluzione dei problemi della rete).

O stai considerando un approccio completamente diverso?

0

Non sono completamente sicuro del tipo di problema con cui si sta lavorando, ma GA sembra un po 'eccessivo. A seconda della gamma di parametri con cui stai lavorando, una ricerca esauriente (o altrimenti non intelligente) potrebbe funzionare. Prova a tracciare le prestazioni del tuo NN rispetto al numero di nodi nascosti per i primi valori, iniziando in piccolo e saltando con incrementi sempre più grandi. Nella mia esperienza, molti alti NN in prestazioni sorprendentemente precoci; potresti essere in grado di ottenere una buona immagine di quale intervallo di numeri di nodi nascosti ha più senso.

Lo stesso è spesso vero per le iterazioni di addestramento di NN. Più allenamento aiuta le reti fino a un certo punto, ma presto cessa di avere molto effetto.

Nella maggior parte dei casi, questi parametri NN non influiscono sulle prestazioni in modo molto complesso. Generalmente, aumentandoli aumenta le prestazioni per un po 'ma poi diminuiscono i guadagni.GA non è davvero necessario per trovare un buon valore su questo tipo di curva semplice; se il numero di nodi nascosti (o iterazioni di addestramento) fa sì che la performance fluttui in un modo complicato, allora le metaheuristiche come GA potrebbero essere appropriate. Ma dare un approccio alla forza bruta prima di intraprendere quella strada.

+0

forza bruta non funziona per la mia applicazione perché i miei dati sono molto rumorosi (si pensi ai dati EEG). – ServAce85

0

Tenderei a dire che gli algoritmi genetici sono una buona idea poiché puoi iniziare con una soluzione minima e far crescere il numero di neuroni. È molto probabile che la "funzione qualità" per la quale si desidera trovare il punto ottimale sia liscia e abbia solo pochi dossi.

Se si deve trovare frequentemente questo NN ottimale, raccomanderei di utilizzare algoritmi di ottimizzazione e nel proprio caso quasi newton come descritto nelle ricette numeriche, che è ottimale per i problemi in cui la funzione è costosa da valutare.

2

Gli algoritmi genetici possono essere utilmente applicati all'ottimizzazione delle reti neurali, ma bisogna pensare un po 'a ciò che si vuole fare.

La maggior parte degli algoritmi di allenamento NN "classici", come Back-Propagation, ottimizzano solo i pesi dei neuroni. Gli algoritmi genetici possono ottimizzare i pesi, ma questo in genere sarà inefficiente. Tuttavia, come stavi chiedendo, possono ottimizzare la topologia della rete e anche i parametri per l'algoritmo di allenamento. Dovrai essere particolarmente cauto nel creare reti "troppo allenate".

Un'ulteriore tecnica con un algoritmo genetico modificato può essere utile per superare un problema con Back-Propagation. Back-Propagation di solito trova i minimi locali, ma li trova con precisione e rapidità. Combinare un algoritmo genetico con retropropagazione, ad es. In un GA lamarckiano, offre i vantaggi di entrambi. Questa tecnica è brevemente descritta durante il GAUL tutorial

4

Un buon esempio di reti neurali e programmazione genetica è l'architettura NEAT (Neuro-Evolution of Augmenting Topologie). Questo è un algoritmo genetico che trova una topologia ottimale. È anche noto per essere bravo a mantenere basso il numero di nodi nascosti.

Hanno anche creato un gioco utilizzando questo chiamato Nero. Risultati tangibili unici e incredibili.

Homepage del Dr. Stanley:

http://www.cs.ucf.edu/~kstanley/

Qui troverete quasi tutto ciò che NEAT correlata in quanto egli è colui che l'ha inventata.

+0

c'è anche una libreria C# per questo -> SHARPNEAT http://sharpneat.sourceforge.net/ – JohnIdol

1

Talvolta è utile utilizzare un algoritmo genetico per addestrare una rete neurale quando la funzione obiettivo non è continua.

+0

Perché non usare semplicemente GP in quel caso?Se si utilizza GA aggiornare i pesi della rete neurale, invece di un metodo intelligente che assicura i pesi sono tutti aggiornati nella giusta direzione, sembra che si perde il vantaggio di utilizzare una rete neurale sopra usando solo GP. – HelloGoodbye