# Recherche automatique d'architecture neuronale

La recherche automatique d'architecture neuronale (Neural Architecture Search, NAS) est un ensemble de techniques visant à découvrir automatiquement de nouveaux modèles de réseaux de neurones artificiels. Les principales méthodes employées dans la littérature sont basées soit sur de l'apprentissage par renforcement, sur de la descente de gradient ou bien sur des algorithmes génétiques$^,$. Plusieurs méthodes NAS parviennent à obtenir des architectures qui atteignent ou surpassent les performances des modèles créés à la main$^,$$^,$. La recherche automatique d'architecture neuronale se définit suivant trois axes :
* l'espace de recherche, qui représente l'ensemble des architectures candidates ainsi que les opérations qui les composent ;
* la stratégie de recherche, qui guide la manière dont la recherche s'effectue ;
* le critère (ou méthode) d'évaluation, qui estime les performances des architectures candidates.
Généralement, une métrique importante à prendre en compte lors de l'évaluation d'une méthode NAS est le coût en ressources induit par la recherche d'architecture (search cost)$^,$.
Les procédés NAS peuvent être employés pour rechercher une variété de types de réseaux de neurones (réseaux convolutifs, réseaux récurrents ou bien autoencodeurs)$^,$.

## Types d'approches
### Apprentissage par renforcement

Les premières approches NAS ont tout d'abord fait appel à de l'apprentissage par renforcement$^,$. Elles appliquent le paradigme habituel de l'apprentissage par renforcement en considérant l'espace de recherche comme un environnement dans lequel un agent peut évoluer et en attribuant à ce dernier une récompense (reward) calculée en fonction de la méthode d'évaluation des performances de l'architecture découverte. Ces techniques présentent le désavantage d'être très consommatrices en ressources avec souvent des milliers d'heures-GPU nécessaires pour obtenir une architecture suffisamment performante$^,$.

### Descente de gradient

Certaines méthodes effectuent une recherche d'architecture neuronale différentiable en optimisant un certain ensemble de paramètres via une descente de gradient stochastique$^,$. Ces paramètres (aussi appelés poids architecturaux et notés α) représentent les opérations effectuées par l'architecture candidate. Une fois la phase de recherche achevée, le modèle final est obtenu en échantillonnant les opérations constituant l'architecture à partir des poids α (qui sont des variables continues). Par exemple, une méthode d'échantillonnage peut-être de transformer α en une distribution de probabilités à l'aide d'une fonction softmax ou sigmoïde$^,$. De plus, pour économiser en ressources de calcul et en temps, plusieurs méthodes NAS différentiables choissisent d'implémenter des mécanismes de partage des paramètres (weight sharing)$^,$$^,$. De cette façon, l'espace de recherche peut être partitionné en plusieurs cellules qui représentent des composantes élémentaires (building blocks) à partir desquelles il est possible de construire une architecture complète en les assemblant bout-à-bout$^,$. L'avantage principal procuré par un tel mécanisme est de n'avoir pas à rechercher l'intégralité de l'architecture mais seulement quelques parties. Ainsi, en comparaison des autres types de techniques NAS, les méthodes différentiables sont peu énergivores, avec seulement quelques dizaines d'heures-GPU nécessaires$^,$$^,$.

### Algorithmes génétiques et méthodes évolutionnaires

Le principe darwiniste des algorithmes génétiques peut être appliqué à la recherche automatique d'architecture neuronale$^,$. Dans ce cas-là, le plus souvent, on considère les architectures candidates comme un ensemble d'individus capables de se reproduire entre eux en mélangeant leurs « gènes » (c'est-à-dire, les opérations dont elles sont composées) de manière à produire de nouvelles architectures. Ainsi, une population de départ est progressivement affinée en faisant se reproduire entre eux les meilleurs individus, sélectionnés selon la méthode d'évaluation disponible. Tout comme les approches à base d'apprentissage par renforcement, ces méthodes NAS sont coûteuses en ressources de calcul (surtout en heures-GPU).

## Applications

Les procédés NAS peuvent être appliqués à une très grande variété de cas d'usage, tels que :
* la classification d'images ;
* la détection d'objets ;
* le traitement du langage naturel ;
* le traitement des séries temporelles ;
* la génération d'images, de vidéos ou de sons.
Il est également possible de rechercher des architectures qui vont être utilisées dans un contexte précis, tel que l'inférence sur des appareils mobiles et/ou peu performants (contraintes matérielles).