Apprendimento automatico e Reti Neurali - pagina 50

 

Cosa può calcolare un singolo neurone? (DL 03)



Cosa può calcolare un singolo neurone? (DL 03)

Le reti neurali sono costituite da numerosi nodi con un vasto numero di connessioni. Per capirli meglio, concentriamoci su un singolo neurone ed esploriamo le sue capacità, i tipi di modelli che può rappresentare e come questi modelli possono essere addestrati.

Un nodo in una rete neurale riceve input ed esegue un semplice calcolo per generare un output numerico. Questo calcolo comporta due fasi: in primo luogo, gli input vengono moltiplicati per i pesi corrispondenti e sommati; quindi, la somma degli input ponderati viene passata attraverso una funzione di attivazione per produrre l'output.

Matematicamente, l'output è ottenuto applicando una funzione di attivazione (denotata come f) alla somma degli input ponderati. Quindi, l'output è il risultato dell'applicazione della funzione di attivazione alla somma di ciascun peso moltiplicato per il suo input corrispondente, più un termine di polarizzazione.

Il bias consente alla somma di essere diversa da zero anche se tutti gli input sono zero. Possiamo pensare al bias come a un altro peso e rappresentarlo con una freccia aggiuntiva che entra nel nodo. Ogni neurone esegue una somma ponderata sui suoi input, ma diversi neuroni possono avere diverse funzioni di attivazione.

Per un modello a singolo neurone, due funzioni di attivazione degne di nota sono le funzioni lineari e a gradino. La funzione di attivazione lineare consente al neurone di eseguire la regressione, mentre la funzione di gradino gli consente di eseguire la classificazione.

Nel caso di un neurone con un singolo input, la somma ponderata degli input viene calcolata moltiplicando l'input per il peso e aggiungendo il bias. La funzione di attivazione lineare scelta, y = x, ci permette di esprimere qualsiasi funzione lineare di x1 usando i parametri peso (w1) e bias (b). Pertanto, questo neurone può calcolare qualsiasi funzione lineare con un input unidimensionale (x1) e un output unidimensionale (y).

Se il neurone ha più input, la mappatura si estende agli input multidimensionali ma rimane una funzione lineare adatta alla regressione. Tuttavia, la visualizzazione della funzione diventa difficile con l'aumentare della dimensione di input.

Nel caso di un neurone con due ingressi, la funzione gradino viene utilizzata come attivazione. La somma ponderata degli input viene ancora calcolata e l'attivazione passa da zero a uno quando la somma diventa positiva. L'attivazione può essere descritta utilizzando una funzione a tratti, e il limite decisionale tra gli input risultanti in un output 0 o 1 è dove la somma ponderata degli input è uguale a zero. Questa configurazione è adatta per le attività di classificazione, in cui gli input sono etichettati come 0 o 1 in base all'output del neurone.

Per eseguire la regressione o la classificazione utilizzando singoli neuroni, abbiamo bisogno di un set di dati costituito da coppie input-output. La funzione di attivazione scelta dipende dal fatto che l'uscita sia binaria (0 o 1) o continua. La dimensionalità degli esempi di input determina il numero di input e pesi nel modello a singolo neurone.

L'addestramento di una rete neurale o di un singolo neurone comporta la definizione di una funzione di perdita che quantifica la deviazione del modello dai dati. Per le attività di regressione, è possibile utilizzare la somma degli errori al quadrato, mentre le attività di classificazione con output binari possono utilizzare altre funzioni di perdita adatte.

L'obiettivo dell'addestramento è aggiornare i parametri (pesi e distorsioni) in modo da ridurre al minimo la perdita e migliorare l'accuratezza del modello. La discesa del gradiente è una tecnica di ottimizzazione comune utilizzata per aggiornare i parametri e ridurre la perdita.

Nel prossimo video, approfondiremo il concetto di discesa del gradiente e come facilita gli aggiornamenti dei parametri per migliorare le prestazioni del modello.

What can a single neuron compute? (DL 03)
What can a single neuron compute? (DL 03)
  • 2022.09.02
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Come allenare il tuo neurone (DL 04)



Come allenare il tuo neurone (DL 04)

Nel nostro video precedente, abbiamo esplorato il calcolo di un singolo neurone. Abbiamo appreso che un neurone calcola prendendo una somma pesata di input, aggiungendo un bias e applicando una funzione di attivazione. L'utilizzo di una funzione a gradino per l'attivazione ci fornisce un classificatore binario, mentre una funzione lineare ci fornisce un regressore.

Abbiamo anche discusso di misurare la perdita di un modello sul suo set di dati utilizzando la somma degli errori al quadrato e di addestrare il modello utilizzando il gradiente della funzione di perdita. La funzione di perdita dipende dai parametri del modello, vale a dire i pesi e il bias. L'errore quadratico medio è comunemente usato come funzione di perdita nei calcoli.

Per capire come la funzione di perdita dipende dai parametri e come possiamo modificarli per ridurre la perdita, abbiamo calcolato la perdita su un piccolo set di dati di regressione. Sommando le differenze al quadrato tra l'output corretto e quello previsto, abbiamo ottenuto il valore della perdita.

Successivamente, ci siamo concentrati sulla ricerca del gradiente della funzione di perdita. Abbiamo derivato le derivate parziali della perdita rispetto a ciascun parametro. Queste derivate parziali formano il gradiente, che ci guida nel diminuire la perdita. Aggiornando i parametri nella direzione opposta al gradiente, possiamo ridurre al minimo la perdita e migliorare la rappresentazione del set di dati da parte del nostro modello.

Abbiamo visualizzato la funzione di perdita come una superficie nello spazio dei parametri e abbiamo discusso di come il gradiente indichi la direzione dell'aumento più ripido della perdita. Facendo piccoli passi nella direzione opposta al gradiente, possiamo iterativamente diminuire la perdita e affinare il nostro modello.

Per le attività di classificazione, abbiamo riscontrato una difficoltà durante l'assunzione della derivata dell'attivazione della funzione passo. Per ovviare a questo, abbiamo sostituito la funzione gradino con un'approssimazione uniforme chiamata funzione sigmoidea. Abbiamo spiegato il comportamento della funzione sigmoidea e la sua capacità di produrre output probabilistici compresi tra 0 e 1.

Abbiamo applicato la funzione sigmoidea a un esempio di classificazione e dimostrato come calcolare la perdita e il gradiente utilizzando la nuova attivazione. Il processo di aggiornamento dei parametri e miglioramento del modello rimane lo stesso della regressione.

