La visione artificiale è una delle aree più influenti dell’intelligenza artificiale, cambiando quasi ogni aspetto della nostra vita, alla pari dell’intelligenza artificiale generativa. Dall’analisi delle immagini mediche e dai veicoli autonomi ai sistemi di sicurezza, la visione artificiale basata sull’intelligenza artificiale è fondamentale per migliorare la sicurezza, l’efficienza e l’assistenza sanitaria attraverso tecnologie come il rilevamento di oggetti, il riconoscimento facciale e la classificazione delle immagini.
Ma La visione artificiale non sta facendo scalpore solo in campi specializzati; fa anche parte delle app consumer che utilizziamo quotidianamente. Miglioramento della messa a fuoco della fotocamera, modifica di foto, riconoscimento e scansione di testo in tempo reale con la fotocamera di uno smartphone, abilitazione di dispositivi domestici intelligenti come telecamere di sicurezza per rilevare e avvisare gli utenti dei movimenti, stima della posa per app di monitoraggio del fitness, identificazione di calorie e alimenti per app di monitoraggio della dieta, identificazione del volto per sbloccare i telefoni e rilevamento e classificazione del volto per organizzare le foto per persona negli album. Queste applicazioni sono diventate parte integrante delle esperienze quotidiane di milioni di persone.
Fonte: Real Computer Vision di Boris Denisenko su Medio
La maggior parte degli ingegneri del machine learning non costruisce i propri modelli da zero per dare vita a queste funzionalità. Si affidano invece a modelli open source esistenti. Sebbene questo sia l’approccio più fattibile, poiché costruire un modello da zero è proibitivamente costoso, c’è ancora molto lavoro da fare prima che il modello possa essere utilizzato in un’app.
Innanzitutto, il modello open source può risolvere uno scenario simile ma non esattamente quello di cui un ingegnere ha bisogno. Ad esempio, un ingegnere di machine learning potrebbe aver bisogno di un’app che confronti diverse bevande, ma il modello disponibile è progettato per confrontare prodotti alimentari. Sebbene funzioni bene con il cibo, potrebbe avere difficoltà se applicato alle bevande.
In secondo luogo, le condizioni reali necessarie per il funzionamento di questi modelli spesso differiscono in modo significativo dagli ambienti per i quali sono stati inizialmente progettati. Ad esempio, un modello potrebbe avere centinaia di milioni di parametri, rendendolo troppo grande e impegnativo dal punto di vista computazionale per essere eseguito, diciamo, su uno smartphone. Il tentativo di eseguire un modello di questo tipo su un dispositivo con risorse di calcolo limitate porta a prestazioni lente, consumo eccessivo della batteria o mancata esecuzione.
Adattamento agli scenari e alle condizioni del mondo reale
Ciò prima o poi porta la maggior parte degli ingegneri che applicano l’apprendimento automatico per la visione artificiale nelle app consumer ad affrontare la necessità di:
- Adattare un modello open source esistente per adattarlo al loro scenario specifico.
- Ottimizzazione del modello per l’esecuzione con capacità limitate.
Adattare un modello non è qualcosa che puoi fare in un batter d’occhio. Inizi con un modello pre-addestrato e adattalo al tuo compito specifico. Ciò comporta la modifica di una moltitudine di parametri: il numero di strati, il numero di neuroni in ogni strato, la velocità di apprendimento, la dimensione del batch e altro ancora. L’enorme numero di combinazioni possibili può essere schiacciante, con potenzialmente milioni di configurazioni diverse da testare. È qui che entra in gioco l’ottimizzazione degli iperparametri (HPO). HPO aiuta a semplificare questo processo, consentendoti di trovare la configurazione migliore più velocemente che se dovessi regolare manualmente i parametri separatamente.
Una volta adattato il modello al tuo scenario, la sfida successiva è farlo funzionare su un dispositivo con risorse limitate. Ad esempio, potrebbe essere necessario implementare il modello su uno smartphone con solo 6 GB di RAM. In questi casi, la compressione del modello diventa essenziale per ridurne le dimensioni e renderlo gestibile per dispositivi con memoria e potenza di elaborazione limitate.
Tecniche di ottimizzazione degli iperparametri (HPO).
L’ottimizzazione degli iperparametri implica la ricerca del miglior set di parametri per la tua rete neurale per ridurre al minimo l’errore su un’attività specifica. Supponiamo che tu stia addestrando un modello a stimare l’età di una persona da una foto. L’errore in questo contesto si riferisce alla deviazione dell’età stimata del modello dall’età effettiva della persona, misurata, diciamo, nel numero di anni in cui è inattivo.
Ricerca in griglia
La ricerca a griglia è un metodo a forza bruta che trova la combinazione ottimale testando ogni possibile serie di parametri. Inizi con un modello esistente e lo adatti al tuo compito. Quindi, modifichi sistematicamente i parametri, come il numero di neuroni o strati, per vedere come questi cambiamenti influiscono sull’errore del modello. La ricerca a griglia prevede il test di ciascuna combinazione di questi parametri per trovare quella che produce l’errore più basso. La sfida è che ci sono numerosi parametri che puoi regolare, ciascuno con un’ampia gamma di valori potenziali.
Sebbene questo metodo garantisca di trovare l’opzione migliore, è incredibilmente dispendioso in termini di tempo e spesso poco pratico.
Ricerca casuale
Un altro approccio è la ricerca casuale, in cui si campiona casualmente una porzione di possibili combinazioni invece di testare ogni combinazione. Questo metodo prevede la selezione di valori casuali per ciascun parametro all’interno di un intervallo specificato e il test di tali combinazioni. Sebbene sia più veloce della ricerca a griglia, non garantisce il miglior risultato. Tuttavia, è probabile che si trovi una soluzione buona, se non ottimale. È un compromesso tra velocità e precisione.
Ad esempio, se ci sono 1.000 possibili combinazioni di parametri, potresti campionarne e testarne casualmente 100, il che richiederebbe solo un decimo del tempo rispetto al test di tutte le combinazioni.
HPO utilizzando algoritmi di ottimizzazione
I metodi di ottimizzazione degli iperparametri basati sull’ottimizzazione utilizzano diversi approcci matematici per trovare in modo efficiente le migliori impostazioni dei parametri. Ad esempio, l’ottimizzazione bayesiana utilizza modelli probabilistici per guidare la ricerca, mentre TetraOpt, un algoritmo sviluppato dall’autore e dal team, utilizza l’ottimizzazione del treno di tensori per navigare meglio negli spazi ad alta dimensione. Questi metodi sono più efficienti della ricerca a griglia o casuale perché mirano a ridurre al minimo il numero di valutazioni necessarie per trovare gli iperparametri ottimali, concentrandosi sulle combinazioni più promettenti senza testare ogni possibilità.
Tali algoritmi di ottimizzazione aiutano a trovare soluzioni migliori più velocemente, il che è particolarmente utile quando le valutazioni dei modelli sono computazionalmente costose. Mirano a fornire i migliori risultati con il minor numero di prove.
Modello ML Tecniche di compressione
Una volta che un modello funziona in teoria, eseguirlo in condizioni di vita reale è la sfida successiva. Prendiamo, ad esempio, ResNet per il riconoscimento facciale, YOLO per la gestione del traffico e l’analisi sportiva o VGG per il trasferimento di stili e la moderazione dei contenuti. Sebbene potenti, questi modelli sono spesso troppo grandi per dispositivi con risorse limitate, come smartphone o fotocamere intelligenti.
Gli ingegneri ML si rivolgono a una serie di tecniche di compressione collaudate per rendere i modelli più efficienti per tali ambienti. Questi metodi (quantizzazione, potatura, decomposizione della matrice e distillazione della conoscenza) sono essenziali per ridurre le dimensioni e le esigenze computazionali dei modelli di intelligenza artificiale preservandone le prestazioni.
Quantizzazione
Fonte: Padroneggia l’arte della quantizzazione di Jan Marcel Kezmann su Medio
La quantizzazione è uno dei metodi più popolari per comprimere le reti neurali, principalmente perché richiede un calcolo aggiuntivo minimo rispetto ad altre tecniche.
L’idea centrale è semplice: una rete neurale comprende numerose matrici piene di numeri. Questi numeri possono essere memorizzati in diversi formati su un computer, come virgola mobile (ad esempio, 32,15) o intero (ad esempio, 4). Formati diversi occupano quantità di memoria diverse. Ad esempio, un numero nel formato float32 (ad esempio, 3.14) occupa 32 bit di memoria, mentre un numero nel formato int8 (ad esempio, 42) richiede solo 8 bit.
Se i numeri di un modello sono originariamente memorizzati nel formato float32, possono essere convertiti nel formato int8. Questa modifica riduce significativamente l’impronta di memoria del modello. Ad esempio, un modello che inizialmente occupa 100 MB potrebbe essere compresso a soli 25 MB dopo la quantizzazione.
Potatura
Come accennato in precedenza, una rete neurale è costituita da un insieme di matrici piene di numeri, note come “pesi”. La potatura è il processo di rimozione dei pesi “non importanti” da queste matrici. Eliminando questi pesi non necessari, il comportamento del modello rimane sostanzialmente inalterato, ma i requisiti di memoria e di calcolo vengono significativamente ridotti.
Ad esempio, immagina che una delle matrici della rete neurale assomigli a questa:
Dopo la potatura, potrebbe assomigliare a questo:
I trattini (“-“) indicano dove sono stati rimossi gli elementi durante la potatura. Questo modello semplificato richiede meno risorse computazionali per funzionare.
Decomposizione della matrice
La decomposizione della matrice è un altro metodo di compressione efficace che prevede la scomposizione (o la “scomposizione”) delle matrici di grandi dimensioni in una rete neurale in diverse matrici più piccole e più semplici.
Ad esempio, supponiamo che una delle matrici in una rete neurale assomigli a questa:
La scomposizione della matrice ci consente di sostituire questa unica grande matrice con due più piccole.
Se moltiplicate insieme, queste matrici più piccole danno lo stesso risultato di quella originale, garantendo che il comportamento del modello rimanga coerente.
Ciò significa che possiamo sostituire la matrice della prima immagine con le matrici della seconda.
La matrice originale contiene 9 parametri, ma dopo la scomposizione, le matrici insieme ne contengono solo 6, con una riduzione del 33% circa. Uno dei principali vantaggi di questo metodo è la sua capacità di comprimere notevolmente i modelli di intelligenza artificiale, in alcuni casi più volte.
È importante notare che la scomposizione della matrice non è sempre perfettamente accurata. A volte durante il processo viene introdotto un piccolo errore di approssimazione, ma i miglioramenti in termini di efficienza spesso superano questo piccolo inconveniente.
Distillazione della conoscenza
La distillazione della conoscenza è una tecnica per costruire un modello più piccolo, noto come “modello studente”, trasferendo la conoscenza da un modello più grande e complesso, chiamato “modello insegnante”. L’idea chiave è addestrare il modello più piccolo insieme a quello più grande in modo che il modello dello studente impari a imitare il comportamento del modello dell’insegnante.
Ecco come funziona: passi gli stessi dati attraverso la grande rete neurale (l’insegnante) e quella compressa (lo studente). Entrambi i modelli producono output e il modello dello studente è addestrato a generare output quanto più simili possibile a quelli dell’insegnante. In questo modo, il modello compresso impara a funzionare in modo simile al modello più grande ma con meno parametri.
La distillazione può essere facilmente combinata con quantizzazione, potatura e decomposizione della matrice, dove il modello dell’insegnante è la versione originale e lo studente è quella compressa. Queste combinazioni aiutano a perfezionare la precisione del modello compresso.
In pratica, gli ingegneri spesso combinano queste tecniche per massimizzare le prestazioni dei loro modelli quando li implementano in scenari reali.
L’intelligenza artificiale si evolve lungo due percorsi paralleli. Da un lato, alimenta progressi impressionanti in settori come l’assistenza sanitaria, spingendo i limiti di ciò che pensavamo fosse possibile. Dall’altro, adattare l’intelligenza artificiale alle condizioni del mondo reale è altrettanto cruciale, portando la tecnologia avanzata nella vita quotidiana di milioni di persone, spesso senza soluzione di continuità e inosservata. Questa dualità rispecchia l’impatto della rivoluzione degli smartphone, che ha trasformato l’informatica da qualcosa di dirompente e costoso in una tecnologia accessibile e pratica per tutti.
Le tecniche di ottimizzazione trattate in questo articolo sono ciò che gli ingegneri utilizzano per rendere l’intelligenza artificiale una parte tangibile della vita quotidiana. Questa ricerca è in corso, con grandi aziende tecnologiche (come Meta, Tesla o Huawei) e laboratori di ricerca che investono risorse significative nella ricerca di nuovi modi per ottimizzare i modelli. Tuttavia, tecniche HPO e metodi di compressione ben implementati stanno già aiutando gli ingegneri di tutto il mondo a portare i modelli più recenti negli scenari e nei dispositivi di tutti i giorni, creando oggi prodotti straordinari per milioni di persone e spingendo avanti il settore attraverso le loro scoperte pubblicate e open source.