Publié par
Il y a 3 mois · 9 minutes · Data

What’s new in TensorFlow ? Des nouvelles du TensorFlow Dev Summit 2018 (3/3)

Dans ce dernier article sur le TensorFlow Dev Summit, nous allons voir quelques-unes des évolutions qui sont proposées par TensorFlow pour rendre le travail plus collaboratif, accessible au plus grand nombre et automatisable. Nous ferons le résumé de 3 présentations :

  • Automated Machine Learning : pour trouver automatiquement le meilleur modèle pour notre tâche ;
  • TensorFlow Hub : pour partager et réutiliser des parties de modèles déjà entraînés ;
  • Nouveaux langages et plateformes : pour rendre accessible TensorFlow à plus de communautés de développeurs.

Pour rappel, les précédents articles faisaient le tour des APIs plus haut niveau de TensorFlow et des nouveaux outils pour faciliter la vie des développeurs.

Searching over Ideas (Vijay Vasudevan)

Résoudre des problèmes via du Machine Learning requiert systématiquement du tuning de paramètres pour trouver la meilleure solution au sein d’un « espace de recherche », c’est-à-dire d’un ensemble de valeurs pour les paramètres à tester. Aujourd’hui, grâce à des techniques d’Automated Machine Learning, cette recherche des meilleures valeurs des paramètres et structures de modèle peut se faire beaucoup plus efficacement.

Les améliorations des performances des modèles observées depuis les dernières années (dans la reconnaissance d’images par exemple) sont non seulement dues à la création de modèles plus complexes et profonds, mais aussi à des idées comme la Batch Normalization ou de nouvelles techniques de régularisation ou d’optimisation. Tout ceci rend difficile de rester à jour avec toutes les idées à tester pour créer le meilleur modèle possible. Il est de plus difficile de savoir pourquoi certains nombres et certains modules permettent une amélioration de performances : pourquoi un module du modèle InceptionV4 est créé de cette manière et pas d’une autre ? Ce sont des questions auxquelles il est parfois même compliqué de répondre théoriquement. Et pour beaucoup d’utilisateurs, la préoccupation principale n’est pas de comprendre chaque petit détail, du moment que cela répond à sa problématique et que le modèle est globalement compréhensible.

Pour des questions du type « quel learning rate utiliser ? » ou « quel pourcentage de dropout utiliser ?« , des techniques d’optimisation d’hyperparamètres existent déjà, avec notamment des outils comme hyperopt, optml ou bien d’autres pour aider à une recherche automatique.

En revanche, pour répondre à des questions du type « Pourquoi utiliser de la Batch Normalization avant d’appliquer un ReLu ? » ou « Dois-je utiliser un LSTM ou un GRU ?« , les choses se complexifient. Cependant, ces questions peuvent être pensées comme des généralisations du tuning d’hyperparamètres, où l’on cherche à optimiser non seulement des valeurs des briques choisies, mais aussi le choix de ces briques.

Pour ce faire, un program generator va donc itérer sur un espace de recherche pour trouver le meilleur programme (le meilleur modèle) pour exécuter la tâche demandée.


Ces approches ont été tentées notamment sur le dataset CIFAR-10 (puis élargies sur ImageNet) et ont fourni des modèles certes complexes, mais donnant de meilleures performances.

Ces approches d’Automated Machine Learning permettent de challenger les approches et les modèles créés à la main en découvrant de nouvelles manières, plus optimisées, de faire. De plus, cette approche permet d’aller au-delà de la simple recherche du modèle le plus performant : on peut vouloir par exemple un modèle qui soit le plus rapide possible en phase d’inférence, en incluant cette contrainte dans la récompense d’un algorithme d’apprentissage par renforcement.

Ce type d’approche va probablement constituer le futur des applications et projets de Machine Learning … stay tuned.

Pour plus d’informations, consultez la vidéo associée à ce sujet.

TensorFlow Hub (Jeremiah Harmsen & Andrew Gasparovic)

La manière de travailler et d’utiliser du Machine Learning tire beaucoup d’inspirations du Software Engineering, mais avec des étapes de retard à rattraper. Le Machine Learning ne se réduisait au début qu’aux modèles en eux-mêmes, sans rien autour. Puis se sont posées de plus en plus de questions pour intégrer ces modèles dans de vrais logiciels, avec de la gestion de sources et de l’intégration continue. De plus en plus d’outils et de bonnes pratiques apparaissent pour utiliser le Machine Learning dans des logiciels.

Cependant, il manque toujours un composant essentiel, où le développement logiciel a un cran d’avance : le partage de code. De nombreux dépôts sont accessibles pour les développeurs pour partager du code. En s’inspirant de ce principe et en cherchant à l’appliquer au Machine Learning, une équipe de développeurs de TensorFlow a mis au point TensorFlow Hub : une nouvelle plateforme pour le partage de modèles entraînés.

Cette notion de partage de code est essentielle pour les développeurs : cela oblige à le refactorer et le mettre dans des librairies pour un usage au plus grand nombre. L’objectif de TensorFlow Hub est identique pour le Machine Learning : un moyen de partage des modèles entraînés, qui pousse aussi les développeurs à appliquer des bonnes pratiques pour que ce partage soit utilisé par un maximum de personnes. Il est donc possible grâce à cette plateforme de construire ses modèles, les partager, ainsi que d’utiliser certains modules d’autres modèles.

