Accueil – Chapitre approfondi 4

À la fin de ce chapitre, tu sauras : expliquer ce que veut dire « un réseau peut approximer presque n’importe quelle fonction », comment on passe d’un neurone sigmoïde à une marche puis à une bosse, comment plusieurs bosses permettent d’approcher une fonction entière, et pourquoi les réseaux profonds sont à la fois puissants et difficiles à entraîner.

Bienvenue dans le chapitre approfondi 4. Tu as vu aux chapitres 1 à 5 (et aux approfondis 1 à 3) comment un réseau calcule et apprend. Ici, tu vas découvrir une idée étonnante : avec suffisamment de neurones cachés, un réseau peut imiter pratiquement n’importe quelle fonction continue. On commencera par des marches, puis des bosses, puis des sommets multiples qui dessinent une fonction. On verra ensuite pourquoi, en pratique, entraîner des réseaux très profonds n’est pas si simple — on en reparlera plus en détail dans le chapitre approfondi 5 — et en quoi cela conduit au deep learning moderne.

Parcours du chapitre (en une image)

Neurone sigmoïde Marche Bosse Beaucoup de bosses Universalité

En résumé : ce chapitre montre, avec des dessins et des widgets, comment des neurones sigmoïdes peuvent construire des marches, puis des bosses, puis une approximation de n’importe quelle fonction continue, et comment cela se relie aux réseaux profonds utilisés en pratique.

Lexique

Objectif : connaître les mots importants : universalité, approximation, fonction continue, fonction marche, bosse, couche cachée, σ⁻¹, réseau profond.

Universalité
Propriété qui dit qu’un réseau de neurones avec une couche cachée assez grande peut approximer toute fonction continue (sur un intervalle donné) aussi bien qu’on veut.
Approximation
On ne demande pas que le réseau calcule exactement la fonction, mais que sa sortie soit très proche de la valeur voulue pour toutes les entrées (erreur < ε choisi).
Fonction continue
Fonction sans sauts brusques : de petites variations de l’entrée entraînent de petites variations de la sortie.
Fonction marche
Fonction qui vaut presque 0 à gauche d’un point s, puis presque 1 à droite : elle ressemble à une « marche » qui monte d’un coup.
Bosse (bump)
Fonction qui vaut 0 presque partout sauf dans un petit intervalle où elle a une hauteur h : on peut la construire en combinant deux marches.
Couche cachée unique
Couche entre les entrées et les sorties. Le théorème d’universalité dit qu’avec assez de neurones dans cette couche, on peut approximer toute fonction continue.
σ⁻¹
Fonction inverse de la sigmoïde σ. Elle permet de dire : « pour obtenir telle sortie σ(z), quel z faut‑il ? ».
Réseau profond
Réseau avec plusieurs couches cachées. Il peut apprendre des hiérarchies de concepts (traits → formes → objets), mais est plus difficile à entraîner.

Deux précisions sur l’universalité

Objectif : bien comprendre de quoi parle (et ne parle pas) l’universalité.

1. Approximation, pas calcul exact. Le théorème dit : pour toute fonction continue f et pour toute précision ε > 0, il existe un réseau qui produit une sortie g(x) telle que |g(x) − f(x)| < ε pour toutes les entrées x. On peut donc s’approcher autant qu’on veut, mais pas forcément être exactement égal partout.

2. Fonctions continues. Le résultat s’applique aux fonctions continues sur un intervalle (par exemple entre 0 et 1). Si la fonction a des sauts brusques, on ne peut pas la suivre parfaitement, mais on peut souvent faire une approximation suffisamment bonne pour les applications pratiques.

Joue avec ε : quelle marge d’erreur acceptes‑tu ?

On imagine une valeur cible f(x) = 0,7. Choisis un ε :

ε = 0.10

Alors une approximation g(x) est « acceptable » si g(x) reste entre 0.60 et 0.80 pour toutes les entrées x.

En résumé : universalité = approximation arbitrairement bonne de fonctions continues, pas magie qui calcule tout exactement.

D’un neurone sigmoïde à une marche

Objectif : voir comment un seul neurone sigmoïde peut se comporter presque comme une marche en choisissant bien w et b.

On considère un neurone avec une entrée x, un poids w et un biais b. Il calcule z = wx + b puis la sortie σ(z). Quand |w| est petit, la courbe σ(wx + b) est douce. Quand |w| est très grand, la courbe devient très raide : elle ressemble à une marche qui passe de 0 à 1 autour du point s = −b/w.

Joue avec w et b : observe comment la sigmoïde devient une marche et où se trouve le point s.

w = 10   b = 0

Position de la marche (approx.) : s = −b / w ≈ 0.00

