11.6 C
New York

Weblog Posit AI : Revisiter Keras pour R



Avant même de parler de nouvelles fonctionnalités, répondons à la query évidente. Oui, il y aura une deuxième édition de Apprentissage en profondeur pour R! Reflétant ce qui s’est passé entre-temps, la nouvelle édition couvre un ensemble étendu d’architectures éprouvées ; en même temps, vous constaterez que les conceptions intermédiaires à avancées déjà présentes dans la première édition sont devenues plutôt plus intuitives à mettre en œuvre, grâce aux nouvelles améliorations de bas niveau évoquées dans le résumé.

Mais ne vous méprenez pas – la portée du livre est complètement inchangée. C’est toujours le choix parfait pour les personnes qui découvrent l’apprentissage automatique et l’apprentissage en profondeur. À partir des idées de base, il progresse systématiquement vers des sujets intermédiaires et avancés, vous laissant à la fois une compréhension conceptuelle et un sac de modèles d’utility utiles.

Que s’est-il passé avec Keras ?

État de l’écosystème

Commençons par une caractérisation de l’écosystème, et quelques mots sur son histoire.

Dans ce put up, quand on dit Kerasnous entendons R – par opposition à Python – Keras. Maintenant, cela se traduit immédiatement par le bundle R keras. Mais keras seul ne vous mènerait pas loin. Alors que keras fournit les fonctionnalités de haut niveau – couches de réseau neuronal, optimiseurs, gestion des flux de travail, and many others. – la construction de données de base sur laquelle opère, tenseursVit à tensorflow. Troisièmement, dès que vous aurez besoin d’effectuer un prétraitement moins trivial, ou que vous ne pourrez plus garder l’ensemble de la formation en mémoire en raison de sa taille, vous voudrez vous pencher sur tfdatasets.

Ce sont donc ces trois packages – tensorflow, tfdatasetset keras – qu’il faut entendre par « Keras » dans le contexte actuel. (L’écosystème R-Keras, en revanche, est un peu plus grand. Mais d’autres packages, tels que tfruns ou cloudmlsont plus découplés du noyau.)

Conformément à leur intégration étroite, les packages susmentionnés ont tendance à suivre un cycle de publication commun, lui-même dépendant de la bibliothèque Python sous-jacente, TensorFlow. Pour chacun de tensorflow, tfdatasetset keras , la model actuelle du CRAN est 2.7.0, reflétant la model Python correspondante. La synchronisation des variations entre les deux Kerases, R et Python, semble indiquer que leurs destins se sont développés de manière similaire. Rien n’est moins vrai, et le savoir peut être utile.

En R, entre les packages présents dès le départ tensorflow et kerasles responsabilités ont toujours été réparties comme elles le sont aujourd’hui : tensorflow fournir des bases indispensables, mais souvent, en restant complètement clear pour l’utilisateur ; keras étant la selected que vous utilisez dans votre code. En fait, il est doable de former un modèle Keras sans jamais utiliser consciemment tensorflow.

Du côté de Python, les choses ont subi des changements importants, ceux où, dans un sure sens, ce dernier développement a inversé le premier. Au début, TensorFlow et Keras étaient des bibliothèques distinctes, TensorFlow fournissant un backend – un parmi plusieurs – que Keras pouvait utiliser. À un second donné, le code Keras a été intégré à la base de code TensorFlow. Enfin (à partir d’aujourd’hui), après une longue période de légère confusion, Keras a de nouveau été déplacé et a recommencé à développer considérablement ses fonctionnalités.

C’est justement cette croissance rapide qui a créé, du côté R, le besoin d’une refactorisation et d’améliorations de bas niveau. (Bien sûr, la nouvelle fonctionnalité destinée à l’utilisateur elle-même devait également être implémentée !)

Avant d’en arriver aux faits saillants promis, un mot sur la façon dont nous pensons à Keras.

Prenez votre gâteau et mangez-le aussi : une philosophie de (R) Keras

Si vous avez utilisé Keras dans le passé, vous savez ce qu’il a toujours été conçu : une bibliothèque de haut niveau, ce qui facilite (dans la mesure où une telle selected peut être facile) pour former des réseaux de neurones dans R. En fait, il ne s’agit pas seulement de faciliter. Keras permet aux utilisateurs d’écrire du code d’facet naturel et idiomatique. Ceci, dans une giant mesure, est obtenu en permettant la composition d’objets par l’opérateur de tuyau ; c’est aussi une conséquence de ses nombreuses enveloppes, de ses fonctions de commodité et de sa sémantique fonctionnelle (sans état).

Cependant, en raison de la façon dont TensorFlow et Keras se sont développés du côté Python – en référence aux grands changements architecturaux et sémantiques entre les variations 1.x et 2.x, d’abord caractérisés de manière exhaustive sur ce weblog ici – il est devenu plus difficile de fournir toutes les fonctionnalités disponibles du côté Python à l’utilisateur R. De plus, maintenir la compatibilité avec plusieurs variations de Python TensorFlow – quelque selected que R Keras a toujours fait – devient par nécessité de plus en plus difficile, plus vous ajoutez de wrappers et de fonctions pratiques.

C’est donc là que nous complétons ce qui précède « rendez-le semblable à R et naturel, si doable » par « rendez-le facile à porter depuis Python, si nécessaire ». Avec la nouvelle fonctionnalité de bas niveau, vous n’aurez pas à attendre que les wrappers R utilisent des objets définis par Python. Au lieu de cela, les objets Python peuvent être sous-classés directement à partir de R ; et toute fonctionnalité supplémentaire que vous souhaitez ajouter à la sous-classe est définie dans une syntaxe de kind Python. Concrètement, cela signifie que la traduction du code Python en R est devenue beaucoup plus facile. Nous en aurons un aperçu dans le deuxième de nos trois faits saillants.

