Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
L’entità dell’aggiornamento dipende dal learning rate, oltre che dal valore della feature i-esima
dell’ingresso. Il learning rate è, infatti, un parametro cruciale nell'addestramento delle reti neurali e degli
algoritmi di apprendimento come il percettrone. Esso determina l'entità con cui i pesi vengono aggiornati
ad ogni iterazione, in risposta a un singolo campione di ingresso. In altre parole, il learning rate controlla la
velocità con cui l'algoritmo si adatta ai dati.
Un learning rate appropriato è essenziale per garantire che l'algoritmo converga verso una soluzione
ottimale. Se il tasso di apprendimento è troppo alto, l'aggiornamento dei pesi potrebbe essere troppo
drastico, portando a un comportamento oscillante o addirittura impedendo la convergenza, poiché
l'algoritmo potrebbe "saltare" oltre il minimo dell'errore senza mai stabilizzarsi. D'altra parte, un learning
rate troppo basso rallenta il processo di apprendimento, poiché i cambiamenti ai pesi saranno minimi e
l'algoritmo potrebbe richiedere molte iterazioni per avvicinarsi a una soluzione accettabile. Pertanto, il
learning rate deve essere scelto con attenzione: deve essere sufficientemente alto da permettere
all'algoritmo di apprendere in modo efficiente, ma non così elevato da causare instabilità. In pratica, può
essere utile iniziare con un valore moderato e poi, eventualmente, adattarlo dinamicamente durante
l'addestramento per bilanciare la velocità di apprendimento con la stabilità della convergenza. Alcuni
algoritmi più avanzati utilizzano tecniche come il learning rate scheduling o l'ottimizzazione adattiva per
regolare automaticamente il tasso di apprendimento nel corso del tempo, migliorando ulteriormente la
probabilità di convergenza verso una soluzione ottimale.
Un aspetto interessante dell'algoritmo di addestramento del percettrone è che si tratta di un algoritmo on-
line. Ciò significa che l'algoritmo lavora elaborando un campione alla volta. Non è necessario elaborare tutti
i dati di addestramento contemporaneamente. Durante la fase di addestramento, il percettrone riceve un
singolo campione dall'insieme dei dati e genera un output che viene poi confrontato con la risposta
desiderata associata a quel campione. In base a questo confronto, i pesi vengono aggiornati in modo da
avvicinare l'output del neurone al risultato corretto. Questo processo viene ripetuto iterativamente fino a
quando l'apprendimento raggiunge un livello soddisfacente.
Quindi, utilizzando un algoritmo relativamente semplice, possiamo costruire un classificatore binario
capace di apprendere e risolvere problemi di classificazione. Questo metodo è, inoltre, particolarmente
efficiente in termini di memoria, poiché elabora un campione alla volta, senza dover gestire l'intero set di
dati contemporaneamente.
Il percettrone rappresenta il primo passo concreto verso le reti neurali artificiali come le conosciamo oggi,
ponendo le basi per lo sviluppo di algoritmi più complessi e reti neurali più sofisticate. Tuttavia, tale
modello ha una limitazione significativa: può risolvere solo problemi che sono linearmente separabili. In
altre parole, se le due classi non possono essere separate da un iperpiano, l'algoritmo non sarà in grado di
trovare una soluzione adeguata. Se il problema è linearmente separabile, l'algoritmo convergerà, ma per
affrontare problemi più complessi è necessario ricorrere a modelli più avanzati o all’utilizzo di una rete di
5
percettroni connessi tra loro, ma per un algoritmo di apprendimento per una rete di neuroni dobbiamo
attendere il 1986. 6
Reti di neuroni
Una rete neurale è composta da diversi neuroni artificiali che lavorano insieme per elaborare informazioni.
A differenza di un singolo neurone, dove l'output è direttamente collegato all'input, in una rete neurale
l'output è il risultato dell'interazione tra più neuroni, che sono interconnessi tra di loro. La maniera in cui
questi neuroni sono collegati tra loro definisce la topologia della rete neurale, che è uno degli aspetti
fondamentali della sua architettura.
Tipi di architetture
In linea di principio, possiamo interconnettere i neuroni in qualsiasi modo, ma il modo più utilizzato è il
feed-forward. In una rete neurale feed-forward, i neuroni sono organizzati in strati (layer), e ogni neurone
in uno strato è collegato a ogni neurone nello strato successivo. L'informazione fluisce in una sola direzione:
dagli strati di input, attraverso eventuali strati nascosti, fino allo strato di output. Non ci sono connessioni
che riportano l'output a un livello precedente, per cui la rete “alimenta” i neuroni solo in avanti, per questo
detta feed-forward.
Figura 2 Rete feed-forward costituita da un input layer che prende in ingresso un input a tre variabili (features), un hidden layer con
tre neuroni e un output layer con un neurone.
Questa architettura è molto utilizzata per compiti di classificazione e regressione perché è semplice da
implementare e da addestrare. Tuttavia, ci sono altre architetture che possono essere utilizzate per
affrontare compiti specifici, come:
• Reti Neurali Ricorrenti (RNN): Utilizzate principalmente per elaborare sequenze temporali di dati.
In una RNN, i neuroni sono collegati anche a se stessi, rimandando l’output di un neurone indietro
come input del neurone stesso. Tale meccanismo permette alla rete di mantenere una "memoria"
degli input precedenti. Figura 3 Rete ricorrente 7
• Reti Neurali Convoluzionali (CNN): Comunemente utilizzate per l'elaborazione delle immagini e il
riconoscimento di pattern visivi. In una CNN, la connessione tra neuroni è locale, cioè ogni neurone
è collegato solo a una parte dell'input, che viene elaborato attraverso operazioni di convoluzione.
• Reti Neurali Ricorrenti con LSTM o GRU: Una variante delle RNN che include meccanismi per
gestire la memoria a lungo termine e mitigare i problemi di “gradiente che svanisce”,
particolarmente utile per sequenze di lunga durata.
• Reti con connessioni laterali: I neuroni di uno strato non sono solo connessi con i neuroni dello
strato precedente e successivo, ma anche con i neuroni dello stesso strato. Neuroni dello stesso
strato possono quindi scambiarsi informazioni, realizzando un meccanismo di competizione tra
neuroni. Figura 4 Rete con connessioni laterali
Infine, se ogni neurone di uno strato è collegato a tutti i neuroni dello strato precedente e dello strato
successivo, si dice che la rete è completamente connessa (fully connected). Altrimenti, si dice che la rete
presenta connessioni sparse (sparse connections).
Ogni architettura ha i suoi punti di forza e debolezza e la scelta di una specifica topologia dipende dal
problema che si sta cercando di risolvere.
Multi-Layer Perceptron (MLP)
Il Multilayer Perceptron (MLP) è una tipologia di rete neurale artificiale appartenente alla categoria delle
reti neurali feedforward, tipicamente fully connected. È uno dei modelli più semplici e comuni di reti
neurali e rappresenta una generalizzazione del percettrone di Rosenblatt.
Un MLP è costituito da tre tipi di strati di neuroni:
1. Strato di Input (Input Layer): È lo strato iniziale che riceve i dati in ingresso. Ogni neurone in questo
strato corrisponde a una feature (caratteristica) dell'input. Non fa elaborazioni, riceve solo
l’ingresso in input e lo passa allo strato successivo.
2. Strati Nascosti (Hidden Layers): Si trovano tra lo strato di input e lo strato di output. Un MLP può
avere uno o più strati nascosti. Ogni strato nascosto è composto da un certo numero di neuroni,
ciascuno dei quali riceve input dagli strati precedenti e li elabora attraverso una funzione di
attivazione. La presenza di strati nascosti consente alla rete di apprendere rappresentazioni più
complesse dei dati e di catturare le relazioni non lineari. 8
3. Strato di Output (Output Layer): È l'ultimo strato della rete, che fornisce l'output finale della rete. Il
numero di neuroni in questo strato dipende dal tipo di problema: per esempio, in un problema di
classificazione binaria ci sarà, ad esempio, un solo neurone con un'uscita che può essere 0 o 1,
mentre in un problema di classificazione multiclasse ci sarà un neurone per ogni classe.
I neuroni sono percettroni, ma a differenza del modello di Rosenblatt visto in precedenza, non utilizzano la
funzione gradino come funzione di attivazione, bensì una funzione di attivazione derivabile (proprietà di cui
la funzione a gradino non gode).
Nel 1989, il matematico G. Cybenko ha dimostrato il teorema dell’approssimazione universale, che
afferma che ogni funzione continua (anche a tratti) può essere approssimata con precisione arbitraria da
una rete MLP con uno strato nascosto e funzione di attivazione non polinomiale continua derivabile.
Per cui un MLP è un approssimatore di funzioni universale.
Nota: il fatto che un solo strato sia teoricamente sufficiente ad approssimare qualsiasi funzione non è detto
che sia rappresenti la soluzione più efficiente. 9
Algoritmo di back propagation
L’algoritmo per addestrare le reti neurali, in particolare le reti MLP, fu introdotto David E. Rumelhart,
Geoffrey E. Hinton, e Ronald J. Williams in un articolo del 1986. Questo algoritmo è essenziale per
ottimizzare i pesi e i bias della rete in modo che l'output prodotto dalla rete sia il più vicino possibile al
valore desiderato, minimizzando l'errore.
L'algoritmo di back propagation si svolge in quattro fasi principali:
1. forward propagation:
o L'input viene passato attraverso la rete neurale, strato per strato, fino allo strato di output.
o Ad ogni strato, i neuroni calcolano l'output applicando una funzione di attivazione alla
somma pesata degli input ricevuti.
o L'output finale della rete viene confrontato con il valore desiderato per calcolare l'errore.
2. calcolo dell'errore:
o La differenza tra l'output predetto dalla rete e l'output desiderato viene calcolata
utilizzando una funzione di perdita (o funzione di costo). Una delle funzioni di perdita più
comuni è l'errore quadratico medio (MSE) per problemi di regressione o l'entropia
incrociata (cross-entropy) per problemi di classificazione.
o Il valore dell'errore rappresenta quanto la rete si discosta dal risultato corretto.
3. backward propagation (Retropropagazione del Gradiente):
o L'errore calcolato viene propagato all'indietro attraverso la rete, a partire dallo strato di
output fino agli strati nascosti e allo strato di input.
o Durante questa fase, si calcola il gradiente