Bitsletter #1 : Hashage pour les divisions d'apprentissage automatique, performance des applications web, et insights de DALL-E 2

Bitsletter #1 : Hashage pour les divisions d'apprentissage automatique, performance des applications web, et insights de DALL-E 2

🧠 Conseil d'apprentissage automatique : Divisez les ensembles d'entraînement et de test avec une fonction de hachage

Lorsque vous travaillez sur une solution d'apprentissage automatique, vous devez souvent diviser les données en un ensemble d'entraînement et un ensemble de test. Les moyens les plus simples de diviser les données consistent à utiliser quelque chose comme train_test_split à partir de sklearn ou à mélanger et calculer l'indice de division.

C'est pratique, mais cela présente quelques inconvénients :

  • Vous devez sauvegarder la graine pour la reproductibilité
  • Si vous rassemblez plus de données et refaites la division, vous n'êtes pas sûr que toutes les données de test précédentes seront encore dans le nouvel ensemble de test
  • Vous pouvez avoir des fuites de données : supposons que vous ayez un ensemble de données où les données d'une même journée sont fortement corrélées. Vous aimeriez éviter de diviser au milieu d'une journée, car les données de test seront trop corrélées aux données d'entraînement pour cette journée spécifique

Je lisais des documents sur les patterns de conception pour l'apprentissage automatique et j'ai découvert une astuce intéressante pour résoudre ces problèmes.

Utilisez une fonction de hachage sur la colonne appropriée pour déterminer la division de chaque échantillon de données.

Une fonction de hachage a la propriété intéressante de mapper les entrées vers une distribution uniforme en octets : si vous hachez chaque ligne en fonction d'une colonne d'identifiant définie, convertissez le hachage en un entier et prenez le modulo 10, vous obtiendrez une distribution uniforme sur tous les chiffres :

h = hachage(ligne[identifiant]) % 10 donnera en sortie 0,1,…,9 de manière uniforme et de manière déterministe sans avoir besoin d'une graine (pour un identifiant bien distribué)

is_test = h >= 8 sera vrai dans 20% des cas.

Cela résout les problèmes précédemment discutés :

  • Vous n'avez pas besoin d'une graine
  • Si vous rassemblez plus de données et refaites la division, le nouvel ensemble de test contiendra tous les exemples de l'ensemble de test précédent
  • En utilisant le même exemple qu'auparavant, si vous utilisez la colonne de la journée comme identifiant, vous êtes sûr que toutes les données de la même journée seront soit entièrement dans l'ensemble d'entraînement, soit dans l'ensemble de test

🌐 Conseil web : Rapprochez votre application web des utilisateurs

L'informatique en périphérie pour le web est en hausse. 🚀

Le web est un outil incroyable pour toucher un grand nombre de personnes dans le monde entier. Cependant, les performances sont essentielles pour l'expérience utilisateur (et donc pour la rétention des utilisateurs) :

Un temps de chargement de 0,1 seconde peut entraîner +8 % de conversions selon les données de Google.

De plus, de nombreux utilisateurs d'Internet viennent de pays où la 4G/5G n'est pas largement disponible : pour eux, il est encore plus important de déployer des applications web à chargement rapide. Si vous déployez votre application sur des serveurs à un seul endroit, c'est simple, mais vous obtenez les pires performances (certains utilisateurs dans le monde seront éloignés des serveurs). La prochaine étape consiste à utiliser un déploiement multi-régions, tous les fournisseurs de cloud ont plusieurs régions principales comme l'Europe, l'Asie, l'Amérique, ... C'est mieux, mais encore à gros grains, ils ont généralement quelques centres de données par région.

🔥 Si vous utilisez un déploiement en périphérie avec des outils comme CloudFlare Workers, vous pouvez déployer aussi près que possible des utilisateurs : le réseau mondial de CloudFlare est présent dans 270 villes de plus de 100 pays, ce qui représente seulement 50 ms pour 95 % de la population mondiale connectée à Internet.

👩‍🔬 Article de recherche : Les modèles de diffusion surpassent les GAN pour la synthèse d'images

Vous avez probablement entendu parler de DALL-E 2, le nouveau modèle d'OpenAI qui génère des images époustouflantes à partir de descriptions textuelles. À première vue, on pourrait penser qu'il est basé sur un réseau génératif antagoniste, comme de nombreux autres modèles impressionnants de synthèse d'images. Cependant, ils utilisent un autre algorithme appelé modèle probabiliste de diffusion.

L'idée principale est d'ajouter progressivement du bruit aux images, jusqu'à obtenir une image avec des pixels aléatoires. Ensuite, vous entraînez un modèle à débruiter l'image étape par étape.

