Transfer learning

Cos’è il transfer learning?

Il transfer learning è un approccio di Deep Learning in cui un modello addestrato per un’attività viene utilizzato come punto di partenza per un modello che esegue un’attività simile. Aggiornare e riaddestrare una rete con il transfer learning è più facile e veloce rispetto a dover addestrare una rete partendo da zero. Il transfer learning viene utilizzato per la classificazione delle immagini, il rilevamento oggetti, il riconoscimento vocale e altre applicazioni.

Perché il transfer learning è importante?

Il transfer learning consente di sfruttare le conoscenze della community del Deep Learning. I modelli pre-addestrati più utilizzati costituiscono un’architettura robusta e permettono di non dover partire da zero. Il transfer learning è una tecnica molto utilizzata per l’apprendimento con supervisione perché:

  • Consente di addestrare modelli con meno dati etichettati riutilizzando i modelli più popolari già addestrati su grandi set di dati.
  • Può ridurre i tempi di addestramento e le risorse di calcolo necessarie. Con il transfer learning, i pesi delle reti neurali non vengono appresi da zero in quanto il modello pre-addestrato ha già appreso i pesi in base alle fasi di apprendimento precedenti.
  • È possibile usare le architetture dei modelli sviluppate dalla community che si occupa di ricerca nel campo del Deep Learning, comprese le architetture più note come GoogLeNet e YOLO.
Diagramma del transfer learning che mostra come vengono trasferite le conoscenze dal modello 1 (addestrato con il set di dati 1) al modello 2 (addestrato con il set di dati 2). Il set di dati 1 è più grande del set di dati 2.

Trasferimento di conoscenze da un modello pre-addestrato a un altro modello addestrabile con meno dati etichettati.

Addestramento a partire da zero o transfer learning?

Per creare un modello di Deep Learning, è possibile addestrare un modello a partire da zero oppure eseguire il transfer learning usando un modello pre-addestrato.

Lo sviluppo e l’addestramento di un modello a partire da zero è più efficace per attività estremamente specifiche per le quali è impossibile usare modelli preesistenti. Lo svantaggio di questo approccio è che in genere, per produrre risultati accurati, occorre una grande quantità di dati. Anche la creazione di un modello da zero può essere efficace nei casi in cui è possibile raggiungere il livello di precisione desiderato con reti più piccole. Ad esempio, le reti neurali ricorrenti (RNN) e le reti Long Short-Term Memory (LSTM) sono particolarmente efficaci con i dati sequenziali che variano in termini di lunghezza e risolvono problemi quali la classificazione dei segnali e la previsione delle serie storiche.

Il transfer learning è utile per quelle attività per cui esistono vari modelli pre-addestrati. Ad esempio, molte delle reti neurali convoluzionali (CNN) tra le più diffuse sono pre-addestrate sul set di dati ImageNet, che contiene oltre 14 milioni di immagini e mille classi di immagini. Se si desidera classificare le immagini dei fiori del proprio giardino (o qualsiasi immagine non inclusa nel set di dati ImageNet) e si ha un numero limitato di immagini di fiori a disposizione, è possibile trasferire i livelli e i relativi pesi da una rete SqueezeNet, sostituire i layer finali e riaddestrare il modello con le proprie immagini.

Questo approccio può contribuire al raggiungimento di un livello di precisione del modello più elevato in tempi più brevi grazie al transfer learning.

Confronto delle prestazioni di rete rispetto all’addestramento tra reti con e senza il transfer learning. La curva di prestazione del transfer learning mostra un punto di partenza, una pendenza e un asintoto maggiori.

Confronto delle prestazioni di rete (precisione) tra l’addestramento a partire da zero e il transfer learning.

Applicazioni del transfer learning

Il transfer learning è utilizzato in molte applicazioni di Deep Learning, come:

Elaborazione di segnali vocali e audio

Guarda l’esempio MATLAB Transfer learning con reti audio pre-addestrate in Deep Network Designer.

Analisi testuale