Infine, abbiamo sottolineato che i concetti discussi possono essere estesi a dimensioni superiori applicando le stesse formule a più pesi e punti dati. I principi generali del calcolo della perdita, del calcolo del gradiente e dell'aggiornamento dei parametri valgono indipendentemente dalla dimensionalità dell'input.

Nel complesso, la comprensione del calcolo di un singolo neurone, della funzione di perdita e del gradiente fornisce le basi per addestrare le reti neurali e migliorarne le prestazioni.

How to train your neuron (DL 04)
How to train your neuron (DL 04)
  • 2022.09.03
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

La pipeline di analisi dei dati (DL 05)



La pipeline di analisi dei dati (DL 05)

Nella nostra lezione di deep learning, approfondiremo lo studio delle reti neurali. Tuttavia, è importante ricordare che una rete neurale, o qualsiasi modello di apprendimento automatico, è solo una parte di un sistema più ampio. Prima che i dati possano essere inseriti in una rete neurale, devono essere raccolti ed elaborati in un formato comprensibile per la rete. Allo stesso modo, gli output di una rete neurale spesso richiedono una post-elaborazione o un'ulteriore analisi.

Durante tutto il semestre, sarà utile tenere a mente la metafora di una pipeline di analisi dei dati. Questa analogia sottolinea che il nostro obiettivo nell'apprendimento automatico è trasformare le osservazioni del mondo in previsioni sul mondo e la rete neurale è solo una fase di questo processo. La pipeline ci ricorda di considerare le fasi attraverso le quali passano i nostri dati e come ogni fase contribuisce a quella successiva.

Diversi problemi richiedono diverse fasi della pipeline. Mentre i set di dati standardizzati o simulati possono consentirci di saltare determinate fasi, le applicazioni del mondo reale del deep learning ci impongono di considerare gli aspetti pratici dell'analisi dei dati.

Discutiamo alcuni aspetti importanti delle pipeline di analisi dei dati in modo più dettagliato. La prima fase è la raccolta dei dati. Sebbene in alcuni casi possano essere utilizzati set di dati preesistenti, se vogliamo risolvere un nuovo problema con il deep learning, dobbiamo determinare quali dati sono adatti per addestrare il nostro modello. Quando raccogliamo i dati, dobbiamo assicurarci di averne una quantità sufficiente, considerando che i recenti successi del deep learning si sono basati su grandi set di dati. Tuttavia, esistono anche troppi dati, soprattutto quando le risorse computazionali sono limitate. In alcuni casi, lavorare con una quantità limitata di dati può essere vantaggioso, in particolare durante l'esplorazione e la scoperta dei problemi. È fondamentale garantire che il set di dati che utilizziamo per la formazione sia rappresentativo del problema che intendiamo risolvere. Ciò comporta la considerazione di fattori come la rappresentazione di tutte le classi desiderate in un'attività di classificazione e il non trascurare importanti valori anomali che il modello dovrebbe riconoscere.

Un'altra sfida consiste nell'identificare distorsioni sistematiche nei set di dati. I pregiudizi possono sorgere in vari modi, come una sovrarappresentazione di immagini scattate in giornate soleggiate, portando a difficoltà per un classificatore di immagini in condizioni nuvolose. I pregiudizi possono anche influenzare le previsioni relative alla salute o all'istruzione, attribuendo fattori individuali a strutture sociali più ampie. È essenziale essere consapevoli di potenziali pregiudizi durante la raccolta dei dati. Tuttavia, affrontare e correggere i pregiudizi è un problema complesso che richiede una continua ricerca sul deep learning.

Dopo aver raccolto i dati, spesso dobbiamo pulirli prima di applicare l'apprendimento automatico o altre tecniche di elaborazione. Questo passaggio comporta la gestione dei dati mancanti, la decisione di quali dimensioni dei dati sono rilevanti e la gestione delle diverse dimensionalità negli esempi. La corretta etichettatura dei dati è fondamentale per l'apprendimento supervisionato. Ottenere etichette appropriate può essere difficile, in particolare quando si trascrive la lingua dei segni o si affrontano incoerenze tra discorso e testo. Le etichette dovrebbero rappresentare accuratamente gli aspetti dei dati che vogliamo che il nostro modello apprenda.

Successivamente, dobbiamo trasformare i dati in un formato numerico adatto all'addestramento della nostra rete neurale o modello di apprendimento automatico. Le reti neurali richiedono input numerici sotto forma di vettori o matrici. Il processo di codifica numerica varia in difficoltà a seconda del problema. Ad esempio, l'elaborazione dei dati delle immagini è relativamente semplice grazie alla rappresentazione basata sui pixel già utilizzata dai computer. Tuttavia, la gestione dei dati di testo codificati in formato ASCII richiede rappresentazioni alternative. Trasformare la rappresentazione dei dati o anche la dimensionalità diventa sempre più importante man mano che i problemi diventano più complessi.

Inoltre, può essere vantaggioso normalizzare i dati, soprattutto se le reti neurali tendono a restituire valori nell'intervallo da zero a uno. La normalizzazione comporta il ridimensionamento dell'intervallo di valori dei dati, assicurando che gli input alla rete neurale siano più ravvicinati. Dopo l'output della rete neurale, potrebbe essere necessario eseguire passaggi di post-elaborazione. Ciò include la decodifica dell'output della rete nel formato di previsione desiderato, la trasmissione dell'affidabilità della previsione e la considerazione dell'applicazione o dell'algoritmo che utilizzerà le previsioni del modello.

Dopo aver elaborato i dati e addestrato la nostra rete neurale, possiamo passare alla fase di valutazione e messa a punto. Qui è dove valutiamo le prestazioni del nostro modello e apportiamo miglioramenti. La valutazione implica l'utilizzo del set di test che abbiamo messo da parte in precedenza. Applicando la rete neurale addestrata a questi dati invisibili, possiamo misurare quanto bene si generalizza a nuovi esempi. In genere utilizziamo metriche come accuratezza, precisione, richiamo e punteggio F1 per valutare le prestazioni del nostro modello. Queste metriche forniscono informazioni sull'efficacia delle previsioni della rete neurale.

Sulla base dei risultati della valutazione, possiamo identificare le aree in cui il modello potrebbe essere poco performante o presentare limitazioni. Queste informazioni ci guidano nell'effettuare le modifiche e i miglioramenti necessari. Possiamo iterare sull'architettura del modello, sugli iperparametri o persino raccogliere dati aggiuntivi se necessario. L'obiettivo è perfezionare le prestazioni del modello e garantire che raggiunga la precisione e l'affidabilità desiderate.

