Rete neurale artificiale: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: numeri di pagina nei template citazione |
|||
(42 versioni intermedie di 31 utenti non mostrate) | |||
Riga 1:
{{F|teorie dell'informatica|maggio 2017}}
[[File:Neural network example it.svg|thumb|Struttura di una rete neurale artificiale]]
Nel campo dell'[[apprendimento automatico]], una '''rete neurale artificiale''' (
Questi modelli matematici sono troppo semplici per ottenere una comprensione delle reti neurali biologiche<ref>{{Cita pubblicazione|nome=F.|cognome=Crick|data=
Una rete neurale artificiale può essere realizzata sia da programmi [[software]] che da [[hardware]] dedicato (DSP, ''[[Digital Signal Processing]]''). Questa branca può essere utilizzata in congiunzione alla [[logica fuzzy]].
== Storia ==
L'ampia varietà di modelli non può prescindere dal costituente di base, il neurone artificiale proposto da [[Warren McCulloch|W.S. McCulloch]] e [[Walter Pitts]] in un famoso lavoro del [[1943]]:
Le prime ipotesi di apprendimento furono introdotte da [[Donald Olding Hebb|D. O. Hebb]] nel libro del [[1949]]:
Nel [[1958]], [[János Neumann|J. Von Neumann]] nella sua opera
Nello stesso anno, [[Frank
L'opera di Rosenblatt stimola una quantità di studi e ricerche che dura per un decennio, e suscita un vivo interesse e notevoli aspettative nella comunità scientifica, destinate tuttavia ad essere notevolmente ridimensionate allorché nel [[1969]] [[Marvin Minsky]] e [[Seymour Papert|Seymour A. Papert]], nell'opera
Il contesto matematico per addestrare le reti MLP (''Multi-Layers Perceptron'', ossia percettrone multistrato) fu stabilito dal matematico americano [[Paul Werbos]] nella sua tesi di dottorato ([[Ph.D.]]) del [[1974]]. Non fu dato molto peso al suo lavoro, tanto fu forte la confutazione dimostrata da Minsky e Papert anni prima, e solo l'intervento di [[John Hopfield|J. J. Hopfield]], nel [[1982]], che in un suo lavoro studia dei modelli di riconoscimento di pattern molto generali, si oppose in modo diretto alla confutazione di Minsky riaprendo così degli spiragli per la ricerca in questo campo.
Uno dei metodi più noti ed efficaci per l'addestramento di tale classe di reti neurali è il cosiddetto algoritmo di [[retropropagazione dell'errore]] ("error backpropagation"), proposto nel [[1986]] da [[David Rumelhart|David E. Rumelhart]], G. Hinton e R. J. Williams, il quale modifica sistematicamente i pesi delle connessioni tra i nodi, così che la risposta della rete si avvicini sempre di più a quella desiderata. Tale lavoro fu prodotto riprendendo il modello creato da Werbos. L'algoritmo di retropropagazione (
L'algoritmo di apprendimento si basa sul metodo della [[discesa del gradiente]] che permette di trovare un minimo locale di una funzione in uno [[Spazio (matematica)|spazio]] a N [[dimensione|dimensioni]]. I pesi associati ai collegamenti tra gli strati di neuroni si inizializzano a valori piccoli (ovvero molto inferiori ai valori reali che poi assumeranno) e casuali, e poi si applica la regola di apprendimento presentando alla rete dei pattern di esempio. Queste reti neurali sono poi capaci di generalizzare in modo appropriato, cioè di dare risposte plausibili per input che non hanno mai visto.
L'addestramento di
Tale algoritmo consente di superare le limitazioni del percettrone e di risolvere il problema della separabilità non lineare (e quindi di calcolare la funzione XOR), segnando il definitivo rilancio delle reti neurali, come testimoniato anche dall'ampia varietà
== Fondamenti ==
[[File:Artificial neural network.svg|thumb|Una rete neurale artificiale è un'interconnessione di un gruppo di nodi chiamati neuroni]]
Una rete neurale artificiale (ANN "''Artificial Neural Network''" in inglese), normalmente chiamata solo "rete neurale" (NN "''Neural Network''" in inglese), è un modello matematico/informatico di calcolo basato sulle [[reti neurali]] biologiche. Tale modello è costituito da un gruppo di interconnessioni di informazioni costituite da neuroni artificiali e processi che utilizzano un approccio di connessionismo di calcolo. Nella maggior parte dei casi una rete neurale artificiale è un sistema adattivo che cambia la
In termini pratici le reti neurali sono strutture non-lineari di dati statistici organizzate come strumenti di modellazione. Esse possono essere utilizzate per simulare relazioni complesse tra ingressi e uscite che altre funzioni analitiche non riescono a rappresentare.
Una rete neurale artificiale riceve segnali esterni su uno strato di nodi (unità di elaborazione)
== Teoria e paradigmi di apprendimento ==
=== Analisi del sistema di apprendimento di una rete neurale ===
Il concetto di rete neurale si pone perché una [[Funzione (matematica)|funzione]] <math>f(x)</math> è definita come una [[Composizione di funzioni|composizione]] di altre funzioni <math>G(x)</math>, che possono a loro volta essere ulteriormente definite come composizione di altre funzioni. Questo può essere comodamente rappresentato come una struttura di reti, con le frecce raffiguranti le dipendenze tra variabili. Una rappresentazione ampiamente utilizzata è la somma ponderata non lineare, dove <math>f(x) =
[[File:Ann dependency (graph).svg|thumb|Figura 1:
La Figura 1 esemplifica una decomposizione della funzione <math>f</math>, con dipendenze tra le variabili indicate dalle frecce. Queste possono essere interpretate in due modi:
Riga 50:
I due punti di vista sono in gran parte equivalenti. In entrambi i casi, per questa particolare architettura di rete, i componenti dei singoli strati sono indipendenti l'uno dall'altro (ad esempio, le componenti di <math>g</math> sono indipendenti l'una dall'altra, dato il loro ingresso <math>h</math>). Questo, naturalmente, permette un certo grado di parallelismo nella costruzione del sistema.
[[File:Recurrent ann dependency graph.png|thumb|upright=0.7|Figura 2:
Reti, come ad esempio quelle precedenti vengono comunemente chiamate ''"feedforward"'', perché il loro è un grafico aciclico diretto. Reti con cicli
Tuttavia la funzionalità più interessante di queste funzioni, ciò che ha attirato l'interesse e lo studio per la maggior parte delle reti neurali, è la possibilità di apprendimento, che in pratica significa la seguente:
:dato un compito specifico da risolvere,
Ciò comporta la definizione di una funzione di costo <math>C : F \rightarrow \mathbb{R}</math> tale che, per la soluzione ottimale <math>C(f^*) \leq C(f)</math> <math>\forall f \in F</math> nessuna soluzione ha un costo inferiore al costo della soluzione ottimale.
Riga 69:
Vi sono tre grandi paradigmi di apprendimento, ciascuno corrispondente ad un particolare compito astratto di apprendimento. Si tratta dell'apprendimento supervisionato, apprendimento non supervisionato e l'apprendimento per rinforzo. Di solito un tipo di architettura di rete può essere impiegato in qualsiasi di tali compiti.
* un [[apprendimento supervisionato]] (''supervised learning''), qualora si disponga di un insieme di dati per l'addestramento (o ''training set'') comprendente esempi tipici
* un [[apprendimento non supervisionato]] (''unsupervised learning''), basato su algoritmi
* un [[apprendimento per rinforzo]] (''reinforcement learning''), nel quale un opportuno algoritmo si prefigge lo scopo di individuare un certo modus operandi, a partire da un processo
=== Apprendimento hebbiano ===
Riga 84:
Esempio di procedura:
# Inizializza i pesi a zero.
# Prepara un pattern
# Calcola <math> \Delta w_i = \eta x_{in,i } x_{out}</math> e quindi aggiorna <math> w_i = w_i + \Delta w_i</math>.
# Ripeti i passi 2 e 3 per ogni pattern <math>j</math> noto <math>w_i = \sum_j{ (\Delta w_i)j }</math>
Riga 103:
[[File:Rete-Neurale2.svg|centre|Esempio di rete neurale pienamente connessa]]
I singoli neuroni vengono collegati alla schiera di neuroni successivi, in modo da formare una rete di neuroni. Normalmente una rete è formata da tre strati. Nel primo abbiamo gli ingressi (I), questo strato si preoccupa di trattare gli ingressi in modo da adeguarli alle richieste dei neuroni. Se i segnali in ingresso sono già trattati può anche non esserci. Il secondo strato è quello nascosto (H, ''hidden''), si preoccupa dell'elaborazione vera e propria e può essere composto anche da più colonne di neuroni. Il terzo strato è quello di uscita (O) e si preoccupa di raccogliere i risultati
Per costruire la struttura di una rete neurale multistrato si possono inserire <math>N</math> strati ''hidden.''
=== Algoritmo di retropropagazione dell'errore ===
Line 119 ⟶ 118:
I passi logici per addestrare una rete neurale con apprendimento supervisionato sono i seguenti:
* creare un insieme di pattern input
* inizializzare i pesi della rete neurale (le connessioni tra i neuroni) a dei valori casuali, piccoli rispetto ai valori futuri che assumeranno,
* ciclo di apprendimento (esce da questo ciclo solo quando l'errore generale è minore di quanto si è deciso oppure dopo un determinato numero di iterazioni):
** Ciclo feedforward (dallo strato di input a quello di output):
*** estrarre un pattern di input a caso tra quelli a disposizione:<ref>Al fine di avere un buon addestramento, le estrazioni vengono effettuate senza reinserimento: quando un pattern viene estratto, esso non partecipa alle estrazioni successive; dunque, di volta in volta, si pesca dall'insieme dei pattern non ancora estratti. Una volta che tutti i pattern vengono estratti, si può eventualmente ripetere il processo da zero, ripartendo dall'intero insieme di pattern di input.</ref>
*** calcolare il valore di tutti i neuroni successivi (sommatorie di produttorie);
*** detrarre dal risultato il valore di soglia di attivazione del neurone (se il valore di soglia non è già stato simulato con l'aggiunta di un neurone
*** filtrare l'uscita del neurone applicando una funzione logistica per far diventare tale valore input del neurone successivo;
** confrontare il risultato ottenuto della rete con il pattern di output relativo all'input inserito e ricavare l'errore attuale della rete;
Line 138 ⟶ 137:
=== Reti di Hopfield ===
{{vedi anche|Rete di Hopfield}}
Nel [[1982]], il fisico [[John Hopfield|John J. Hopfield]] pubblica un articolo fondamentale in cui presenta un modello matematico comunemente noto appunto come rete di Hopfield: tale rete si distingue per "l'emergere spontaneo di nuove capacità computazionali dal comportamento collettivo di un gran numero di semplici elementi
Inoltre, Hopfield ritiene che ogni sistema fisico possa essere considerato come un potenziale dispositivo di memoria, qualora esso disponga di un certo numero di stati stabili, i quali fungano da attrattore per il sistema stesso. Sulla base di tale considerazione, egli si spinge a formulare la tesi secondo cui la stabilità e la collocazione di tali attrattori sono proprietà spontanee di sistemi costituiti, come accennato, da considerevoli quantità di neuroni reciprocamente interagenti.
Le applicazioni delle reti di Hopfield riguardano principalmente la realizzazione di memorie associative, resistenti all'alterazione delle condizioni operative, e la soluzione di problemi
Da un punto di vista strutturale, la rete di Hopfield costituisce una rete neurale ricorrente simmetrica, di cui è garantita la convergenza.
Una rete ricorrente è un modello neurale in cui è presente un flusso bidirezionale
[[File:Hopfield Neural Network for web.webm|miniatura|Un esempio dell'uso delle reti di Hopfield. In questo esempio, la “sfida” è “trovare” il numero più vicino ogni volta che il sistema è riavviato.]]
=== Reti di Elman ===
Un significativo e noto esempio di semplice rete ricorrente è dovuto a [[Jeffrey Elman|Jeffrey L. Elman]] ([[1990]]). Essa costituisce una variazione sul tema del percettrone multistrato, con esattamente tre strati e l'aggiunta di un insieme di neuroni "contestuali" nello strato
In ciascun istante, gli ingressi si propagano nel modo tradizionale e tipico delle reti feedforward, compresa l'applicazione dell'algoritmo
In questo modo la rete di Elman tiene conto del suo stato precedente, cosa che le consente di svolgere compiti di previsione di sequenze temporali che sono difficilmente alla portata dei percettroni multistrato convenzionali.
Line 157 ⟶ 156:
=== Mappe auto-organizzanti o reti SOM (''Self-Organizing Maps'') ===
{{vedi anche|Self-Organizing Map}}
Infine, un ultimo interessante tipo di rete è costituita dalla cosiddetta mappa auto-organizzante o rete SOM (''[[Self-Organizing Map]]''). Tale innovativo tipo di rete neurale è stata elaborata da [[Teuvo Kohonen]] dell'Università Tecnologica di [[Helsinki]]; il suo algoritmo
In termini più analitici, l'algoritmo può essere agevolmente descritto, come accennato, nei termini di un insieme di neuroni artificiali, ciascuno con una precisa collocazione sulla mappa rappresentativa degli ''output'', che prendono parte ad un processo noto come ''winner takes all'' ("[[Il vincitore piglia tutto]]"), al termine del quale il nodo avente un vettore di pesi più vicino ad un certo ''input'' è dichiarato vincitore, mentre i pesi stessi sono aggiornati in modo da avvicinarli al vettore in ingresso. Ciascun nodo ha un certo numero di nodi adiacenti. Quando un nodo vince una competizione, anche i pesi dei nodi adiacenti sono modificati, secondo la regola generale che più un nodo è lontano dal nodo vincitore, meno marcata deve essere la variazione dei suoi pesi. Il processo è quindi ripetuto per ogni vettore dell'insieme di ''training'', per un certo numero, solitamente grande, di cicli. Va da sé che ingressi diversi producono vincitori diversi.
Operando in tal modo, la mappa riesce alfine ad associare i nodi
* durante la fase di addestramento si costruisce la mappa, pertanto la rete si configura
* nel corso della seconda fase ogni nuovo vettore
=== Reti ad attrattori ===
In generale una ANN (''Attractor Neural Network'') è una rete di nodi (es: biologicamente ispirati), spesso interconnessi in modo ricorsivo, la cui dinamica nel tempo stabilisce un assestamento in un particolare modo di [[oscillazione]]. Questo modo di oscillazione può essere stazionario, variante nel tempo o di tipo stocastico ed è chiamato il suo '[[attrattore]]'. In neuroscienza teorica diversi tipi di reti ad attrattori sono state associate a differenti funzioni, come: [[memoria (fisiologia)|memoria]], attenzione, condotta del moto e [[classificazione]].
Più precisamente, una rete ad attrattori è una rete di N nodi connessi in modo che la loro intera dinamica diventi stabile in uno spazio D dimensionale, dove
== Applicazioni e proprietà ==
[[File:Joseph Ayerle portrait of Ornella Muti (detail), calculated by Artificial Intelligence (AI) technology.jpg|miniatura|Un'opera dell'artista Joseph Ayerle, che mostra [[Ornella Muti]], calcolato da una Rete Neurale Artificiale. L'intelligenza artificiale era addestrata a "dipingere" come il pittore [[Raffaello Sanzio]].]]
L'utilità dei modelli di rete neurale sta nel fatto che queste possono essere usate per comprendere una funzione utilizzando solo le osservazioni sui dati. Ciò è particolarmente utile nelle applicazioni in cui la [[Teoria della complessità computazionale|complessità]] dei dati o la difficoltà di elaborazione rende la progettazione di una tale funzione impraticabile con i normali procedimenti di analisi manuale.
I compiti a cui le reti neurali sono applicate possono essere
* funzioni di [[approssimazione]], o di [[regressione]], tra cui la previsione di serie temporali e la modellazione;
* classificazione, compresa la struttura e la sequenza di generici riconoscimenti, l'individuazione delle novità
* l'elaborazione dei dati, compreso il [[Collaborative filtering|"filtraggio"]] (eliminazione del rumore), il [[clustering]], separazione di segnali e [[Compressione dei dati|compressione]].
Le aree di applicazione includono i [[Controllo automatico|sistemi di controllo]] (controllo di veicoli, controllo di processi), i simulatori di giochi e i processi decisionali ([[backgammon]], [[scacchi]]), riconoscimento di pattern (sistemi [[radar]], identificazione di volti, riconoscimento di oggetti, ecc), riconoscimenti di sequenze (riconoscimento di gesti, [[riconoscimento vocale]], [[Optical Character Recognition|OCR]]), diagnosi medica, applicazioni finanziarie, [[data mining]], filtri [[spam]] per e-mail.
=== Pregi ===
Le reti neurali, per come sono costruite, lavorano in parallelo e sono quindi in grado di trattare molti dati. Si tratta in sostanza di un sofisticato sistema di tipo statistico dotato di una buona immunità al [[rumore (elettronica)|rumore]]; se alcune unità del sistema dovessero funzionare male, la rete nel suo complesso avrebbe delle riduzioni di prestazioni ma difficilmente andrebbe incontro ad un blocco del sistema. I software di ultima generazione dedicati alle reti neurali richiedono comunque buone conoscenze statistiche; il grado di apparente utilizzabilità immediata non deve trarre in inganno, pur permettendo all'utente di effettuare subito previsioni o classificazioni, seppure con i limiti del caso.
Da un punto di vista industriale, risultano efficaci quando si dispone di dati storici che possono essere trattati con gli algoritmi neurali. Ciò è di interesse per la produzione perché permette di estrarre dati e modelli senza effettuare ulteriori prove e sperimentazioni.
=== Difetti ===
I modelli prodotti dalle reti neurali, anche se molto efficienti, non sono spiegabili in linguaggio simbolico umano: i risultati vanno accettati "così come sono", da cui anche la definizione inglese delle reti neurali come "black box"
Come per qualsiasi algoritmo di modellazione, anche le reti neurali sono efficienti solo se le variabili predittive sono scelte con cura.
=== Utilizzi ===
Le reti neurali vengono solitamente usate in contesti dove i dati possono essere parzialmente errati oppure dove non esistano modelli analitici in grado di affrontare il problema. Un loro tipico utilizzo è nei software di [[Optical Character Recognition|OCR]], nei sistemi di riconoscimento facciale e più in generale nei sistemi che si occupano di trattare dati soggetti a errori o rumore. Esse sono anche uno degli strumenti maggiormente utilizzati nelle analisi di [[
Le reti neurali vengono anche utilizzate come mezzo per previsioni nell'analisi finanziaria o meteorologica. Negli ultimi anni è aumentata notevolmente la loro importanza anche nel campo della [[bioinformatica]] nel quale vengono utilizzate per la ricerca di pattern funzionali e/o strutturali in proteine e acidi nucleici. Mostrando opportunamente una lunga serie di input (fase di training o apprendimento), la rete è in grado di fornire l'output più probabile. Negli ultimi anni inoltre sono in corso studi per il loro utilizzo nella previsione degli attacchi Epilettici (Analisi dei Dati provenienti dall' [[Elettroencefalografia|EEG]]).
Riga 206:
* Meraviglia C., ''Le reti neurali nella ricerca sociale'', Bologna, Il Mulino, 2001. ISBN 978-88-464-3044-1
* Floreano D., Mattiussi C., ''Manuale sulle reti neurali'', Bologna, Il Mulino, 2002. ISBN 978-88-15-08504-7
*
* Gallo C., ''Reti
* Amit, D. J., ''Modeling brain function'', 1989 New York, NY: Cambridge University Press. ISBN 0-521-36100-1▼
*{{Cita testo|titolo=Reti neurali artificiali|url=https://archive.org/details/retineuraliartificiali|autore=Alessandro Mazzetti|editore=Apogeo|anno=1991|isbn=88-7303-002-5}}
▲* Gallo C., ''Reti Neurali Artificiali: Teoria ed applicazioni finanziarie'', 2007 Foggia, Università di Foggia.
▲*{{en}} Amit, D. J., ''Modeling brain function'', 1989 New York, NY: Cambridge University Press. ISBN 0-521-36100-1
== Voci correlate ==
Line 218 ⟶ 219:
* [[Rete neurale a base radiale]]
* [[Rete neurale spiking]]
* [[
== Altri progetti ==
{{interprogetto|preposizione=sulle|etichetta=reti neurali artificiali}}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web | 1 = http://www.e-nuts.net/it/reti-neurali-feed-forward | 2 = Programma da scaricare e provare che mostra come una rete neurale apprende dagli input. (è disponibile anche un video) | accesso = 26 giugno 2016 | dataarchivio = 24 maggio 2016 | urlarchivio = https://web.archive.org/web/20160524120132/http://www.e-nuts.net/it/reti-neurali-feed-forward | urlmorto = sì }}
* {{cita web|http://www.cash-cow.it/appunti-ed-articoli/reti-neurali-artificiali|Esempio di rete neurale realizzata in Matlab}}
* {{cita web|http://www.skenz.it/stefano/tesi/2_Le_reti_neurali.html|Descrizione del funzionamento di una rete neurale di tipo feed-forward}}
*{{cita web | 1 = http://xleox.somee.com/Algorithms/MLP/Neuron.aspx | 2 = Esempio di un neurone e di una rete neurale realizzato in C# | accesso = 26 giugno 2016 | urlarchivio = https://web.archive.org/web/20160630085406/http://www.xleox.somee.com/Algorithms/MLP/Neuron.aspx | dataarchivio = 30 giugno 2016 | urlmorto = sì }}
{{Apprendimento automatico}}
|