Ce vendredi 8 novembre a eu lieu le TensorFlow RoadShow à l’occasion de la présentation de la v2.0. Cette plateforme pour le machine learning est devenue un quasi standard.

Le menu de la journée était copieux :

  • Machine Learning today and tomorrow.
  • TensorFlow 2.0.
  • Natural Language Processing with TensorFlow 2.0 and tf.text.
  • TensorFlow lite for Mobile and Edge devices.
  • Swift for TensorFlow and MLIR.
  • Tensorflow.js.
  • Building ML services with TensorFlow Extended (TFX).
  • Model optimization and quantization.
  • Differential privacy.

Pour commencer, un coup d’oeil dans le rétroviseur des dernières années qui a mis en évidence la pertinence et la performance de TensorFlow :

2015-17 réseau de neurones récurrents, pas distribuable
2017 : introduction des transformers : distribuable
2018 BERT développé par Google,
2019 XLNet (Generalized Autoregressive Pretraining for Language Understanding)

Voici quelques annonces récentes associées à la technologie TF :

  • Prédiction des météos extrêmes avec IBM avec un des ordinateurs les plus puissants au monde
  • Analyse du goût des aliments au niveau moléculaire (NotCo) : comment créer le même goût mais avec de nouveaux ingrédients
  • Transcription des archives du Vatican (In codice ratio)

Keras et TF

Tensor Flow s’illustre aussi au travers du succès de Keras dans les concours Kaggle impliquant du Deep Learning (même si xgboost et pytorch ont leurs faits d’armes).

Keras : c’est une librairie qui facilite la construction et la personnalisation de réseaux profonds de neurones. Les lignes directrices de Keras sont la flexibilité et la simplicité.

Ces qualités ont largement modelé la nouvelle version 2.0 de TensorFlow.

Harmonisation de Keras (Deep Learning) avec TF, et optimisation. A noter que la distribution autonome de Keras est vouée à disparaître.
 
Eager execution : facilite débogage, + pythonique

Compatibilité assurée des extensions existantes de TF : Tensorflow-Probability, Tensorflow-Agents, Tensorflow-Text,
 
TensorBoard : effectuer le suivi pendant la phase d’entrainement, visualiser les données, mesurer de performances,
 
TensorBoard.dev : uploader les logs de TensorBoard et partager ses dashboards
 
TensorFlowHub : référentiel des modèles pré entrainés, amélioré avec la 2.0
 
Tensorflow JS : Tensorflow avec Javascript, pouvant invoquer des calculs en GPU

Tensorflow-Text

C’est une extension qui regroupe toutes les fonctionnalités de traitement de texte naturel https://www.tensorflow.org/tutorials/tensorflow_text/intro

Parmi les modèles pré-entrainés (et ce sur toutes les langes!), voici quelques exemples significatifs :

  • Modèle BERT : la star des réseaux de neurones pour traiter du texte
  • Ragged Tensors : Tensor originellement utilisé pour conserver les images et non du texte qui n’est pas fixe. Les ragged tensors permettent de représenter des données de taille variable (nested variable length list)
  • Tokenizer : API pour transformer un mot en token (genre de racine)

TensorFlow Lite for Mobile and Edge Devices

Un des défis sous-estimés dans la plupart des projets de Data Science est le déploiement du modèle en production, ou plus précisément dans un réceptacle qui présente des contraintes, telles que la limitation en puissance et en autonomie.

TF Lite veut répondre à cette problématique en ciblant les déploiements sur les appareils mobiles, qu’ils soient Raspberry PI ou Smartphone (par exemple).

+

Avantages:

  • Faible Latence,
  • Fonctionnement hors connexion,
  • ML embarqué : mieux pour la confidentialité des données qui ne sont pas nécessairement envoyées sur un serveur
i

Exemples d’application :

  • Application des filtres sur un visage (qui définit où sont les yeux, la bouche, etc)
  • Traduction ‘in-situ’ ⇒ Google translate embarqué
  • Manette de jeu qui détecte et reconnaît quand on prononce des mots clefs de type « y/n »

Il reste à produire des modèles embarqués qui ne sont gourmands ni en mémoire, ni en batterie.
Il faut parfois préférer une architecture plus légère, quitte à être moins précis, pour gagner en temps et en mémoire

De manière complémentaire, TF Lite :

  • Fournit des modèles pré-entrainés, pour des cas d’usage fréquents (sur la voix, le texte, l’image, la vidéo, etc…)
  • Permet d’exporter son propre modèle développé avec TF (enregistré avec savedModel) -> on le transpose sur TF Lite par un interpréteur dédié

A noter qu’il existe un certain nombre de bonnes pratiques pour améliorer les performances:

Quantification (mettre les paramètres en 8bits plutôt que 16)
Pruning (éliminer des paramètres pour rendre le modèle plus léger)
Accélération Hardware : passer du CPU au GPU, voir au DSP ou Edge TPU

A la recherche de la scalabilité : TensorFlow Pipelines and Distribution Strategies