Durante il processo di messa a punto, sperimentiamo diverse configurazioni e impostazioni per ottimizzare le prestazioni del modello. Ciò include la regolazione di iperparametri come la velocità di apprendimento, la dimensione del batch e le tecniche di regolarizzazione. Attraverso l'esplorazione e la sperimentazione sistematiche, miriamo a trovare la migliore combinazione di impostazioni che massimizzi l'efficacia della rete neurale.

Oltre a mettere a punto il modello stesso, consideriamo anche il contesto più ampio della sua applicazione. Prendiamo in considerazione il problema specifico che stiamo cercando di risolvere e le implicazioni nel mondo reale delle previsioni del modello. Ciò comporta l'esame degli aspetti sociali, etici e legali dell'implementazione pratica del modello. È fondamentale garantire che il modello sia equo, imparziale e allineato con i valori e i requisiti del dominio del problema.

In qualità di professionisti del deep learning, la nostra responsabilità va oltre lo sviluppo di modelli accurati. Dobbiamo analizzare e interpretare criticamente i risultati, prendendo in considerazione eventuali pregiudizi o limitazioni potenziali. È necessario rivedere e rivalutare regolarmente le prestazioni del modello per mantenerne l'efficacia nel tempo.

Studiare le reti neurali in una classe di deep learning implica comprendere che fanno parte di un sistema più ampio. La pipeline di analisi dei dati, dalla raccolta dei dati alla pre-elaborazione, alla formazione e alla valutazione, comprende più fasi che richiedono un'attenta considerazione. Essendo consapevoli dell'intero processo e migliorando continuamente i nostri modelli, possiamo sfruttare efficacemente il potere del deep learning per fare previsioni accurate e risolvere problemi del mondo reale.

The Data Analysis Pipeline (DL 05)
The Data Analysis Pipeline (DL 05)
  • 2022.09.09
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Convalida fuori campione (DL 06)



Convalida fuori campione (DL 06)

Nell'apprendimento automatico, la valutazione di un modello implica l'elaborazione di nuove previsioni e il loro test su dati invisibili. In questa discussione, esploreremo come utilizzare in modo efficace i nostri dati per convalidare e migliorare i nostri modelli di machine learning.

Il processo di selezione del modello inizia con l'identificazione delle opzioni disponibili per risolvere un determinato problema. Questo ci porta al concetto di spazio delle ipotesi di un modello, che definisce i tipi di funzioni che il modello può rappresentare. Lo spazio delle ipotesi è vincolato da fattori come la rappresentazione di input scelta e il tipo di output richiesto.

Dopo aver scelto un modello specifico o un algoritmo di apprendimento automatico, ci sono vari aspetti del modello che possono essere ottimizzati. Ciò include la regolazione dei parametri del modello, come pesi e distorsioni, che vengono addestrati utilizzando i dati. Inoltre, altri aspetti, come il tasso di apprendimento o il numero di iterazioni, possono essere considerati come iperparametri che influenzano le prestazioni del modello.

Per esplorare e testare in modo efficace diverse opzioni, ci affidiamo alla convalida sperimentale. Ciò comporta la divisione del nostro set di dati in set di addestramento e test. Il set di addestramento viene utilizzato per addestrare il modello, mentre il set di test viene utilizzato per valutarne le prestazioni su dati invisibili. Confrontando diversi modelli o iperparametri sul set di test, possiamo determinare quali sono più efficaci nella generalizzazione a nuovi dati.

La generalizzazione è un aspetto critico dell'apprendimento automatico, poiché il nostro obiettivo è sviluppare modelli in grado di fare previsioni accurate su dati nuovi e invisibili. L'overfitting, in cui un modello diventa troppo specifico per i dati di addestramento, è una sfida comune per ottenere una buona generalizzazione. Separando una parte dei dati per la convalida fuori campione, possiamo valutare se un modello si sta adattando eccessivamente o sta generalizzando con successo.

Quando esploriamo più iperparametri, possiamo sistematicamente variare i loro valori o campionare casualmente da un intervallo plausibile. La randomizzazione ci consente di esplorare in modo efficiente una gamma più ampia di valori. Tuttavia, se un'ampia sperimentazione porta a un overfitting del set di test, potrebbe essere necessaria un'ulteriore separazione dei dati in set di addestramento, convalida e test o l'uso della convalida incrociata.

La convalida incrociata comporta la divisione dei dati in più sottoinsiemi e l'addestramento iterativo e il test del modello su diverse combinazioni di questi sottoinsiemi. Questo approccio fornisce una stima più affidabile delle prestazioni del modello e della capacità di generalizzazione.

L'idea chiave nell'apprendimento automatico è convalidare sperimentalmente i nostri modelli separando i dati di addestramento e di test. Questo ci consente di valutare le loro prestazioni su esempi invisibili e prendere decisioni informate sulla selezione del modello e sull'ottimizzazione degli iperparametri.

Out-of-Sample Validation (DL 06)
Out-of-Sample Validation (DL 06)
  • 2022.09.09
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Reti neurali feed-forward (DL 07)



Reti neurali feed-forward (DL 07)

Le reti neurali, a differenza dei singoli neuroni, sono costituite da più livelli ed eseguono calcoli attraverso i nodi. Ogni nodo calcola la somma pesata degli input e applica una funzione di attivazione. In una rete neurale, l'input di un nodo può provenire da precedenti attivazioni del nodo e la sua attivazione calcolata può essere passata ai nodi successivi.

Ad esempio, il neurone 8 in una rete riceve input dai neuroni 5, 6 e 7. La somma ponderata degli input eseguiti dal neurone 8 è la somma delle attivazioni di quei neuroni moltiplicata per i pesi corrispondenti, più il bias. La funzione di attivazione viene quindi applicata alla somma ponderata. L'uscita dal neurone 8 viene utilizzata come input per i nodi 11 e 12. Diverse funzioni di attivazione possono essere utilizzate in una rete neurale, come la tangente iperbolica e l'unità lineare del raddrizzatore (ReLU).

