Domanda

Sto cercando di capire la differenza tra le varie classi di algoritmi di apprendimento automatico.

Comprendo che le implementazioni degli algoritmi evolutivi sono abbastanza diverse dalle implementazioni delle reti neurali.

Tuttavia, entrambi sembrano orientati a determinare una correlazione tra input e output da un insieme potenzialmente rumoroso di dati di training / storici.

Da un punto di vista qualitativo, ci sono domini problematici che sono obiettivi migliori per le reti neurali rispetto agli algoritmi evolutivi?

Ho sfogliato alcuni articoli che suggeriscono di usarli in modo complementare. C'è un esempio decente di un caso d'uso per questo?

È stato utile?

Soluzione

Ecco il problema: nei problemi di apprendimento automatico, in genere hai due componenti:

a) Il modello (classe di funzione, ecc.)

b) Metodi di adattamento del modello (algoritmi di ottimizzazione)

Le reti neurali sono un modello: data una disposizione e un'impostazione dei pesi, la rete neurale produce un certo output. Esistono alcuni metodi canonici di adattamento delle reti neurali, come backpropagation, divergenza contrastante, ecc. Tuttavia, il punto più importante delle reti neurali è che se qualcuno ti dava i pesi "giusti", faresti bene il problema.

Gli algoritmi evolutivi affrontano la seconda parte, adattando il modello. Ancora una volta, ci sono alcuni modelli canonici associati agli algoritmi evolutivi: ad esempio, la programmazione evolutiva in genere cerca di ottimizzare su tutti i programmi di un determinato tipo. Tuttavia, gli EA sono essenzialmente un modo per trovare i giusti valori dei parametri per un particolare modello. Di solito, scrivi i parametri del tuo modello in modo tale che l'operazione di crossover sia una cosa ragionevole da fare e giri la manovella EA per ottenere una ragionevole impostazione dei parametri.

Ora, ad esempio, potresti utilizzare algoritmi evolutivi per addestrare una rete neurale e sono sicuro che sia stato fatto. Tuttavia, il punto critico che EA richiede per funzionare è che l'operazione di crossover deve essere una cosa ragionevole da fare: prendendo parte dei parametri da un'impostazione ragionevole e il resto da un'altra impostazione ragionevole, si finisce spesso con un impostazione dei parametri ancora migliore. La maggior parte delle volte che viene utilizzato EA, questo non è il caso e finisce per essere qualcosa di simile a una ricottura simulata, solo più confusa e inefficiente.

Altri suggerimenti

Problemi che richiedono "intuizione" sono più adatti alle ANN, ad esempio il riconoscimento della scrittura a mano. Addestra una rete neurale con un'enorme quantità di input e la vota fino a quando non hai finito (questo richiede molto tempo), ma in seguito hai un algoritmo / sistema blackbox che può " indovinare " la mano che scrive, così tieni il tuo cervello piccolo e lo usi come modulo per molti anni o qualcosa del genere. Poiché la formazione di una RNA di qualità per un problema complesso può richiedere mesi, nel peggiore dei casi, e fortuna.

La maggior parte degli altri algoritmi evolutivi " calcola " una soluzione ad hoc sul posto, in una sorta di modello di arrampicata in collina.

Inoltre, come sottolineato in un'altra risposta, durante l'esecuzione una ANN può " indovinare " più veloce di molti altri algoritmi evolutivi può " calcolare " ;. Tuttavia, bisogna fare attenzione, poiché l'ANN è solo " indovinare " e potrebbe essere sbagliato.

Guarda Neuro Evolution. (NE)

I metodi migliori attuali sono NEAT e HyperNEAT di Kenneth Stanley.

Gli algoritmi genetici trovano solo un genoma di qualche tipo; È fantastico creare il genoma di una rete neurale, perché ottieni la natura reattiva della rete neurale, piuttosto che solo un mucchio di geni statici.

Non ci sono molti limiti a ciò che può imparare. Ma ci vuole tempo ovviamente. La topologia neurale deve essere evoluta attraverso la normale mutazione e crossover, nonché i pesi aggiornati. Non può esserci propagazione posteriore.

Inoltre puoi allenarlo con una funzione fitness, che è quindi superiore alla propagazione posteriore quando non sai quale dovrebbe essere l'output. Perfetto per l'apprendimento di comportamenti complessi per sistemi per i quali non si conoscono strategie ottimali. L'unico problema è che imparerà comportamenti che non avevi previsto. Spesso quel comportamento può essere molto alieno, anche se fa esattamente quello per cui lo hai premiato nella funzione fitness. In questo modo utilizzerai tutto il tempo derivante dalle funzioni di fitness di quelle che avresti dovuto creare set di output per la backpropagation: P

Gli algoritmi evolutivi, o più genericamente genetici, e le reti neurali possono entrambi essere usati per obiettivi simili, e altre risposte descrivono bene la differenza.

Tuttavia, esiste un caso specifico in cui gli algoritmi evolutivi sono più indicati delle reti neurali: quando lo spazio della soluzione è non continuo / discreto .

In effetti, le reti neurali usano la discesa gradiente per imparare dalla backpropagation (o algoritmo simile). Il calcolo di un gradiente si basa su derivati, che necessitano di uno spazio continuo, in altre parole è possibile passare gradualmente e progressivamente da una soluzione alla successiva.

