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 convulsion 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 l'informatique 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 de 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 2D. Le masque ne doit pas être carré.
1°. De la convulsion 1D à la convulsion 2D
Vous connaissez la convulsion 1D:
- Input: Array 1D (par exemple,
[x0, x1, x2, ...]) - Cernel: 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: Matrice petite, par exemple
3 × 3ou5 × 5 - Opération: Placez le noyau sur chaque patch de l'image
3 × 3, multipliez l'élément selon le mode, 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. Plusieurs canaux (p. ex., RGB)
Les images réelles ne sont pas seulement 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 nombre (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.
- Je suis en train de le faire. Filtres (noyaux) et cartes de caractéristiques
Dans les CNN, vous n'utilisez pas un seul noyau; vous utilisez ** beaucoup**:
- Supposons que vous utilisiez différents noyaux
F. - Chaque noyau a la forme
kH × kW × C_in. - Chaque noyau produit un canal de sortie, appelé carte de fonctionnalités.
Donc si la forme d'entrée est:
H × L × C_in,
et vous utilisez F noyaux, la forme de sortie devient:
H_out × L_out × F.
Chacun de ces canaux de sortie F capture un type différent de modèle:
- 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 liés au tableau:
- ** Pas:** jusqu'où vous déplacez le noyau à chaque étape.
- Étape 1: déplacer 1 pixel à la fois → sortie dense.
- Étape 2: sautez tous les autres pixels → plus petites sorties.
- Padding: ajouter des zéros autour de la limite de l'image.
- Sans rembourrage, la production 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°. Couches d'empilement → hiérarchies de caractéristiques profondes
Un CNN complet est juste ** plusieurs couches ** de:
- Convolution → activation (→ parfois regroupement).
L'intuition:
- ** Les premières couches**: détecter des choses simples (bois, taches).
- ** couches intermédiaires**: les combiner en textures, en formes.
- Légères ultérieures: combiner les formes en pièces et objets d'objet.
Tout cela est toujours construit à partir du même principe que vous comprenez: prenez les quartiers locaux et calculez les montants pondérés.
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 conv: 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 principale derrière les CNN.
Les CNN prennent ce simple bâtiment et:
- Élargissez-le des matrices 1D aux tensors 2D/3D.
- Appliquer de nombreux noyaux différents en parallèle pour produire des cartes de fonctionnalités riches.
- Ajouter des non-linéaires pour échapper à la ligne pure.
- Ampiler de nombreuses couches de ce type afin que chaque étape soit plus abstraite.
La magie des CNN n'est pas un nouveau type de mathématiques, c'est la composition de nombreuses petites opérations de convolutions locales dans une architecture profonde qui peut apprendre des représentations visuelles puissantes.