Il model pruning è una tecnica utilizzata nell'apprendimento automatico per ottimizzare i modelli addestrati riducendone le dimensioni e la complessità. Ciò si ottiene identificando e rimuovendo i parametri meno importanti, come i pesi o le connessioni all'interno di una rete neurale (NN), che contribuiscono minimamente alle prestazioni complessive del modello. L'obiettivo è quello di creare modelli più piccoli e veloci che richiedano meno potenza di calcolo e memoria, rendendoli più efficienti senza un calo significativo della precisione. Questo processo è un tipo specifico di potatura applicata direttamente ai modelli di apprendimento automatico.
Perché usare il Model Pruning?
La motivazione principale del pruning dei modelli è l'efficienza. I moderni modelli di deep learning, pur essendo potenti, possono essere molto grandi e impegnativi dal punto di vista computazionale. Questo pone delle sfide per la distribuzione dei modelli, soprattutto su dispositivi con risorse limitate come gli smartphone o i sistemi di edge computing. Il model pruning affronta questi problemi attraverso:
- Riduzione delle dimensioni dei modelli: I modelli più piccoli richiedono meno spazio di archiviazione, il che li rende più facili da distribuire su dispositivi come quelli che eseguono l'AppUltralytics HUB.
- Aumento della velocità di inferenza: con meno parametri, i modelli potati eseguono i calcoli più velocemente, riducendo la latenza di inferenza. Questo è fondamentale per le applicazioni di inferenza in tempo reale.
- Riduzione del consumo energetico: Meno calcoli significano meno consumo di energia, il che è importante per i dispositivi alimentati a batteria e per promuovere pratiche di IA sostenibili.
- Ridurre al minimo l'overfitting: La rimozione dei parametri ridondanti può talvolta aiutare i modelli a generalizzarsi meglio ai nuovi dati, riducendo potenzialmente l 'overfitting.
Tipi di potatura del modello
Le tecniche di potatura dei modelli variano, ma in genere si dividono in categorie in base a ciò che viene rimosso:
- Potenziamento dei pesi (non strutturato): I singoli pesi o le connessioni all'interno della rete che hanno un'importanza o una magnitudo bassa vengono azzerati. Spesso si ottengono modelli scarsi, ma potrebbe essere necessario un hardware o un software specializzato per ottenere una velocità ottimale.
- Pruning di neuroni/filtri (strutturato): Vengono rimossi interi neuroni, filtri (nelle reti neurali convoluzionali (CNN)) o altri componenti strutturali. In genere questo porta a modelli più regolari e più piccoli e densi che sono più facili da accelerare su hardware standard usando strumenti come NVIDIA TensorRT.
La potatura può essere applicata dopo la formazione o integrata nel processo di formazione. Spesso, un modello potato richiede una messa a punto (formazione aggiuntiva) per recuperare l'accuratezza persa. Puoi esplorare diverse strategie di pruning in risorse come il PyTorch Pruning Tutorial.
Applicazioni del mondo reale
La potatura dei modelli è preziosa in molti settori:
- Visione artificiale mobile: Ultralytics YOLO I modelli utilizzati per il rilevamento degli oggetti sui dispositivi mobili possono essere ridotti per essere eseguiti in modo efficiente, consentendo l'analisi in tempo reale direttamente sul dispositivo senza bisogno di una costante connettività al cloud. Questo è fondamentale per le applicazioni distribuite su piattaforme come Raspberry Pi o che utilizzano acceleratori come Edge TPU diGoogle.
- Sistemi autonomi: Nelle auto a guida autonoma o nei droni, i modelli devono elaborare i dati dei sensori in modo istantaneo. La potatura di modelli di percezione complessi aiuta a raggiungere la bassa latenza necessaria per una navigazione e un processo decisionale sicuri, spesso implementati su hardware come NVIDIA Jetson.
Potenziamento del modello rispetto ad altre tecniche di ottimizzazione
Il model pruning è una delle tante tecniche di ottimizzazione dei modelli. È importante distinguerla da:
- Quantizzazione del modello: Riduce la precisione dei pesi e delle attivazioni del modello (ad esempio, da float a 32 bit a interi a 8 bit). Anche questo riduce le dimensioni e accelera i calcoli, ma funziona cambiando il tipo di dati, non rimuovendo i parametri. Vedi Ottimizzazione diTensorFlow Lite per alcuni esempi.
- Distillazione della conoscenza: Consiste nell'addestrare un modello "studente" più piccolo per imitare l'output di un modello "insegnante" più grande e pre-addestrato. L'obiettivo è quello di trasferire le conoscenze, creando un modello compatto senza modificare direttamente l'insegnante. Per maggiori dettagli, leggi il documento originale sulla distillazione della conoscenza.
Queste tecniche non si escludono a vicenda e spesso vengono combinate con il pruning per ottenere i massimi benefici in termini di ottimizzazione. Ad esempio, un modello potrebbe essere prima potato e poi quantizzato prima della distribuzione finale. Puoi trovare indicazioni sull'ottimizzazione nella Documentazione di Ultralytics .