TensorFlow Hub fonctionne donc à l’échelle du module, qui représente une partie d’un modèle entraîné. C’est en général plus confortable de travailler à l’échelle du module que du modèle complet, car il est rare de vouloir utiliser exactement le même modèle que quelqu’un d’autre de bout en bout. A l’intérieur, un module contient les poids entraînés ainsi que le graphe associé.

Grâce à cette nouvelle plateforme, il devient très simple, par exemple, de faire du Transfer Learning : utiliser des parties de modèles pré-entraînés sur un large dataset d’images, et de le spécialiser sur notre propre tâche de classification où le nombre d’images est plus faible.

Un exemple utilisant des poids d’un réseau de neurones NASNet ressemble à ceci :

TensorFlow Hub
# Download and use NASNet feature vector module
module = hub.Module("https://tfhub.dev/google/imagenet/nasnet_large/feature_vector/1", 
				    trainable=True, tags={"train"})

features = module(my_images)
logits = tf.layers.dense(features, NUM_CLASSES)
probabilities = tf.nn.softmax(logits)

A ce jour, plusieurs modèles sont disponibles sur TensorFlow Hub pour la classification d’images : NASNet, MobileNet, Inception, ResNet. Mais ces modules ne sont pas uniquement réservés à la classification d’images, il est aussi possible par exemple de trouver des modèles pré-entraînés pour la classification de textes via des modules de sentence embedding, ou bien des modules de Generative Adversarial Networks.

Pour le moment, seul Google peut publier ses modèles et les rendre accessibles. L’objectif est que, prochaînement, toute personne puisse proposer ses modèles sur TensorFlow Hub, en mettant à disposition des URLs spécifiques.

Pour plus d’informations, consultez la vidéo associée à ce sujet.

Une utilisation via de nouveaux langages et plateformes

Rendre TensorFlow plus facile à utiliser dans son langage de prédilection (Python) est une chose essentielle. Cependant, de nombreux efforts sont aussi fournis pour donner accès à ce framework au plus de communautés de développeurs possible.

Il était déjà possible de travailler avec TensorFlow depuis C++ ou Go, de nouveaux langages sont maintenant proposés : JavaScript et Swift.

JavaScript

TensorFlow.js est donc le nouveau framework de Machine Learning pour les développeurs JavaScript. Grâce à ce framework, de nouvelles possibilités apparaîssent pour faire du Machine Learning dans le browser pour faire du ML interactif tout en garantissant que toutes les données restent côté client. Le framework peut donc être utilisé pour faire de l’inférence via des modèles entraînés avec des accélérations WebGL, mais aussi pour entraîner ses propres modèles.

Un exemple d’utilisation est fourni via le jeu Emoji Scavenger Hunt.

Pour plus d’informations, consultez la vidéo associée à ce sujet.

Swift

Les développeurs Swift pourront aussi bientôt utiliser TensorFlow directement dans leur langage préféré. Bien que le projet soit toujours en développement, de belles perspectives s’ouvrent pour son utilisation, avec notamment la disponibilité du Eager Mode.

Pour plus d’informations, consultez la vidéo associée à ce sujet.

TensorFlow Lite

TensorFlow Lite est la nouvelle solution cross-plateforme pour déployer des modèles de Machine Learning développés en TensorFlow sur des devices mobile et d’autres appareils (Android, IoS, Raspberry Pi, etc.).

Grâce à cette solution, il est maintenant possible d’embarquer un interpreteur TensorFlow d’une taille de 75KB seulement pour faire de l’inférence, et de voir des accélérations dans le calcul de l’ordre de x3 par rapport à l’utilisation de code TensorFlow pur, comme c’était fait avant son introduction pour faire tourner des modèles sur mobile.

Pour plus d’informations, consultez la vidéo associée à ce sujet.

TensorRT

D’un point de vue hardware, TensorFlow possède maintenant une intégration avec la librairie TensorRT de NVidia. Cette librairie est conçue pour optimiser la phase d’inférence des modèles de Deep Learning et faciliter de déploiement sur GPUs dans des environnements de production.

Tensor Processing Units (TPUs)

Les TPUs sont des processeurs optimisés pour les calculs de masse, notamment pour l’entraînement de modèles de Deep Learning. Cloud TPU a été annoncé en version beta, ce qui permet d’utiliser des clusters de TPUs pour entraîner ses modèles dans le cloud, avec des promesses de gain en temps de calcul de l’ordre de x1.6 sur des modèles tels que ResNet-50.

Conclusion

Cette série d’articles nous a permis d’avoir un tour d’horizon complet des nombreuses nouveautés apportées dans TensorFlow. De la mise à disposition d’APIs plus haut niveau à l’optimisation interne pour la distribution, en passant par l’ouverture à de nouvelles communautés de développeurs, TensorFlow se positionne de plus en plus comme un framework général de Machine Learning, permettant de travailler sur toute la chaîne de traitement de la donnée, et pas seulement des modèles en eux-mêmes.

Vous pouvez suivre les prochaines évolutions de TensorFlow sur leur nouveau blog qui a été ouvert, et qui contiendra toutes les prochaines annonces ainsi que des exemples d’utilisation de tous les éléments que nous avons vu dans ces trois articles.

 

Yoann Benoit
Yoann est Data Scientist chez Xebia. Il est également formateur au sein de Xebia Training .

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *