Machine Learning : Les frameworks

Tensorflow, de Google (www. tensorflow.org/) semble être le framework le plus utilisé pour créer des réseaux de neurones et s’adonner au Machine Learning. Les frameworks de Machine et de Deep Learning sont très à la mode cet hiver. Voyons un peu quelles sont les tendances du moment.

IA, ML & co

Même si le ML (Machine Learning) n’est qu’une modeste branche de l’IA (Intelligence artificielle), ses applications et implications dans notre vie quotidienne sont de plus en plus nombreuses. Le ML, le DL (Deep Learning) et leur « cousin » le Big Data sont prisés dans de nombreux domaines de l’industrie. Ces algorithmes donnent la possibilité de traiter de très importants volumes de données structurées ou non afin de les transformer en informations exploitables : prédictions, décisions, suggestions et autres « divinations ». Des fournisseurs de contenus comme Netflix utilisent le Machine Learning pour recommander du contenu à ses utilisateurs. Les sites commerciaux tels que Amazon y ont recours pour suggérer de nouveaux produits à leurs clients. Si vous souhaitez créer des outils de ce genre pour exploiter des données, vous aurez forcément besoin d’un framework de Machine Learning qui vous aidera à créer vos propres graphes d’analyse. Il ne faut pas oublier qu’un algorithme de Machine Learning est une fonction mathématique – de type statistique – qui traite les données qu’elle reçoit et délivre une solution. Un graphe de calcul n’est au final qu’une représentation visuelle de cette fonction. Il permet généralement de comprendre de quelle manière ces données ont été traitées par les algorithmes.

Algorithmes statiques et dynamiques

Il existe deux grandes catégories de graphes et surtout d’algorithmes : les graphes statiques et les dynamiques. Les frameworks utilisant des graphes statiques tels que TensorFlow poussent les développeurs à créer des structures fixes et réutilisables. Les graphes statiques peuvent être vus comme une partie du langage de programmation, ce qui facilite grandement la parallélisation des tâches sur plusieurs machines. Les frameworks qui utilisent des algorithmes dynamiques – par exemple PyTorch – se basent sur un graphe de calcul défini implicitement comme capable de changer. Le calcul est par conséquent plus flexible mais aussi plus facile à débugger, ce qui est loin d’être négligeable. C’est sans doute pour cela que les graphes dynamiques sont très bien adaptés à la création de réseaux de neurones.

Des frameworks  en veux-tu en voilà

Le paysage des frameworks de ML, certains disent Deep Learning, est en constante évolution, ce qui n’est guère étonnant au vu de la jeunesse de cette technologie. Theano a sans doute été le premier framework de Deep learning. Créé par MILA et géré par Yoshua Bengio, un des pionniers du Deep Learning, il n’est plus maintenu depuis la fin 2017. L’arrêt du support de Theano n’a surpris personne : de nombreux autres frameworks open source, développés en Python pour la plupart et soutenus par de grosses entreprises de la tech, avaient commencé à s’imposer et à séduire de plus en plus de développeurs. Les stars du moment s’appellent Tensor Flow, PyTorch, Apache MTNx ou autres Cognitive Toolkit. Si la plupart d’entre eux sont des logiciels libres, ce n’est pas que par pure bonté d’âme de la part de leurs éditeurs respectifs. Ces derniers externalisent ainsi une partie de la R & D tout en s’assurant l’adhésion d’une communauté souvent efficace et l’émergence plus rapide de processus standardisés.

TENSORFLOW, L’INCONTOURNABLE