Nouveau dans Keras 2.6/7 : Trois factors forts

Parmi les nombreuses nouvelles fonctionnalités ajoutées dans Keras 2.6 et 2.7, nous présentons rapidement trois des plus importantes.

  • Couches de prétraitement contribuent de manière significative à rationaliser le flux de travail de formation, en intégrant la manipulation et l’augmentation des données.

  • La possibilité de sous-classer les objets Python (déjà mentionnée à plusieurs reprises) est la nouvelle magie de bas niveau disponible pour le keras utilisateur et qui alimente de nombreuses améliorations destinées à l’utilisateur en dessous.

  • Les couches de réseau neuronal récurrent (RNN) bénéficient d’une nouvelle API au niveau de la cellule.

Parmi ceux-ci, les deux premiers méritent certainement un traitement plus approfondi ; des articles plus détaillés suivront.

Couches de prétraitement

Avant l’avènement de ces couches dédiées, le prétraitement était effectué dans le cadre de la tfdatasets pipeline. Vous enchaîneriez les opérations au besoin; peut-être, intégrer des transformations aléatoires à appliquer lors de l’entraînement. Selon ce que vous vouliez réaliser, un effort de programmation necessary peut s’ensuivre.

C’est un domaine où les nouvelles fonctionnalités peuvent aider. Des couches de prétraitement existent pour plusieurs sorts de données, permettant le « traitement des données » habituel, ainsi que l’augmentation des données et l’ingénierie des fonctionnalités (comme dans le hachage des données catégorielles ou la vectorisation du texte).

La point out de la vectorisation du texte conduit à un deuxième avantage. Contrairement à, disons, une distorsion aléatoire, la vectorisation n’est pas quelque selected qui peut être oublié une fois fait. Nous ne voulons pas perdre l’data originale, à savoir les mots. La même selected se produit, pour les données numériques, avec la normalisation. Nous devons conserver les statistiques sommaires. Cela signifie qu’il existe deux sorts de couches de prétraitement : les couches sans état et avec état. Les premiers font partie du processus de formation; ces derniers sont appelés à l’avance.

Les couches sans état, en revanche, peuvent apparaître à deux endroits dans le flux de travail de formation : dans le cadre du tfdatasets pipeline, ou dans le cadre du modèle.

Voici, schématiquement, à quoi ressemblerait le premier.

library(tfdatasets)
dataset <- ... # outline dataset
dataset <- dataset %>%
  dataset_map(operate(x, y) checklist(preprocessing_layer(x), y))

Alors qu’ici, la couche de prétraitement est la première d’un modèle plus giant :

enter <- layer_input(form = input_shape)
output <- enter %>%
  preprocessing_layer() %>%
  rest_of_the_model()
mannequin <- keras_model(enter, output)

Nous parlerons de quelle manière est préférable quand, ainsi que de présenter quelques couches spécialisées dans un futur article. D’ici là, n’hésitez pas à consulter le – détaillé et riche en exemples vignette.

Sous-classer Python

Imaginez que vous souhaitiez porter un modèle Python utilisant la contrainte suivante :

vignette pour de nombreux exemples, du sucre syntaxique et des détails de bas niveau.

API de cellule RNN

Notre troisième level est au moins deux fois moins criant à une excellente documentation qu’une alerte à une nouvelle fonctionnalité. Le doc en query est un nouveau vignette sur les RNN. La vignette donne un aperçu utile du fonctionnement des RNN dans Keras, en abordant les questions habituelles qui ont tendance à se poser une fois que vous ne les utilisez pas depuis un sure temps : quels sont exactement les états par rapport aux sorties, et quand une couche renvoie-t-elle quoi ? Remark initialiser l’état d’une manière dépendante de l’utility ? Quelle est la différence entre les RNN avec et sans état ?

En outre, la vignette couvre des questions plus avancées : remark transmettre des données imbriquées à un RNN ? Remark écrire des cellules personnalisées ?

En fait, cette dernière query nous amène à la nouvelle fonctionnalité que nous voulions appeler : la nouvelle API au niveau des cellules. Conceptuellement, avec les RNN, il y a toujours deux choses en jeu : la logique de ce qui se passe à un on the spot donné ; et le threading de l’état à travers les pas de temps. Les soi-disant « RNN simples » ne concernent que ce dernier facet (récursivité) ; ils ont tendance à présenter le problème classique des gradients de fuite. Les architectures fermées, telles que le LSTM et le GRU, ont été spécialement conçues pour éviter ces problèmes ; les deux peuvent être facilement intégrés dans un modèle en utilisant les layer_x() constructeurs. Et si vous vouliez, pas un GRU, mais quelque selected comme un GRU (en utilisant une nouvelle méthode d’activation sophistiquée, par exemple) ?

Avec Keras 2.7, vous pouvez désormais créer une cellule RNN à pas de temps distinctive (en utilisant la méthode décrite ci-dessus %py_class% API), et obtenir une model récursive – une couche complète – en utilisant layer_rnn():

rnn <- layer_rnn(cell = cell)

Si vous êtes intéressé, consultez le vignette pour un exemple étendu.

Sur ce, nous terminons notre nouvelles de Keras, pour aujourd’hui. Merci d’avoir lu et restez à l’écoute pour en savoir plus !

picture par Hans-Jürgen Mager sur Unsplash

Related Articles

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Latest Articles