VT2016 TensorFlow

=Présentation=
 * Sujet : TensorFlow
 * Auteur : Coralie RACHEX
 * Enseignants : Didier Donsez, Georges-Pierre Bonneau
 * Date : 04/10/2016



=Résumé= TensorFlow™ est une librairie open source permettant d'effectuer des calculs numériques en utilisant des graphes de flux de données. Les noeuds du graphe représentant des opérations mathématiques, tandis que les arrêtes représentent les données. Cette architecture flexible permet de déployer l'ensemble des calculs sur un ou plusieurs CPU ou GPU. Cela permet également de déployer le programme sur un ordinateur de bureau, sur un serveur et même sur un appareil mobile avec une seule API. TensorFlow a été initialement développé par les chercheurs et les ingénieurs de l'équipe Google Brain, au sein du département de recherche sur l'intelligence artificielle de Google, dans le but d'être utilisé en apprentissage automatique et pour poursuivre les recherches sur l'apprentissage en profondeur par réseaux de neurones. Mais le système est tout aussi bien applicable dans une grande variété d'autres domaines.


 * Mots-clés : TensorFlow, Apprentissage en profondeur, Réseau neuronal, Apprentissage automatique

=Abstract= TensorFlow™ is an open source software library for numerical computation using data flow graphs. Nodes in the graph represent mathematical operations, while the graph edges represent the data. The flexible architecture allows you to deploy computation to one or more CPUs or GPUs in a desktop, server, or mobile device with a single API. TensorFlow was originally developed by researchers and engineers working on the Google Brain Team within Google's Machine Intelligence research organization for the purposes of conducting machine learning and deep neural networks research, but the system is general enough to be applicable in a wide variety of other domains as well.


 * Keywords : TensorFlow, DeepLearning, Neural network, Machine learning

=Synthèse=

Domaine d'application
Comme TensorFlow provient de Google, il est évident que Google utilise cette technologie pour plusieurs de ses services. Cela permet d'avoir un aperçu de ses possibles applications. Mais il ne faut pas perdre de vue le fait que nous sommes actuellement à un stade précoce de la technologie de l'apprentissage machine et que bons nombre de ses applications potentielle sont encore insoupçonné.

Analyse d'images
 * Google Photos : création automatique des albums et des vidéos en fonction des similitudes.
 * Street View : brouillage automatique des numéros de plaque d'immatriculation des voitures.

Reconnaissance de la parole
 * Google Talk : reconnaissance vocale des instructions à executer.

Traduction dynamique
 * Google Translate : détection automatique de la langue d'entrée.

Alpha Go
 * Il s'agit d'une application programmée pour jouer au Go, un jeu incroyablement complexe qui possèderait plus de possibilités que le nombre total d'atomes dans l'univers visible. Cette application montre ce que la technologie de l'apprentissage machine peut faire avec les possibilités infinies. Dans ses matches contre Lee Sedol (considéré comme l'un des meilleurs joueurs mondiaux), Alpha Go a remporté 4 de 5 parties.

Magenta Project
 * Il s'agit d'un projet ambitieux, ayant la prétention de créer de l'art grâce à une machine. Le premier résultat tangible a été une mélodie de 90 secondes joué au piano. En Février 2016, Google a également organisé une exposition d'art et de vente aux enchères à San Fransisco, montrant 29 œuvres générés par ordinateur (avec un peu d'aide de l'homme).

Forces et faiblesses
Paradigme de programmation déclarative : TensorFlow permet de se concentrer sur le problème (quoi), plutôt que sur la solution (comment).

Portabilité : TensorFlow fonctionne sur CPU ou GPU. Et le modèle crée avec TensorFlow peut être déployé sur ordinateur, server, appareil mobile et même dans le cloud (conteneuriser avec Docker).

Flexibilité : TensorFlow ne propose pas que des algorithmes, il propose également un ensemble d'outils permettant d'assembler différentes couches dans les réseaux de neurones. A partir de là, l'utilisateur peut créer ses propres algorithmes et les intégrer au reste très facilement.

Performance : TensorFlow gère lui même les calculs asynchrone et permet donc en théorie de tirer le meilleur parti du matériel disponible. Mais en réalité, il est encore un peu à la traine comparé à certains de ses concurrents. A ses débuts, il souffrait même d'un réel problème de performance, qui a toutefois été vite corrigé par Google. Et les contributions ne cesse d'améliorer les choses.

API multi-langage : TensorFlow est utilisable en Python et en C++ (l'API Python est à l'heure actuelle le plus complet et le plus facile à utiliser, mais l'API C ++ peut offrir certains avantages de performance dans l'exécution du graphe, et prend en charge le déploiement Android). De plus, Google à l'intention d'inclure des API pour Java et Go, puis plus tard pour d'autres langages comme JavaScript, Lua, R, etc.

Outils incorporés : Tensorboard aide à construire et à visualiser les modèles de flots de données.

Communauté active : Il suffit de jeter un oeil à la liste des auteurs de TensorFlow pour se rendre compte de l'importance du projet pour Google, puisqu'il a mis dessus un bon nombres de ses meilleurs éléments: Jeff Dean (père de MapReduce), Ian Goodfellow (contributeur principal de Théano / PyLearn2), Yangqing Jia (principal contributeur de Caffe). De plus, Google a rendu cette technologie open source pour accélérer sa croissance. Cette stratégie est payante car la communauté est effectivement très active. Et une communauté active est la meilleure des choses pour le maintient et le développement d'une technologie !

Fonctionnement général
TensorFlow représente les flux de données sous forme de graphes, où les nœuds représentent des opérations mathématiques et les arrêtes représentent des tenseurs. Ces graphes sont des représentations complètes des calculs qui sont ensuite exécutés sur le CPU ou le GPU.

Tenseur
TensorFlow utilise des tenseurs pour représenter toutes les données. Les tenseurs sont des tableaux de données multidimensionnelles et de taille dynamique. Cette structure peut donc avoir différents niveaux de complexité, du scalaire à une matrice de dimension n.



Variable
Les opérations mathématiques réalisées par TensorFlow découlent directement du ou des modèles utilisés pour l'apprentissage. Hors, ces modèles reposent eux même sur les paramètres (poids et biais pour la softmax regression). Lors de la phase d'entrainement, TensorFlow utilise des variables pour mettre à jours ces paramètres sur lequel repose le modèle d'apprentissage. Ces variables contiennent des tenseurs (puisque toutes les données sont des tenseurs sous TensorFlow), mais contrairement aux tenseurs, les variables sont modifiées tout au long de la phase d'apprentissage.



code source en python
=Bibliographie=