Se lo spazio della soluzione è discreto (ovvero, puoi scegliere la soluzione A, o B o C, ma nulla al centro come 0,5% A + 0,5% B), allora stai cercando di adattare un non continuo funzione e quindi le reti neurali non possono funzionare.

In questo caso, gli algoritmi evolutivi sono perfetti, si potrebbe persino dire che un dio invia, dal momento che può "saltare". da una soluzione all'altra senza alcun problema.

Vale anche la pena ricordare che gli algoritmi evolutivi non sono soggetti alla maledizione della dimensionalità tanto quanto qualsiasi altro algoritmo di apprendimento automatico, comprese le reti neurali.

Ciò rende gli algoritmi evolutivi uno strumento molto versatile e generico per affrontare in modo ingenuo qualsiasi problema e uno dei pochissimi strumenti per gestire funzioni non continue o set di dati di dimensioni astronomicamente elevate.

In termini di domini problematici, confronto le reti neurali artificiali addestrate dalla backpropagation con un algoritmo evolutivo.

Un algoritmo evolutivo implementa un beamsearch randomizzato, il che significa che i tuoi operatori evolutivi sviluppano candidati per essere testati e confrontati dalla loro idoneità. Questi operatori di solito non sono deterministici e puoi progettarli in modo che possano trovare sia candidati vicini che candidati più lontani nello spazio dei parametri per superare il problema di rimanere bloccati nell'optima locale.

Tuttavia, il successo di un approccio EA dipende in larga misura dal modello sviluppato, che è un compromesso tra il potenziale di alta espressione (si potrebbe esagerare) e la generalità (il modello potrebbe non essere in grado di esprimere la funzione target).

Poiché le reti neurali di solito sono multistrato, lo spazio dei parametri non è convesso e contiene optima locale, gli algoritmi di discesa del gradiente potrebbero rimanere bloccati. La discesa del gradiente è un algoritmo deterministico, che effettua ricerche nelle immediate vicinanze. Ecco perché le reti neurali di solito sono inizializzate in modo casuale e perché dovresti addestrare molti più di un modello.

Inoltre sai che ogni nodo nascosto in una rete neurale definisce un iperpiano che puoi progettare una rete neurale in modo che si adatti bene al tuo problema. Esistono alcune tecniche per impedire il sovraccarico delle reti neurali.

Nel complesso, le reti neurali potrebbero essere addestrate rapidamente e ottenere risultati ragionevoli con pochi effetti (basta provare alcuni parametri). In teoria una rete neurale abbastanza grande è in grado di approssimare ogni funzione target, che dall'altra parte la rende soggetta a overfitting. Gli algoritmi evolutivi richiedono di fare molte scelte di progettazione per ottenere buoni risultati, probabilmente il più difficile è quale modello ottimizzare. Ma EA è in grado di effettuare ricerche in spazi problematici molto complessi (secondo le modalità definite dall'utente) e di ottenere rapidamente buoni risultati. Gli eventi avversi possono persino avere successo quando il problema (la funzione target) cambia nel tempo.

Libro di apprendimento automatico di Tom Mitchell: http://www.cs.cmu.edu/~tom/mlbook.html

Gli algoritmi evolutivi (EA) sono lenti perché si basano sull'apprendimento senza supervisione: agli EA viene detto che alcune soluzioni sono migliori di altre, ma non come per migliorarle. Le reti neurali sono generalmente più veloci, essendo un esempio di apprendimento supervisionato: sanno come migliorare una soluzione usando la discesa gradiente all'interno di uno spazio funzionale su determinati parametri; questo consente loro di raggiungere una soluzione valida più rapidamente. Le reti neurali vengono spesso utilizzate quando non ci sono abbastanza conoscenze sul problema perché altri metodi funzionino.

Gli algoritmi evolutivi (EA) rappresentano un modo di addestrare un modello, dove le reti neuronali (NN) SONO un modello. Più comunemente in tutta la letteratura, scoprirai che le NN vengono addestrate usando l'algoritmo di backpropagation. Questo metodo è molto interessante per i matematici, ma richiede che tu possa esprimere il tasso di errore del modello usando una formula matematica. Questo è il caso di situazioni in cui si conoscono molti valori di input e output per la funzione che si sta tentando di approssimare. Questo problema può essere modellato matematicamente, come la minimizzazione di una funzione di perdita, che può essere raggiunta grazie al calcolo (ed è per questo che i matematici lo adorano).

Ma le reti neuronali sono utili anche per i sistemi di modellazione che cercano di massimizzare o minimizzare alcuni risultati, la cui formula è molto difficile da modellare matematicamente. Ad esempio, una rete neuronale potrebbe controllare i muscoli di un cyborg per raggiungere la corsa. Ad ogni diverso arco temporale, il modello dovrebbe stabilire quanta tensione dovrebbe essere presente in ciascun muscolo del corpo del cyborg, in base all'input di vari sensori. È impossibile fornire tali dati di addestramento. Gli EA consentono la formazione fornendo solo una modalità di valutazione del modello. Per il nostro esempio, puniremmo la caduta e ricompenseremmo la distanza percorsa su una superficie (in un intervallo di tempo fisso). EA selezionerebbe semplicemente i modelli che fanno del loro meglio in questo senso. Le prime generazioni fanno schifo ma, sorprendentemente, dopo alcune centinaia di generazioni, tali individui raggiungono risultati molto "naturali" movimenti e riesci a correre senza cadere. Tali modelli possono anche essere in grado di affrontare ostacoli e forze fisiche esterne.

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