02 / 09 Algèbre linéaire essentielle
  1. ← Réseaux de neurones : fondations et mathématiques
  2. 00 Avant-propos
  3. 01 Le neurone artificiel
  4. 02 Algèbre linéaire essentielle
  5. 03 Fonctions d'activation
  6. 04 Le perceptron
  7. 05 Du neurone au réseau multi-couches
  8. 06 Forward pass et fonctions de coût
  9. 07 Dérivées et règle de la chaîne
  10. 08 La rétropropagation
Réseaux de neurones : fondations et mathématiques · 02 / 09

Algèbre linéaire essentielle

Vecteurs, produits scalaires et matrices, exactement ce qu'il faut pour parler aux réseaux de neurones dans leur langue.

Tu viens de voir au chapitre précédent que la formule du neurone s’écrit en notation vectorielle y=f(wx+b)y = f(\mathbf{w} \cdot \mathbf{x} + b). Ce chapitre installe les briques mathématiques cachées derrière cette notation. L’objectif : que tu lises wx\mathbf{w} \cdot \mathbf{x} sans buter, et que tu comprennes ce que ça raconte géométriquement.

Le vecteur, une liste ordonnée de nombres

Définition

Un vecteur Vecteur Objet mathématique représenté comme une liste ordonnée de nombres. Un vecteur de dimension n encode n valeurs. En machine learning, les entrées d'un neurone et ses poids sont chacun un vecteur de même dimension. de dimension nn est une liste ordonnée de nn nombres réels. On le note typiquement avec une lettre en gras et entre parenthèses ou crochets :

x=(x1,x2,,xn)Rn\mathbf{x} = (x_1, x_2, \dots, x_n) \in \mathbb{R}^n

Le symbole Rn\mathbb{R}^n se lit « R puissance n » et désigne l’ensemble de toutes les listes ordonnées de nn nombres réels. Chaque xix_i est appelée la ii-ième coordonnée ou composante du vecteur.

Pourquoi des vecteurs en machine learning

Tout ce que tu peux décrire par une liste de nombres est un vecteur. Quelques exemples :

  • L’image d’un chiffre manuscrit de 28×28 pixels en niveau de gris : un vecteur de dimension 784784 (chaque pixel donne une valeur entre 0 et 1).
  • Un patient médical caractérisé par âge, tension, glycémie, cholestérol : un vecteur de dimension 4.
  • Les entrées d’un neurone x1,x2,x3x_1, x_2, x_3 que tu as vues au chapitre 1 : un vecteur de dimension 3.

Les poids d’un neurone forment eux aussi un vecteur, de la même dimension que les entrées. C’est cette correspondance qui rend le produit scalaire possible.

Le produit scalaire

Définition

Le produit scalaire Produit scalaire Opération qui prend deux vecteurs de même dimension et retourne un seul nombre, calculé comme la somme des produits coordonnée par coordonnée. C'est exactement le calcul effectué par un neurone entre ses entrées et ses poids. de deux vecteurs x,wRn\mathbf{x}, \mathbf{w} \in \mathbb{R}^n est le nombre réel :

xw=i=1nxiwi=x1w1+x2w2++xnwn\mathbf{x} \cdot \mathbf{w} = \sum_{i=1}^{n} x_i w_i = x_1 w_1 + x_2 w_2 + \dots + x_n w_n

C’est une opération qui prend deux vecteurs et retourne un seul nombre. On la lit « x point w » ou « produit scalaire de x et w ».

Exemple chiffré

Reprenons l’exemple de l’arbitre de foot. C’est exactement la même somme pondérée que dans le chapitre 1, écrite cette fois avec la notation vectorielle :

x=(1,0,1),w=(0,8, 0,5, 0,9)\mathbf{x} = (1, 0, 1), \quad \mathbf{w} = (0{,}8,\ 0{,}5,\ 0{,}9)

Le produit scalaire vaut :

xw=1×0,8+0×0,5+1×0,9=1,7\mathbf{x} \cdot \mathbf{w} = 1 \times 0{,}8 + 0 \times 0{,}5 + 1 \times 0{,}9 = 1{,}7

C’est la somme pondérée du neurone, sans le biais. En ajoutant b=0,5b = -0{,}5, on obtient bien z=1,70,5=1,2z = 1{,}7 - 0{,}5 = 1{,}2 comme au chapitre précédent.

Voir deux vecteurs interagir

