Addition vectorielle et multiplication scalaire -- Perspective géométrique
Addition vectorielle : concaténer deux déplacements
Un vecteur peut être compris comme une flèche partant de l'origine — il a une longueur et une direction.
Additionner deux vecteurs revient à concaténer deux déplacements ensemble.
Loi du triangle
Reliez le début du deuxième vecteur b à l'extrémité du premier vecteur a.
La ligne allant du début de a à l'extrémité de b est a + b.
Intuition : « D'abord aller le long de a, puis le long de b »
Loi du parallélogramme
En utilisant a et b comme deux côtés adjacents, tracez un parallélogramme.
La diagonale depuis le point de départ est a + b.
Intuition : les deux lois donnent exactement le même résultat
Multiplication par un scalaire : étirement ou contraction d'un vecteur
Multiplier un vecteur par un scalaire (un nombre ordinaire) a pour résultatde changer la longueur du vecteur tout en conservant sa direction inchangée。
|c| > 1
Étirement
par ex., 2v : longueur ×2
0 < |c| < 1
Contraction
par ex., 0.5v : longueur ÷2
c < 0
Inversion de direction
par ex., -v : direction opposée
c = 0
Réduction à un point
par ex., 0v = vecteur nul
La multiplication scalaire ne change que la "longueur" du vecteur, pas la direction de la droite sur laquelle il se trouve (les nombres négatifs inversent la direction, mais il reste sur la même droite).
Cette propriété est appeléecolinéarité— les deux vecteurs avant et après multiplication scalaire se trouvent toujours sur la même droite.
Exemples du quotidien
Addition vectorielle : trajets à plusieurs segments en navigation
En partant de la maison, marchez d'abord 300 m vers l'est (vecteur a = (300, 0)), puis 400 m vers le nord (vecteur b = (0, 400)).
Finalement, vous êtes à 500 m de la maison en direction du nord-est — c'est a + b = (300, 400).
Multiplication scalaire : vitesse de lecture vidéo
À vitesse normale, marcher 5 pas prend 5 secondes. À vitesse 2× — même direction, même nombre de pas — cela ne prend que 2.5 secondes.
Le vecteur déplacement n'a pas changé de direction, mais la "taille par pas" a doublé — c'est l'effet de 2v.
Sens inverse : revenir sur ses pas
Vous marchez 100 m vers l’est (v = (100, 0)), puis vous voulez revenir au point de départ—vous devez marcher 100 m vers l’ouest (-v = (-100, 0)).
Le signe négatif est la commande « faire demi-tour » pour la direction du vecteur.
Définitions mathématiques
Addition de vecteurs
Pour additionner deux vecteurs de même dimension, additionnez respectivement les éléments correspondants.
\[ \mathbf{a} + \mathbf{b} = \begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{bmatrix} + \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{bmatrix} = \begin{bmatrix} a_1 + b_1 \\ a_2 + b_2 \\ \vdots \\ a_n + b_n \end{bmatrix} \]Prérequis : les deux vecteurs doivent avoir la même dimension, sinon l’addition n’a pas de sens.
Soustraction de vecteurs
Soustraction de vecteurs = ajouter le vecteur opposé : \( \mathbf{a} - \mathbf{b} = \mathbf{a} + (-\mathbf{b}) \)
Multiplication d’un vecteur par un scalaire
Un scalaire c multiplié par un vecteur signifie multiplier chaque élément du vecteur par c :
\[ c \cdot \mathbf{v} = c \cdot \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} = \begin{bmatrix} c \cdot v_1 \\ c \cdot v_2 \\ \vdots \\ c \cdot v_n \end{bmatrix} \]Référence rapide des propriétés des opérations
| Propriété | Formule | Intuition |
|---|---|---|
| Loi commutative | \( \mathbf{a} + \mathbf{b} = \mathbf{b} + \mathbf{a} \) | Quel que soit le segment que vous parcourez en premier, c'est pareil |
| Loi associative | \( (\mathbf{a}+\mathbf{b})+\mathbf{c} = \mathbf{a}+(\mathbf{b}+\mathbf{c}) \) | Peu importe comment vous regroupez les déplacements, c'est pareil |
| Loi distributive | \( c(\mathbf{a}+\mathbf{b}) = c\mathbf{a} + c\mathbf{b} \) | Additionner d'abord puis étirer = étirer d'abord puis additionner |
Python : travaux pratiques
Exemple
# Créer deux vecteurs
a_example = np.array([3, 1]) # a = (3, 1)
b_example = np.array([1, 2]) # b = (1, 2)
# Addition de vecteurs : additionner les positions correspondantes
add_result = a_example + b_example
print("a + b =", add_result) # [4, 3]
# Soustraction de vecteurs
sub_result = a_example - b_example
print("a - b =", sub_result) # [2, -1]
# Multiplication scalaire : multiplier chaque élément par un scalaire
c = 2.5
scale_result = c * a_example
print(f"{c} * a =", scale_result) # [7.5, 2.5]
# Vecteur négatif : direction complètement opposée
neg = -a_example
print("-a =", neg) # [-3, -1]
# Diffusion NumPy : un scalaire opère directement sur chaque élément du vecteur
print("a + 10 =", a_example + 10) # Ajouter 10 à chaque élément
print("a * 3 =", a_example * 3) # Multiplier chaque élément par 3
a + b = [4 3] a - b = [2 -1] 2.5 * a = [7.5 2.5] -a = [-3 -1] a + 10 = [13 11] a * 3 = [9 3]
Exemple
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
example_a = np.array([3, 1])
example_b = np.array([1, 2])
example_sum = example_a + example_b
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# Figure de gauche : règle du triangle
for ax, title in zip(axes, ['Règle du triangle', 'Règle du parallélogramme']):
ax.set_xlim(-1, 6); ax.set_ylim(-1, 5)
ax.axhline(y=0, color='gray', lw=0.5); ax.axvline(x=0, color='gray', lw=0.5)
ax.set_aspect('equal'); ax.grid(True, alpha=0.3); ax.set_title(title)
# Tracer la règle du triangle
ax = axes[0]
ax.arrow(0, 0, example_a[0], example_a[1], head_width=0.2, head_length=0.2,
fc='#e74c3c', ec='#e74c3c', lw=2, label='a')
ax.arrow(example_a[0], example_a[1], example_b[0], example_b[1],
head_width=0.2, head_length=0.2, fc='#3498db', ec='#3498db', lw=2, label='b')
ax.arrow(0, 0, example_sum[0], example_sum[1], head_width=0.2, head_length=0.2,
fc='#2E7DCC', ec='#2E7DCC', lw=2, ls='dashed', label='a+b')
ax.legend()
# Tracer la règle du parallélogramme
ax = axes[1]
ax.arrow(0, 0, example_a[0], example_a[1], head_width=0.2, head_length=0.2,
fc='#e74c3c', ec='#e74c3c', lw=2, label='a')
ax.arrow(0, 0, example_b[0], example_b[1], head_width=0.2, head_length=0.2,
fc='#3498db', ec='#3498db', lw=2, label='b')
ax.arrow(example_a[0], example_a[1], example_b[0], example_b[1],
head_width=0.2, head_length=0.2, fc='#3498db', ec='#3498db', lw=1.5, ls='dotted', alpha=0.6)
ax.arrow(example_b[0], example_b[1], example_a[0], example_a[1],
head_width=0.2, head_length=0.2, fc='#e74c3c', ec='#e74c3c', lw=1.5, ls='dotted', alpha=0.6)
ax.arrow(0, 0, example_sum[0], example_sum[1], head_width=0.2, head_length=0.2,
fc='#2E7DCC', ec='#2E7DCC', lw=2, ls='dashed', label='a+b')
ax.legend()
plt.tight_layout(); plt.show()
Démo interactive d'addition de vecteurs
Faites glisser les extrémités du vecteur rouge a et du vecteur bleu b ci-dessous, et observez le vecteur résultant vert a+b changer en temps réel. Expérimentez la loi du triangle et la loi du parallélogramme :
Scénarios d'application en IA
Opérations sémantiques sur les vecteurs de mots
La découverte la plus célèbre des modèles de plongement de mots tels que Word2Vec et GloVe : l'addition et la soustraction de vecteurs ont une signification sémantique.
\[ \text{vec}(\text{roi}) - \text{vec}(\text{homme}) + \text{vec}(\text{femme}) \approx \text{vec}(\text{reine}) \]La soustraction retire la composante de caractéristique « masculin », et l'addition ajoute la composante de caractéristique « féminin ». Le vecteur résultant est le plus proche de « reine » dans l'espace de plongement.
Ce type d'opération sémantique ne se limite pas au genre — « Paris - France + Italie ≈ Rome » fonctionne selon le même principe. L'addition et la soustraction de vecteurs agissent ici comme une « édition de caractéristiques ».
Biais dans les réseaux de neurones
Dans le calcul de chaque neurone \( y = Wx + b \), +b est une addition vectorielle — le biais décale le résultat de wx dans son ensemble.
Sans le biais b, la sortie du modèle en x=0 serait nécessairement 0, ce qui limite fortement la capacité d'expression du modèle. Le biais équivaut à donner à chaque neurone une « valeur d'activation par défaut ».
Mise à jour du gradient
La mise à jour des paramètres pendant l'entraînement \( \theta_{new} = \theta_{old} - \eta \nabla J \) est une combinaison de multiplication scalaire (taux d'apprentissage × gradient) et de soustraction vectorielle.
La multiplication scalaire contrôle la taille de chaque mise à jour (plus le taux d'apprentissage est élevé, plus le pas est grand), et la soustraction déplace les paramètres dans la direction de la diminution de la perte.
Prétraitement des données : centrage sur la moyenne
Avant d'entraîner un réseau de neurones, une opération de « soustraction de la moyenne » est souvent appliquée aux données : \( x_{norm} = x - \mu \). Il s'agit d'une soustraction vectorielle — déplacer le centre des données vers l'origine, ce qui aide la descente de gradient à converger plus rapidement.
Autres extensions