Neural Architecture Search (NAS)
La ricerca di architetture neurali (NAS) automatizza la progettazione delle reti neurali esplorando livelli e connessioni. Metodi, costi di calcolo e modelli realizzati con NAS.
La ricerca delle architetture neurali (NAS) è il ramo del machine learning automatizzato (AutoML) che progetta automaticamente la struttura di una rete neurale. Invece di scegliere manualmente i tipi di convoluzione e degli altri livelli, profondità, larghezze e connessioni, un algoritmo di ricerca propone architetture candidate, ne stima le prestazioni sul compito e usa i risultati per proporne di migliori. L’obiettivo è solitamente la precisione, spesso combinata con un costo come la latenza di inferenza, il numero di parametri o i FLOP sull’hardware di destinazione. NAS ha prodotto diversi backbone ampiamente utilizzati nella visione artificiale, tra cui EfficientNet e MobileNetV3.
Come funziona NAS#
Una rassegna pubblicata sul Journal of Machine Learning Research classifica i metodi NAS lungo tre dimensioni:
- Spazio di ricerca: L’insieme delle architetture che è possibile creare, per esempio quali tipi di operazioni, dimensioni dei kernel e connessioni skip sono consentiti e come possono essere collegati. Molti metodi cercano una piccola cella ripetibile e ne impilano copie, riducendo lo spazio di ricerca e permettendo di trasferire a un dataset grande una cella individuata su un dataset piccolo.
- Strategia di ricerca: L’algoritmo che sceglie quali candidati provare, dai controller di apprendimento per rinforzo e dagli algoritmi evolutivi fino ai metodi basati sul gradiente e al semplice campionamento casuale.
- Strategia di stima delle prestazioni: Il modo in cui si assegna un punteggio a un candidato senza addestrarlo completamente, per esempio usando meno epoche di addestramento, immagini o set di dati più piccoli, previsioni della precisione finale o pesi condivisi tra i candidati.
Da migliaia di giorni-GPU a poche ore#
I primi metodi NAS erano costosi perché ogni candidato veniva addestrato fino alla convergenza. Nello studio del 2016 di Zoph e Le, un controller ricorrente addestrato con apprendimento per rinforzo generava le reti e la ricerca veniva eseguita contemporaneamente su 800 GPU; lo studio successivo su NASNet usò 500 GPU per quattro giorni per individuare una cella su CIFAR-10 da trasferire a ImageNet. AmoebaNet ottenne risultati simili con l’evoluzione regolarizzata, al costo di circa 3,150 giorni-GPU. ENAS ridusse la ricerca a meno di 16 ore su una singola GPU condividendo i pesi del modello tra tutti i candidati, trattati come sottografi di un’unica grande rete; DARTS trasformò la scelta discreta delle operazioni in pesi continui, permettendo di ottimizzare l’architettura stessa con la discesa del gradiente in pochi giorni-GPU. Anche i benchmark hanno ridimensionato le aspettative del settore: la ricerca casuale con arresto anticipato ha ottenuto prestazioni almeno pari a ENAS sui benchmark Penn Treebank e CIFAR-10.
NAS consapevole dell’hardware e modelli creati con NAS#
NAS ha avuto il suo maggiore impatto pratico sui modelli efficienti per l'AI per dispositivi edge, in cui occorre bilanciare accuratezza e velocità su uno specifico dispositivo. MnasNet ha incluso nell'obiettivo di ricerca la latenza misurata su smartphone reali e ha raggiunto un'accuratezza top-1 su ImageNet del 75,2% in 78 ms su uno smartphone Pixel, risultando 1,8 volte più veloce di MobileNetV2 con un'accuratezza superiore dello 0,5%. EfficientNet-B0 è stato ottenuto con una ricerca analoga e poi esteso alla famiglia B1-B7 tramite scaling composto, mentre MobileNetV3 ha combinato NAS consapevole dell'hardware con l'algoritmo NetAdapt per ottimizzarlo per le CPU mobili. Per il rilevamento degli oggetti, i modelli YOLO-NAS di Deci, individuati tramite il motore di ricerca AutoNAC e progettati per limitare la perdita di accuratezza dopo la quantizzazione INT8, sono eseguibili con il pacchetto Ultralytics tramite la classe NAS classe per l'inferenza, la convalida e l'esportazione, ma non per l'addestramento. Da allora NVIDIA ha acquisito Deci e il team originale non aggiorna più i modelli.
Un esempio NAS essenziale#
L’esempio seguente esegue la strategia di ricerca più semplice, il campionamento casuale, su un piccolo spazio di ricerca di percettroni multistrato, usando le cifre scritte a mano di scikit-learn. Ogni candidato viene addestrato per sole 30 epoche come stima economica delle prestazioni e valutato sui dati di convalida:
import random
import warnings
from sklearn.datasets import load_digits
from sklearn.exceptions import ConvergenceWarning
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
warnings.simplefilter("ignore", ConvergenceWarning) # short training runs are the cheap estimate
X, y = load_digits(return_X_y=True)
X_train, X_val, y_train, y_val = train_test_split(X / 16, y, random_state=0)
# Search space: 1-3 hidden layers, each 8-128 units wide. Search strategy: 12 random samples
random.seed(0)
space = [8, 16, 32, 64, 128]
candidates = {tuple(random.choices(space, k=random.randint(1, 3))) for _ in range(12)}
# Performance estimation: train each candidate for only 30 epochs, then score it on validation data
scores = {}
for layers in candidates:
model = MLPClassifier(hidden_layer_sizes=layers, max_iter=30, random_state=0)
scores[layers] = model.fit(X_train, y_train).score(X_val, y_val)
worst, best = min(scores, key=scores.get), max(scores, key=scores.get)
print(f"{len(scores)} architectures: worst {worst} {scores[worst]:.3f}, best {best} {scores[best]:.3f}")I 12 campioni producono 10 architetture distinte e la precisione di convalida varia da 0.398 per due livelli da 8 unità a 0.978 per livelli da 128, 128 e 16 unità; la sola scelta dell’architettura sposta quindi la precisione di quasi 60 punti. Un’esecuzione NAS completa riaddestrerebbe il modello migliore fino alla convergenza e ne riporterebbe il punteggio su un set di test separato.
NAS e termini correlati#
- Ottimizzazione degli iperparametri: Ottimizza le impostazioni di addestramento, come il tasso di apprendimento, per un'architettura fissa. NAS considera l'architettura stessa come variabile, e i due processi vengono spesso eseguiti insieme.
- Potatura del modello e distillazione della conoscenza: Riducono o imitano una rete esistente dopo l'addestramento, mentre NAS ricerca una progettazione efficiente prima dell'addestramento.
- Apprendimento per trasferimento: Riutilizza i pesi appresi di un modello preaddestrato. NAS decide la struttura che ospita quei pesi, e le reti individuate da NAS, come EfficientNet, sono esse stesse backbone preaddestrati molto diffusi.