Le composant ci-dessous dessine deux vecteurs x\mathbf{x} et w\mathbf{w} dans le plan. Bouge les curseurs et observe trois choses simultanément : le produit scalaire change, mais aussi la norme Norme Longueur d'un vecteur, mesurée par la racine carrée de la somme de ses carrés. Pour un vecteur x = (x₁, ..., xₙ), la norme ‖x‖ = √(x₁² + ... + xₙ²). C'est la généralisation du théorème de Pythagore à n dimensions. et l’angle entre eux. Quand l’angle approche 90°90°, le produit scalaire tombe à zéro : les vecteurs deviennent orthogonaux Orthogonalité Deux vecteurs sont orthogonaux quand leur produit scalaire est nul. Géométriquement, cela correspond à un angle de 90 degrés entre eux. En machine learning, des entrées orthogonales contribuent indépendamment au calcul du neurone. .

xwxy
Produit scalaire x·w = 1.44
Normex‖ = 1.34 w‖ = 1.34
Angle θ = 36.9°

Joue avec les coordonnées. Quand les flèches pointent dans la même direction, le produit scalaire est maximal. Quand elles sont perpendiculaires, il vaut zéro.

Trois expériences à tenter :

  • Aligne les deux vecteurs sur la même direction (par exemple x=w\mathbf{x} = \mathbf{w}). Le produit scalaire devient maximal, et égal à xw\|\mathbf{x}\| \cdot \|\mathbf{w}\|.
  • Place-les perpendiculairement (par exemple x=(1,0)\mathbf{x} = (1, 0) et w=(0,1)\mathbf{w} = (0, 1)). Le produit scalaire est exactement zéro.
  • Inverse la direction de w\mathbf{w} (mets w1w_1 et w2w_2 négatifs). Le produit scalaire devient négatif, car les flèches pointent dans des directions opposées.

Pour aller plus loin et démontrer que la formulation géométrique du produit scalaire n’est pas une définition tombée du ciel mais bien une conséquence de la définition algébrique, il nous faut d’abord deux outils : la norme d’un vecteur et une identité de calcul sur les normes. On les installe maintenant, puis on les utilisera dans la section sur l’inégalité de Cauchy-Schwarz.

Norme et distance

La norme (ou longueur) d’un vecteur xRn\mathbf{x} \in \mathbb{R}^n est définie par le produit scalaire avec lui-même :

x=xx=x12+x22++xn2\|\mathbf{x}\| = \sqrt{\mathbf{x} \cdot \mathbf{x}} = \sqrt{x_1^2 + x_2^2 + \dots + x_n^2}

C’est la généralisation du théorème de Pythagore en nn dimensions. En 2D, (x1,x2)=x12+x22\|(x_1, x_2)\| = \sqrt{x_1^2 + x_2^2}, soit la longueur de l’hypoténuse d’un triangle rectangle.

La distance entre deux vecteurs u\mathbf{u} et v\mathbf{v} est la norme de leur différence : uv\|\mathbf{u} - \mathbf{v}\|. C’est ce qui te permet de mesurer « à quel point deux images se ressemblent » quand chaque image est représentée comme un vecteur.

Démonstration utile : l’identité du carré scalaire

Une propriété revient sans cesse en machine learning. On l’établit ici une fois pour toutes, à partir des définitions :

x+w2=x2+2xw+w2\|\mathbf{x} + \mathbf{w}\|^2 = \|\mathbf{x}\|^2 + 2\,\mathbf{x} \cdot \mathbf{w} + \|\mathbf{w}\|^2

Cette identité, c’est exactement le théorème de Pythagore généralisé. Conséquence immédiate : si x\mathbf{x} et w\mathbf{w} sont orthogonaux (xw=0\mathbf{x} \cdot \mathbf{w} = 0), alors x+w2=x2+w2\|\mathbf{x} + \mathbf{w}\|^2 = \|\mathbf{x}\|^2 + \|\mathbf{w}\|^2. Pythagore dans toute sa splendeur, sans triangle ni angle droit explicite.

Cauchy-Schwarz, ou pourquoi la formule géométrique est légitime

Beaucoup de cours présentent la formule xw=xwcos(θ)\mathbf{x} \cdot \mathbf{w} = \|\mathbf{x}\| \, \|\mathbf{w}\| \cos(\theta) comme une seconde définition du produit scalaire, tombée du ciel. Ce n’est pas honnête. La bonne lecture est inverse : on définit le produit scalaire algébriquement (somme des produits coordonnée par coordonnée), on démontre une inégalité fondamentale, et c’est cette inégalité qui rend la formule géométrique légitime.

