Norme d'un vecteur et similarité cosinus

Le produit scalaire du chapitre précédent contenait à la fois des informations de longueur et de direction.

Ce chapitre les sépare :La norme seule mesure la taille, la similarité cosinus seule mesure la cohérence directionnelle.。

Norme : quelle est la longueur d'un vecteur ?

La norme est la « distance en ligne droite » entre l'origine et l'extrémité du vecteur — une généralisation du théorème de Pythagore aux espaces de dimension supérieure.

Norme L1

\( \|\mathbf{v}\|_1 = \sum |v_i| \)

Distance de Manhattan : marcher le long des rues

L1 de (3,4) = 7

Norme L2 (par défaut)

\( \|\mathbf{v}\|_2 = \sqrt{\sum v_i^2} \)

Distance à vol d'oiseau : voler dans les airs

L2 de (3,4) = 5

Sauf indication contraire, « magnitude » ou \( \|\mathbf{v}\| \) désigne par défaut la norme L2.

Vecteur unitaire : supprimer la longueur, ne conserver que la direction

Tout vecteur non nul divisé par sa propre norme donne unvecteur unitaire de longueur 1:

\[ \hat{\mathbf{v}} = \frac{\mathbf{v}}{\|\mathbf{v}\|} \]

Après normalisation, la direction du vecteur reste inchangée, mais sa norme devient 1.

Similarité cosinus : uniquement la direction, pas la norme

Similarité cosinus = après normalisation des deux vecteurs en vecteurs unitaires, puis produit scalaire :

\[ \text{cosine\_sim}(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{a}\|\|\mathbf{b}\|} = \cos\theta \]

Même direction

cos=1

Directions perpendiculaires

cos=0

Directions opposées

cos=-1

La similarité cosinus ne tient compte que de la direction, pas de la longueur.

v = (3,4) et w = (6,8) (w = 2v), leurs longueurs diffèrent d'un facteur deux, mais la similarité cosinus = 1 — car ils ont exactement la même direction.


Exemples concrets

Norme : une mesure de distance

La distance à vol d'oiseau entre votre domicile et l'école est de 5 km (L2 = 5), mais marcher le long des rues nécessite un détour de 7 km (L1 = 7).

Les deux mesures ont leur utilité ; en IA, L2 est principalement utilisée.

Similarité cosinus : correspondance des goûts musicaux

Zhang San a écouté 100 chansons, Li Si a écouté 10 chansons. Avec le produit scalaire, le score de Zhang San est naturellement plus élevé.

Mais avec la similarité cosinus, seul importe le fait que la direction des goûts soit la même — Zhang San (utilisateur actif) et Li Si (nouvel utilisateur) peuvent aussi être comparés équitablement.


Définition mathématique

Décomposition de la formule centrale

\[ \mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos\theta \]

Produit scalaire = produit des longueurs × cohérence directionnelle. Inversement, on peut trouver :

\[ \cos\theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|} \]

Exercice pratique Python

Exemple

import numpy as np

v_example = np.array([3, 4, 0])
w_example = np.array([6, 8, 0])  # 2 fois v

# Norme
norm_v = np.linalg.norm(v_example)   # L2 par défaut
norm_w = np.linalg.norm(w_example)
print(f"||v|| = {norm_v:.1f}, ||w|| = {norm_w:.1f}")  # 5, 10

# Normaliser
unit_v = v_example / norm_v
unit_w = w_example / norm_w
print("v normalisé :", unit_v)    # [0.6, 0.8, 0.]
print("w normalisé :", unit_w)    # [0.6, 0.8, 0.] exactement le même !

# Similarité cosinus
cos_sim = np.dot(v_example, w_example) / (norm_v * norm_w)
print(f"Similarité cosinus = {cos_sim:.4f}")  # 1.0

# Calcul par lots de la matrice de similarité cosinus
embeddings = np.array([
    [0.2, 0.5, 0.1, 0.8, 0.3],
    [0.3, 0.6, 0.2, 0.7, 0.4],
    [0.9, 0.1, 0.8, 0.1, 0.9],
])
norms = np.linalg.norm(embeddings, axis=1, keepdims=True)
normalized = embeddings / norms
sim_matrix = normalized @ normalized.T
print("\n"Matrice de similarité cosinus :")
print(np.round(sim_matrix, 3))
||v|| = 5.0, ||w|| = 10.0
v 归一化: [0.6 0.8 0. ]
w 归一化: [0.6 0.8 0. ]
余弦相似度 = 1.0000

余弦相似度矩阵:
[[1.    0.996 0.146]
 [0.996 1.    0.182]
 [0.146 0.182 1.   ]]

Scénarios d'application en IA

Recherche sémantique et systèmes de recommandation

Après avoir encodé la requête et les documents en vecteurs, utilisez la similarité cosinus pour classer—afin de trouver les documents les plus pertinents. La recherche sémantique de Google et la récupération vectorielle dans RAG (génération augmentée par récupération) reposent toutes sur la similarité cosinus.

Par rapport au produit scalaire, la similarité cosinus n'est pas affectée par la norme du vecteur—la norme du vecteur d'un long article peut être grande, mais la similarité cosinus peut comparer équitablement la cohérence directionnelle avec une requête courte.

Reconnaissance faciale : similarité cosinus > distance euclidienne

Les modèles de reconnaissance faciale tels que FaceNet projettent les visages dans des vecteurs de plongement à 128 dimensions. La correspondance entre deux visages est déterminée à l'aide de la similarité cosinus—elle est insensible aux conditions d'éclairage et à la luminosité des photos (qui affectent la norme du vecteur).

Deux photos de la même personne sous un éclairage différent ont des vecteurs de plongement de direction presque identique (cos ≈ 0.95+), mais les normes peuvent différer grandement.

Régularisation L2 pour prévenir le surapprentissage

Ajouter \( \lambda\|\mathbf{w}\|^2 \) (décroissance des poids) à la fonction de perte pénalise les normes de poids excessivement grandes. Une norme de poids élevée signifie que le modèle fait trop confiance à certaines caractéristiques et généralise mal. La régularisation L2 la rapproche de l’origine.

Normalisation dans Batch Normalization

BN normalise les activations de chaque couche : soustraire la moyenne et diviser par l’écart-type, transformant les données en une distribution à norme stable. Cela utilise le concept de norme L2 pour contrôler l’échelle de la sortie de chaque couche.


Autres extensions