Tf.distribute : pour distribuer l’apprentissage et accélérer les calculs

  • Distribuer de façon simple, sans impacter grandement le code
  • Fournir de bonnes performances out of the box
  • Rester flexible selon la topologie du hardware

Il existe différentes stratégies de distribution:

« MirroredStrategy »: https://www.tensorflow.org/api_docs/python/tf/distribute/MirroredStrategy

en voici les étapes :

  1. Partage des données entre les GPUs,
  2. Variables dupliquées sur les GPUs,
  3. calculs indépendants d’un gradient partiel,
  4. enfin partage des résultats pour calculer gradient final

Ce qui est appréciable c’est qu’on peut distribuer les traitements en 2 lignes de code :


strategy = tf.distribute.MirroredStrategy()
with strategy.scope :
< code keras qui crée le classifier et qui fit >

⇒ Améliorer la scalabilité de 80 à 90% en passant de 1 à 8 GPU

« MultiWorkerMirroredStrategy » (Entraînement synchrone et multi worker : lorsque j’ai autant de programmes que de serveurs)

  1. Définir variable d’environnement avec les IP de chaque worker
  2. Suit les mêmes étapes qu’avant

« TPUStrategy » : pour distribuer sur les TPUs, selon le même fonctionnement que MirroredStrategy ou CentralStorageStrategy

Grande puissance de calculs (100 TFlops)
Disponible avec une offre google cloud

TensorFlow.js: Machine learning for JavaScript

Tensorflow.js est une librairie pour ML en JS, pour entraîner et charger ses modèles de Machine Learning dans node.js

Cette initiative démocratise l’utilisation et le déploiement de modèles, en notant au passage que Google a mis en avant la possibilité de structurer, entraîner et exporter des modèles depuis AutoML, son studio d’aide à la data science. On peut là aussi utiliser un modèle sans appel serveur pour renforcer les exigences de confidentialité.

A titre d’exemple, cette technologie a permis à L’Oréal de créer une application où l’on peut voir le rendu d’un produit de maquillage sur son visage.

TensorFlow Hub

C’est une librairie pour Découvrir partager et réutiliser facilement des modèles :

  • Des modèles pour les textes, les images, le son ou la video
  • Des modèles provenant de Google, de DeepMind, mais aussi venant de la communauté (Nvidia, Microsoft, …)
  • des modèles prêts à l’utilisation (y compris sur mobile)

Mais pour quelles raisons veut-on réutiliser un modèle pré-entrainé ?

• La tâche à réaliser est identique à celle remplie par un modèle existant,
• On souhaite partir d’un modèle entrainé pour une tâche proche, et construire son propre modèle :

+

Avantages -> On doit effectuer moins de calculs. C’est également très appréciable si l’on dispose de peu de données et que l’on veut bénéficier d’une autre expertise: ceci rejoint la mouvance très en vogue du Transfer Learning

+

En associant Keras et TF.Hub, on peut créer un réseau à partir des layers d’un modèle existant sur Hub; on y ajoute alors ses propres layers (dans un objet Sequential sur Keras). C’est particulièrement utile pour changer le type d’output.

sont aussi disponibles les papiers de recherches sur certains modèles (dont BERT, NasNet, BigGAN, AutoAugment…)

i

Voici quelques modèles disponibles:

  • AutoAugment, génerer des nouvelles données en modifiant légèrement des données existantes (inverser, tourner, ajouter bruit, redécouper…)
  • Cross Lingual : classifier des phrases de différentes langues selon le sujet
  • BERT et ALBERT : en anglais et chinois

Differential Privacy with Privacy

  • Confidentialité des données : on n’est pas capable de retrouver les données sur lesquelles on a appris, même en connaissant la prédiction
  • Ex : On peut savoir si une instance a été utilisée dans l’apprentissage, si la prédiction est juste alors que le reste du temps le modèle peine à prédire ce genre de données
    —> Cette faiblesse potentielle dans la protection des données sources doit être prise en compte. On pourrait effectivement imaginer itérer sur les paramètres d’entrée pour faire apparaître les informations qui ont servi à l’entraînement.

  • En rajoutant du bruit, on peut garder le pattern dans nos données, et augmenter la confidentialité -> c’est cette méthode qu’on appelle Differential Privacy
    Une surcouche Tensorflow permet de réaliser cela : Tensorflow Privacy,
  • Noise multiplier : plus il y a de bruit plus la garantie de la confidentialité est élevée. Il faut cependant faire attention à ne pas perdre en précision. on cherchera le meilleur compromis.
  • La librairie facilite cette approche en fournissant des indicateurs pour évaluer la performance de l’algo en termes de confidentialité https://github.com/tensorflow/privacy

Google fait de la popularité de Tensorflow et de Keras, et encore plus de leur unification, un produit d’appel pour sa suite technologique : Google Cloud Platform. Ceci se caractérise par une intégration fluide avec Google colab (notebook Jupyter dédié à la data science) et au déploiement sur des TPUs : https://colab.research.google.com .

On notera les interventions d’entreprises utilisatrices :

OLX : classement automatique d’images
Therapixel : détection de cancers du sein
Sinequa : indexation de patrimoines documentaires et création de moteurs de recherche spécifiques.