En AP2 et AP3, nous avons représenté un programme pour pouvoir l’interpréter, puis le compiler. Nous allons maintenant préparer des données et représenter les calculs que nous voulons leur appliquer. Ce sera l’occasion d’approfondir Elixir, puis de découvrir Nx, la bibliothèque de calcul numérique d’Elixir, dans Livebook.
Nous partons d’une grille de points dans le plan. Chaque point reçoit une
classe selon le signe du produit de ses coordonnées : la classe 1 lorsque
x * y > 0, la classe 0 sinon, y compris sur les axes. Deux quadrants opposés
ont donc la même classe. Cette règle, proche du problème XOR à un choix
d’étiquettes près, nous donnera en AP5 un premier souci à résoudre : une
droite peut-elle séparer les classes ? Nous connaissons la règle pour pouvoir
juger ce qu’un modèle apprendra ; le modèle, lui, ne verra que des exemples.
Ouvrez les trois ateliers dans l’ordre. Dans le premier, nous fabriquons et
résumons la grille avec les formes d’Elixir qui servent au traitement de
données : les maps, les fonctions anonymes fn … end, Enum.map et
Enum.filter, le pipe |> qui enchaîne ces appels, et la compréhension for
qui parcourt toutes les combinaisons de coordonnées. Dans le deuxième, nous
rassemblons les nombres dans des tenseurs, des tableaux numériques dont il
faut connaître la forme, c-à-d. la taille de chaque axe, et le rôle de
chaque axe : chez nous, l’axe 0 énumère les exemples et l’axe 1 leurs
coordonnées. Nous y rencontrons les réductions, par ex. une moyenne par
coordonnée, et le broadcasting, qui étend une forme plus petite sur une plus
grande. Le troisième introduit defn : une fonction numérique dont Nx
construit le graphe d’opérations, que l’on peut ensuite exécuter ou
transformer, ce qui prépare le gradient d’AP5.
Avant chaque essai, prédisez une valeur ou une forme, puis comparez avec le
résultat. Les petites variantes proposées doivent aussi vous faire rencontrer
les soucis : une réduction sur le mauvais axe, ou une soustraction entre les
formes {n, 1} et {n}, peut conserver des nombres plausibles tout en
répondant à une autre question ! Gardez une trace de ce qui vous a surpris et
expliquez votre correction. Chaque forme nouvelle est expliquée dans le carnet
à l’endroit où elle sert, avec un exemple minimal ; les contrats sont donnés,
les fonctions sont à écrire, et des assert vérifient votre travail.
Les bibliothèques sont installées par la première cellule du carnet, avec
Mix.install. Cette première installation demande une connexion ; les données
sont produites sur place et les calculs utilisent le processeur, sans GPU ni
compte externe. Les transformations numériques se font dans Livebook : le
bouton d’exécution des pages du site ne charge pas Nx. Le chapitre 7 du poly,
« Des tenseurs et des graphes », reprend les données, les tenseurs et le
graphe de calcul de cette séance ; lisez-le avec les expériences des
carnets. Le chapitre 8 accompagnera AP5.
La séance s’ouvre par le quiz sur AP3 : relisez le chapitre 6 du poly, « Des
octets aux instructions ». Nous reprendrons aussi oralement les idées du cycle
AP1–AP3 pendant le premier atelier ; ces échanges comptent dans la
participation. Je préciserai en cours le point d’arrêt et les prolongements
facultatifs. Conservez vos carnets dans AP4/, avec vos essais et vos
explications ; les modalités du prochain rendu seront annoncées en séance.
Si un bout de syntaxe vous manque en route, le poly donne les formes avec un exemple et sa sortie : le langage aux chapitres 1 à 4, Nx au chapitre 7.
Pour toute question, vous pouvez me contacter par email, comme indiqué en cours.
Ouvrir les ateliers
1. Préparer nos données
Construisez une grille de points avec for, puis transformez et filtrez les données avec Enum et le pipe.
Slides 5 à 14Elixir : maps, fonctions anonymes, Enum, |> et for · poly, chap. 3 et 4.
2. Donner une forme aux nombres
Passez des listes aux tenseurs. Prédisez les formes après une réduction et expliquez un broadcasting.
Slides 16 à 26Nx : tensor, shape, axes et broadcasting · poly, chap. 7.
3. Décrire un graphe de calcul
Écrivez un calcul avec defn. Retrouvez la distinction entre représenter un programme et l’exécuter, étudiée en AP2–AP3.
Slides 27 à 34Elixir : defmodule et fonctions · Nx.Defn : defn, opérations tensorielles et graphe · poly, chap. 7.