Sur le front du deep learning, c’est incontestablement Tensorflow qui a gagné la bataille – pour l’instant en tous cas. Publié en 2015 en Open Source par Google, il a été utilisé historiquement par le groupe américain pour motoriser ses services de recherche d’images ou de reconnaissance vocale. C’est aussi avec ce framework que le géant de la Silicon Valley a développé Google Duplex, son Intelligence artificielle capable de tenir une conversation téléphonique en se faisant passer pour un humain de manière assez bluffante, il faut bien l’avouer. TensorFlow utilise un graphe statique ainsi que des bibliothèques d’abstractions, telles que l’API de réseaux de neurones Keras, Sonnet ou encore TFLearn. Le principal langage de programmation pour travailler avec TensorFlow est Python, mais d’autres langages sont pris en charge comme le C++, Java ou Go. Une API écrite en C permet même la prise en charge d’autres langages. En plus de sa grande communauté qui propose nombre de didacticiels, de documents et de projets, TensorFlow propose un outil, TensorBoard, permettant de visualiser directement sur un navigateur les algorithmes créés. PyTorch, le framework Machine Learning de Facebook, permet de créer des graphes dynamiques (http://pytorch.org/) avec d’assez bonnes performances.

PYTORCH

Le deuxième framework dans la liste du hit-parade est sans aucun doute possible PyTorch (https://pytorch.org/). Créé par le groupe de recherche sur l’Intelligence artificielle de Facebook en janvier 2017, la raison de sa popularité tient certainement dans son bon usage des graphes dynamiques et de l’accélération GPU. Successeur de Torch, une bibliothèque de Machine Learning open source basée sur le langage de programmation Lua et lancée en 2002, PyTorch est, lui, basé sur le langage Python dont il peut exploiter les principales bibliothèques. Les développeurs Python peuvent de fait le maîtriser plus facilement et créer des algorithmes complexes tels que des réseaux de neurones récurrents. PyTorch n’est malheureusement pas compatible avec Keras. Il faudra à la place se consoler avec d’autres API telles que Ignite ou Scorch. PyTorch associe les capacités modulaires orientées production du framework Caffe2 (conçu lui aussi par Facebook) au modèle d’apprentissage en profondeur Open Neural Network Exchange, développé par Facebook de concert avec Amazon et Microsoft. PyTorch apporte ainsi une approche de conception flexible orientée sur la recherche qui permet aux développeurs de travailler plus rapidement. PyTorch 1.0 supporte le framework ONNX. AWS (Amazon Web Services) prévoit de prendre en charge PyTorch 1.0 dans SageMaker, son service destiné à aider les développeurs à créer et à réutiliser des modèles d’Intelligence artificielle existants. Google a prévu sa prise en charge sur sa machine virtuelle Google Cloud Deep Learning. Microsoft, de son côté, a annoncé une jonction entre PyTorch 1.0 et Azure et il est d’ores et déjà possible de déployer des modèles PyTorch sur le service cloud Azure Machine Learning (Azure ML). PyTorch bénéficie également du soutien de plusieurs fabricants de puces IA de premier plan, comme Arm, IBM, Intel, Nvidia ou Qualcomm. Il est difficile d’être plus populaire… Le Microsoft Cognitive Toolkit (ex CNTK), le framework Machine Learning de Microsoft basé sur des graphes statiques.

MICROSOFT COGNITIVE TOOLKIT (EX CNTK)

Les autres géants du Web ne sont pas restés les bras croisés. Microsoft a développé un framework de deep learning – au départ pour son usage personnel –, CNTK. Il a été renommé Microsoft Cognitive Toolkit dans sa nouvelle version sortie en 2017. Basé sur des graphes statiques, il est notamment connu pour sa compatibilité avec de nombreux GPU et CPU, sa vitesse de calcul impressionnante et ses capacités de reconnaissance d’images. Ce framework a sa propre API Python mais peut aussi utiliser Keras. Il est compatible avec les langages C++, C#, Python et BrainScript, son propre langage de description de modèle.

ML.NET

ML.Net, un autre framework open source de ML conçu par Microsoft, est plutôt destiné aux développeurs .Net souhaitant exécuter des tâches de Machine Learning courantes dans des environnements multi plates-formes. Annoncé pour la première fois en mai 2018 lors de la conférence Build de Microsoft, le framework ML.Net permet aux développeurs .Net de créer des modèles pour des tâches spécifiques utilisables par les applications .Net via des API de haut niveau pour l’apprentissage de modèles et l’exécution de tâches prédictives. La première version de ML.Net ne comprenait que deux tâches d’apprentissage machine basiques : la classification et la régression. La classification est utilisée pour catégoriser les données, par exemple différencier les spams des courriels légitimes ou pour l’analyse des sentiments. Quant à la régression, elle sert à effectuer des prédictions sur des données numériques. La dernière version bêta 0.4 de ML.Net s’enrichit du support d’autres tâches, dont le traitement du langage naturel. Elle est téléchargeable sur GitHub (https://github.com/ dotnet/machinelearning). Des exemples d’applications comprenant des données d’apprentissage sont disponibles dans le référentiel du projet. Des API de haut niveau permettant de piloter des frameworks existants tels que TensorFlow ou Microsoft Cognitive Toolkit ont déjà été annoncées.

MXNET

Apache MXNet est lui aussi un framework de deep learning très populaire, supporté par Microsoft et Amazon. Spécialisé dans la création de réseaux de neurones Deep Learning, il a été choisi par AWS comme son framework officiel de Deep Learning. Basé sur des graphes statiques, MXNet est connu pour sa scalabilité et ses hautes performances avec de nombreux CPU et GPU. Son interface de programmation dynamique permet de définir modèles et algorithmes sans sacrifier à la vitesse d’exécution. Une affaire à suivre…

CAFFE2

Caffe2, le successeur du framework Caffe, a été lancé par Facebook. Développé à l’origine par le Berkeley Vision and Learning Center, Caffe était et reste très populaire de par sa communauté et ses nombreuses applications de computer vision. Néanmoins, Caffe2 n’a pas l’air de bénéficier du même engouement. C’est un framework Machine Learning léger et modulaire, utilisant des graphes statiques et spécialisé pour les déploiements mobiles et à grande échelle. Keras permet de créer un modèle en ajoutant  des couches successives, ce qui le rend très pratique pour réaliser rapidement des prototypes.

KERAS

En dehors (ou plutôt à l’intérieur) de ces frameworks, dans le « cambouis du moteur », se trouvent des API (interfaces de programmation d’applications), des bibliothèques de code, si vous préférez. La plus connue et la plus utilisée est sans nul doute Keras (https:// keras.io/). C’est une bibliothèque open source de type wrapper créée initialement par François Chollet, un ingénieur français chercheur en IA chez Google. Elle a été écrite en Python et plus de 700 développeurs à travers le monde ont contribué à son code source. Google a annoncé en 2017 avoir sélectionné Keras comme l’API de haut niveau de Tensorflow. Keras devrait donc rester quelque temps incluse dans les prochaines versions de Tensorflow, tout en restant compatible avec Theano et CNTK. Keras a notamment été déployé chez Netflix, Square, Uber, sans oublier bien évidemment Google. Son principal avantage : faciliter la création des modèles d’apprentissage profond en simplifiant leur syntaxe de programmation. Keras permet de construire aisément un réseau de neurones convolutifs, puis de le porter sur Tensorflow qui pourra ensuite se charger de la phase d’apprentissage. Au-delà de Tensorflow, les modèles créés avec Keras pourront aussi être compilés pour d’autres frameworks de deep learning tels que Cognitive Toolkit ou Theano pour mieux gérer la phase d’apprentissage. Gluon, une API écrite en Python et s’appuyant sur MXNet, devrait être incluse dans Microsoft CNTK.

GLUON

Pour continuer sur les API, Amazon et Microsoft ont annoncé conjointement la sortie de l’API Gluon en 2017 dans le but avoué de concurrencer Google avec Keras et Tensorflow. Gluon est, elle aussi, une interface écrite en Python mais en s’appuyant sur MXNet. Elle devrait bientôt être incluse par défaut dans Microsoft CNTK. Open Neural Network Exchange (ONNX), la tentative de format ouvert, survivra-t-elle malgré l’absence de Google ?

ONNX : vers une normalisation des outils de l’IA ?

En parallèle de ces frameworks plus ou moins prioritaires, il faut citer l’initiative ONNX (Open Neural Network Exchange - https://github.com/onnx/onnx). Annoncée en septembre 2017 avec une V1 sortie en décembre, ONNX fournit un format ouvert pour représenter des modèles de deep learning. Ce format permet aux utilisateurs de porter plus facilement des modèles entres différents frameworks. Vous pouvez par exemple construire un modèle en PyTorch et le faire tourner sur MXNet. L’une des problématiques engendrées par la concurrence de type propriétaire est en effet l’émergence de « standards » totalement incompatibles. Les avancées dans les domaines de l’apprentissage automatique (ML) et de l’apprentissage profond (DL) ont mené à la création d’outils toujours plus nombreux, propriétaires ou open source. Un inévitable besoin de standardisation a forcément émergé et les principaux acteurs de l’Intelligence artificielle se sont associés afin de développer un socle commun. En vue d’assurer l’interopérabilité de leurs bibliothèques logicielles, de grandes firmes de l’IA (Amazon, Microsoft et Facebook) ont ainsi travaillé sur un format ouvert et commun. Le projet ONNX (Open Neural Network Exchange), entré officiellement en production, rend les outils de l’IA interchangeables en proposant un cadre commun à destination de la communauté, par l’intermédiaire de groupes de travail, notamment sur la plateforme GitHub. Fort malheureusement, Google ne participe pas à ce projet.

Scikit-learn, la biliothèque de ML généraliste

Développée par l’Inria, Scikit-learn s’impose parmi les librairies d’auto-apprentissage généralistes les plus prisées. Elle fournit clefs en main les algorithmes les plus fréquemment utilisés pour l’apprentissage automatique : forêt aléatoire, régression linéaire, régression logistique, XGBoost… Elle implémente de bonnes pratiques très utiles, telles que la validation croisée. Cette technique consiste à mettre plusieurs algorithmes en compétition pour déterminer celui qui se révélera le plus fiable pour une problématique donnée. Sur le terrain des frameworks d’apprentissage automatique, deux grandes catégories de solutions se distinguent. D’abord les bibliothèques de Machine Learning généralistes. Conçues pour motoriser des algorithmes statistiques (classification, régression…), elles sont notamment utilisées pour réaliser des modèles prédictifs en partant de données chiffrées. Dans la seconde catégorie, les bibliothèques de Deep learning s’adossent, elles, à la notion de réseau de neurones artificiels. Souvent considéré comme un sous-domaine du Machine Learning, le Deep learning peut s’appliquer aussi bien à des chiffres qu’à des contenus audio ou graphiques, ce qui le rend plus adapté à la reconnaissance vocale ou d’images. Dans un tel système, chaque couche du réseau de neurones se charge d’interpréter les résultats issus de la couche précédente. L’IA s’affine ainsi par itérations successives. Dans l’analyse de texte par exemple, la première couche s’attellera à la détection des lettres, la deuxième des mots, la troisième des groupes nominaux ou verbaux, et ainsi de suite. Les frameworks de Deep learning permettent de mettre en musique l’ensemble du dispositif.

Microsoft passe Infer.net en Open Source

Microsoft a mis en Open Source son framework multi plate-forme Infer. net pour l’apprentissage machine basé sur des modèles avec des fonctions supplémentaires en modélisation statistique et apprentissage en ligne. Infer.net sera intégré au framework d’apprentissage machine ML.Net. Trois cas d’usage bien précis d’Infer.net ont été définis : servir à un utilisateur connaissant bien un domaine spécifique et voulant résoudre un problème dans ce domaine, interpréter le comportement d’un système ou encore répondre à un système de production ayant besoin d’apprendre au fur et à mesure de l’arrivée de nouvelles données. Avec Infer.net, les développeurs peuvent incorporer la connaissance du domaine dans un modèle. Le framework peut alors construire un algorithme d’apprentissage machine personnalisé directement dans ce modèle. Cela signifie qu’au lieu d’avoir à mapper un problème sur un algorithme d’apprentissage existant, Infer.net construit un algorithme d’apprentissage basé sur le modèle fourni par le développeur.