Formes de données -- Scalaires, Vecteurs, Matrices, Tenseurs

Dans le monde de l'IA, toutes les données — qu'il s'agisse d'une image, d'un texte ou d'un extrait audio — sont finalement organisées sous une forme unifiée :Tenseur。

Tenseur est un terme général ; selon le nombre de dimensions, il porte différents noms.

De zéro dimension à multidimensionnel : structures de données imbriquées en couches

Scalaire
26
0-dimensionnel : un seul nombre
Aucune coordonnée nécessaire pour le localiser
Vecteur
[22, 23, 24, 26]
1 dimension : une suite ordonnée de nombres
1 coordonnée : laquelle ?
Matrix
Tableau 2D
2 dimensions : un tableau composé de lignes et de colonnes
2 coordonnées : quelle ligne ? quelle colonne ?
Tenseur
Cube de données
3 dimensions et plus : plusieurs tableaux empilés ensemble
3+ coordonnées pour localiser un nombre

Une autre façon de le comprendre est l’« imbrication » — un scalaire se trouve au niveau le plus interne ; l’envelopper d’un niveau crée un vecteur, l’envelopper à nouveau crée une matrice, et continuer à l’envelopper crée des tenseurs de dimensions supérieures.

Tenseur : un empilement de tableaux
Matrice : un seul tableau
Vecteur : une ligne de nombres
Scalaire : un seul nombre

Dans les frameworks d'apprentissage profond tels que PyTorch et TensorFlow, toutes les données sont uniformément représentées sous forme de « tenseurs ».

Un scalaire est un tenseur 0-dimensionnel, un vecteur est un tenseur 1-dimensionnel, et une matrice est un tenseur 2-dimensionnel — ce sont des cas particuliers de tenseurs.

Comprendre les formes de données avec les dimensions

Scalaire (0-dimensionnel)

C'est simplement un nombre. Par exemple, une température de 26°C. Dans NumPy, la forme est affichée comme un tuple vide.()。

Vecteur (1-dimensionnel)

Une séquence ordonnée de nombres. Par exemple, des relevés de température pour chaque heure d'une journée. La forme est(n,), où n est le nombre d'éléments.

Matrice (2-dimensionnelle)

Un tableau avec des lignes et des colonnes. Par exemple, un tableau de températures pour 7 jours par semaine et 24 heures par jour. La forme est(number of rows, number of columns)。

Tenseur (3 dimensions et au-delà)

Plusieurs couches de données empilées. Par exemple, les températures pour 300 villes à l'échelle nationale, chaque ville sur 7 jours de la semaine et 24 heures par jour. La forme est(number of cities, number of days, number of hours)i.e.(300, 7, 24)。

Les dimensions peuvent être simplement comprises comme :Combien de « coordonnées » vous faut-il pour identifier un nombre spécifique.


Exemples concrets

Ci-dessous, nous utilisons un scénario progressif pour consolider la compréhension.

Scénario 1 : Enregistrer la température maintenant

Vous n'avez besoin d'écrire qu'un seul nombre :26. C'est unscalaire. Il n'a pas de dimensions ; c'est juste une valeur isolée.

Scénario 2 : Enregistrer les variations de température sur une journée

Vous mesurez une fois par heure, du matin au soir, ce qui donne 24 nombres :[22, 23, 24, 26, 28, ...]。

C'est unvecteur. Vous avez besoin d'une coordonnée (quelle heure) pour repérer une certaine valeur de température.

Scénario 3 : Enregistrer les températures sur une semaine

Vous disposez les sept jours de données dans un tableau : chaque ligne est un jour, chaque colonne est une heure.

Ceci est unematriceà 7 lignes et 24 colonnes. Vous avez besoin de deux coordonnées (quel jour, quelle heure) pour la localiser.

Scénario 4 : Enregistrement des températures dans les villes à l'échelle nationale

Il y a 300 villes dans tout le pays, et chaque ville dispose d'un tableau 7×24.

L'empilement de ces 300 tableaux forme untenseur 3D. Vous avez besoin de trois coordonnées (quelle ville, quel jour, quelle heure).


Définitions mathématiques

Scalaire

Un scalaire est un nombre unique, noté \( a = 26 \), ou \( x \in \mathbb{R} \) (x appartient à l'ensemble des nombres réels).

Vecteur

Un vecteur est un ensemble ordonné de nombres, généralement écrit verticalement (vecteur colonne) :

\[ \mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} \in \mathbb{R}^{n} \]

\( \mathbb{R}^{n} \) signifie qu'il s'agit d'un vecteur réel à n dimensions, \( v_1 \) est la première composante, et \( v_n \) est la n-ième composante.

Matrix

Une matrice est un tableau rectangulaire à m lignes et n colonnes :

\[ \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \in \mathbb{R}^{m \times n} \]

Elle est notée comme une matrice m×n (m lignes, n colonnes), où \( a_{ij} \) représente l'élément à la i-ème ligne et j-ème colonne.

Tenseur

Un tenseur est une généralisation des vecteurs et des matrices à des dimensions arbitraires.

La forme d’un tenseur à k dimensions est notée \( (d_1, d_2, \dots, d_k) \), avec un total de \( d_1 \times d_2 \times \cdots \times d_k \) éléments.

Tableau de référence rapide des comparaisons

NameDimensionsExemple de formeNombre de coordonnéesNotation mathématique
Scalaire0()0\( x \in \mathbb{R} \)
Vecteur1(n,)1\( \mathbf{v} \in \mathbb{R}^{n} \)
Matrix2(m, n)2\( \mathbf{A} \in \mathbb{R}^{m \times n} \)
Tenseur 3D3(d1, d2, d3)3\( \mathcal{T} \in \mathbb{R}^{d_1 \times d_2 \times d_3} \)