En résumé : en augmentant |w|, un neurone sigmoïde se comporte presque comme une marche située au point s = −b/w.

Deux marches pour faire une bosse

Objectif : comprendre comment combiner deux marches pour obtenir une bosse localisée.

Si l’on aligne deux neurones‑marches, l’un qui « s’allume » à s₁ et l’autre à s₂ > s₁, on peut les combiner avec des poids +h et −h pour obtenir une bosse : la sortie vaut ≈ h entre s₁ et s₂, et ≈ 0 ailleurs. Cette bosse est une brique de base pour construire des fonctions plus compliquées.

Construis une bosse : choisis s₁, s₂ et la hauteur h.

s₁ = 0.20   s₂ = 0.60   h = 0.8

En résumé : deux marches bien placées + des poids +h et −h = une bosse localisée, brique de base pour dessiner des fonctions.

Beaucoup de bosses pour dessiner une fonction

Objectif : voir comment une somme de bosses permet d’approcher n’importe quelle fonction continue sur [0,1].

On découpe l’intervalle [0,1] en plusieurs morceaux (intervalles). Pour chaque morceau, on place une bosse de hauteur hi. En choisissant bien ces hauteurs, la somme de toutes les bosses ressemble à la fonction qu’on veut imiter. Plus on met de morceaux, plus on peut suivre les détails de la fonction.

Compose ta fonction en escalier : ajuste les hauteurs des bosses.

Hauteurs (h0 à h4) : , , , ,

En résumé : une fonction continue sur [0,1] peut être approchée par une somme de petites bosses bien choisies.

Relier la couche cachée à la sortie du réseau

Objectif : comprendre pourquoi on veut que la combinaison linéaire des neurones cachés soit proche de σ⁻¹(f(x)).

La couche cachée fournit des activations a2(x) (par exemple la somme des bosses). La sortie du réseau est alors a3(x) = σ(w·a2(x) + b). Pour que a3(x) ≈ f(x), il suffit donc que w·a2(x) + b ≈ σ⁻¹(f(x)). Autrement dit, on utilise la couche cachée pour approximer la fonction σ⁻¹ ∘ f, puis la sigmoïde remet tout dans l’intervalle [0,1].

De f(x) à σ⁻¹(f(x)) puis retour :

Choisis une valeur cible f(x) : 0.70

Alors σ⁻¹(f(x)) ≈ 0.00 et σ(σ⁻¹(f(x))) ≈ 0.00.

C’est cette valeur σ⁻¹(f(x)) que la couche cachée cherche à approximer avec w·a2(x) + b.

En résumé : la couche cachée apprend une fonction g(x) ≈ σ⁻¹(f(x)), puis la sortie applique σ pour retrouver f(x).

Défi : imiter une fonction cible

Objectif : expérimenter toi‑même l’universalité en ajustant des bosses pour imiter une fonction donnée.

On choisit une fonction cible simple sur [0,1] (par exemple une courbe qui monte puis redescend). Ton objectif : régler les hauteurs des bosses pour que la courbe « réseau » colle le mieux possible à la courbe cible. Un indicateur te montre l’écart moyen entre les deux courbes.

Essaie d’atteindre un écart moyen ≤ 0,40 :

Hauteurs des 5 bosses : , , , ,

Écart moyen ≈ 0.00

En résumé : en jouant avec quelques bosses seulement, tu peux déjà t’approcher assez bien d’une fonction donnée : c’est l’universalité en action.

Et si on a plusieurs entrées ?

Objectif : avoir une intuition de l’universalité quand il y a plusieurs entrées (2D et plus).

Avec deux entrées (x,y), un neurone sigmoïde peut encore se comporter comme une marche, mais cette fois‑ci en 2D : l’espace est coupé en deux par une droite (une demi‑plan). En combinant plusieurs marches en x et en y, on peut construire des tours (zones où la sortie vaut ≈ 1 et ailleurs 0). En combinant beaucoup de tours, on peut approcher n’importe quelle fonction continue de deux variables.

Le principe général est le même en 3D, 4D et plus : on découpe l’espace des entrées en petites régions où la fonction est presque constante, et on donne une hauteur différente à chaque région.

Un petit « tour » en 2D :

Choisis un point (x, y) entre 0 et 1.

x = 0.50   y = 0.50

En résumé : plus d’entrées = espace de dimension plus grande, mais la recette reste la même : marches → bosses → tours → approximation de la fonction.

Au‑delà de la sigmoïde

Objectif : voir que l’universalité ne dépend pas spécialement de la sigmoïde.