Guarda l’esempio MATLAB GitHub Regolazione di un modello BERT per testi giapponesi.

Modelli pre-addestrati per il transfer learning

Al centro del transfer learning c’è il modello di Deep Learning pre-addestrato, costruito dai ricercatori che operano nel campo del Deep Learning, addestrato con migliaia o milioni di punti di dati di esempio.

I modelli pre-addestrati disponibili sono molti e ciascuno presenta aspetti positivi e negativi che occorre prendere in considerazione:

  1. Velocità delle previsioni: In che tempi il modello è in grado di prevedere nuovi input? Oltre a variare in base a fattori quali dimensioni di batch e hardware, la velocità di previsione varia anche in base all’architettura e alle dimensioni del modello.
  2. Dimensioni: Qual è il footprint di memoria desiderato per il modello? L’importanza delle dimensioni del modello varia a seconda di dove e come si ha intenzione di distribuirlo. Dovrà essere eseguito su un hardware embedded o su desktop? Se il modello sarà distribuito su un target a risorse limitate, è importante considerare anche le dimensioni della rete.
  3. Precisione: Come si possono definire le prestazioni del modello prima del riaddestramento? Un modello con buone prestazioni con il set di dati ImageNet probabilmente funzionerà bene anche con attività simili nuove. Tuttavia, un basso livello di precisione con ImageNet non significa necessariamente che le prestazioni del modello saranno scarse con tutte le attività.
Confronto di dimensioni del modello, velocità di previsione e precisione di modelli di CNN pre-addestrati, utilizzabili per il transfer learning.

Confronto di dimensioni del modello, velocità e precisione di modelli pre-addestrati di CNN tra i più utilizzati.

Qual è il modello migliore per il tuo workflow di transfer learning?

Poiché i modelli di transfer learning tra cui scegliere sono numerosi, è importante tenere a mente i tradeoff previsti e gli obiettivi generali del proprio progetto specifico. Un buon approccio da adottare consiste nel provare modelli diversi in modo tale da trovare quello che si adatta al meglio alla propria applicazione.

Inizia con modelli semplici, come GoogLeNet, VGG-16 e VGG-19, che consentono di fare iterazioni rapide e di sperimentare diverse fasi di pre-elaborazione dei dati e opzioni di addestramento. Una volta individuate le impostazioni più efficaci, fai un tentativo con una rete più precisa per vedere se i risultati migliorano.

Modelli leggeri ed efficienti dal punto di vista computazionale, come SqueezeNet, MobileNet-v2 e ShuffleNet, sono delle buone opzioni quando l’ambiente di distribuzione limita le dimensioni del modello.

Come si fa a ottenere modelli pre-addestrati in MATLAB?

Esplora l’hub per i modelli di Deep Learning di MATLAB per accedere ai modelli più recenti suddivisi per categoria e ricevere consigli sulla scelta del modello. È possibile caricare gran parte dei modelli con un’unica funzione MATLAB, come la funzione darknet19.

È inoltre possibile utilizzare reti pre-addestrate di piattaforme esterne. È possibile convertire un modello da TensorFlow™, PyTorch® o ONNX™ in un modello MATLAB usando una funzione di importazione, come la funzione importNetworkFromTensorFlow.

Ottieni modelli di Deep Learning pre-addestrati direttamente da MATLAB oppure da piattaforme di Deep Learning esterne (PyTorch, TensorFlow e ONNX).

Il transfer learning applicato alla progettazione di soft-sensor

Leggi come Poclain Hydraulics ha utilizzato le reti pre-addestrate in MATLAB per velocizzare la progettazione di soft-sensor.

“Abbiamo individuato due reti neurali che erano già implementate in MATLAB e tali reti neurali ci hanno aiutato a incorporare i codici nell’hardware per fare previsioni in tempo reale della temperatura.”

Bruno Dandine, Poclain Hydraulics

Transfer learning con MATLAB