Exercice pratique en Python

Ensuite, nous utilisons NumPy pour créer et inspecter ces structures de données.L’attribut shapeest la clé pour comprendre les dimensions des données.

Exemples

import numpy as np

# Scalaire (tenseur 0-dimensionnel) : shape = ()
scalar = np.array(26)
# Vecteur (tenseur 1-dimensionnel) : shape = (n,)
vector = np.array([22, 23, 24, 26, 28, 30, 31, 29])
# Matrice (tenseur 2-dimensionnel) : shape = (lignes, colonnes)
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# Tenseur 3D : shape = (couches, lignes, colonnes)
tensor_3d = np.array([[[1,2,3],[4,5,6]], [[7,8,9],[10,11,12]]])
# Tenseur 4D : simulation de 3 images monocanal avec des pixels 2x2
batch_images = np.array([
    [[[10],[20]],[[30],[40]]],
    [[[50],[60]],[[70],[80]]],
    [[[90],[100]],[[110],[120]]]
])

print("Scalaire: shape=", scalar.shape, " ndim=", scalar.ndim)
print("Vector: shape=", vector.shape, " ndim=", vector.ndim)
print("Matrix: shape=", matrix.shape, " ndim=", matrix.ndim)
print("3D tensor: shape=", tensor_3d.shape, " ndim=", tensor_3d.ndim)
print("4D tensor: shape=", batch_images.shape, " ndim=", batch_images.ndim)

Sortie :

标量:    shape= ()        ndim= 0
向量:    shape= (8,)      ndim= 1
矩阵:    shape= (2, 3)    ndim= 2
3D 张量: shape= (2, 2, 3) ndim= 3
4D 张量: shape= (3, 2, 2, 1) ndim= 4

Le schéma de l'attribut shape

AttributSignificationScalaireVecteur (8 éléments)Matrice (2×3)3D(2×2×3)
.shapeTaille de chaque dimension()(8,)(2, 3)(2, 2, 3)
.ndimNombre de dimensions = len(shape)0123
.sizeNombre total d'éléments18612

Lors du débogage de code d'apprentissage profond, si vous voyez une erreur d'incompatibilité de shape, la première étape consiste à afficher la shape pour vérifier les dimensions des données.

Comprendre la shape est la première compétence pour apprendre NumPy et tous les frameworks d'apprentissage profond.


Visualisation 3D des tenseurs

Ci-dessous, le tenseur 3×3×3 est représenté par 27 points dans l'espace : les trois axes de coordonnées correspondent à « ligne, colonne, canal », et l'intensité de couleur de chaque point représente la valeur à cette position. Faites glisser la souris pour faire pivoter la vue.

Distribution spatiale d'un tenseur 3×3×3 · Les couleurs plus vives représentent des valeurs plus grandes.

Attention : en gardant la couche « canal » fixe, vous verrez un plan 3×3 — c'est exactement un tenseur du second ordre (une matrice). C'est aussi pourquoi nous disons qu'« une matrice est un cas particulier d'un tenseur ».


Scénarios d'application en IA

Classification d'images : des tenseurs 3D aux tenseurs 4D

Dans la tâche de classification ImageNet, les images d'entrée sont uniformément redimensionnées à 224×224 pixels. Une image en couleur a une shape(224, 224, 3)Le tenseur 3D.

Pendant l'entraînement réel, le GPU traite un batch à la fois (par exemple, 32 images), et les données deviennent un tenseur 4D.(32, 224, 224, 3)。

Notez que différents frameworks ont des conventions différentes de position des canaux : TensorFlow/Keras utilisent(N, H, W, C)(Canaux en dernier), PyTorch utilise(N, C, H, W)(Le passage est tout à l'avant).

Lorsque vous voyez l'erreur « shape mismatch: (32, 224, 224, 3) vs (32, 3, 224, 224) », elle est causée par des positions de canaux incohérentes—utilisez.permute()ou.transpose()Il suffit de l'ajuster.

Traitement du langage naturel : matrices d'embedding

La taille du vocabulaire du modèle BERT est de 30522, et la dimension cachée est de 768. La forme de sa matrice d'embedding de mots est(30522, 768)—Chaque ligne est un vecteur de dimension 768 pour un mot.

Il en va de même pour la série GPT : le vocabulaire de GPT-2 est de 50,257, et la dimension d'embedding varie de 768 (petit modèle) à 1600 (grand modèle).

Lorsque vous saisissez un texte, le modèle consulte d'abord la table pour convertir chaque ID de mot en vecteur d'embedding correspondant ; c'est la « recherche dans la table pour extraire des lignes » — une opération d'indexation matricielle.

Couches entièrement connectées : la position centrale de la multiplication matricielle

Un réseau classique de reconnaissance de chiffres manuscrits MNIST : entrée de 784 dimensions (28×28 pixels aplatis), première couche cachée de 256 dimensions.

La forme de la matrice de poids W₁ est(256, 784)Chaque calcul de propagation avant.h = W₁ @ x, c'est-à-dire une matrice 256×784 multipliée par un vecteur de dimension 784.

La propagation avant de tout le réseau de neurones est essentiellement une alternance de couches de multiplication matricielle et de fonctions d'activation.

Données vidéo : tenseurs 5D

Une vidéo peut être comprise comme une séquence de plusieurs images. Un clip vidéo couleur de 16 images en 224×224 a pour forme(16, 224, 224, 3)。

Après ajout de la dimension de lot, il devient un tenseur 5D.(8, 16, 224, 224, 3)——C'est l'entrée standard pour les modèles de classification vidéo (tels que 3D-ResNet).


Autres extensions