Per eseguire calcoli utilizzando una rete neurale per fare previsioni, iniziamo impostando le attivazioni dei nodi del livello di input in base ai dati di input. I nodi del livello di input memorizzano semplicemente i valori del vettore di input. La dimensione dei livelli di input e output dipende dalla dimensionalità dei dati e dalla previsione desiderata. I neuroni nascosti nella rete, organizzati in livelli, eseguono calcoli tra gli input e gli output. Calcolando le attivazioni per ogni livello, possiamo passare gli input al livello successivo, facendo riferimento alle attivazioni precedenti. Queste attivazioni sono necessarie anche per la discesa del gradiente durante gli aggiornamenti del peso. La presenza di livelli nascosti in una rete neurale offre la possibilità di utilizzare funzioni di attivazione non lineari. Le attivazioni lineari non offrono alcun vantaggio nelle reti multistrato. Le funzioni di attivazione non lineari, come la funzione sigmoidea, consentono la rappresentazione di varie funzioni.

I neuroni che rappresentano operazioni logiche come AND, OR e NOT possono essere costruiti utilizzando classificatori di funzioni a gradini. Approssimando queste operazioni logiche utilizzando attivazioni sigmoidee, una rete neurale può rappresentare qualsiasi funzione booleana. Per addestrare una rete neurale, utilizziamo la discesa del gradiente per aggiornare i pesi e le distorsioni. I parametri della rete includono tutti i pesi e le distorsioni dell'intera rete. La funzione di perdita in una rete con più neuroni di uscita può essere l'errore quadratico medio sommato su tutti i neuroni di uscita. L'obiettivo è ridurre la perdita aggiornando i parametri in modo iterativo.

La discesa del gradiente viene eseguita calcolando i gradienti della perdita rispetto ai parametri, facendo passi nella direzione opposta dei gradienti per minimizzare la perdita. Questo processo è noto come backpropagation e consente alla rete di apprendere e migliorare le sue previsioni. Nel prossimo video, approfondiremo i dettagli dell'algoritmo di backpropagation, che viene utilizzato per eseguire aggiornamenti di discesa del gradiente su una rete neurale. La retropropagazione consente un calcolo efficiente dei gradienti della perdita rispetto ai parametri della rete.

Il processo inizia calcolando il gradiente della funzione di perdita rispetto alle attivazioni di uscita. Questo gradiente rappresenta la sensibilità della perdita ai cambiamenti nelle attivazioni dell'uscita. Si ottiene applicando la regola della catena, in quanto la perdita dipende dalle attivazioni dell'uscita tramite la funzione di attivazione e dal quadrato della differenza con i valori target. Una volta calcolato il gradiente della perdita rispetto alle attivazioni di uscita, esso viene propagato a ritroso attraverso la rete. Ad ogni livello, i gradienti vengono moltiplicati per la derivata della funzione di attivazione rispetto alla somma ponderata degli input. Questa derivata cattura la sensibilità dell'attivazione ai cambiamenti nella somma ponderata.

Propagando i gradienti all'indietro, possiamo calcolare i gradienti della perdita rispetto alle attivazioni dello strato precedente. Questi gradienti indicano quanto ciascuna attivazione nel livello precedente contribuisce alla perdita. Utilizzando i gradienti della perdita rispetto alle attivazioni, possiamo quindi calcolare i gradienti della perdita rispetto ai pesi e ai bias in ogni strato. Questi gradienti si ottengono moltiplicando l'attivazione dello strato precedente per il corrispondente gradiente della funzione di attivazione. Infine, con i gradienti della perdita rispetto ai parametri, possiamo aggiornare i pesi e le distorsioni utilizzando l'algoritmo di discesa del gradiente. Facendo passi nella direzione opposta ai gradienti, ottimizziamo gradualmente i parametri della rete per minimizzare la perdita.

Questo processo iterativo di propagazione in avanti, propagazione all'indietro e aggiornamenti dei parametri viene ripetuto per un certo numero di epoche o finché la perdita non converge a un valore soddisfacente. Attraverso questo processo di addestramento, la rete neurale impara a fare previsioni migliori regolando i propri pesi e pregiudizi in base ai dati di addestramento forniti.

Le reti neurali utilizzano più livelli e funzioni di attivazione non lineari per eseguire calcoli complessi e fare previsioni. Utilizzando l'algoritmo di backpropagation e la discesa del gradiente, le reti neurali possono apprendere dai dati e ottimizzare i loro parametri per migliorare le loro capacità predittive.

Feed-Forward Neural Networks (DL 07)
Feed-Forward Neural Networks (DL 07)
  • 2022.09.16
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Retropropagazione della rete neurale (DL 08)



Retropropagazione della rete neurale (DL 08)

In questo video, ricaveremo l'algoritmo di backpropagation, utilizzato per addestrare una rete neurale attraverso una fase di discesa del gradiente stocastico. L'algoritmo si compone di tre fasi principali.

Innanzitutto, eseguiamo un passaggio feedforward per fare previsioni su un punto dati. Queste previsioni determinano la perdita, che rappresenta l'errore tra gli output previsti e gli output effettivi. Successivamente, eseguiamo un passaggio all'indietro per calcolare le derivate parziali della perdita. Calcoliamo una quantità chiamata "delta" per ogni neurone negli strati di output e nascosti. Delta rappresenta la derivata parziale della perdita rispetto alla somma ponderata degli input in quel neurone. Applicando la regola della catena, possiamo calcolare il delta per ogni neurone considerando il suo impatto sulla perdita.

Per calcolare il delta per i neuroni dello strato di output, usiamo la derivata della funzione di attivazione e la differenza tra il bersaglio e l'attivazione. Tale calcolo considera la relazione tra la perdita e la somma ponderata degli input. Per i neuroni dello strato nascosto, consideriamo il loro impatto sui neuroni dello strato successivo e calcoliamo ricorsivamente il delta sommando i contributi dei nodi dello strato successivo, moltiplicati per i pesi e la derivata di attivazione. Una volta calcolati i delta per tutti i neuroni, possiamo usarli per calcolare le derivate parziali dei pesi e dei bias.

La derivata parziale per ogni peso è il prodotto del delta corrispondente e l'attivazione del neurone dello strato precedente. Allo stesso modo, la derivata parziale per ogni polarizzazione è uguale al suo corrispondente delta.

Per eseguire la discesa del gradiente, calcoliamo la media delle derivate parziali su un sottoinsieme dei punti dati, chiamato batch. Questo approccio è noto come discesa del gradiente stocastico. Aggiornando i pesi e le distorsioni con le derivate parziali medie moltiplicate per un tasso di apprendimento, spostiamo i parametri nella direzione che minimizza la perdita.

In pratica, invece di calcolare i delta e le derivate parziali per ogni punto dati, spesso utilizziamo la discesa del gradiente stocastico con batch casuali. Campioniamo casualmente un sottoinsieme di dati, calcoliamo la perdita media e il suo gradiente su quel sottoinsieme ed eseguiamo gli aggiornamenti dei parametri di conseguenza. Ciò accelera il processo di addestramento, in particolare per set di dati di grandi dimensioni.

