Domanda

Un algoritmo genetico è il modo più efficiente per ottimizzare il numero di nodi nascosti e la quantità di addestramento svolto su una rete neurale artificiale?

Sto codificando le reti neurali usando NNToolbox in Matlab. Sono aperto a qualsiasi altro suggerimento di tecniche di ottimizzazione, ma ho più familiarità con GA.

È stato utile?

Soluzione

In realtà, ci sono molte cose che puoi ottimizzare usando GA riguardo a NN. È possibile ottimizzare la struttura (numero di nodi, livelli, funzione di attivazione ecc.). Puoi anche allenarti usando GA, questo 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 l'addestramento, puoi utilizzare altri algoritmi tra cui backpropagation, nelder-mead ecc. .

Hai detto che volevi ottimizzare il numero di nodi nascosti, per questo l'algoritmo genetico potrebbe essere sufficiente, sebbene lungi dall'essere "ottimale". Lo spazio che stai cercando è probabilmente troppo piccolo per usare algoritmi genetici, ma possono ancora funzionare e funzioneranno, sono già implementati in Matlab, quindi non è un problema.

Cosa intendi con l'ottimizzazione della quantità di formazione svolta? Se intendi il numero di epoche, allora va bene, ricorda che l'allenamento dipende in qualche modo dai pesi iniziali e di solito sono casuali, quindi la funzione di fitness utilizzata per GA non sarà davvero una funzione.

Altri suggerimenti

Un buon esempio di reti neurali e programmazione genetica è l'architettura NEAT (Neuro-Evolution of Augmenting Topologies). 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 usando questo chiamato Nero. Risultati tangibili davvero unici e straordinari.

Dr. Home page di Stanley:

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

Qui troverai praticamente tutto ciò che riguarda NEAT in quanto è lui che l'ha inventato.

Gli algoritmi genetici possono essere utilmente applicati per ottimizzare le reti neurali, ma devi pensare un po 'a ciò che vuoi fare.

Most " classic " Gli algoritmi di allenamento NN, come la Back-Propagation, ottimizzano solo i pesi dei neuroni. Gli algoritmi genetici possono ottimizzare i pesi, ma questo sarà in genere inefficiente. Tuttavia, come ti stavi chiedendo, possono ottimizzare la topologia della rete e anche i parametri per il tuo algoritmo di allenamento. Dovrai prestare particolare attenzione alla creazione di reti "troppo addestrate" però.

Un'altra tecnica con algoritmi genetici modificati può essere utile per superare un problema con Back-Propagation. La Back Propagation di solito trova minimi locali, ma li trova accuratamente e rapidamente. La combinazione di un algoritmo genetico con la propagazione posteriore, ad esempio in un GA Lamarckian, offre i vantaggi di entrambi. Questa tecnica è brevemente descritta durante il tutorial GAUL

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

Non sono sicuro che dovresti usare un algoritmo genetico per questo.

Suppongo che la popolazione della soluzione iniziale per il tuo algoritmo genetico consisterebbe in set di allenamento per la tua rete neurale (dato un metodo di allenamento specifico). Di solito la popolazione della soluzione iniziale è costituita da soluzioni casuali al problema. Tuttavia, set di allenamento casuali non addestrerebbero davvero la tua rete neurale.

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

Quindi, se lo esegui, otterrai il set di formazione che ha prodotto il miglior risultato in termini di qualità della rete neurale (= tempo di formazione, numero di nodi nascosti, capacità di risoluzione dei problemi della rete).

O stai considerando un approccio completamente diverso?

Non sono del tutto sicuro del tipo di problema con cui stai lavorando, ma GA suona un po 'eccessivo qui. A seconda della gamma di parametri con cui stai lavorando, una ricerca esaustiva (o altrimenti non intelligente) potrebbe funzionare. Prova a tracciare le prestazioni della tua NN rispetto al numero di nodi nascosti per i primi valori, iniziando da piccoli e saltando con incrementi sempre più grandi. Nella mia esperienza, molti plateau di NN in esibizioni sono sorprendentemente precoci; potresti essere in grado di ottenere una buona immagine di quale gamma di numeri di nodi nascosti abbia più senso.

Lo stesso vale spesso per le iterazioni di addestramento delle NN. Una maggiore formazione 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, aumentarli aumenta le prestazioni per un po ', ma poi i rendimenti decrescenti entrano in gioco. GA non è davvero necessario trovare un buon valore su questo tipo di curva semplice; se il numero di nodi nascosti (o iterazioni di addestramento) causa realmente fluttuazioni delle prestazioni in modo complicato, allora potrebbero essere appropriate metauristiche come GA. Ma prova l'approccio della forza bruta prima di intraprendere questa strada.

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

Se dovessi trovare frequentemente questo NN ottimale, consiglierei l'uso di algoritmi di ottimizzazione e nel tuo caso quasi newton come descritto nelle ricette numeriche che è ottimale per i problemi in cui la funzione è costosa da valutare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top