L’inégalité de Cauchy-Schwarz Inégalité de Cauchy-Schwarz Pour deux vecteurs x et w de Rⁿ, |x · w| ≤ ‖x‖ · ‖w‖. L'égalité n'a lieu que si les deux vecteurs sont colinéaires. C'est l'inégalité fondamentale de l'algèbre linéaire, elle garantit la cohérence entre la formulation algébrique et géométrique du produit scalaire. Source : Cauchy 1821, Schwarz 1888 énonce que pour tous vecteurs x,wRn\mathbf{x}, \mathbf{w} \in \mathbb{R}^n :

xwxw|\mathbf{x} \cdot \mathbf{w}| \leq \|\mathbf{x}\| \cdot \|\mathbf{w}\|

L’égalité a lieu si et seulement si les deux vecteurs sont colinéaires (l’un est un multiple scalaire de l’autre).

Maintenant qu’on a la borne xwxw|\mathbf{x} \cdot \mathbf{w}| \leq \|\mathbf{x}\| \, \|\mathbf{w}\|, on peut diviser sans risque. Pour x,w\mathbf{x}, \mathbf{w} non nuls, on définit :

cosθ  :=  xwxw\cos\theta \;:=\; \dfrac{\mathbf{x} \cdot \mathbf{w}}{\|\mathbf{x}\| \, \|\mathbf{w}\|}

Cette quantité est bien dans [1,1][-1, 1] grâce à Cauchy-Schwarz. On peut donc l’identifier au cosinus d’un unique angle θ[0,π]\theta \in [0, \pi]. En réarrangeant, on récupère exactement la formule géométrique :

xw=xwcos(θ)\mathbf{x} \cdot \mathbf{w} = \|\mathbf{x}\| \, \|\mathbf{w}\| \cos(\theta)

Mais elle n’est plus un postulat mystérieux : c’est une conséquence directe de la définition algébrique et de Cauchy-Schwarz.

Les conséquences usuelles de la formule géométrique se lisent immédiatement sur la fonction cosinus :

  • Si θ=0\theta = 0 (vecteurs alignés dans le même sens), cos(θ)=1\cos(\theta) = 1 : produit scalaire maximal.
  • Si θ=90°\theta = 90° (vecteurs perpendiculaires), cos(θ)=0\cos(\theta) = 0 : produit scalaire nul.
  • Si θ=180°\theta = 180° (vecteurs opposés), cos(θ)=1\cos(\theta) = -1 : produit scalaire minimal.

Géométriquement, le produit scalaire mesure à quel point deux vecteurs pointent dans la même direction, pondéré par leurs longueurs. C’est exactement ce que veut savoir un neurone : « mes entrées ressemblent-elles à mes poids ? »

En machine learning, l’inégalité de Cauchy-Schwarz garantit aussi que tu peux toujours normaliser un produit scalaire par les longueurs pour obtenir une mesure dans [1,1][-1, 1], appelée similarité cosinus. C’est l’outil de base pour comparer deux représentations vectorielles, par exemple deux embeddings de mots ou de phrases.

Transposée et produit matriciel

Avant d’empiler les neurones pour former une couche, il manque deux opérations matricielles qui reviendront partout dans les réseaux profonds : transposer une matrice et multiplier deux matrices entre elles. Ces deux opérations sont la suite directe du produit scalaire vu plus haut.

La transposée

La transposée d’une matrice ARm×nA \in \mathbb{R}^{m \times n}, notée ATA^T, est la matrice obtenue en échangeant ses lignes et ses colonnes. Formellement :

ATRn×mavec(AT)ij=AjiA^T \in \mathbb{R}^{n \times m} \quad \text{avec} \quad (A^T)_{ij} = A_{ji}

Exemple concret avec une matrice 2×32 \times 3 qui devient 3×23 \times 2 :