L'algoritmo di backpropagation combina passaggi avanti e indietro per calcolare i delta e le derivate parziali, che vengono quindi utilizzate per gli aggiornamenti stocastici della discesa del gradiente. Aggiornando iterativamente i parametri, la rete neurale impara a ridurre al minimo la perdita e a migliorare le sue previsioni.

Neural Network Backpropagation (DL 08)
Neural Network Backpropagation (DL 08)
  • 2022.09.20
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022Re-upload, because I got sloppy with notation at the end and gave an incorrect formula for the bias update!
 

Migliore attivazione e perdita per la classificazione: Softmax e crossentropia categorica (DL 09)



Migliore attivazione e perdita per la classificazione: Softmax e crossentropia categorica (DL 09)

Quando si esegue la classificazione multiclasse utilizzando una rete neurale con neuroni sigmoidei, sorgono alcune limitazioni. In precedenza, quando si trattava solo di due classi, un singolo neurone poteva emettere 0 o 1. Tuttavia, quando sono coinvolte più etichette, come la classificazione di cifre scritte a mano da 0 a 9, è necessaria una rappresentazione diversa.

Un approccio comune consiste nel codificare le etichette come un vettore one-hot, in cui ogni etichetta ha la propria dimensione e viene attivata solo una dimensione alla volta. Ad esempio, un vettore a cinque dimensioni può indicare cinque possibili etichette, con la dimensione quattro attivata per rappresentare la quarta etichetta. Sebbene uno strato di output basato su neuroni sigmoidei possa potenzialmente produrre questo tipo di output, ci sono problemi pratici.

Il primo problema è che lo strato sigmoideo può produrre valori relativamente grandi per più etichette, rendendo difficile l'interpretazione della previsione. Idealmente, vorremmo che il livello di output produca zeri e uno o qualcosa che rifletta la fiducia in diverse possibili etichette. Il secondo problema sorge durante l'allenamento dello strato di output sigmoideo. Quando il target è un vettore a un punto caldo, la discesa del gradiente viene utilizzata per spingere l'attivazione verso uno per l'etichetta corretta e verso zero per le altre etichette. Tuttavia, a causa della natura della funzione sigmoidea, i neuroni con errori maggiori possono avere delta più piccoli, rendendo difficile correggere con sicurezza previsioni sbagliate.

Un problema simile, noto come problema del gradiente di fuga, si verifica anche quando si utilizzano attivazioni sigmoidee per i neuroni nascosti. Tuttavia, in questo video, ci concentriamo su una combinazione alternativa di attivazioni di output e funzione di perdita per affrontare questi problemi. Invece delle attivazioni sigmoidee, introduciamo le attivazioni softmax per il livello di output. Le attivazioni Softmax vengono calcolate sull'intero livello, amplificando le differenze tra gli input e normalizzando le attivazioni per sommarle a una. Ciò si traduce in output che sono più interpretabili come previsioni e possono essere visti come la fiducia della rete in ogni possibile etichetta.

Per utilizzare in modo efficace le attivazioni softmax, le abbiniamo alla funzione di perdita di entropia incrociata categorica. La perdita di entropia incrociata calcola il logaritmo negativo dell'attivazione per il neurone bersaglio, che si semplifica al logaritmo dell'attivazione quando si utilizzano vettori one-hot. Questa combinazione consente aggiornamenti efficaci della discesa in pendenza. Per calcolare i delta per lo strato di output, deriviamo le derivate parziali della perdita rispetto alle attivazioni. Per il neurone bersaglio, la derivata è -1 divisa per l'attivazione. Per gli altri neuroni, le derivate sono zero. A causa dell'interdipendenza delle attivazioni softmax, anche se solo il neurone bersaglio ha una derivata diversa da zero, si ottengono delta diversi da zero per tutti gli input.

Usando queste formule, possiamo calcolare i delta sia per il neurone bersaglio che per gli altri neuroni nel livello di output. Il delta per il neurone bersaglio è semplice da calcolare, poiché è l'attivazione meno uno. I delta per gli altri neuroni si semplificano nell'attivazione negativa stessa.

Con questa combinazione di attivazioni softmax e perdita categorica di entropia incrociata, otteniamo risultati significativi per problemi di classificazione e otteniamo gradienti che spingono in modo efficiente gli output verso previsioni corrette. L'uso delle attivazioni softmax e della perdita categorica di entropia incrociata ci fornisce un potente framework per la classificazione multiclasse. Approfondiamo il modo in cui questi componenti interagiscono per consentire un training efficace delle reti neurali.

Una volta calcolati i delta per il livello di output, questi delta servono come punto di partenza per la backpropagation, dove propaghiamo i gradienti di errore all'indietro attraverso la rete per aggiornare i pesi. Per aggiornare i pesi che collegano il livello di output al livello precedente, possiamo utilizzare i valori delta e applicare l'algoritmo di discesa del gradiente. L'aggiornamento del peso viene determinato moltiplicando il delta di ciascun neurone di output per l'attivazione di input del peso corrispondente e regolando il peso in base a un tasso di apprendimento.

Propagando all'indietro i delta attraverso la rete, è possibile calcolare anche i gradienti per i pesi negli strati nascosti. Questo ci consente di aggiornare di conseguenza i pesi nei livelli nascosti, perfezionando ulteriormente le prestazioni della rete. È importante notare che quando si utilizzano le attivazioni softmax e la perdita categorica di entropia incrociata, è necessario assicurarsi che softmax sia applicato solo al livello di output. Per gli strati nascosti, si consiglia di utilizzare funzioni di attivazione come ReLU (Rectified Linear Unit) o tanh. Le attivazioni Softmax ci consentono di ottenere output interpretabili come probabilità o punteggi di confidenza per ciascuna classe. I valori nel vettore di output si sommano a 1, consentendoci di valutare la fiducia della rete nelle sue previsioni. Un valore più elevato indica una maggiore confidenza per una particolare classe.

La perdita di entropia incrociata categorica integra le attivazioni softmax misurando efficacemente la discrepanza tra le probabilità previste e le etichette reali. Incoraggia la rete a ridurre al minimo la differenza tra le probabilità previste e il vettore target codificato one-hot, spingendo così la rete verso previsioni più accurate.

