Dans ces domaines d'application, la convolutions est souvent effectuée comme un filtre qui transforme les signaux et les pixels en valeurs plus souhaitables.
Dans l'informatique haute performance, le modèle de convolutions est souvent appelé calcul de stencil. La convolutions implique généralement un nombre important d'opérations arithmétiques sur chaque élément de données. Chaque élément de données de sortie peut être calculé indépendamment les uns des autres, ce qui est souhaitable pour le calcul parallèle. D'autre part, il existe un niveau substantiel de partage des données d'entrée entre les éléments de données de sortie avec des conditions limites quelque peu difficiles. Cela fait de la convolutions un cas d'utilisation important des méthodes de planchage sophistiquées et des méthodes de mise en phase des données d'entrée.
Convolution est une opération d'un tableau où chaque élément de données de sortie est une somme pondérée d'un ensemble d'éléments d'entrée voisins. Les poids utilisés dans le calcul de la somme pondérée sont définis par un tableau de masque d'entrée, communément appelé noyau de convolutions. Nous allons parler de ces matrices de masques comme des masques de convolutions. Le même masque de convolutions est généralement utilisé pour tous les éléments de l'ensemble
Ci-dessous est indiqué un exemple de convolutions pour les données 1D où un tableau de masque de convolutions de 5 éléments M est appliqué à un tableau d'entrée de 7 éléments N.
Pour le traitement d'images et la vision par ordinateur, les données d'entrée sont généralement des matrices bidimensionnelles, avec des pixels dans un espace x-y. Les convolutions d'image sont donc des convolutions en 2D. Le masque ne doit pas être carré.
1. De la convulsion 1D à la convulsion 2D
Vous connaissez la convolutions 1D:
- Input: 1D array (par exemple, `[x0, x1, x2, ...)
- Noyau: petit tableau 1D (par exemple,
[w0, w1, w2]) - Opération: glisser le noyau et prendre des sommes pondérées.
Pour les images, l'entrée est 2D (hauteur × largeur), donc:
- Input: matrice de pixels, forme
H × W - Noyau: petite matrice, par exemple
3 × 3ou5 × 5 - Opération: Placez le noyau sur chaque patch de l'image
3 × 3, multipliez l'élément par voie d'élément, somme → un pixel de sortie.
C'est la même idée que vous connaissez déjà, mais:
- Array → Array 2D (matrice)
- Les pixels voisins en 2D.
Il y a deux. Des canaux multiples (p. ex., RGB)
Les images réelles ne sont pas seulement en 2D, elles ont souvent des canaux:
- Forme:
H × W × C(par exemple,C = 3pour R, G, B). - Ensuite, un noyau a aussi une profondeur
C:- La forme:
kH × kW × C.
- La forme:
étape de convulsion:
- Pour une position, vous prenez un petit cube:
kH × kW × C. - Multipliez par élément avec le noyau
kH × kW × C. - Sumer toutes les valeurs → 1 numéro (une valeur de canal de sortie à cet emplacement).
Donc conceptuellement: convolution 3D sur l'espace + canaux, mais toujours juste summe pondérée de voisins.
3°. Filtres (noyaux) et cartes de fonctionnalités
Dans les CNN, on n'utilise pas un seul noyau; on utilise beaucoup de noyaux:
- Supposons que vous utilisiez différents noyaux.
- Chaque noyau a la forme
kH × kW × C_in. - Chaque noyau produit un canal de sortie, appelé carte des caractéristiques.
Donc si la forme d'entrée est:
H × W × C_in,
et vous utilisez F noyaux, la forme de sortie devient:
H_out × W_out × F.
Chacun de ces canaux de sortie F capture un type différent de schéma:
- Un noyau peut apprendre à détecter les bornes, un autre les coins, un autre les textures, etc.
Réfléchissez: Une couche CNN = appliquer plusieurs convolutions (filtres) différentes sur l'entrée.
4°. Les éclaboussures et les rembourrages
Deux autres détails relatifs au tableau:
- ** Pas:** jusqu'où vous déplacez le noyau à chaque étape.
- Étape 1: déplacer 1 pixel à la fois → sortie dense.
- Étape 2: sauter chaque pixel → plus petite sortie.
- Padding: ajouter des zéros autour de la limite de l'image.
- Sans rembourrage, la sortie devient plus petite.
- Avec le rembourrage, vous pouvez garder la même hauteur/largeur.
Mathématiquement, il s'agit toujours de fenêtres coulissantes et de produits à pointes, mais avec le contrôle de:
- Vous allez jusqu'où ?
- Si vous perdez des informations sur les frontières (padding).
5°. Non linéaire: ajout de fonctions d'activation
Jusqu'à présent, tout est linéaire: des sommes pondérées. Une couche CNN ajoute non-linéaire:
- Après la convolutions, appliquez une fonction d'activation par élément (par exemple,
ReLU(x) = max(0, x)).
Donc une seule couche de conve est:
- Convolution (sommes pondérées linéaires).
- Activation (non linéaire).
Cette combinaison permet aux CNN d'apprendre des cartographies complexes et non linéaires.
6°. Les couches d'empilement → hiérarchies de caractéristiques profondes
Un CNN complet est juste ** plusieurs couches ** de:
- Convolution → activation (→ parfois pooling).
L'intuition:
- ** Les premières couches**: détecter des choses simples (bois, taches).
- ** couches intermédiaires**: combiner en textures, formes.
- Léges ultérieures: combiner les formes en pièces et objets.
Tout cela est toujours construit à partir du même principe que vous comprenez: prenez les quartiers locaux et calculer les sommes pondérées.
7°. Connexion à des couches entièrement connectées (dense)
Une couche entièrement connectée est aussi une somme pondérée:
- Entrée: vecteur 1D.
- Unité de sortie = somme de (poids × entrée) + biais.
La différence:
- Couche dense: chaque unité de sortie utilise ** tous** les éléments d'entrée.
- Couche de convection: chaque unité de sortie utilise uniquement un voisinage local** (connectivité spars) et partage des poids** entre les positions.
Vous pouvez voir les CNN comme:
- Une façon intelligente d' utiliser votre opération de convolutions pour obtenir:
- La localisation (les pixels proches sont plus importants).
- Partage de poids (même noyau dans toutes les positions).
- Moins de paramètres qu'une couche dense sur des images complètes.
Conclusion: de l'exploitation simple aux réseaux puissants
"At each position, take neighbors and compute a weighted sum with a kernel,"
alors vous êtes déjà sur l'idée fondamentale derrière les CNN.
Les CNN prennent ce simple bâtiment et:
- Étendre de l'un des matrices 1D à des tensors 2D / 3D.
- Appliquer de nombreux noyaux différents en parallèle pour produire des cartes de fonctionnalités riches.
- Ajouter des non-linéarités pour échapper à la pure linéarité.
- Ampiler de nombreuses couches de ce type afin que chaque étape soit plus abstraite.
La magie des CNN n'est pas une nouvelle sorte de mathématiques, c'est la composition de nombreuses petites opérations de convolutions locales dans une architecture profonde qui peut apprendre de puissantes représentations visuelles.