On a utilisé la sigmoïde σ, mais l’idée marche pour toute fonction d’activation qui a deux limites différentes quand z → −∞ et z → +∞. Dans ce cas, en prenant un grand poids w, la courbe s’écrase et se comporte comme une marche entre ces deux valeurs‑limites : on peut donc refaire toute la construction marches → bosses → approximation.

Certaines fonctions populaires comme la ReLU ou l’activation linéaire ne vérifient pas ces hypothèses : il faut alors d’autres arguments pour montrer l’universalité, mais l’idée qu’un réseau peut approximer beaucoup de fonctions reste valable.

Choisis les deux valeurs‑limites :

Valeur pour z → −∞ :   Valeur pour z → +∞ :

En résumé : l’universalité ne vient pas d’une formule magique particulière, mais de la possibilité de fabriquer des marches (ou des blocs localisés) avec l’activation choisie.

Pourquoi les réseaux profonds sont difficiles à entraîner

Objectif : comprendre qualitativement les difficultés courantes : gradients qui disparaissent, qui explosent, plateaux, etc.

Le théorème d’universalité dit : « avec assez de neurones, on peut approximer ». Mais il ne dit pas comment trouver les bons poids. Quand on empile beaucoup de couches, il arrive souvent que le gradient se réduise en remontant en arrière : les couches proches de l’entrée reçoivent un signal d’apprentissage très faible, apprennent lentement, ou presque pas. Parfois, c’est l’inverse : les gradients peuvent devenir énormes et rendre l’apprentissage instable.

On peut s’imaginer un signal qui remonte couche par couche : un peu comme un message chuchoté de personne en personne, il peut s’affaiblir ou être dégringolé. D’autres difficultés apparaissent : zones plates où la loss change très peu (plateaux), minima locaux, etc. C’est pour cela que réussir à entraîner un réseau profond est un art délicat (choix de l’init, du taux d’apprentissage, de la normalisation, etc.).

Observe l’effet « couche après couche » :

Nombre de couches = 4

Facteur par couche (entre 0 et >1) = 0.80

Gradient en sortie = 1, gradient qui arrive tout au début ≈ 0.00

En résumé : universalité = possible en principe ; entraînement de réseaux profonds = pas toujours facile en pratique à cause des gradients et de l’optimisation.

Deep learning : tirer parti de l’universalité

Objectif : situer l’universalité dans le paysage du deep learning moderne.

Les réseaux profonds (plusieurs couches cachées) sont très bons pour apprendre des hiérarchies de concepts : des couches proches de l’entrée repèrent des motifs simples (bords, petites formes), les couches suivantes combinent ces motifs (boucles, parties de chiffres), et les dernières couches reconnaissent des objets complets (chiffres, lettres, visages…).

En pratique, on utilise aujourd’hui des architectures spécialisées : réseaux convolutionnels pour les images, architectures basées sur l’attention pour le texte, etc. Toutes profitent de l’universalité : elles ont assez de puissance pour approximer les fonctions compliquées dont on a besoin (reconnaître des images, traduire du texte, piloter un robot…), à condition d’avoir suffisamment de données, de calcul et de bons réglages d’entraînement.

Choisis un domaine :

En résumé : l’universalité garantit que les réseaux ont assez de puissance ; le deep learning moderne fournit les recettes pratiques (architectures + algos d’entraînement) pour exploiter cette puissance.

Exercices

Objectif : t’entraîner sur les notions de marche, bosse, approximation de fonctions et universalité.

Exercice 1 – Position de la marche

Énoncé : pour un neurone qui calcule σ(wx + b), on définit la position de la marche comme s = −b/w. Complète les valeurs ci‑dessous et vérifie avec le widget.

w =   b =   Ta réponse : s =

Vrai s = −b / w = 0.50

Exercice 2 – Ajouter des bosses

Énoncé : on veut approcher une fonction qui vaut environ 0 près de 0, puis 0,8 au milieu, puis revient vers 0. Explique pourquoi il est logique de choisir une grande bosse au centre et de petites bosses sur les côtés.

Hauteurs proposées : h0 = , h1 = , h2 =

Exercice 3 – Universalité

Question : coche la ou les bonnes affirmations.

Rappel : la deuxième affirmation est vraie ; la troisième est vraie si on parle du théorème classique d’approximation ; la première est fausse (l’entraînement peut être difficile).

En résumé : les exercices te font manipuler concrètement s = −b/w, la forme des bosses et le sens précis de l’universalité.

Quiz

Objectif : vérifier que tu as compris les idées d’universalité, de marche, de bosse et de réseaux profonds.

Choisis un quiz :

Fiche enseignant

Fiche pédagogique pour le chapitre approfondi 4 : objectifs, niveau, durée, pistes de correction des exercices et idées d’activités autour de l’universalité et des réseaux profonds.