Combinando le attivazioni softmax e la perdita categorica di entropia incrociata, otteniamo numerosi vantaggi. Otteniamo output significativi e interpretabili, che ci consentono di comprendere le previsioni della rete ei livelli di confidenza per le diverse classi. I gradienti derivati dalla perdita categorica di entropia incrociata guidano gli aggiornamenti del peso in un modo che porta a un apprendimento più efficace e a una migliore precisione. Vale la pena ricordare che sono disponibili altre funzioni di attivazione e funzioni di perdita, ciascuna adatta a diversi tipi di problemi. Tuttavia, le attivazioni softmax con perdita categorica di entropia incrociata si sono dimostrate una combinazione vincente per compiti di classificazione multi-classe, offrendo sia interpretabilità che dinamiche di allenamento efficaci.

In sintesi, l'utilizzo delle attivazioni softmax e della perdita categorica di entropia incrociata nelle reti neurali di classificazione multiclasse ci consente di ottenere previsioni significative, interpretare i livelli di confidenza ed eseguire aggiornamenti efficienti della discesa del gradiente. Questa combinazione gioca un ruolo cruciale nel raggiungimento di risultati accurati e affidabili in vari compiti di classificazione.

Better Activation & Loss for Classification: Softmax & Categorical Crossentropy (DL 09)
Better Activation & Loss for Classification: Softmax & Categorical Crossentropy (DL 09)
  • 2022.09.23
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Velocizzare le reti neurali con la vettorizzazione (DL 10)



Velocizzare le reti neurali con la vettorizzazione (DL 10)

Per comprendere il funzionamento interno di una rete neurale, è utile approfondire il livello di un singolo neurone e considerare le connessioni tra i neuroni. Durante il passaggio in avanti, che calcola le attivazioni, e il passaggio all'indietro, che calcola i delta, pensare in termini di nodi e bordi può aiutare a costruire l'intuizione. Tuttavia, il deep learning in realtà non funziona in questo modo. Per costruire reti neurali su larga scala che possano essere addestrate in modo efficiente, dobbiamo passare a un livello superiore di astrazione e pensare in termini di vettori, matrici e tensori.

Il primo passo verso questo livello superiore di astrazione è rappresentare le attivazioni di uno strato come un vettore. Se la nostra rete neurale è organizzata in livelli, possiamo raccogliere le attivazioni di un livello in un vettore. Ad esempio, il vettore A^l memorizza tutte le attivazioni per il livello l, con tante voci quanti sono i nodi in quel livello. Allo stesso modo, possiamo raccogliere i delta per uno strato in un vettore durante la retropropagazione. Possiamo anche usare i vettori per rappresentare i pregiudizi o gli input di un livello.

Per esprimere i calcoli in questa notazione vettorizzata, consideriamo prima come un nodo calcola la sua somma pesata di input. L'input X^5 che entra nella funzione di attivazione per il nodo 5 viene calcolato come somma ponderata delle attivazioni del livello precedente più un bias. Raccogliendo le attivazioni dello strato precedente nel vettore A^K e avendo un vettore di pesi che entra nel nodo 5, la somma ponderata degli input può essere rappresentata come un prodotto scalare tra questi due vettori. Un altro modo per scrivere il prodotto scalare è trasporre il primo vettore ed eseguire la moltiplicazione di matrici tra il vettore riga e il vettore colonna. Pertanto, possiamo esprimere l'input al nodo 5 come il vettore di peso che entra nel nodo 5 (trasposto) moltiplicato per il vettore di attivazione per il livello precedente, più il bias del nodo 5.

Questa notazione vettorizzata può andare oltre e permetterci di calcolare l'intero vettore di input al livello l in una sola volta. Combinando il vettore riga dei pesi per il nodo 5 con i vettori riga dei pesi per altri neuroni in quello strato, otteniamo una matrice che contiene tutti i pesi dallo strato K allo strato l. Questa matrice dei pesi ha tante righe quanti sono i nodi nello strato l (ogni riga rappresenta un vettore di pesi in uno dei neuroni dello strato l) e tante colonne quanti sono i nodi nello strato precedente K (ogni colonna rappresenta un vettore di pesi che escono da uno dei nodi dello strato K). Moltiplicando questa matrice di peso per il vettore di attivazione per il livello K si ottiene un vettore in cui ogni elemento rappresenta la somma pesata degli input per uno dei nodi del livello l. Per ottenere gli input della funzione di attivazione, aggiungiamo i bias a questo vettore, che sono stati raccolti in un vettore.

Ora, utilizzando la moltiplicazione matrice-vettore, l'addizione vettoriale e le funzioni elemento-saggio, possiamo esprimere le operazioni per calcolare tutti gli input in un livello. In precedenza, questi calcoli avrebbero richiesto cicli nidificati, ma ora possiamo eseguirli in modo efficiente in modo vettoriale.

Andando avanti, possiamo estendere questo approccio vettorializzato anche al passaggio all'indietro. Invece di considerare un neurone alla volta, possiamo calcolare il delta per un nodo nello strato K come somma pesata di tutti i delta nello strato successivo, moltiplicata per la derivata della funzione di attivazione di quel nodo. Ancora una volta, possiamo esprimere questa somma ponderata come un prodotto scalare. Moltiplicando un vettore riga di pesi che esce dal nodo 3 per il vettore dei delta per lo strato l e poi moltiplicando per la derivata di attivazione, possiamo calcolare il vettore delta per lo strato K. Utilizzando una matrice dei pesi che raccoglie tutti i pesi per lo strato l neuroni e moltiplicandolo per il vettore dei delta per lo strato l, si ottiene una matrice le cui dimensioni coincidono con la matrice dei pesi.

Sfruttando le operazioni di matrice, possiamo ottenere significativi miglioramenti delle prestazioni nell'elaborazione di reti neurali densamente connesse con feed-forward. Ciò è particolarmente vantaggioso perché le operazioni di matrice possono essere eseguite in modo efficiente su hardware specializzato come processori grafici (GPU), che possono accelerare notevolmente questi calcoli.

