Avec le développement des ordinateurs numériques au milieu des années cinquante est apparue l'idée qu'il pourrait être possible pour un ordinateur de développer une forme d'intelligence et d'accomplir certaines tâches humaines. Pour ce faire, il devrait apprendre par lui-même, améliorer constamment son raisonnement, comme nous le faisons tout au long de notre vie. De ce point de vue et avec l'aide des statistiques fut créée l'Intelligence Artificielle (IA), un domaine qui comprend également les modèles d'apprentissage automatique (machine learning) et d'apprentissage profond (deep learning).
Dans l'apprentissage profond, des algorithmes dérivés du cerveau, appelés réseaux neuronaux, sont entraînés pour réaliser certaines tâches par un processus de prédiction. Plus récemment, l'apprentissage profond a eu un impact considérable dans de nombreux domaines, et de nouvelles architectures de modèles obtiennent régulièrement de meilleurs résultats, au prix d'une utilisation toujours plus importante de puissance de calcul – aujourd'hui, des GPU coûteux. Voyons comment fonctionnent la première architecture neuronale, le perceptron, et les réseaux neuronaux qui ont suivi.
Inventé dans les années 50, l'algorithme du perceptron est un classifieur linéaire binaire initialement destiné à la reconnaissance d'images par apprentissage supervisé (il s'agit d'une forme d'entraînement, orientant le modèle en connaissant le résultat souhaité grâce à l'utilisation de données étiquetées). Il se compose de plusieurs éléments : n valeurs d'entrée (xi), des poids (wi) et un biais (b), une somme et une fonction d'activation (ϕ) qui mappe l'entrée entre les valeurs requises (souvent dans [0,1] pour les probabilités ou [−1,1]). Les équations suivantes résument les opérations d'une itération :
z=i=1∑nwixi+b
y=ϕ(z)
Ces équations sont exécutées un certain nombre de fois, appelées époques (epochs). À chaque époque, les paramètres du modèle, c'est-à-dire les poids et le biais, sont mis à jour par un processus d'optimisation par gradient qui minimise une fonction de coût entre la sortie du modèle (étiquette prédite yp) et celle attendue (vraie étiquette yt).
Cet algorithme étant linéaire, il n'était capable de prédire que quelques classes avec une précision limitée. Quelques décennies plus tard, il a été démontré que la combinaison de plusieurs perceptrons pour former un perceptron multicouche permettait de contourner cette limite.
Les modèles qui ont été développés suite à cette découverte sont capables de modéliser des phénomènes non linéaires, ce qui leur permet d'apprendre des tâches plus complexes. Le perceptron multicouche apparu dans les années quatre-vingt utilisait la rétropropagation (backpropagation) pour calculer les gradients lors de l'étape d'optimisation : en partant de la couche de sortie, elle remonte jusqu'à la couche d'entrée, calculant l'importance de chaque perceptron sur la sortie précédente, et modifiant l'importance de leurs poids en conséquence. L'algorithme de rétropropagation est aujourd'hui souvent effectué automatiquement par un optimiseur tel que l'optimiseur Adam pour simplifier l'entraînement des réseaux neuronaux.
Au XXIe siècle, les réseaux neuronaux profonds (deep neural networks) ont commencé à devenir très populaires et de nouvelles architectures continuaient d'être inventées toutes les quelques années. Parmi elles, on retrouve les bien connus Réseau Neuronal Convolutif (CNN) et Réseau Neuronal Récurrent (RNN).
De nombreuses bibliothèques peuvent être utilisées pour implémenter de tels modèles sur Qarnot, telles que Tensorflow, Sickit-Learn, Pytorch, etc. Dans ce cas d'usage, nous nous concentrons sur la bibliothèque Pytorch, un framework d'apprentissage automatique open source populaire dans le domaine opérationnel pour sa facilité de déploiement en production. Nous allons maintenant l'utiliser pour entraîner un modèle d'apprentissage profond sur la Plateforme Qarnot.
Le cas présenté ici utilise l'ensemble de données météorologiques extrait de Rain in Australia, et peut être téléchargé ici. Il contient 142 193 échantillons de données météorologiques quotidiennes provenant de plusieurs régions d'Australie. 24 caractéristiques (features) sont utilisées pour décrire ces données, y compris une caractéristique indiquant s'il a plu le lendemain du jour où les données ont été collectées. Il peut être utilisé pour créer un réseau neuronal capable de prédire la probabilité de pluie le lendemain d'un jour donné à partir d'un ensemble de données spatiales et atmosphériques pour ce jour. Ce problème est traité comme un cas de classification binaire, en transformant la caractéristique qui décrit s'il pleut ou non le lendemain en un indice binaire, 0 indiquant qu'il ne pleut pas et 1 indiquant qu'il pleut.
L'ensemble de données choisi a nécessité un court prétraitement avant son utilisation, car il y a des données manquantes et des variables catégorielles qui doivent être converties en données numériques.
Pour des raisons pédagogiques, un perceptron multicouche simple et petit est construit, composé de trois couches linéaires, mais un modèle plus complexe pourrait également être créé. Il est ensuite entraîné avec l'optimiseur adam classique, rapidement mentionné ci-dessus, et une perte d'entropie croisée (cross entropy loss) – bien adaptée à un cas de classification – sur 75 % de l'ensemble de données, les 25 % restants étant laissés pour les tests.
La première étape consiste à créer un compte Qarnot. Nous offrons 15 € de calcul sur votre abonnement, ce qui couvre largement les coûts d'exécution de cet exemple.
Ensuite, créez un dossier Pytorch, et à l'intérieur de celui-ci, un dossier input. Dans le dossier input, vous inclurez l'ensemble de données téléchargé ici et le script python suivant qui prétraite les données, crée l'architecture du modèle et l'entraîne.
Maintenant que vous avez tous les éléments nécessaires à la simulation, utilisons le SDK Python de Qarnot pour lancer le calcul. Vous pouvez enregistrer le script python suivant sous le nom pytorch.py
dans le dossier Pytorch. Il vous suffit d'inclure votre Jeton Qarnot depuis votre compte nouvellement créé dans l'emplacement correspondant. Ce script exécute l'entraînement sur un CPU, mais il peut également être effectué sur un ou plusieurs GPU en modifiant le profil indiqué lors de la création de la tâche.
Il ne vous reste plus qu'à suivre ces étapes pour configurer un environnement virtuel Python dans le dossier Pytorch, puis à exécuter le script Python en tapant "python pytorch.py
" dans un terminal.
Vous pouvez ensuite consulter les détails des tâches sur votre propre console ou sur la console de Qarnot en cliquant sur votre tâche. Une fois la tâche terminée, les résultats (c'est-à-dire le modèle entraîné, les prédictions et un journal) seront téléchargés sur votre ordinateur.
Après 1000 époques d'entraînement, le modèle entraîné et les prédictions sont récupérés et plusieurs métriques sont analysées. Une précision finale de 86 % et un score F1 de 78 % sont obtenus. Ces résultats plutôt satisfaisants, compte tenu de la simplicité du modèle et des paramètres utilisés, doivent cependant être nuancés : l'ensemble de données initial est très déséquilibré, avec près de 78 % des échantillons appartenant à la classe 0 (pas de pluie le lendemain), et seulement 22 % à la classe opposée (pluie le lendemain). Cette disparité s'explique simplement par le fait que cet ensemble de données contient des observations météorologiques d'Australie où les jours de pluie sont moins fréquents.
Cela entraîne un grand nombre de faux négatifs, la matrice de confusion suivante montrant les pourcentages d'échantillons prédits dans chaque classe connaissant leur véritable étiquette. Le réseau neuronal préfère en effet se concentrer sur la prédiction correcte des échantillons de classe 0, car ils sont majoritaires, pour augmenter son taux de précision.
Pour contrebalancer cela et voir si de meilleurs résultats pourraient être obtenus, plusieurs techniques classiques pourraient être testées : le sous-échantillonnage (under-sampling), le sur-échantillonnage (over-sampling) ou l'inclusion des poids des classes pendant l'entraînement. L'architecture du réseau neuronal peut également être améliorée pour mieux l'adapter à ce cas d'usage.
D'autres méthodes auraient pu être utilisées pour effectuer cette prédiction météorologique. En restant dans le domaine de l'IA, d'autres algorithmes d'apprentissage automatique tels que le SVM (Support Vector Machine) auraient pu donner des résultats similaires, bien que leur entraînement aurait pris plus de temps.
En ce qui concerne les prévisions météorologiques, des progrès ont été réalisés ces dernières années et certains modèles d'apprentissage profond, comme MetNet+ de Google, sont désormais capables de prédire la météo de manière fiable jusqu'à 12 heures à l'avance. Pour des temps de prévision plus longs, des modèles dynamiques basés sur la physique et gourmands en calcul sont nécessaires.
Nous espérons que vous avez apprécié ce tutoriel ! Si vous avez des questions ou si vous souhaitez utiliser notre plateforme pour des calculs plus lourds (nous pouvons fournir des ressources de pointe sur demande), n'hésitez pas à nous contacter.