Reti neurali

menu icon

Reti neurali

Le reti neurali riflettono il comportamento del cervello umano, consentendo ai programmi informatici di riconoscere modelli e risolvere problemi comuni nei campi di AI, machine learning e deep learning.

Cosa sono le reti neurali?

Le reti neurali, note anche come reti neurali artificiali (o ANN, artificial neural network) o reti neurali simulate (o SNN, simulated neural network) sono un sottoinsieme del machine learning e sono 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 reti neurali artificiali (ANN), 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.

Diagramma visivo di uno livello di input, di livelli nascosti e di un livello di output di una rete neurale feedforward

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 invece che ore, come sarebbe il caso se l'identificazione manuale fosse affidata a esperti umani. Una delle reti neurali più note è l'algoritmo di ricerca di Google.

Come funzionano le reti neurali?

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:

Formula matematica utilizzata per determinare la sommatoria

∑wixi + bias = w1x1 + w2x2 + w3x3 + bias

Formula matematica utilizzata per determinare l'output

output = f(x) = 1 if ∑w1x1 + b> = 0; 0 if ∑w1x1 + b < 0

Una volta determinato uno livello di input, vengono assegnati i pesi. Questi pesi aiutano a determinare l'importanza di una qualsiasi data 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 come si presenterebbe un singolo nodo utilizzando dei valori binari. Possiamo applicare questo concetto a un esempio più tangibile, come ad esempio se dovresti andare a fare surf oppure no (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:

  1. Le onde sono buone? (Sì: 1, No: 0)
  2. La line-up è vuota? (Sì: 1, No: 0)
  3. C'è stato un recente attacco di squali? (Sì: 0, No: 1)

Supponiamo quindi quanto segue, assegnando i seguenti input:

  • X1 = 1, dal momento che le onde sono belle e potenti
  • X2 = 0, visto che c'è tanta gente
  • X3 = 1, visto che non c'è stato un recente attacco di squali

Ora, dobbiamo 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.

  • W1 = 5, visto che delle onde belle e potenti non sono frequenti
  • W2 = 2, visto che sei abituato alle folle
  • W3 = 4, visto che hai paura degli squali

Infine, presupporremo anche un valore di soglia di 3, che si tradurrebbe in un valore di distorsione di -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 nodi 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 dataset 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,

  • i rappresenta l'indice del campione,
  • ŷ è il risultato previsto,
  • y è il valore effettivo e
  • i è il numero di campioni.
Formula matematica utilizzata per determinare la funzione di costo

𝐶𝑜𝑠𝑡 𝐹𝑢𝑛𝑐𝑡𝑖𝑜𝑛 = 𝑀𝑆𝐸 =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.

Grafico a linee che illustra il punto di convergenza

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 muovendosi 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.

Tipi di reti neurali

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. Ha un singolo neurone ed è la forma più semplice di una rete neurale:

Semplice diagramma di un percettrone che utilizza linee e un cerchio blu

Le reti neurali feedforward, o percettroni multilvello (o MLP, multi-layer perceptron) 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 convoluttive (o CNN, convolutional neural network) 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 (o RNN, recurrent neural network) sono identificate dai loro loop di feedback. Ci si avvale di questi algoritmi di apprendimento 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.

Confronto tra reti neurali e deep learning

Tendenzialmente, si parla di deep learning e reti neurali in modo interscambiabile, 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?

Storia delle reti neurali

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)”. 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: Frank Rosenblatt è riconosciuto lo sviluppo del percettrone, documentato nella sua ricerca “The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain” (PDF, 1,6 MB) (link esterno a IBM). Porta ulteriormente avanti il lavoro di McCulloch e Pitt introducendo i pesi nell'equazione. Utilizzando un IBM 704, Rosenblatt riesce fare apprendere a un computer come distinguere delle carte contrassegnate sulla destra 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).

1989: Yann LeCun pubblica un articolo (PDF, 5,7 MB) (link esterno a IBM) che illustra in 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 dall'U.S. Postal Service.

Reti neurali e IBM Cloud

Da decenni a questa parte, IBM ha avuto un ruolo pionieristico nello sviluppo di tecnologie AI e reti neurali, che trova il suo culmine nello sviluppo e nell'evoluzione di IBM Watson. Watson è ora una soluzione affidabile per le aziende che intendono applicare tecniche di NLP (natural language processing) e deep learning avanzate ai loro sistemi utilizzando un collaudato approccio a livelli di adozione e implementazione dell'AI.

Watson utilizza il framework UIMA (Unstructured Information Management Architecture) di Apache e il software DeepQA di IBM per mettere a disposizione delle applicazioni delle potenti funzionalità di deep learning. Utilizzando strumenti come IBM Watson Studio, la tua azienda può portare in produzione dei progetti di AI open source senza soluzione di continuità, implementando ed eseguendo al tempo stesso i modelli di qualsiasi cloud.

Per ulteriori informazioni su come iniziare a lavorare con la tecnologia di deep learning, esplora IBM Watson Studio e il servizio di deep learning .

Registrati per un IBMid e crea il tuo account IBM Cloud.