Le reti neurali, note anche come ANN (artificial neural network) o SNN (simulated neural network), sono un sottoinsieme del machine learning e rappresentano l'elemento centrale degli algoritmi di deep learning. Il loro nome e la loro struttura sono ispirati al cervello umano, imitando il modo in cui i neuroni biologici si inviano segnali.
Le ANN (artificial neural network) sono composte da livelli di nodi che contengono un livello di input, uno o più livelli nascosti e un livello di output. Ciascun nodo, o neurone artificiale, si connette ad un altro e ha un peso e una soglia associati. Se l'output di qualsiasi singolo nodo è al di sopra del valore di soglia specificato, tale nodo viene attivato, inviando i dati al successivo livello della rete. In caso contrario, non viene passato alcun dato al livello successivo della rete.
Le reti neurali fanno affidamento sui dati di addestramento per imparare e migliorare la loro accuratezza nel tempo. Tuttavia, una volta ottimizzati per l'accuratezza, questi algoritmi di apprendimento sono dei potenti strumenti nella computer science e nell' AI, consentendoci di classificare e organizzare in cluster i dati ad alta velocità. Le attività di riconoscimento vocale o di riconoscimento delle immagini possono richiedere pochi minuti rispetto alle ore necessarie in caso di identificazione manuale da parte di esperti umani. Una delle reti neurali più note è l'algoritmo di ricerca di Google.
Pensa ad ogni singolo nodo come a un proprio modello di regressione lineare, composto da dati di input, pesi, una distorsione (o soglia) e un output. La formula sarebbe simile alla seguente:
∑wixi + bias = w1x1 + w2x2 + w3x3 + bias
output = f(x) = 1 if ∑w1x1 + b>= 0; 0 if ∑w1x1 + b < 0
Una volta determinato un livello di input, vengono assegnati i pesi. Questi pesi aiutano a determinare l'importanza di qualsiasi specifica variabile, con quelli più grandi che contribuiscono in modo più significativo all'output rispetto agli altri input. Tutti gli input vengono poi moltiplicati per i rispettivi pesi e quindi sommati. Successivamente, l'output viene passato attraverso una funzione di attivazione, che determina l'output. Se supera una determinata soglia, tale output attiva il nodo, passando i dati al livello successivo nella rete. L'output di un nodo diventa quindi l'input del nodo successivo. Questo processo di passaggio dei dati da un livello a quello successivo definisce questa rete neurale come una rete feedforward.
Analizziamo in dettaglio come si presenterebbe un singolo nodo utilizzando dei valori binari. Possiamo applicare questo concetto a un esempio più tangibile, come ad esempio decidere se andare o meno a fare surf (Sì: 1, No: 0). La decisione di andare o non andare è il nostro risultato previsto, o ŷ. Supponiamo che ci siano tre fattori che influenzano il tuo processo decisionale:
Quindi, supponiamo quanto segue, assegnando i seguenti input:
Dobbiamo ora assegnare dei pesi per determinare l'importanza. Dei pesi maggiori indicano che delle specifiche variabili hanno un'importanza maggiore per la decisione o il risultato.
Infine, presupporremo anche un valore di soglia uguale a 3, che si tradurrebbe in un valore di distorsione uguale a -3. Con tutti i vari input, possiamo iniziare a inserire i valori nella formula per ottenere l'output desiderato.
Ŷ = (1*5) + (0*2) + (1*4) – 3 = 6
Se utilizziamo la funzione di attivazione dall'inizio di questa sezione, possiamo determinare che l'output di questo nodo sarebbe 1, poiché 6 è maggiore di 0. In questo caso, andresti a fare surf; se però regoliamo i pesi o la soglia, possiamo giungere a risultati differenti dal modello. Quando osserviamo una decisione, come nell'esempio precedente, possiamo vedere in che modo una rete neurale potrebbe prendere delle decisioni sempre più complesse a seconda dell'output delle decisioni o dei livelli precedenti.
Nel precedente esempio, abbiamo utilizzato i percettroni per illustrare parte della matematica qui in gioco ma le reti neurali si avvalgono dei neuroni sigmoidi, che si distinguono perché hanno dei valori compresi tra 0 e 1. Dato che le reti neurali si comportano in modo analogo alle strutture ad albero delle decisioni, con un passaggio a cascata dei dati da un nodo all'altro, avere dei valori x compresi tra 0 e 1 ridurrà l'impatto di qualsiasi specifica modifica di una singola variabile sull'output di qualsiasi specifico nodo e, successivamente, sull'output della rete neurale.
Mentre iniziamo a pensare a casi di utilizzo più pratici per le reti neurali, come il riconoscimento o la classificazione delle immagini, ci serviremo dell'apprendimento supervisionato, o set di dati etichettati, per addestrare l'algoritmo. Mentre addestriamo il modello, ne vorremo valutare l'accuratezza utilizzando una funzione di costo (o perdita). Questo è anche comunemente indicato come errore quadrato medio (o MSE, mean squared error). Nell'equazione di seguito,
= =1/2 ∑129_(=1)^▒( ̂^(() )−^(() ) )^2
In definitiva, l'obiettivo è ridurre al minimo la nostra funzione di costo per garantire la correttezza di adattamento per qualsiasi specifica osservazione. Quando regola i suoi pesi e la sua distorsione, il modello utilizza la funzione di costo e l'apprendimento per rinforzo per raggiungere il punto di convergenza o il minimo locale. Il processo in cui l'algoritmo regola i suoi pesi è tramite la discesa del gradiente, consentendo al modello di determinare la direzione da prendere per ridurre gli errori (o ridurre al minimo la funzione di costo). Con ogni esempio di addestramento, i parametri del modello vengono regolati per convergere gradualmente verso il minimo.
Consulta questo articolo di IBM Developer per una spiegazione più approfondita dei concetti quantitativi coinvolti nelle reti neurali.
Le reti neurali profonde sono, per la maggior parte, feedforward, il che significa che fluiscono in una sola direzione, dall'input all'output. Tuttavia, puoi anche addestrare il tuo modello tramite la retropropagazione, ossia con un movimento che va nella direzione opposta, dall'output all'input. La retropropagazione ci consente di calcolare e attribuire l'errore associato a ciascun neurone, consentendoci di regolare e adattare in modo appropriato i parametri del modello o dei modelli.
Le reti neurali possono essere classificate in diversi tipi, che vengono utilizzati per scopi diversi. Pur non essendo un elenco completo dei tipi, quello di qui seguito riportato sarà rappresentativo dei tipi più comuni di reti neurali che incontrerai nei loro casi di utilizzo comuni:
Il percettrone è la più antica rete neurale, creata da Frank Rosenblatt nel 1958.
Le reti neurali feedforward, o percettroni multilvello (multi-layer perceptron, MLP) sono quelle su cui ci stiamo concentrando in particolare in questo articolo. Sono formate da un livello di input, uno o più livelli nascosti e un livello di output. Sebbene si faccia anche comunemente riferimento a queste reti neurali come MLP, è importante notare che sono effettivamente formate da neuroni sigmoidi, non percettroni, poiché la maggior parte dei problemi del mondo reale è non lineare. I dati vengono di norma passati in questi modelli per addestrarli e sono la base per la visione artificiale, l'NLP (natural language processing) e altre reti neurali.
Le reti neurali convolutive (convolutional neural network, CNN) sono simili alle reti feedforward, ma sono di solito utilizzate per il riconoscimento delle immagini, il riconoscimento dei modelli e/o la visione artificiale. Queste reti sfruttano i principi dall'algebra lineare, in particolare la moltiplicazione della matrice, per identificare i modelli all'interno di un'immagine.
Le reti neurali ricorrenti (recurrent neural network, RNN) sono identificate dai loro loop di feedback. Questi algoritmi di apprendimento vengono sfruttati soprattutto quando si utilizzano dati di serie temporali per fare delle previsioni su risultati futuri, come ad esempio delle previsioni relative al mercato azionario o delle previsioni di vendita.
Tendenzialmente, si parla di deep learning e reti neurali in modo intercambiabile, il che può creare confusione. Di conseguenza, vale la pena notare che il termine "profondo" (deep) in deep learning si riferisce esclusivamente alla profondità dei livelli in una rete neurale. Una rete neurale che consiste in più di tre livelli - che sarebbero comprensivi degli input e dell'output - può essere considerata un algoritmo di deep learning. Una rete neurale che ha solo due o tre livelli è soltanto una rete neurale di base.
Per saperne di più sulle differenze tra le reti neurali e altre forme di AI, come il machine learning, leggi il post del blog "AI vs. Machine Learning vs. Deep Learning vs. Neural Networks: What's the Difference?"
La storia delle reti neurali è più lunga di quanto la maggior parte delle persone possa pensare. Anche se l'idea di "una macchina che pensa" può essere fatta risalire agli antichi Greci, ci concentreremo sugli eventi chiave che hanno portato all'evoluzione del pensiero intorno alle reti neurali, la cui popolarità ha avuto alti e bassi nel corso degli anni:
1943: Warren S. McCulloch e Walter Pitts pubblicano "A logical calculus of the ideas immanent in nervous activity (Un calcolo logico delle idee immanenti nell'attività nervosa) (PDF, 1 MB) (link esterno a ibm.com)" Questa ricerca intende comprendere il modo in cui il cervello umano può produrre modelli complessi tramite cellule cerebrali, o neuroni, connessi. Una delle idee principali derivate da questo lavoro è il paragone dei neuroni con una soglia binaria alla logica booleana (ossia 0/1 o affermazioni vere/false).
1958: a Frank Rosenblatt è riconosciuto lo sviluppo del percettrone, documentato nella sua ricerca, "The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain" (link esterno a ibm.com). Porta ulteriormente avanti il lavoro di McCulloch e Pitt introducendo i pesi nell'equazione. Utilizzando un IBM 704, Rosenblatt è stato in grado di insegnare a un computer come distinguere delle carte contrassegnate sulla sinistra da altre contrassegnate sulla destra.
1974: sebbene numerosi ricercatori avessero contribuito all'idea di retropropagazione, Paul Werbos è il primo negli Stati Uniti a osservarne l'applicazione nelle reti neurali con la sua tesi di dottorato (PDF, 8,1 MB) (link esterno a ibm.com).
1989: Yann LeCun pubblica un articolo (PDF, 5,7 MB) (link esterno a ibm.com) che illustra in che modo sia possibile utilizzare i vincoli nella retropropagazione e la sua integrazione nell'architettura delle reti neurali per addestrare gli algoritmi. Questa ricerca sfrutta con successo una rete neurale per riconoscere le cifre di un CAP scritte a mano fornite dallo U.S. Postal Service.
Sviluppa ed esegui la scalabilità di un'AI affidabile su qualsiasi cloud. Automatizza il ciclo di vita dell'AI per ModelOps.
Ibride. Aperte. Resilienti. La tua piattaforma e il tuo partner per la trasformazione digitale.