Quando rappresentiamo i calcoli della nostra rete neurale utilizzando matrici, possiamo eseguire il passaggio in avanti, il passaggio all'indietro e gli aggiornamenti del peso in modo altamente efficiente e parallelizzato. Ricapitoliamo i passaggi fondamentali:

  1. Passaggio in avanti: possiamo calcolare le attivazioni di ogni livello per un intero batch di dati eseguendo la moltiplicazione matrice-vettore e l'applicazione della funzione di attivazione elemento-saggio. Organizzando le attivazioni in una matrice, in cui ogni colonna rappresenta le attivazioni per un diverso punto dati, possiamo calcolare in modo efficiente le attivazioni per l'intero lotto.

  2. Passaggio all'indietro: allo stesso modo, possiamo calcolare i delta (gradienti di errore) per ogni livello in modo vettoriale. Rappresentando i delta come una matrice, in cui ogni colonna corrisponde ai delta per uno specifico punto dati, possiamo eseguire moltiplicazioni matrice-vettore e moltiplicazione per elemento con derivate di attivazione per calcolare in modo efficiente i delta per l'intero batch.

  3. Aggiornamenti del peso: per aggiornare i pesi e le distorsioni, possiamo utilizzare le operazioni con le matrici per calcolare il prodotto scalare tra la matrice dei delta e la trasposizione della matrice dei pesi. Questa operazione produce una matrice di aggiornamenti del peso, in cui ogni voce rappresenta l'aggiornamento per un peso specifico. Dividendo i prodotti scalari per la dimensione del batch, otteniamo l'aggiornamento medio, quindi possiamo aggiornare i pesi sottraendo il tasso di apprendimento moltiplicato per l'aggiornamento medio. Gli aggiornamenti di bias vengono calcolati prendendo la media dei vettori delta attraverso le colonne e sottraendo il tasso di apprendimento moltiplicato per la media dai bias.

Vettorizzando questi calcoli e sfruttando le operazioni di matrice, possiamo ottenere una significativa efficienza computazionale e sfruttare l'accelerazione hardware per l'elaborazione parallela. Questo approccio ci consente di addestrare reti neurali su larga scala in modo efficiente, rendendo possibile il deep learning su un'ampia gamma di attività e set di dati.

Vale la pena notare che mentre il testo fornisce una panoramica di alto livello della vettorializzazione e dell'utilizzo delle operazioni di matrice, i dettagli effettivi dell'implementazione possono variare a seconda del linguaggio di programmazione o del framework utilizzato. Diversi linguaggi e framework possono avere le proprie funzioni e librerie ottimizzate per le operazioni con le matrici, migliorando ulteriormente le prestazioni.

Oltre ai vantaggi in termini di prestazioni, l'utilizzo delle operazioni di matrice nel deep learning presenta altri vantaggi:

  1. Semplicità e leggibilità del codice: utilizzando le operazioni di matrice, il codice per i calcoli della rete neurale diventa più conciso e più facile da capire. Invece di scrivere cicli espliciti per singoli punti dati, possiamo esprimere i calcoli in una forma più compatta e intuitiva utilizzando operazioni con matrici.

  2. Compatibilità software: molti framework e librerie di deep learning popolari, come TensorFlow e PyTorch, forniscono implementazioni efficienti delle operazioni con le matrici. Questi framework utilizzano spesso librerie di algebra lineare ottimizzate, come BLAS (Basic Linear Algebra Subprograms) o cuBLAS (CUDA Basic Linear Algebra Subprograms), per accelerare i calcoli matriciali su CPU o GPU. Sfruttando questi framework, possiamo trarre vantaggio dalle loro implementazioni ottimizzate e garantire la compatibilità con altri componenti della pipeline di deep learning.

  3. Generalizzazione ad altri tipi di layer: le operazioni di matrice possono essere applicate non solo a layer densamente connessi ma anche ad altri tipi di layer, come layer convoluzionali e layer ricorrenti. Esprimendo i calcoli in una forma matriciale, possiamo sfruttare le stesse efficienti operazioni e ottimizzazioni della matrice su diversi tipi di layer, semplificando l'implementazione e migliorando le prestazioni complessive.

  4. Integrazione con accelerazione hardware: l'hardware specializzato, come GPU o unità di elaborazione tensoriale (TPU), è progettato per accelerare i calcoli matriciali. Questi acceleratori hardware eccellono nell'eseguire operazioni con matrici parallele su larga scala, rendendoli ideali per carichi di lavoro di deep learning. Utilizzando le operazioni a matrice, possiamo integrarci perfettamente con questi acceleratori hardware e sfruttare appieno le loro capacità, portando a notevoli accelerazioni nei tempi di addestramento e inferenza.

In sintesi, l'utilizzo delle operazioni di matrice nel deep learning offre vantaggi in termini di prestazioni, semplicità del codice, compatibilità software e integrazione con gli acceleratori hardware. Esprimendo i calcoli della rete neurale in una forma di matrice e utilizzando operazioni di matrice ottimizzate, possiamo addestrare e distribuire in modo efficiente modelli di deep learning su una varietà di attività e piattaforme.

Making Neural Networks Fast with Vectorization (DL 10)
Making Neural Networks Fast with Vectorization (DL 10)
  • 2022.09.23
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Gradienti che svaniscono (o esplodono) (DL 11)



Gradienti che svaniscono (o esplodono) (DL 11)

Man mano che approfondiamo il ridimensionamento delle reti neurali per risolvere problemi più grandi, diventa necessario aggiungere più livelli. Tuttavia, le reti più profonde possono incontrare problemi durante l'addestramento causati dalla scomparsa o dall'esplosione dei gradienti. Consideriamo una rete neurale profonda con attivazioni sigmoidee per gli strati nascosti. Visualizzare una tale rete con numerosi nodi e livelli diventa poco pratico. Possiamo invece rappresentarlo con un diagramma a blocchi, dove ogni colonna rappresenta uno strato, e all'interno di ogni blocco sono indicate le funzioni di attivazione.

Un altro modo per visualizzare la rete è attraverso un grafico computazionale, che mostra la sequenza delle operazioni applicate a ciascun batch di dati. A partire dalle matrici di input, eseguiamo moltiplicazioni di matrici, addizione di distorsioni e applichiamo funzioni di attivazione a ogni livello. Questo processo continua attraverso i livelli nascosti fino a raggiungere il livello di output, dove la funzione di attivazione cambia in softmax. La perdita viene calcolata dalle attivazioni e dagli obiettivi.

Esprimendo i calcoli matematicamente, moltiplichiamo le matrici dei pesi per le matrici di input, aggiungiamo distorsioni e applichiamo le funzioni di attivazione. Le espressioni continuano attraverso i livelli nascosti, raggiungendo infine il livello di output in cui viene applicata l'attivazione softmax. Le attivazioni e gli obiettivi di output vengono utilizzati per calcolare la perdita.

Quando si calcolano le derivate per gli aggiornamenti della discesa del gradiente, la regola della catena viene applicata ripetutamente. Partendo dal livello di output, calcoliamo i delta moltiplicando con la trasposizione delle matrici di peso e moltiplicando per elemento con la derivata della funzione di attivazione. Questo processo propaga i delta all'indietro attraverso i livelli nascosti.

