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.

Run in LivebookTélécharger le .livemd

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.

Run in LivebookTélécharger le .livemd

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.

Run in LivebookTélécharger le .livemd