![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Strati convoluzionali (DL 13)
Strati convoluzionali (DL 13)
Le reti neurali che abbiamo considerato finora sono state densamente connesse, in cui ogni livello è connesso al livello successivo. Le reti dense sono un buon punto di partenza in quanto sono generali e versatili. Tuttavia, per applicazioni specifiche, possiamo scegliere architetture alternative più efficaci. In questo video, esploriamo la prima architettura alternativa chiamata strati convoluzionali.
Le reti convoluzionali sono adatte per le attività di elaborazione delle immagini. Invece di trattare l'immagine di input come un vettore piatto, i livelli convoluzionali preservano le informazioni spaziali dell'immagine. Ogni neurone in uno strato convoluzionale è connesso solo a una piccola regione dell'immagine, catturando la vicinanza spaziale dei pixel. Utilizzando questa architettura, la rete ottiene un vantaggio nell'apprendimento delle attività di elaborazione delle immagini.
I livelli convoluzionali hanno due idee chiave: connettività locale e legame di peso. Connettività locale significa che i neuroni sono collegati a una piccola sottoregione dell'immagine, consentendo loro di apprendere caratteristiche specifiche. La legatura del peso assicura che la stessa funzione venga applicata a diverse regioni dell'immagine. Condividendo i pesi, la rete può imparare ad applicare la stessa funzione in più regioni.
I livelli convoluzionali introducono nuovi iperparametri da considerare. Questi includono la dimensione del kernel (che determina la dimensione della sottoregione), stride (di quanto scorre la finestra), numero di canali di output (numero di funzioni applicate a ciascuna finestra), padding (gestione dei bordi dell'immagine) e pooling (aggregazione dei risultati dei neuroni ridurre la dimensionalità).
Il raggruppamento aiuta a ridurre il numero di parametri nella rete aggregando i risultati dei neuroni in una regione. Questo può essere fatto calcolando la media o prendendo il valore massimo. Il raggruppamento è utile quando non abbiamo bisogno di una localizzazione precisa delle caratteristiche ma piuttosto della presenza complessiva delle caratteristiche in una regione.
Le reti convoluzionali forniscono un modo più efficiente per elaborare le immagini rispetto alle reti dense. Sfruttano le informazioni spaziali e riducono il numero di parametri, rendendoli più facili da addestrare.
Il raggruppamento aiuta a ridurre la dimensionalità delle mappe delle caratteristiche e il numero di parametri nei livelli successivi. Aggregando i risultati dei neuroni vicini, il raggruppamento conserva le informazioni più importanti scartando alcuni dettagli spaziali.
Esistono diversi tipi di operazioni di pooling, come il pooling massimo e il pooling medio. In max pooling, il valore massimo all'interno di ciascuna finestra di pooling viene selezionato come valore rappresentativo per quella regione. Questo aiuta a catturare le caratteristiche più importanti presenti nella finestra. D'altra parte, il raggruppamento medio prende il valore medio della finestra, fornendo una rappresentazione più uniforme delle funzionalità.
Dopo il raggruppamento, possiamo impilare ulteriormente ulteriori livelli convoluzionali per apprendere funzionalità più complesse e astratte dall'output del livello precedente. Ogni livello successivo acquisisce caratteristiche di livello superiore combinando le informazioni provenienti da più campi ricettivi più piccoli.
Per riassumere, le reti neurali convoluzionali (CNN) con livelli convoluzionali e di raggruppamento sono adatte per le attività di elaborazione delle immagini. Gli strati convoluzionali catturano la prossimità spaziale e sfruttano la condivisione del peso, consentendo alla rete di apprendere in modo efficiente le caratteristiche locali. Il raggruppamento riduce la dimensionalità ed estrae informazioni importanti, consentendo ai livelli successivi di apprendere rappresentazioni più astratte. Questo apprendimento delle funzionalità gerarchiche rende le CNN potenti per varie applicazioni di visione artificiale, tra cui la classificazione delle immagini, il rilevamento degli oggetti e la segmentazione delle immagini.
Addestrare grandi reti con pochi dati: transfer learning e data augmentation (DL 14)
Addestrare grandi reti con pochi dati: transfer learning e data augmentation (DL 14)
Nel deep learning, è comune riscontrare problemi in cui si desidera sfruttare la potenza del deep learning ma mancano dati sufficienti per addestrare un modello profondo in modo efficace. Questo problema si verifica in vari domini e architetture di reti neurali. Concentriamoci sullo scenario di un'attività di elaborazione delle immagini usando una rete convoluzionale con un piccolo set di dati di immagini. Tuttavia, i concetti discussi qui possono essere applicati anche ad altri domini.
Le reti convoluzionali profonde sono note per la loro efficacia nell'elaborazione delle immagini. Tuttavia, l'addestramento di una rete convoluzionale profonda su un set di dati di immagini di piccole dimensioni porterebbe in genere a un overfitting estremo, in cui la rete si limita a memorizzare i dati di input. In tali casi, dobbiamo trovare modi per utilizzare meglio i nostri dati o esplorare fonti di dati alternative.
Un approccio per superare il problema della scarsità di dati è attraverso l'aumento dei dati e il trasferimento dell'apprendimento. Il transfer learning è un concetto fondamentale nel moderno deep learning ed è sorprendentemente semplice da spiegare. L'idea è di addestrare una rete neurale profonda su un problema correlato ma più generale e quindi riutilizzare quella rete pre-addestrata con ulteriore formazione sul nostro set di dati specifico per risolvere il nostro problema.
Per un'attività di elaborazione delle immagini, possiamo addestrare una rete su set di dati di immagini di grandi dimensioni raccolti dal Web o da concorsi di apprendimento automatico. La rete pre-addestrata avrebbe un ultimo livello dedicato alla classificazione delle immagini da quei set di dati. Quando lavoriamo su un'attività di elaborazione delle immagini diversa con un livello di output distinto, possiamo scartare il livello di output della rete pre-addestrata e aggiungere il nostro livello di output che corrisponde ai requisiti del nostro problema. Ciò comporta l'aggiunta di nuovi pesi che collegano il nuovo livello di output all'ultimo livello della rete pre-addestrata, che può essere addestrata utilizzando il nostro piccolo set di dati.
L'aspettativa dietro l'efficacia del transfer learning sta nel presupposto che se il problema pre-training è abbastanza simile al nostro problema specifico, la funzionalità appresa dalla rete pre-addestrata verrà trasferita, a beneficio del nostro problema. Possiamo pensare alla rete pre-addestrata come se avesse appreso funzioni generiche di elaborazione delle immagini e possiamo utilizzare questa trasformazione appresa durante l'addestramento della nostra rete sul piccolo set di dati.
Quando applichiamo il transfer learning, abbiamo diverse opzioni per utilizzare il modello pre-addestrato. Dobbiamo scartare il livello di output per soddisfare il nostro problema, ma possiamo anche rimuovere altri livelli se riteniamo che l'utile pre-elaborazione sia già stata eseguita. Inoltre, possiamo aggiungere più livelli per eseguire elaborazioni più sofisticate per il nostro problema specifico. Per preservare qualsiasi elaborazione utile eseguita dai primi livelli, possiamo congelare i loro pesi durante il riaddestramento, soprattutto se il modello pre-addestrato è stato addestrato su un set di dati di grandi dimensioni e il nostro problema ha un set di dati piccolo.
Le librerie di deep learning spesso forniscono zoo di modelli, che sono raccolte di modelli pre-addestrati per diversi tipi di problemi. Questi modelli servono come punto di partenza per trasferire l'apprendimento, rendendo accessibile il deep learning per risolvere un'ampia gamma di problemi.
Tuttavia, anche con l'ausilio del transfer learning, il nostro set di dati potrebbe essere ancora troppo piccolo per addestrare una rete in modo efficace, anche sugli ultimi livelli. In tali casi, dobbiamo estrarre quante più informazioni possibili dal nostro set di dati, il che ci porta all'idea di aumento dei dati.
L'aumento dei dati comporta l'applicazione di trasformazioni al set di dati che appaiono diverse dalla rete neurale ma mantengono lo stesso significato per gli esseri umani o altri sistemi che utilizzano il modello appreso. Nel caso dell'elaborazione delle immagini, è possibile applicare varie trasformazioni senza alterare la percezione umana dell'immagine rappresentata. Ad esempio, la rotazione o lo zoom avanti di un'immagine non ne modifica il contenuto sottostante. Queste trasformazioni introducono differenze sostanziali nei dati di input visti dalla rete neurale, rendendo difficile per la rete memorizzare esempi specifici o fare affidamento su dettagli precisi dell'input.
Tuttavia, dobbiamo garantire che le trasformazioni non cambino il significato dei dati e appaiano distinte dal punto di vista della rete. Ad esempio, la traduzione di un'immagine può avere un impatto minimo sulla capacità di generalizzazione di una rete convoluzionale, data la sua intrinseca invarianza di traduzione.
Le tecniche di aumento dei dati includono l'aggiunta di rumore casuale, una leggera sfocatura e altre modifiche che non distorcono la percezione umana dell'immagine. Queste trasformazioni possono essere facilmente calcolate e applicate in modo casuale a ogni batch di dati durante l'addestramento. Addestrando la rete per più epoche sul set di dati aumentato, le impediamo di memorizzare semplicemente gli esempi di input esatti e la incoraggiamo a generalizzare meglio.
È importante notare che le tecniche di aumento dei dati non sono efficaci quanto avere più dati su cui allenarsi, inclusi i dati correlati per il pre-addestramento. Tuttavia, se combinato con il transfer learning, l'aumento dei dati ci consente di affrontare una gamma più ampia di problemi utilizzando reti neurali profonde.
In sintesi, di fronte a un problema che richiede il deep learning ma mancano dati sufficienti, il trasferimento dell'apprendimento e l'aumento dei dati sono strategie preziose. Il trasferimento dell'apprendimento comporta l'addestramento di una rete su un problema correlato e il suo riutilizzo, con ulteriore formazione, per il nostro problema specifico. L'aumento dei dati comporta l'applicazione di trasformazioni al set di dati che mantengono il loro significato introducendo variazioni per una migliore generalizzazione. Sebbene queste tecniche non sostituiscano più dati, offrono soluzioni pratiche per sfruttare il deep learning in scenari con disponibilità di dati limitata.
Reti Residue e Salta Connessioni (DL 15)
Reti Residue e Salta Connessioni (DL 15)
Le reti neurali profonde sono potenti ma difficili da addestrare a causa della necessità di più dati con l'aumentare del numero di parametri. L'addestramento di reti profonde mostra spesso progressi lenti nella riduzione delle perdite rispetto alle reti poco profonde. Questo perché i dati di input, passando attraverso più livelli con pesi inizializzati in modo casuale, vengono confusi in un rumore casuale, rendendo difficile la propagazione di gradienti significativi.
Per risolvere questo problema, vengono introdotte le connessioni skip. Le connessioni saltate implicano il raggruppamento dei livelli in blocchi e la fornitura di due percorsi per il flusso di dati all'interno e attorno a ciascun blocco. L'output di un blocco viene combinato con il suo input utilizzando l'addizione o la concatenazione, consentendo il passaggio dell'input e rendendo gli input e gli aggiornamenti più significativi.
I blocchi residui, che incorporano connessioni skip, presentano numerosi vantaggi. In primo luogo, semplificano l'attività di apprendimento per ogni blocco concentrandosi sull'aumento dei dati esistenti piuttosto che capire tutto sull'input. In secondo luogo, facilitano il flusso dei gradienti fornendo percorsi più brevi per l'aggiornamento di ogni livello della rete. Questi vantaggi portano a progressi di allenamento più rapidi e prestazioni migliori rispetto alle reti poco profonde.
Quando si utilizzano blocchi residui, è fondamentale affrontare la compatibilità della forma tra tensori di input e output, specialmente quando si utilizzano livelli convoluzionali. Particolare attenzione dovrebbe essere prestata alla corrispondenza delle forme ed evitare un'esplosione nel numero di parametri, in particolare quando si utilizza la concatenazione. In genere, l'addizione è preferita alla concatenazione per la maggior parte delle connessioni skip in grandi reti residue.
Le convoluzioni uno a uno possono essere utilizzate per preservare l'altezza, la larghezza e le dimensioni del canale nei blocchi convoluzionali. Ci consentono di regolare la profondità del livello di output specificando il numero di filtri nel livello convoluzionale.
Sebbene esistano varie varianti e architetture delle reti residue, l'idea chiave rimane coerente: migliorare l'addestramento delle reti neurali profonde sfruttando le connessioni skip e i blocchi residui. Queste tecniche consentono un migliore flusso di informazioni, un addestramento più rapido e migliori prestazioni del modello. Si consiglia di esplorare diverse architetture residue e le loro implementazioni specifiche per un'ulteriore comprensione e applicazione.
Inoltre, è importante considerare alcune preoccupazioni pratiche quando si imposta una rete residua. Una di queste preoccupazioni è la gestione della compatibilità della forma tra i tensori di input e di output quando si utilizzano connessioni skip. Questo diventa più complesso quando sono coinvolti strati convoluzionali, poiché l'altezza, la larghezza e le dimensioni del canale devono essere allineate correttamente.
Per semplificare i blocchi convoluzionali, è possibile utilizzare passi uno a uno e un'imbottitura appropriata per preservare l'altezza e la larghezza dell'immagine di input. Ciò garantisce che almeno le dimensioni spaziali corrispondano quando si aggiungono i tensori di input e output di un blocco. Per affrontare la dimensione del canale, è possibile utilizzare le convoluzioni uno a uno. Sebbene queste convoluzioni possano sembrare banali poiché ricevono input da un singolo pixel, ci consentono effettivamente di regolare la profondità del livello di output. Specificando il numero di filtri nella convoluzione uno a uno, possiamo aumentare o diminuire la profondità del tensore di output, rendendo le forme compatibili.
Quando si lavora con reti residue di grandi dimensioni, è essenziale trovare un equilibrio tra il numero di collegamenti saltati e l'esplosione dei parametri. Un uso eccessivo della concatenazione può portare ad un sostanziale aumento della dimensione del tensore di attivazione e del numero di parametri. Pertanto, è consigliabile limitare il numero di connessioni skip basate sulla concatenazione e preferire l'aggiunta per la maggior parte di esse.
La modularità è un altro vantaggio offerto dalle reti residuali. La struttura uniforme dei blocchi residui e la possibilità di aggiungere facilmente più blocchi facilitano la costruzione di reti più profonde e potenti. Aumentando in modo incrementale il numero di blocchi, è possibile creare una rete che soddisfi il compromesso desiderato tra risorse computazionali e capacità del modello.
Sebbene le reti residue si siano dimostrate altamente efficaci, vale la pena notare che esistono vari altri tipi di architetture residue con diverse scelte di progettazione, come l'incorporazione di livelli di normalizzazione o percorsi multipli all'interno di un blocco. L'esplorazione di queste variazioni può fornire ulteriori approfondimenti e possibilità per migliorare l'addestramento delle reti neurali profonde.
Nel complesso, le reti residue forniscono un approccio prezioso per addestrare le reti neurali profonde sfruttando le connessioni skip e i blocchi residui. Semplificano le attività di apprendimento, accelerano la propagazione del gradiente e offrono modularità per la creazione di potenti architetture di rete. Comprendere i concetti e le considerazioni alla base delle reti residue contribuisce ai progressi nella ricerca sull'apprendimento profondo e nelle applicazioni pratiche.
Incorporamenti di parole (DL 16)
Incorporamenti di parole (DL 16)
La maggior parte dei dati con cui abbiamo lavorato nelle reti neurali erano dati di immagini. Tuttavia, possiamo utilizzare le reti neurali anche per altri tipi di problemi, come i dati testuali. Rappresentare i dati di testo come input per una rete neurale non è così semplice come con le immagini.
Nei dati immagine, possiamo utilizzare formati di archiviazione digitale standard, che rappresentano le immagini come matrici di pixel rossi, verdi e blu. Questa rappresentazione è utile perché cattura le relazioni spaziali tra i pixel e le relative intensità di colore.
Per i dati di testo, la rappresentazione digitale standard, in cui i caratteri vengono convertiti in ASCII o altri valori digitali, non è direttamente rilevante per il modo in cui le reti neurali apprendono. Si possono prendere in considerazione vari metodi per convertire i valori ASCII in input validi per una rete neurale, come l'utilizzo della rappresentazione binaria dei valori ASCII o la normalizzazione dell'intervallo di caratteri tra 0 e 1. Tuttavia, queste rappresentazioni non catturano la semantica del parole nello stesso modo in cui un array rappresenta un'immagine.
Un approccio consiste nel creare vettori giganti utilizzando codifiche one-hot dell'intero vocabolario. Ogni parola ha una rappresentazione vettoriale univoca, che risolve il problema di parole simili con significati diversi. Tuttavia, ciò si traduce in una massiccia espansione delle dimensioni e perde l'equilibrio tra somiglianza di parole e dimensionalità.
Per risolvere questo problema, miriamo a una rappresentazione dei dati di testo che raggiunga diversi obiettivi. In primo luogo, vogliamo una rappresentazione per parola che non sia eccessivamente dimensionale. In secondo luogo, vogliamo che la rappresentazione contenga informazioni semantiche, laddove parole simili hanno rappresentazioni vettoriali simili. Questo è stato un problema impegnativo nell'elaborazione del linguaggio naturale.
Negli ultimi anni, le reti neurali sono state utilizzate con successo per generare rappresentazioni di input appropriate per i dati di testo. Un approccio prevede l'estrazione di n-grammi, che sono sequenze di n parole, dai dati di testo. Questi n-grammi forniscono informazioni contestuali per un punto specifico in una frase o in un documento.
L'idea è di addestrare la rete utilizzando la rappresentazione del dizionario one-hot come input e prevedere la codifica one-hot dell'n-gramma circostante. Ad esempio, possiamo usare un input di 5 grammi e prevedere le altre quattro parole nell'n-grammo. Addestrando la rete su parole vicine usando n-grammi, ci aspettiamo che parole semanticamente simili abbiano rappresentazioni simili e ricevano un gradiente di feedback simile durante l'addestramento.
Scartando lo strato di output della rete, possiamo utilizzare il vettore di attivazioni nell'ultimo strato nascosto come codifica numerica della parola di input. Questa rappresentazione è nota come incorporamento di parole, che cattura il contesto della parola nel testo effettivo. Esistono vari approcci per produrre incorporamenti di parole, come Word2Vec.
Piuttosto che addestrare i nostri incorporamenti di parole, possiamo utilizzare incorporamenti pre-addestrati generati da altri con più dati e risorse computazionali. Possiamo facilmente generare una tabella di ricerca per tradurre un documento di testo arbitrario nella parola incorporata. Questo approccio ci consente di utilizzare gli incorporamenti di parole come input per la nostra rete neurale per l'apprendimento automatico sui dati di testo.
L'utilizzo di incorporamenti di parole come input per la nostra rete neurale per l'apprendimento automatico sui dati di testo offre diversi vantaggi. Questi incorporamenti pre-addestrati sono stati generati da modelli con dati estesi e risorse computazionali, risultando in rappresentazioni ricche e significative delle parole.
Passando un documento attraverso un word embedding esistente, possiamo ottenere una rappresentazione vettorializzata del testo. Questa rappresentazione vettoriale cattura le informazioni contestuali delle parole e può essere utilizzata come input per la nostra rete neurale.
L'uso di word embedding consente il trasferimento dell'apprendimento, in cui la conoscenza acquisita da un'attività (ad esempio, l'addestramento del modello di word embedding) può essere applicata a un'altra attività correlata (ad esempio, il nostro specifico problema di apprendimento automatico con dati di testo). Invece di addestrare i nostri incorporamenti da zero, possiamo sfruttare gli incorporamenti esistenti, beneficiando delle loro capacità di generalizzazione.
Una volta che abbiamo la rappresentazione word embedding del testo, possiamo procedere con l'addestramento della nostra rete neurale. La rete neurale può prendere come input i vettori di incorporamento delle parole e imparare a fare previsioni basate sulle informazioni semantiche codificate negli incorporamenti.
L'architettura specifica della rete neurale dipenderà dall'attività da svolgere. Potrebbe essere una rete neurale ricorrente (RNN) che considera la natura sequenziale del testo, una rete neurale convoluzionale (CNN) che acquisisce schemi locali o una combinazione di entrambi. La rete può essere progettata per eseguire attività come l'analisi del sentimento, la classificazione del testo, la generazione della lingua o la traduzione automatica, tra le altre.
Durante il processo di addestramento, la rete neurale impara a riconoscere i modelli ea fare previsioni in base all'incorporamento delle parole di input. I gradienti propagati attraverso la rete aggiornano i pesi, ottimizzando la capacità della rete di fare previsioni accurate.
Utilizzando gli incorporamenti di parole, affrontiamo le sfide della rappresentazione dei dati di testo in modo significativo per le reti neurali. Questi incorporamenti catturano le relazioni semantiche tra le parole, consentendo alla rete di apprendere dal contesto e fare previsioni informate. Inoltre, l'utilizzo di incorporamenti pre-addestrati consente di risparmiare risorse computazionali e migliorare l'efficienza della nostra pipeline di machine learning.
Usando gli incorporamenti di parole come input per la nostra rete neurale, possiamo sfruttare il potere del trasferimento dell'apprendimento e delle rappresentazioni semantiche. Questo approccio migliora in modo significativo la capacità delle reti neurali di elaborare e comprendere i dati di testo, aprendo la porta a varie attività e applicazioni di elaborazione del linguaggio naturale.
Reti Neurali Ricorrenti (DL 17)
Reti Neurali Ricorrenti (DL 17)
Nella nostra lezione precedente, abbiamo discusso l'uso di incorporamenti di parole, che sono rappresentazioni addestrabili di parole come vettori con un numero moderato di dimensioni. Questi incorporamenti possono fungere da base per la creazione di sistemi di apprendimento automatico che operano su dati di testo. Per attività semplici come la classificazione del sentiment delle recensioni dei prodotti, può essere sufficiente suddividere il documento in parole, incorporare ogni parola e passare la sequenza di incorporamenti come input a una rete neurale. Tuttavia, per attività più complesse come le risposte conversazionali o la traduzione automatica, è necessario un approccio più sofisticato.
Per illustrare questo, abbiamo utilizzato l'esempio della previsione della parola successiva in una frase. Questo compito è più impegnativo della classificazione dei sentimenti ma più facile della traduzione automatica. Quando si configurano reti neurali per operare su dati di testo, ci troviamo di fronte a due approcci generali. Un estremo è fornire l'intero documento come input alla rete, mentre l'altro estremo è fornire una singola parola come input. Tuttavia, entrambi gli approcci presentano degli svantaggi: operare sull'intero documento limita gli esempi di addestramento e si occupa di documenti di dimensioni variabili, mentre operare su una parola alla volta ignora il contesto circostante necessario per comprendere il significato delle parole e rappresentare concetti che non si associano direttamente alle parole .
Per trovare un compromesso tra questi estremi, abbiamo introdotto un metodo che opera su una parola alla volta ma incorpora la memoria della rete degli input precedenti per conservare un contesto importante. L'idea di base è quella di ritrasmettere l'output della rete al suo input, consentendole di utilizzare le sue precedenti attivazioni come riepilogo delle parole viste finora. Questo approccio dà origine a reti neurali ricorrenti (RNN), che possono essere visualizzate srotolandole nel tempo, rappresentando la rete in diversi momenti nel momento in cui le parole vengono immesse e l'output della rete viene reimmesso.
Per l'attività di previsione della parola successiva, l'output del livello nascosto dell'RNN funge da riepilogo delle parole precedenti nella frase. L'RNN impara a prevedere la parola successiva in base a questo contesto. Gli input all'RNN sono vettori di incorporamento, mentre gli output sono in una codifica del dizionario one-hot per consentire di esprimere l'incertezza su diversi possibili output.
L'addestramento degli RNN comporta il calcolo dei gradienti per aggiornare i pesi della rete. La sfida nasce dal fatto che i pesi influenzano la perdita non solo attraverso la loro applicazione all'input corrente, ma anche attraverso il loro impatto sugli input provenienti da fasi temporali precedenti. Per calcolare l'effetto dei pesi sulla perdita in una particolare fase temporale, dobbiamo considerare sia il loro impatto sull'input corrente sia la loro influenza su fasi temporali precedenti e il loro contributo all'errore nella fase temporale corrente.
Le reti neurali ricorrenti impiegano spesso funzioni di attivazione sigmoidea o tanh perché sono soggette al problema del gradiente di fuga. Questo problema sorge quando i gradienti non possono propagarsi molto all'indietro nella rete, limitando la capacità di acquisire dipendenze a lungo termine. Di conseguenza, i semplici RNN non sono efficaci nei compiti che richiedono un ampio contesto e una memoria a lungo termine, motivo per cui ci siamo concentrati sulle frasi piuttosto che sui documenti.
Nella prossima lezione esploreremo una variante delle reti neurali ricorrenti specificamente progettate per affrontare il problema della memoria a lungo termine e ottenere prestazioni migliori nelle attività di elaborazione del testo e del linguaggio.
LSTM (DL 18)
LSTM (DL 18)
L'obiettivo di questa lezione è dimostrare l'uso pratico delle reti neurali ricorrenti (RNN) per la modellazione del linguaggio. In precedenza, abbiamo discusso dell'uso degli RNN per prevedere la parola successiva in una frase, che funge da attività di pre-addestramento comune per gli RNN. Per attività più complesse come la risposta a domande o la traduzione automatica, possiamo utilizzare un approccio di trasferimento di apprendimento. Per prima cosa, pre-addestriamo l'RNN sull'attività di predizione della parola successiva e poi la ottimizziamo per l'attività specifica che ci interessa.
Per ottenere output più significativi da un RNN, ci concentriamo sulle attivazioni nascoste o sugli stati che passano attraverso la rete in direzione avanti o indietro. Questi stati nascosti rappresentano l'input di testo complessivo. Ad esempio, durante la traduzione di una frase, ogni parola viene inserita in sequenza nell'RNN e lo stato nascosto prodotto nell'ultima fase temporale diventa una rappresentazione dell'intero testo. Possiamo quindi passare questo stato nascosto in ulteriori livelli di rete neurale per risolvere l'attività desiderata, come la classificazione o la generazione di testo.
Questo processo di alimentazione del testo in un RNN per codificarlo in uno stato di livello nascosto, e quindi utilizzando un altro RNN come decodificatore, ci consente di generare testo di output. Addestrando questa coppia di RNN su coppie input-output, possiamo tradurre frasi o generare risposte.
Tuttavia, gli RNN regolari con attivazioni di 10 ore incontrano difficoltà quando si tratta di sequenze più lunghe a causa della scomparsa dei gradienti. Per risolvere questo problema, possiamo utilizzare un'architettura chiamata Long Short-Term Memory (LSTM). Gli LSTM offrono percorsi multipli per il flusso delle attivazioni, consentendo ai gradienti di propagarsi in modo più efficiente attraverso la rete.
Il layer LSTM è costituito da un input e da un output. Possiamo usarli per addestrare la rete su compiti come prevedere la parola successiva. L'input è concatenato con il precedente stato nascosto, mentre un ulteriore stato nascosto (c) viene passato dalla rete a se stessa ad ogni passo temporale. Questo stato c consente la propagazione del gradiente senza le limitazioni imposte dalle attivazioni di 10 ore. Le funzioni di attivazione del sigma vengono utilizzate per controllare quali informazioni vengono conservate o dimenticate dagli stati precedenti e queste porte vengono apprese durante l'addestramento.
Gli LSTM incorporano entrambi i percorsi h e c, consentendo calcoli più complessi all'interno di ogni fase temporale e facilitando la rapida propagazione del gradiente attraverso più applicazioni della rete LSTM. Sebbene non disponiamo di una conoscenza completa delle funzioni specifiche apprese da ciascun componente, l'architettura LSTM si è dimostrata efficace nella pratica rispetto ad altri tipi di RNN.
L'efficacia pratica delle architetture LSTM risiede nella loro capacità di affrontare il problema del gradiente evanescente e catturare dipendenze a lungo termine nei dati sequenziali. Incorporando meccanismi di gating e percorsi multipli per il flusso di informazioni, gli LSTM hanno mostrato miglioramenti significativi rispetto agli RNN tradizionali in varie attività di elaborazione del linguaggio naturale.
La natura controllata degli LSTM consente loro di ricordare e dimenticare in modo selettivo le informazioni dei passaggi temporali precedenti, rendendoli adatti per la modellazione e la generazione di sequenze. Le attivazioni sigmoidee nelle porte LSTM controllano il flusso di informazioni, determinando cosa conservare e cosa scartare. Queste porte apprendono dai dati di addestramento e decidono in modo adattivo quali parti dello stato nascosto precedente e dell'input corrente sono rilevanti per la fase temporale corrente.
La capacità dell'LSTM di ricordare le dipendenze a lungo termine è particolarmente cruciale nella modellazione del linguaggio. Nella traduzione linguistica, ad esempio, la comprensione del contesto di una frase richiede di considerare l'intera sequenza di input. Lo stato nascosto nell'ultima fase temporale della codifica LSTM cattura il significato generale della frase, consentendo una traduzione accurata o altre attività a valle.
Inoltre, gli LSTM facilitano un'efficiente propagazione del gradiente durante i passaggi sia in avanti che all'indietro. Preservando le informazioni rilevanti e mitigando l'impatto dei gradienti in via di estinzione, gli LSTM consentono l'addestramento efficace di reti ricorrenti profonde su lunghe sequenze. Ciò si ottiene attraverso l'uso di percorsi paralleli che consentono ai gradienti di fluire senza interruzioni, impedendo loro di svanire o esplodere mentre attraversano la rete.
Il successo degli LSTM nella modellazione del linguaggio li ha resi un elemento fondamentale in molti modelli all'avanguardia. Ricercatori e professionisti hanno esteso le architetture LSTM con funzionalità aggiuntive come meccanismi di attenzione, attenzione a più teste e modelli basati su trasformatore. Questi progressi migliorano ulteriormente le capacità di modellazione degli LSTM, consentendo loro di gestire attività ancora più complesse, tra cui il riepilogo dei documenti, l'analisi del sentiment e la generazione di dialoghi.
In sintesi, gli LSTM hanno rivoluzionato la modellazione del linguaggio affrontando i limiti degli RNN tradizionali. La loro capacità di catturare dipendenze a lungo termine, gestire gradienti in via di estinzione e conservare selettivamente le informazioni rilevanti li ha resi uno strumento indispensabile nell'elaborazione del linguaggio naturale. Sfruttando le architetture LSTM, i ricercatori e gli sviluppatori hanno ottenuto progressi significativi in varie attività relative alle lingue, portando a una migliore traduzione automatica, sistemi di risposta alle domande e modelli di generazione del testo.
Trasformatori e auto-attenzione (DL 19)
Trasformatori e auto-attenzione (DL 19)
L'architettura Transformer, basata su reti neurali, ha raggiunto prestazioni all'avanguardia nella modellazione del linguaggio e in varie altre attività. Esploriamo le idee alla base di Transformers, inclusa la loro costruzione a partire da blocchi di auto-attenzione e l'integrazione di caratteristiche di rete ricorrenti e residue.
Le reti neurali ricorrenti (RNN) eccellono nell'elaborazione del testo costruendo gradualmente uno stato nascosto che rappresenta il contenuto informativo di un documento. Ricevono incorporamenti di parole come input e possono essere addestrati su compiti senza supervisione come prevedere la parola successiva in una frase. Tuttavia, gli RNN, comprese le varianti LSTM, hanno difficoltà con input lunghi a causa della necessità di un'elaborazione ripetuta attraverso i livelli.
D'altra parte, le reti residue sono efficaci nel gestire modelli profondi con molti livelli utilizzando connessioni residue. Queste connessioni semplificano l'addestramento consentendo a ciascun blocco di migliorare l'input e consentire ai gradienti di propagarsi in modo più efficiente.
Le reti residue presentano ulteriori vantaggi nell'elaborazione delle immagini, come sfruttare la convoluzione all'interno dei blocchi residui, che si allinea bene con le funzioni relative alle immagini. Per combinare i punti di forza delle reti ricorrenti per l'elaborazione del testo e delle reti residue per l'apprendimento di modelli profondi, è stato introdotto Transformer.
Simile agli RNN, un trasformatore opera su incorporamenti di parole. Tuttavia, invece di ricevere le parole una alla volta, elabora tutti gli incorporamenti per un intero documento concatenato in una matrice. I trasformatori possono essere addestrati su attività senza supervisione che prevedono parole mancanti, risultando in una codifica del documento utilizzabile per varie attività di elaborazione del linguaggio naturale.
Dalle reti residue, i Transformer ereditano connessioni skip che consentono a ciascun blocco di aumentare i suoi predecessori, semplificando l'addestramento anche in reti di grandi dimensioni. Per facilitare l'elaborazione del testo, l'architettura all'interno dei blocchi incorpora un'idea chiave chiamata auto-attenzione.
L'auto-attenzione risponde alla necessità di prestare attenzione a parole lontane in una frase per comprendere il significato di una parola specifica. Piuttosto che progettare esplicitamente una funzione di attenzione, l'architettura di Transformer è progettata per facilitare l'apprendimento di tale funzione.
All'interno di un blocco del codificatore di auto-attenzione, l'incorporamento di ogni parola subisce tre strati densi: query (q), chiave (k) e valore (v). Questi livelli condividono pesi tra tutte le parole ma vengono applicati a diversi elementi della frase di input. Calcolando il prodotto scalare tra query e vettori chiave, il modello può valutare la somiglianza.
Il prodotto scalare tra la query e i vettori chiave della stessa parola indica autosomiglianza. Inoltre, i prodotti punto vengono calcolati tra il vettore di query di una parola specifica ei vettori chiave di tutte le altre parole. Softmax viene applicato per convertire i punteggi di somiglianza in pesi compresi tra 0 e 1, enfatizzando i vettori più simili.
Moltiplicando i pesi softmax con i vettori di valore di ciascuna parola, l'attenzione viene applicata a diverse parti del documento. Questa somma ponderata produce un vettore di output calcolato dall'intero documento. Questo processo viene eseguito in parallelo per tutte le parole, risultando in una matrice che codifica il documento in base all'attenzione.
Gli incorporamenti di parole originali sono aumentati con le informazioni derivate dall'intero documento, ponderate dall'attenzione. Viene quindi applicato uno strato denso regolare di forma corrispondente. Più teste di attenzione possono essere utilizzate all'interno di un blocco codificatore per apprendere diversi modelli di attenzione. L'output di tutte le teste di attenzione viene sommato e combinato con la connessione skip, risultando nell'output del blocco.
Il meccanismo di auto-attenzione consente alla rete di imparare a cosa prestare attenzione in ciascuna testa di attenzione. Molteplici teste di attenzione consentono al modello di concentrarsi su diversi aspetti in varie circostanze, migliorando la rappresentazione dell'input in un'utile codifica del documento di testo.
Questa codifica può essere ulteriormente elaborata per la classificazione o utilizzata come input per un'altra rete neurale per attività come la traduzione automatica. Training Transformers inizialmente si è concentrato sulla codifica del linguaggio in una lingua e sulla decodifica in un'altra lingua. L'addestramento non supervisionato, simile agli RNN, può essere condotto anche fornendo documenti con parole cancellate casualmente e addestrando il modello a prevedere le parole mancanti.
I trasformatori hanno rivoluzionato varie attività di elaborazione del linguaggio naturale e sono diventati l'architettura all'avanguardia per la modellazione del linguaggio e molte altre applicazioni. Approfondiamo i concetti chiave di Transformers ed esploriamo come combinano gli aspetti migliori delle reti ricorrenti e residue.
Le reti neurali ricorrenti (RNN), come LSTM, sono efficaci per l'elaborazione del testo perché elaborano gli incorporamenti di parole in sequenza e creano uno stato nascosto che rappresenta il contenuto informativo di un documento. Gli RNN possono essere addestrati su compiti senza supervisione come prevedere la parola successiva in una frase utilizzando dati prontamente disponibili. Tuttavia, gli RNN tendono a lottare con input lunghi a causa della necessità di passare ripetutamente i dati attraverso più livelli.
D'altra parte, le reti residue eccellono nella gestione di modelli profondi utilizzando connessioni residue, che semplificano l'addestramento e consentono ai gradienti di propagarsi in modo efficiente. Nell'elaborazione delle immagini, le reti residue sfruttano la convoluzione all'interno dei blocchi residui, offrendo un vantaggio per le funzioni rilevanti per l'analisi delle immagini. L'obiettivo è combinare i vantaggi delle reti ricorrenti nell'elaborazione del testo con i vantaggi dell'apprendimento di modelli profondi dalle reti residue.
Questo ci porta all'architettura Transformer. Come le reti ricorrenti, i Transformer operano su incorporamenti di parole. Tuttavia, a differenza delle reti ricorrenti che elaborano le parole una alla volta, i Transformer ricevono gli incorporamenti di un intero documento concatenati in una matrice, con ogni riga che rappresenta l'incorporamento di una parola diversa. I trasformatori possono essere addestrati su attività senza supervisione, come prevedere le parole mancanti, per generare codifiche di documenti per varie attività di elaborazione del linguaggio naturale.
Dalle reti residue, i Transformer ereditano le connessioni skip, assicurando che ogni blocco debba solo aumentare i suoi predecessori e consentendo ai gradienti di propagarsi efficacemente anche nelle reti di grandi dimensioni. Per facilitare l'elaborazione del testo, Transformers utilizza un'architettura distinta all'interno dei blocchi, nota come auto-attenzione.
L'auto-attenzione è l'idea che per comprendere una parola in una frase, dobbiamo prestare attenzione ad altre parole che potrebbero essere distanti nella frase. L'architettura non è esplicitamente progettata con una specifica funzione di attenzione; invece, è progettato per facilitare l'apprendimento di tali funzioni.
In un blocco del codificatore di auto-attenzione, l'incorporamento di ogni parola subisce tre strati densi chiamati query, chiave e valore. Questi livelli sono condivisi tra tutte le parole ma applicati a diversi elementi della frase di input. Prendendo il prodotto scalare tra query e vettori chiave, possiamo valutare la somiglianza. Prodotti scalari più grandi indicano vettori che puntano in direzioni simili, mentre prodotti scalari più piccoli indicano vettori che puntano in direzioni diverse.
Per una data parola, calcoliamo il prodotto scalare tra il suo vettore di interrogazione e i vettori chiave di tutte le altre parole. Questo produce un vettore di punteggi di somiglianza, che rappresenta quanto è simile il vettore della query a ciascun vettore chiave. L'applicazione di softmax a questi punteggi li converte in valori compresi tra 0 e 1, enfatizzando i vettori più simili. I pesi softmax risultanti fungono da moltiplicatori sui vettori di valore per tutte le parole nel documento.
Ogni vettore di valore viene moltiplicato per elemento con il corrispondente peso softmax, creando una somma ponderata che rappresenta l'attenzione della parola su altre parole. Questo processo viene applicato in parallelo per ogni parola, generando un vettore di output calcolato dall'intero documento, pesato in base all'attenzione prestata a ciascuna parola. Queste informazioni vengono quindi aggiunte all'incorporamento di parole originale.
Per produrre l'output di una testa di attenzione, viene applicato uno strato denso regolare di forma corrispondente. È possibile utilizzare più teste di attenzione all'interno di un blocco codificatore, consentendo alla rete di apprendere diversi modelli di attenzione in contesti diversi. L'output di tutte le teste di attenzione viene combinato e aggiunto alla connessione skip, risultando nell'output del blocco.
Analogamente agli strati convoluzionali che utilizzano più canali, i Transformer spesso impiegano più teste di attenzione all'interno di un blocco codificatore per catturare diversi modelli di attenzione. Ciò consente alla rete di apprendere e combinare vari calcoli di attenzione, aumentando la rappresentazione dell'input in un'utile codifica del documento di testo.
Una volta prodotta la codifica, può essere utilizzata per varie attività. Ad esempio, è possibile applicare livelli aggiuntivi per la classificazione oppure la codifica può fungere da input per un'altra rete neurale per attività come la traduzione automatica. Inizialmente, la formazione di Transformer si concentrava sulla codifica in una lingua e sulla decodifica in un'altra. L'addestramento senza supervisione può anche essere condotto cancellando in modo casuale le parole nei documenti e addestrando il modello a prevedere le parole mancanti.
Per tenere conto dell'ordine delle parole e della prossimità, i trasformatori incorporano la codifica posizionale. Queste informazioni aggiuntive vengono aggiunte agli incorporamenti di parole e consentono al modello di comprendere le posizioni relative delle parole nel documento.
I trasformatori sono un'architettura potente per le attività di elaborazione del linguaggio naturale. Combinando i punti di forza delle reti ricorrenti e residue, hanno ottenuto risultati all'avanguardia in varie applicazioni. Il meccanismo di auto-attenzione consente al modello di apprendere a quali parole prestare attenzione e più teste di attenzione catturano diversi modelli di attenzione. I trasformatori hanno notevolmente avanzato il campo della modellazione del linguaggio e continuano ad essere un'area attiva di ricerca e sviluppo.
Altre metriche e curva ROC (DL 20)
Altre metriche e curva ROC (DL 20)
Questa è una breve lezione sulle metriche alternative per misurare il successo nelle attività di classificazione binaria quando si utilizzano le reti neurali.
In un'attività di classificazione binaria, in genere abbiamo due nodi di output nella nostra rete neurale e i nostri vettori target sono [1, 0] o [0, 1]. Quando si decodifica l'output della rete in un'etichetta di categoria, ci sono quattro possibili risultati:
Questi risultati possono essere utilizzati per calcolare diverse metriche per valutare le prestazioni del modello nella classificazione binaria. Ecco alcune metriche alternative da considerare:
L'accuratezza, che misura la frazione complessiva di etichette corrette, potrebbe non essere sempre la metrica più informativa. Diverse situazioni, come l'importanza di falsi positivi o falsi negativi, possono richiedere un focus su metriche specifiche. Inoltre, la distribuzione di etichette positive e negative nel set di dati può influenzare notevolmente l'accuratezza.
Per comprendere i compromessi tra le metriche, è comune visualizzarli utilizzando tecniche come la curva ROC (Receiver Operating Characteristic). La curva ROC traccia il tasso di falsi positivi rispetto al tasso di veri positivi per diverse soglie di classificazione.
Considerando i compromessi tra falsi positivi e falsi negativi e analizzando la curva ROC, possiamo scegliere il modello e la metrica di valutazione più adatti in base ai requisiti specifici del nostro problema.
Invece di affidarsi esclusivamente all'accuratezza, è importante considerare l'importanza relativa dei falsi positivi e dei falsi negativi e il modo in cui i diversi modelli si comportano a questo proposito. Pertanto, quando si lavora al progetto, è consigliabile valutare i compromessi tra le metriche e considerare le implicazioni per il problema specifico, piuttosto che fare affidamento esclusivamente sull'accuratezza complessiva.
Comprendere i compromessi tra diverse metriche è fondamentale quando si valutano i modelli di machine learning. In alcuni scenari, l'accuratezza potrebbe non fornire un quadro completo delle prestazioni di un modello, in particolare quando falsi positivi e falsi negativi hanno livelli di importanza diversi. Esploriamo alcuni casi in cui le metriche alternative sono più appropriate:
Importanza di falsi positivi e falsi negativi: in domini come la diagnosi medica, le conseguenze di falsi positivi e falsi negativi possono variare in modo significativo. Ad esempio, nella rilevazione del cancro, un falso negativo (la mancanza di un caso positivo) può avere gravi implicazioni, mentre un falso positivo (la diagnosi errata di un caso negativo) può portare a trattamenti non necessari. In tali casi, metriche come precisione e richiamo/sensibilità possono offrire preziose informazioni sulle prestazioni di un modello.
Dati non bilanciati: quando le etichette positive e negative sono distribuite in modo non uniforme nel set di dati, l'accuratezza può essere fuorviante. Supponiamo che il 95% dei punti dati appartenga alla classe positiva. In tal caso, un modello che prevede semplicemente tutto come positivo raggiungerebbe un'elevata precisione del 95% senza apprendere effettivamente i modelli sottostanti. Metriche come la precisione e il richiamo possono aiutare ad affrontare il pregiudizio e concentrarsi sulle prestazioni del modello in ogni classe.
Compromesso tra precisione e richiamo: i modelli di machine learning spesso presentano un compromesso tra precisione e richiamo. La precisione misura la capacità di identificare correttamente gli esempi positivi, mentre il ricordo misura la capacità di catturare tutti gli esempi positivi. Regolando la soglia o il limite decisionale del modello, possiamo dare priorità alla precisione o al richiamo. Tuttavia, la modifica della soglia per migliorare una metrica spesso va a scapito dell'altra. Comprendere questo compromesso è importante quando si seleziona la metrica appropriata per un determinato problema.
Curva ROC (Receiver Operating Characteristic): la curva ROC fornisce una rappresentazione grafica delle prestazioni di un modello di classificazione binaria tracciando il tasso di falsi positivi rispetto al tasso di veri positivi a varie soglie di classificazione. Un modello che raggiunge alti tassi di veri positivi con bassi tassi di falsi positivi avrà una curva più vicina all'angolo in alto a sinistra, che indica prestazioni migliori. L'area sotto la curva ROC (AUC-ROC) è comunemente usata come metrica di riepilogo, con valori più vicini a 1 che indicano prestazioni migliori.
Diversi modelli di machine learning possono avere diversi compromessi tra sensibilità e specificità o precisione e richiamo. È importante considerare i requisiti specifici del problema e l'importanza relativa delle diverse metriche. Valutando questi compromessi e comprendendo le prestazioni dei modelli su vari parametri, possiamo prendere decisioni più informate e scegliere il modello più adatto per la nostra applicazione.
Nel tuo progetto, considera i compromessi tra falsi positivi e falsi negativi e seleziona le metriche che si allineano con gli obiettivi del problema. Invece di fare affidamento esclusivamente sull'accuratezza, prendi in considerazione le esigenze e le implicazioni specifiche del tuo compito per valutare e confrontare accuratamente le prestazioni di diversi modelli.
L'Adamo ottimizzatore (DL 21)
L'Adamo ottimizzatore (DL 21)
L'obiettivo di questa lezione è dimostrare come possiamo affrontare i punti deboli della discesa del gradiente stocastico (SGD) e introdurre l'ottimizzatore Adam, che è stato ampiamente utilizzato per l'addestramento delle reti neurali.
In SGD, aggiorniamo ogni peso nella rete neurale sottraendo il prodotto del tasso di apprendimento e la derivata parziale della perdita rispetto a quel peso per ogni batch su cui ci alleniamo. Questo processo va nella direzione del gradiente negativo della perdita, minimizzandolo gradualmente. Tuttavia, SGD può incontrare diverse modalità di errore che ne ostacolano l'efficacia.
Per illustrare questi problemi, iniziamo con un esempio unidimensionale in cui miriamo a ridurre al minimo la perdita. In questo caso SGD ci porta in discesa seguendo la direzione della pendenza, avvicinandosi gradualmente al minimo. Tuttavia, ci sono scenari in cui SGD non è utile. Se raggiungiamo un minimo locale, dove il gradiente è zero, non ci allontaneremo da quel punto. Allo stesso modo, trovarsi su un plateau della funzione di perdita, dove anche il gradiente è zero, impedisce il progresso. Sebbene la stocasticità derivante dall'addestramento su lotti diversi a volte possa aiutare a sfuggire ai minimi o agli altipiani locali, non risolve completamente questi problemi.
Nei problemi di ottimizzazione di dimensioni superiori, come l'addestramento di reti neurali con più dimensioni di peso, sorgono ulteriori sfide. I punti di sella, dove sono presenti minimi e massimi locali in direzioni diverse, possono far sì che il gradiente sia zero, rallentando l'apprendimento. Inoltre, le discrepanze nelle scale delle derivate parziali su diverse dimensioni possono portare a un comportamento a zig-zag durante la discesa del gradiente, causando overshooting e una convergenza più lenta.
L'ottimizzatore Adam risolve questi problemi con due idee chiave. Il primo è lo slancio, che favorisce il proseguimento nella stessa direzione quando sono stati compiuti diversi passi in quella direzione. Lo slancio aiuta a superare gli altipiani e può guidare l'algoritmo lontano dai punti di sella. La seconda idea prevede il mantenimento di una media mobile delle derivate parziali e delle derivate parziali al quadrato. Stimando il secondo momento (varianza) delle derivate parziali, possiamo normalizzare i passi compiuti in ogni dimensione, riducendo zigzag e overshooting.
La regola di aggiornamento di Adam sostituisce il termine della derivata parziale nell'aggiornamento del peso con la media mobile della derivata parziale (v) divisa per la radice quadrata della media mobile della derivata parziale al quadrato (s), insieme a una piccola costante (epsilon) per evitare la divisione per zero. Questa regola di aggiornamento garantisce passaggi più equilibrati tra le dimensioni e si è dimostrata più efficace dell'SGD vanilla per l'addestramento delle reti neurali.
L'ottimizzatore Adam risolve i limiti di SGD incorporando momentum e mantenendo le medie mobili delle derivate parziali. Queste modifiche migliorano la capacità dell'ottimizzatore di navigare nei minimi locali, negli altipiani e nei punti di sella, riducendo al contempo il comportamento a zig-zag e l'overshooting. Di conseguenza, Adam è diventato una scelta popolare per l'addestramento pratico delle reti neurali.
Codificatori automatici (DL 22)
Codificatori automatici (DL 22)
In molti scenari di deep learning, incontriamo spesso l'idea di addestrare una rete neurale su un set di dati e utilizzare un livello nascosto da quella rete per codificare i dati che possono essere applicati ad altri problemi o set di dati. Questo concetto è noto come transfer learning. Ad esempio, con le reti residue, la pre-formazione comporta l'apprendimento di utili tecniche di elaborazione delle immagini che possono essere successivamente applicate a diversi set di dati. Scartando i livelli di output del modello pre-addestrato e aggiungendo nuovi livelli di output per una nuova attività, creiamo essenzialmente una nuova rete che elabora i dati codificati prodotti dal modello pre-addestrato.
Gli incorporamenti di parole servono anche allo scopo della codifica dei dati, dove l'obiettivo è apprendere una rappresentazione che catturi informazioni significative negli strati nascosti. Questa idea si estende anche a vari altri contesti. Un modello degno di nota che abbraccia questo concetto è l'autoencoder. Un codificatore automatico viene addestrato su dati non supervisionati, in cui i dati di input e i dati di output sono gli stessi. Sebbene possa sembrare banale risolvere questo problema di regressione utilizzando la regressione lineare, l'obiettivo principale di un codificatore automatico è apprendere una rappresentazione più compatta nei suoi livelli nascosti.
Riducendo progressivamente la dimensione dei livelli nascosti, l'autoencoder costringe la rete ad apprendere rappresentazioni compresse dei dati di input. Se la rete è in grado di riprodurre in modo coerente l'input originale da questa rappresentazione compressa, apprende efficacemente la compressione dei dati. Ad esempio, se abbiamo un'immagine di 200x200 pixel come input e la riduciamo a uno strato nascosto di 1000 neuroni, che possono poi espandersi per riprodurre una buona approssimazione dell'immagine originale, otteniamo un rapporto di compressione di 20:1.
Tuttavia, l'utilizzo di una rete neurale esclusivamente per la compressione dei dati non è particolarmente utile poiché sono disponibili algoritmi di compressione non basati sull'apprendimento più efficienti. Invece, il valore di un codificatore automatico sta nell'usare la prima metà della rete per generare una rappresentazione per trasferire l'apprendimento in altre attività di deep learning o la seconda metà come decodificatore per generare esempi di dati dal set di input.
L'applicazione iniziale di un codificatore automatico per il transfer learning era importante nei primi giorni del deep learning. Tuttavia, da allora sono stati sviluppati approcci migliori per trasferire l'apprendimento. D'altra parte, l'utilizzo della parte del decodificatore della rete per generare campioni di dati è diventato la base per molti altri algoritmi di deep learning.
L'approccio più semplice prevede il raggiungimento della massima compressione possibile riducendo al minimo la dimensione del livello nascosto. In questo scenario, qualsiasi vettore di input ragionevole fornito al decodificatore dovrebbe generare dati simili alla distribuzione dei dati di input. Tuttavia, determinare la dimensione ottimale dello strato nascosto è impegnativo. Può essere troppo piccolo, rendendolo incapace di riprodurre accuratamente gli input, o troppo grande, con conseguente generazione di dati non realistici che non assomigliano al set di dati originale.
Per risolvere questo problema, possiamo modificare l'architettura per incoraggiare l'autoencoder ad apprendere rappresentazioni che assomigliano a vettori campionati casualmente. Questa modifica ci porta all'autoencoder variazionale. In un codificatore automatico variazionale, il vettore centrale nascosto viene sostituito con due vettori che rappresentano la media e la varianza. Il processo di addestramento prevede la generazione di un vettore casuale utilizzando una distribuzione normale, che viene quindi combinata con i vettori di codifica nascosti per creare l'input per il decodificatore. Inoltre, la perdita per la rete del codificatore include un termine di divergenza che incoraggia la media e la varianza a rimanere vicine a una distribuzione normale. Questo aiuta a raggruppare le rappresentazioni attorno al centro dello spazio, rendendolo più affidabile per il campionamento casuale. Pertanto, l'autoencoder variazionale ci consente di generare campioni che assomigliano molto alla distribuzione dei dati appresa dalla rete.
In sintesi, il concetto di utilizzare il livello nascosto di una rete neurale come codifica dei dati si è evoluto nella capacità di campionare da una distribuzione di probabilità appresa. Questo apre le porte a reti antagonistiche generative e alla generazione di dati diversi e interessanti.