A=(123456)AT=(142536)A = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix} \quad \Longrightarrow \quad A^T = \begin{pmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{pmatrix}

La première ligne de AA devient la première colonne de ATA^T, et ainsi de suite.

Le produit matrice-matrice

Le produit matriciel généralise le produit matrice-vecteur. Pour ARm×nA \in \mathbb{R}^{m \times n} et BRn×pB \in \mathbb{R}^{n \times p}, leur produit ABAB appartient à Rm×p\mathbb{R}^{m \times p} et a pour coefficients :

(AB)ij=k=1nAikBkj(AB)_{ij} = \sum_{k=1}^{n} A_{ik} \, B_{kj}

Condition de compatibilité : le nombre de colonnes de AA doit être égal au nombre de lignes de BB (ici nn dans les deux cas). Sinon, le produit n’est pas défini.

Mini-exemple chiffré en dimensions 2×22 \times 2 :

(1234)(0111)=(10+2111+2130+4131+41)=(2347)\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \begin{pmatrix} 0 & 1 \\ 1 & 1 \end{pmatrix} = \begin{pmatrix} 1 \cdot 0 + 2 \cdot 1 & 1 \cdot 1 + 2 \cdot 1 \\ 3 \cdot 0 + 4 \cdot 1 & 3 \cdot 1 + 4 \cdot 1 \end{pmatrix} = \begin{pmatrix} 2 & 3 \\ 4 & 7 \end{pmatrix}

Propriété (AB)T=BTAT(AB)^T = B^T A^T

Une règle qui revient sans cesse en machine learning : la transposée d’un produit est égale au produit des transposées dans l’ordre inverse.

(AB)T=BTAT(AB)^T = B^T A^T

C’est une démonstration courte par comparaison directe des coefficients.

Étape 1. On compare les coefficients (i,j)(i, j) des deux matrices. Par définition de la transposée :

((AB)T)ij=(AB)ji\big( (AB)^T \big)_{ij} = (AB)_{ji}

Étape 2. Par définition du produit matriciel :

(AB)ji=k=1nAjkBki(AB)_{ji} = \sum_{k=1}^{n} A_{jk} \, B_{ki}

Étape 3. Dans cette somme, on reconnaît des coefficients transposés : Ajk=(AT)kjA_{jk} = (A^T)_{kj} et Bki=(BT)ikB_{ki} = (B^T)_{ik}. On réécrit :

k=1nAjkBki=k=1n(BT)ik(AT)kj\sum_{k=1}^{n} A_{jk} \, B_{ki} = \sum_{k=1}^{n} (B^T)_{ik} \, (A^T)_{kj}

Noter l’inversion de l’ordre : BTB^T vient avant ATA^T et leurs indices s’enchaînent correctement (ce sont eux qui partagent l’indice de sommation kk).

Étape 4. Cette somme est exactement le coefficient (i,j)(i, j) du produit BTATB^T A^T :

k=1n(BT)ik(AT)kj=(BTAT)ij\sum_{k=1}^{n} (B^T)_{ik} \, (A^T)_{kj} = (B^T A^T)_{ij}

Résultat. Pour tous i,ji, j, ((AB)T)ij=(BTAT)ij\big( (AB)^T \big)_{ij} = (B^T A^T)_{ij}, donc les deux matrices sont égales : (AB)T=BTAT(AB)^T = B^T A^T. ∎

Maintenant qu’on a la transposée et le produit matrice-matrice, on peut enfin empiler les neurones d’une couche dans une seule matrice et écrire la sortie complète d’un coup.

Empiler les neurones

Qu’est-ce qu’une matrice

Une matrice Matrice Tableau rectangulaire de nombres organisés en lignes et colonnes. Une matrice de taille m×n possède m lignes et n colonnes. Dans un réseau de neurones, une couche de m neurones avec n entrées chacun se résume à une matrice de poids m×n. de taille m×nm \times n est un tableau rectangulaire de nombres rangés en mm lignes et nn colonnes :

W=(w11w12w1nw21w22w2nwm1wm2wmn)Rm×nW = \begin{pmatrix} w_{11} & w_{12} & \cdots & w_{1n} \\ w_{21} & w_{22} & \cdots & w_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ w_{m1} & w_{m2} & \cdots & w_{mn} \end{pmatrix} \in \mathbb{R}^{m \times n}

L’élément wjiw_{ji} se lit « ligne jj, colonne ii ». Chaque ligne, prise comme un vecteur de dimension nn, est elle-même un vecteur de Rn\mathbb{R}^n.

Du vecteur à la couche entière

Une seule couche de mm neurones, chacun ayant nn entrées, peut s’écrire en utilisant une matrice de poids WRm×nW \in \mathbb{R}^{m \times n}. Chaque ligne wj\mathbf{w}_j de WW contient les poids du jj-ième neurone.

Pour calculer toutes les sorties de la couche d’un coup, on utilise la multiplication matrice-vecteur :

Wx=(w1xw2xwmx)W \mathbf{x} = \begin{pmatrix} \mathbf{w}_1 \cdot \mathbf{x} \\ \mathbf{w}_2 \cdot \mathbf{x} \\ \vdots \\ \mathbf{w}_m \cdot \mathbf{x} \end{pmatrix}

C’est une opération qui prend un vecteur et en retourne un autre, où chaque coordonnée du résultat est un produit scalaire. On en reparlera en détail au chapitre 5 quand on construira un réseau multi-couches.

En une phrase

Un vecteur est une liste ordonnée de nn nombres. Le produit scalaire de deux vecteurs est la somme de leurs produits coordonnée par coordonnée. Et un neurone calcule exactement ce produit scalaire entre ses entrées et ses poids, avec un biais ajouté.

Vers le chapitre 3

Le neurone ne s’arrête pas au produit scalaire : il applique ensuite une fonction d’activation ff pour transformer le résultat brut en valeur interprétable. Au chapitre 1 on l’a survolée, au chapitre 2 on a posé les briques mathématiques autour. Le chapitre 3 t’apporte enfin la pièce qui manque.

Tu vas y voir, démonstration matricielle à l’appui, que l’absence de non-linéarité fait s’effondrer un empilement de matrices en une seule. Concrètement, si une première couche calcule h=W1x\mathbf{h} = W_1 \mathbf{x} et une seconde y=W2h\mathbf{y} = W_2 \mathbf{h}, alors :

y=W2(W1x)=(W2W1)x\mathbf{y} = W_2 (W_1 \mathbf{x}) = (W_2 W_1) \, \mathbf{x}

Grâce au produit matrice-matrice que tu viens d’apprendre, W2W1W_2 W_1 est une seule matrice. Deux couches sans activation se réduisent donc à une seule. C’est le théorème central du chapitre 3, et il justifie à lui seul l’existence des fonctions d’activation non linéaires (sigmoïde, ReLU, tanh) que tu apprendras à comparer et à choisir.

Exercices

Exercice 1 : calculer un produit scalaire

Soit x=(2,1,3)\mathbf{x} = (2, -1, 3) et w=(1,4,2)\mathbf{w} = (1, 4, -2). Calculer xw\mathbf{x} \cdot \mathbf{w}.

Exercice 2 : norme d’un vecteur

Calculer la norme du vecteur u=(3,4)\mathbf{u} = (3, 4) en utilisant la définition.

Exercice 3 : produit scalaire et orthogonalité

Trouver une valeur de aa telle que les vecteurs x=(a,1)\mathbf{x} = (a, 1) et w=(2,1)\mathbf{w} = (2, 1) soient orthogonaux (produit scalaire nul).

Exercice 4 : démontrer (AB)T=BTAT(AB)^T = B^T A^T sur du concret

Soit A=(1234)A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} et B=(0111)B = \begin{pmatrix} 0 & 1 \\ 1 & 1 \end{pmatrix}.