Il problema del gradiente di fuga sorge quando si utilizzano le funzioni di attivazione sigmoidea per i livelli nascosti. La derivata di un sigmoide tende ad avere valori piccoli, facendo diminuire i delta ad ogni propagazione all'indietro. Di conseguenza, i gradienti diventano sempre più piccoli, rendendo difficile aggiornare i pesi in modo efficace, soprattutto nei primi strati.

L'apprendimento profondo ha incontrato difficoltà nell'addestrare le reti neurali profonde a causa del problema del gradiente evanescente. Tuttavia, circa un decennio fa, sono stati ideati approcci per superare questa sfida. Un metodo consiste nel modificare l'inizializzazione della matrice dei pesi, generando pesi casuali iniziali più grandi per contrastare i delta decrescenti causati dalle derivate sigmoidee.

La svolta più significativa è arrivata con l'adozione delle unità lineari raddrizzatori (ReLU) come funzioni di attivazione. A differenza dei derivati sigmoidei, i derivati ReLU tendono a non ridurre significativamente i delta. Questa proprietà ha reso le attivazioni ReLU più popolari poiché hanno facilitato l'addestramento delle reti neurali profonde.

Tuttavia, l'utilizzo delle attivazioni ReLU introduce il rischio di esplosione dei gradienti, in cui i delta possono diventare più grandi man mano che ci propaghiamo all'indietro. Per mitigare questo, è consigliabile scegliere pesi iniziali più piccoli rispetto alle attivazioni sigmoidee.

I neuroni ReLU sono preferiti per i livelli nascosti grazie alla loro facilità di addestramento e all'efficienza computazionale. L'inizializzazione dei pesi dipende dalla funzione di attivazione impiegata e la comunità di deep learning ha compiuto progressi sostanziali nella determinazione di metodi di inizializzazione del peso appropriati per diversi tipi di attivazione. Le moderne librerie di deep learning spesso gestiscono automaticamente l'inizializzazione del peso in base alle attivazioni specificate.

Vanishing (or Exploding) Gradients (DL 11)
Vanishing (or Exploding) Gradients (DL 11)
  • 2022.09.30
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Evitare l'overfitting della rete neurale (DL 12)



Evitare l'overfitting della rete neurale (DL 12)

Poiché lavoriamo con reti neurali più grandi per il deep learning, il rischio di overfitting aumenta in modo significativo. È fondamentale comprendere le cause dell'overfitting e come rilevarlo e prevenirlo. L'overfitting si verifica quando un modello di machine learning diventa troppo specifico per il training set e non riesce a generalizzare a nuovi dati. La causa principale è quando un modello ha una libertà dei parametri eccessiva rispetto alla quantità di dati di addestramento, rendendo più suscettibili i modelli con alti gradi di libertà o piccoli set di addestramento.

Nella regressione polinomiale, ad esempio, l'aumento del grado del polinomio fornisce più parametri da mettere a punto, consentendo al modello di adattarsi in modo più preciso ai dati di addestramento. Tuttavia, ciò può ostacolare la sua capacità di generalizzare ad esempi al di là del set di addestramento.

Nel contesto delle reti neurali, i pesi e le distorsioni fungono da parametri. Man mano che le reti neurali diventano più grandi con più pesi, hanno una maggiore libertà nella scelta dei propri parametri. Pertanto, durante l'addestramento di una rete neurale di grandi dimensioni, è importante prestare attenzione al potenziale overfitting, con il metodo principale di identificazione che è il monitoraggio del set di convalida.

La suddivisione del set di dati in set di addestramento, convalida e test aiuta a valutare la generalizzazione della rete. Quando si verifica l'overfitting, c'è una notevole discrepanza nella perdita o nella precisione tra il training set e il validation set. Idealmente, la perdita del set di allenamento dovrebbe diminuire nel corso delle epoche, ma se inizia ad aumentare, indica un problema. Allo stesso modo, la perdita del set di validazione dovrebbe diminuire in linea con la perdita del set di addestramento e se inizia ad aumentare mentre la perdita del set di addestramento continua a diminuire, significa un forte overfitting. L'accuratezza del modello su entrambi i set può anche rivelare l'overfitting nei problemi di classificazione.

Per affrontare l'overfitting, un approccio consiste nell'affrontare direttamente le sue cause. I dati insufficienti possono essere mitigati acquisendo più dati, come si è visto nei successi del deep learning su larga scala utilizzando vasti set di dati. Tuttavia, se non è possibile ottenere più dati, ridimensionare il modello può aiutare a combattere l'overfitting e migliorare l'efficienza. La linea guida generale è scegliere un'architettura di rete neurale adeguatamente dimensionata per il problema specifico in questione.

Se i problemi di overfitting persistono, ci sono tecniche avanzate da considerare. Una di queste tecniche è l'arresto anticipato, in cui l'addestramento viene interrotto quando si osserva una separazione tra i set di addestramento e di convalida, anche prima di raggiungere il numero massimo di epoche. Inoltre, metodi come Dropout e regolarizzazione del peso possono essere impiegati per prevenire l'overfitting.

Il dropout comporta l'azzeramento casuale di alcune attivazioni nella rete durante l'allenamento per evitare che specifici neuroni abbiano un impatto eccessivo. Eliminando i neuroni, i livelli successivi della rete sono costretti ad apprendere funzioni che non si basano eccessivamente su quei neuroni, riducendo così l'overfitting. Le regolazioni vengono apportate durante il test per tenere conto dell'assenza di Dropout.

La regolarizzazione del peso combatte l'overfitting scoraggiando i pesi dal diventare troppo grandi. Ciò si ottiene incorporando un termine di penalità nella funzione di perdita che scoraggia i pesi elevati. Una forma comune di regolarizzazione del peso è la regolarizzazione L2, in cui la somma dei quadrati di tutti i pesi viene aggiunta come termine di penalità quadratica. Questo termine di regolarizzazione, controllato da un iperparametro, bilancia l'enfasi sulla regolarizzazione rispetto alla funzione di perdita originale.

È fondamentale monitorare l'overfitting durante l'addestramento delle reti neurali. Considera le dimensioni del modello e i dati disponibili e utilizza tecniche come l'arresto anticipato, l'abbandono e la regolarizzazione per affrontare l'overfitting quando necessario.

Avoiding Neural Network Overfitting (DL 12)
Avoiding Neural Network Overfitting (DL 12)
  • 2022.10.01
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022