Neural Architecture Search (NAS)
A busca por arquiteturas neurais (NAS) automatiza o projeto de redes neurais pesquisando camadas e conexões. Conheça os métodos, os custos computacionais e os modelos desenvolvidos com NAS.
A pesquisa de arquitetura neuronal (NAS) é o ramo da aprendizagem automática automatizada (AutoML) que concebe automaticamente a estrutura de uma rede neuronal. Em vez de um engenheiro escolher manualmente os tipos de camada de convolução e de outras camadas, a profundidade, a largura e as ligações, um algoritmo de pesquisa propõe arquiteturas candidatas, estima o desempenho de cada uma na tarefa e usa os resultados para propor outras melhores. O objetivo costuma ser a precisão, muitas vezes combinada com um custo como a latência de inferência, o número de parâmetros ou os FLOPs no hardware de destino. A NAS produziu vários backbones amplamente utilizados em visão computacional, incluindo EfficientNet e MobileNetV3.
Como funciona a NAS#
Uma análise publicada no Journal of Machine Learning Research organiza os métodos NAS segundo três dimensões:
- Espaço de pesquisa: O conjunto de arquiteturas que podem ser criadas, incluindo os tipos de operações, os tamanhos dos kernels e as ligações de salto permitidos, bem como a forma como podem ser ligados. Muitos métodos procuram uma pequena célula repetitiva e empilham cópias da mesma, o que reduz o espaço e permite transferir para um conjunto de dados grande uma célula encontrada num conjunto pequeno.
- Estratégia de pesquisa: O algoritmo que escolhe os candidatos a experimentar, desde controladores de aprendizagem por reforço e métodos evolutivos até métodos baseados em gradientes e amostragem aleatória simples.
- Estratégia de estimativa do desempenho: A forma de avaliar um candidato sem o treinar por completo, recorrendo a menos épocas de treino, imagens ou conjuntos de dados mais pequenos, previsões da precisão final ou pesos partilhados entre candidatos.
De milhares de dias de GPU a horas#
As primeiras abordagens de NAS eram dispendiosas porque cada candidato era treinado até convergir. No estudo de Zoph e Le de 2016, um controlador recorrente treinado com aprendizagem por reforço gerava as redes e a pesquisa era executada simultaneamente em 800 GPU; o trabalho posterior sobre NASNet utilizou 500 GPU durante quatro dias para encontrar uma célula no CIFAR-10 que pudesse ser transferida para o ImageNet. O AmoebaNet obteve resultados semelhantes com evolução regularizada, a um custo de cerca de 3,150 dias de GPU. O ENAS reduziu a pesquisa para menos de 16 horas numa única GPU, partilhando pesos do modelo entre todos os candidatos, tratados como subgrafos de uma única rede grande; o DARTS converteu a escolha discreta de operações em pesos contínuos, permitindo otimizar a própria arquitetura com descida do gradiente em poucos dias de GPU. A avaliação comparativa também moderou o entusiasmo pelo campo: a pesquisa aleatória com paragem antecipada teve um desempenho pelo menos tão bom como o ENAS nos benchmarks Penn Treebank e CIFAR-10.
NAS consciente do hardware e modelos criados por NAS#
A NAS teve o seu maior impacto prático em modelos eficientes para IA de edge, nos quais é necessário equilibrar a precisão com a velocidade num dispositivo específico. O MnasNet incorporou na função objetivo da pesquisa a latência medida em telemóveis reais e alcançou uma precisão top-1 de 75,2% no ImageNet a 78 ms num telemóvel Pixel, sendo 1,8 vezes mais rápido do que o MobileNetV2, com uma precisão 0,5% superior. O EfficientNet-B0 resultou de uma pesquisa semelhante e foi depois escalado para a família B1-B7 com escalonamento composto; o MobileNetV3 combinou NAS consciente do hardware com o algoritmo NetAdapt para otimizar o modelo para CPUs móveis. Para a deteção de objetos, os modelos YOLO-NAS da Deci, encontrados com o motor de pesquisa AutoNAC e concebidos para reduzir ao mínimo a perda de precisão após a quantização INT8, podem ser executados no pacote Ultralytics através da classe NAS para inferência, validação e exportação, mas não para treino. A NVIDIA adquiriu entretanto a Deci, e a equipa original já não atualiza os modelos.
Exemplo mínimo de NAS#
O exemplo seguinte executa a estratégia de pesquisa mais simples, a amostragem aleatória, num pequeno espaço de pesquisa de perceptrões multicamada com o conjunto de dígitos manuscritos do scikit-learn. Cada candidato é treinado durante apenas 30 épocas, como estimativa económica do desempenho, e avaliado com os dados de validação:
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}")As 12 amostras produzem 10 arquiteturas distintas, e a precisão de validação varia entre 0.398 para duas camadas de 8 unidades e 0.978 para camadas de 128, 128 e 16 unidades; só a escolha da arquitetura altera a precisão em quase 60 pontos. Uma execução completa de NAS voltaria a treinar o melhor modelo até convergir e comunicaria a sua pontuação num conjunto de teste separado.
NAS vs. termos relacionados#
- Ajuste de hiperparâmetros: Otimiza as configurações de treino, como a taxa de aprendizagem, para uma arquitetura fixa. A NAS trata a própria arquitetura como variável, e as duas técnicas são frequentemente executadas em conjunto.
- Poda de modelos e destilação de conhecimento: Reduzem ou imitam uma rede existente após o treino, enquanto a NAS procura um design eficiente antes do treino.
- Aprendizagem por transferência: Reutiliza os pesos aprendidos de um modelo pré-treinado. A NAS decide a estrutura que esses pesos preenchem, e redes descobertas pela NAS, como EfficientNet, são elas próprias backbones pré-treinadas populares.