Pour une étape donnée et une image bruitée, le modèle débruite seulement un peu l'image pour atteindre l'étape suivante, et ainsi de suite, jusqu'à atteindre l'image d'origine. De cette manière, votre modèle apprend à transformer la distribution antérieure du bruit vers la distribution de l'image d'origine.

Enfin, pour générer une image, vous tirez aléatoirement une image basée sur votre bruit antérieur et vous appliquez votre modèle de débruitage plusieurs fois jusqu'à ce que vous obteniez une image de la distribution cible. Dans l'article Diffusion Models Beat GANs on Image Synthesis, les chercheurs comparent ces modèles de diffusion aux GAN et montrent qu'ils peuvent obtenir une meilleure synthèse d'images, avec un processus d'entraînement plus stable.

Vaut vraiment la peine d'être lu si vous êtes intéressé par les modèles génératifs.

🛠️ Outil : PyScript, Python interprété dans le navigateur

Lors de la PyCon US 2022, Anaconda a annoncé PyScript : Python interprété dans le navigateur. Ils ont porté CPython en WebAssembly pour interpréter directement du code Python dans les navigateurs (sans le transpiler vers un autre langage comme JavaScript). Cela maximise les performances puisque WebAssembly est le moyen le plus rapide d'exécuter du code dans le navigateur. C'est une excellente nouvelle pour les développeurs Python qui disposent désormais de superpouvoirs web. Imaginez le traitement des données, la création d'applications web, ... directement en Python 🚀.

📰 Actualités

AWS lance un outil pour évaluer l'empreinte carbone

AWS a publié un outil pour vous aider à suivre et prévoir l'empreinte carbone de votre utilisation du cloud. L'informatique en nuage est une technologie formidable, mais il est facile d'oublier qu'elle utilise des ressources « réelles » et a donc un impact carbone. C'est un pas dans la bonne direction pour les entreprises souhaitant atteindre la neutralité carbone.

PyTorch v1.11 est disponible

Le mois dernier, PyTorch a publié une nouvelle version : v1.11. Voici les 3 principales fonctionnalités à surveiller :

  • TorchData beta : une bibliothèque pour construire de meilleures pipelines de chargement de données.
  • Funtorch beta : une bibliothèque similaire à JAX pour PyTorch : calculez le gradient des fonctions Python.
  • Amélioration de la formation distribuée.

Jetez-y un coup d'œil.





Bitsletter #1 : Hashage pour les divisions d'apprentissage automatique, performance des applications web, et insights de DALL-E 2

Bitsletter #1 : Hashage pour les divisions d'apprentissage automatique, performance des applications web, et insights de DALL-E 2

🧠 Conseil d'apprentissage automatique : Divisez les ensembles d'entraînement et de test avec une fonction de hachage

Lorsque vous travaillez sur une solution d'apprentissage automatique, vous devez souvent diviser les données en un ensemble d'entraînement et un ensemble de test. Les moyens les plus simples de diviser les données consistent à utiliser quelque chose comme train_test_split à partir de sklearn ou à mélanger et calculer l'indice de division.

C'est pratique, mais cela présente quelques inconvénients :

  • Vous devez sauvegarder la graine pour la reproductibilité
  • Si vous rassemblez plus de données et refaites la division, vous n'êtes pas sûr que toutes les données de test précédentes seront encore dans le nouvel ensemble de test
  • Vous pouvez avoir des fuites de données : supposons que vous ayez un ensemble de données où les données d'une même journée sont fortement corrélées. Vous aimeriez éviter de diviser au milieu d'une journée, car les données de test seront trop corrélées aux données d'entraînement pour cette journée spécifique

Je lisais des documents sur les patterns de conception pour l'apprentissage automatique et j'ai découvert une astuce intéressante pour résoudre ces problèmes.

Utilisez une fonction de hachage sur la colonne appropriée pour déterminer la division de chaque échantillon de données.

Une fonction de hachage a la propriété intéressante de mapper les entrées vers une distribution uniforme en octets : si vous hachez chaque ligne en fonction d'une colonne d'identifiant définie, convertissez le hachage en un entier et prenez le modulo 10, vous obtiendrez une distribution uniforme sur tous les chiffres :

h = hachage(ligne[identifiant]) % 10 donnera en sortie 0,1,…,9 de manière uniforme et de manière déterministe sans avoir besoin d'une graine (pour un identifiant bien distribué)

is_test = h >= 8 sera vrai dans 20% des cas.

Cela résout les problèmes précédemment discutés :

  • Vous n'avez pas besoin d'une graine
  • Si vous rassemblez plus de données et refaites la division, le nouvel ensemble de test contiendra tous les exemples de l'ensemble de test précédent
  • En utilisant le même exemple qu'auparavant, si vous utilisez la colonne de la journée comme identifiant, vous êtes sûr que toutes les données de la même journée seront soit entièrement dans l'ensemble d'entraînement, soit dans l'ensemble de test