(a) Calculer ABAB.

(b) Calculer (AB)T(AB)^T.

(c) Calculer ATA^T et BTB^T.

(d) Calculer BTATB^T A^T.

(e) Vérifier que (AB)T=BTAT(AB)^T = B^T A^T.

Sources

  • Anton, H. & Rorres, C. (2010). Elementary Linear Algebra, 10e édition. Wiley. Chapitres 1 à 3 pour la base.
  • Strang, G. (2016). Introduction to Linear Algebra, 5e édition. Wellesley-Cambridge Press. Cours en ligne MIT OCW gratuit et excellent.

Pour aller plus loin

  • Strang, G. (cours en ligne MIT 18.06 Linear Algebra). Vidéos accessibles à tout niveau, le standard de l’enseignement de l’algèbre linéaire dans les grandes écoles. ocw.mit.edu
  • 3Blue1Brown, série Essence of Linear Algebra. Visualisations remarquables des concepts clés, francophone via les sous-titres. youtube.com/playlist
  • Goodfellow, I., Bengio, Y. & Courville, A. (2016). Deep Learning. MIT Press. Chapitre 2 sur l’algèbre linéaire spécifique au ML. deeplearningbook.org
  • Lay, D. C., Lay, S. R. & McDonald, J. J. (2021). Linear Algebra and Its Applications, 6e édition. Pearson. Référence classique pour l’algèbre linéaire appliquée, équilibrée entre théorie et exercices.
  • Axler, S. (2024). Linear Algebra Done Right, 4e édition. Springer. Approche conceptuelle qui évite les déterminants jusqu’au plus tard possible et insiste sur la structure des espaces vectoriels. PDF gratuit en open access
Quiz
  1. 1. Que représente le produit scalaire de deux vecteurs ?

  2. 2. Si deux vecteurs sont orthogonaux, leur produit scalaire vaut :

  3. 3. La norme d'un vecteur x = (x₁, x₂, ..., xₙ) est :

  4. 4. Pourquoi les poids d'un neurone ont-ils la même dimension que ses entrées ?

  5. 5. Que calcule l'opération matrice-vecteur W·x où W est de taille m×n et x de dimension n ?

  6. 6. Si A est une matrice 3×4 et B une matrice 4×2, quelle est la dimension du produit AB ?