L'uso di MATLAB con Deep Learning Toolbox™ consente di accedere a centinaia di modelli pre-addestrati e di eseguire il transfer learning con funzioni integrate o app interattive. Per diverse applicazioni di transfer learning, potrebbe essere necessario utilizzare anche altri toolbox come Computer Vision Toolbox™, Audio Toolbox™, Lidar Toolbox™ o Text Analytics Toolbox™.

Il workflow del transfer learning

Il workflow del transfer learning comprende varie fasi: ottenere una rete pre-addestrata, modificarla, riaddestrarla per poi usarla per fare previsioni su nuovi dati.

Diagramma delle fasi del workflow del transfer learning.

Nonostante esistano diverse architetture e applicazioni del transfer learning, i workflow di transfer learning si compongono in gran parte di una serie di fasi comuni. L’illustrazione che segue mostra il workflow del transfer learning per la classificazione di immagini. Il transfer learning viene svolto su un modello GoogLeNet pre-addestrato, una rete molto utilizzata con 22 layer addestrata per classificare 1000 categorie di oggetti.

  1. Seleziona un modello pre-addestrato. Per iniziare, può essere utile selezionare un modello semplice.
Modello di CNN pre-addestrato che può essere modificato per il transfer learning nelle attività di classificazione di immagini.

Architettura del modello GoogLeNet, una rete con 22 layer addestrata per classificare 1000 categorie di oggetti.

  1. Sostituisci i layer finali. Per riaddestrare la rete per classificare un nuovo set di immagini e classi, occorre sostituire l’ultimo livello apprendibile e il livello di classificazione finale del modello GoogLeNet. Il layer finale completamente connesso (ultimo livello apprendibile) viene modificato in modo da contenere un numero di nodi uguale al numero di nuove classi. Il nuovo livello di classificazione produrrà un output sulla base delle probabilità calcolate dal layer softmax.
La sostituzione dei layer finali di un modello di CNN pre-addestrato prima del riaddestramento del modello è essenziale per il transfer learning.

Sostituisci l’ultimo livello apprendibile e il livello di classificazione di un modello di CNN prima di riaddestrare il modello.

Una volta modificati i layer, il layer finale completamente connesso specificherà il nuovo numero di classi che la rete apprenderà e il livello di classificazione determinerà gli output delle nuove categorie di output disponibili. Ad esempio, l’addestramento di GoogLeNet era stato inizialmente effettuato su 1000 categorie ma, con la sostituzione dei layer finali, è possibile rieseguire l’addestramento per classificare solo le cinque (o qualsiasi altro numero) categorie di oggetti che interessano.

  1. In via opzionale, “congela” i pesi. È possibile “congelare” i pesi dei layer precedenti nella rete impostando una velocità di apprendimento su quei livelli pari a zero. Durante l’addestramento, i parametri dei layer congelati non vengono aggiornati, il che può velocizzare notevolmente l’addestramento della rete. Se il nuovo set di dati è piccolo, il congelamento dei pesi può anche impedire l’overfitting della rete sul nuovo set di dati.
  2. Riaddestra il modello. Con il riaddestramento la rete viene aggiornata in modo da apprendere e identificare le feature associate alle nuove immagini e categorie. Nella gran parte dei casi, il riaddestramento necessita di un numero inferiore di dati rispetto all’addestramento di un modello partendo da zero.
  3. Prevedi e valuta la precisione della rete. Dopo aver riaddestrato il modello, è possibile classificare nuove immagini e valutare le prestazioni della rete.

Un approccio interattivo al transfer learning

Usando l’app Deep Network Designer, è possibile completare in modo interattivo l’intero workflow di transfer learning, comprese le fasi di selezione o importazione (da MATLAB, TensorFlow o PyTorch) di un modello pre-addestrato, di modifica dei layer finali e di riaddestramento della rete con dati nuovi, senza codice o con pochissimo codice.

Ulteriori informazioni sul transfer learning

Guarda questi video per imparare a usare il transfer learning dalla riga di comando o con l’app Deep Network Designer.

Argomenti correlati