🌐 Conseil web : Rapprochez votre application web des utilisateurs

L'informatique en périphérie pour le web est en hausse. 🚀

Le web est un outil incroyable pour toucher un grand nombre de personnes dans le monde entier. Cependant, les performances sont essentielles pour l'expérience utilisateur (et donc pour la rétention des utilisateurs) :

Un temps de chargement de 0,1 seconde peut entraîner +8 % de conversions selon les données de Google.

De plus, de nombreux utilisateurs d'Internet viennent de pays où la 4G/5G n'est pas largement disponible : pour eux, il est encore plus important de déployer des applications web à chargement rapide. Si vous déployez votre application sur des serveurs à un seul endroit, c'est simple, mais vous obtenez les pires performances (certains utilisateurs dans le monde seront éloignés des serveurs). La prochaine étape consiste à utiliser un déploiement multi-régions, tous les fournisseurs de cloud ont plusieurs régions principales comme l'Europe, l'Asie, l'Amérique, ... C'est mieux, mais encore à gros grains, ils ont généralement quelques centres de données par région.

🔥 Si vous utilisez un déploiement en périphérie avec des outils comme CloudFlare Workers, vous pouvez déployer aussi près que possible des utilisateurs : le réseau mondial de CloudFlare est présent dans 270 villes de plus de 100 pays, ce qui représente seulement 50 ms pour 95 % de la population mondiale connectée à Internet.

👩‍🔬 Article de recherche : Les modèles de diffusion surpassent les GAN pour la synthèse d'images

Vous avez probablement entendu parler de DALL-E 2, le nouveau modèle d'OpenAI qui génère des images époustouflantes à partir de descriptions textuelles. À première vue, on pourrait penser qu'il est basé sur un réseau génératif antagoniste, comme de nombreux autres modèles impressionnants de synthèse d'images. Cependant, ils utilisent un autre algorithme appelé modèle probabiliste de diffusion.

L'idée principale est d'ajouter progressivement du bruit aux images, jusqu'à obtenir une image avec des pixels aléatoires. Ensuite, vous entraînez un modèle à débruiter l'image étape par étape.

Pour une étape donnée et une image bruitée, le modèle débruite seulement un peu l'image pour atteindre l'étape suivante, et ainsi de suite, jusqu'à atteindre l'image d'origine. De cette manière, votre modèle apprend à transformer la distribution antérieure du bruit vers la distribution de l'image d'origine.

Enfin, pour générer une image, vous tirez aléatoirement une image basée sur votre bruit antérieur et vous appliquez votre modèle de débruitage plusieurs fois jusqu'à ce que vous obteniez une image de la distribution cible. Dans l'article Diffusion Models Beat GANs on Image Synthesis, les chercheurs comparent ces modèles de diffusion aux GAN et montrent qu'ils peuvent obtenir une meilleure synthèse d'images, avec un processus d'entraînement plus stable.

Vaut vraiment la peine d'être lu si vous êtes intéressé par les modèles génératifs.

🛠️ Outil : PyScript, Python interprété dans le navigateur

Lors de la PyCon US 2022, Anaconda a annoncé PyScript : Python interprété dans le navigateur. Ils ont porté CPython en WebAssembly pour interpréter directement du code Python dans les navigateurs (sans le transpiler vers un autre langage comme JavaScript). Cela maximise les performances puisque WebAssembly est le moyen le plus rapide d'exécuter du code dans le navigateur. C'est une excellente nouvelle pour les développeurs Python qui disposent désormais de superpouvoirs web. Imaginez le traitement des données, la création d'applications web, ... directement en Python 🚀.

📰 Actualités

AWS lance un outil pour évaluer l'empreinte carbone

AWS a publié un outil pour vous aider à suivre et prévoir l'empreinte carbone de votre utilisation du cloud. L'informatique en nuage est une technologie formidable, mais il est facile d'oublier qu'elle utilise des ressources « réelles » et a donc un impact carbone. C'est un pas dans la bonne direction pour les entreprises souhaitant atteindre la neutralité carbone.

PyTorch v1.11 est disponible

Le mois dernier, PyTorch a publié une nouvelle version : v1.11. Voici les 3 principales fonctionnalités à surveiller :

  • TorchData beta : une bibliothèque pour construire de meilleures pipelines de chargement de données.
  • Funtorch beta : une bibliothèque similaire à JAX pour PyTorch : calculez le gradient des fonctions Python.
  • Amélioration de la formation distribuée.

Jetez-y un coup d'œil.