in

Vers une Auto-Attention Autonome en Vision | par Julian Hatzky | Avril 2023


UNE PLONGÉE PROFONDE DANS L’APPLICATION DE L’ARCHITECTURE DES TRANSFORMATEURS ET DE SON OPÉRATION D’AUTO-ATTENTION POUR LA VISION

Dans le domaine de l’apprentissage automatique, l’auto-attention est déjà largement adoptée dans le traitement naturel du langage (NLP) et contribue considérablement aux performances des modèles de pointe. De plus en plus de travaux sont en cours pour obtenir des résultats similaires en vision. Bien qu’il existe des approches hybrides qui combinent par exemple des réseaux de neurones convolutionnels (CNN) avec l’attention ou appliquent des transformations linéaires sur des patchs de l’image, un modèle purement basé sur l’attention est plus difficile à entraîner efficacement en raison de diverses raisons que nous enquêterons plus en détail.

Dans cet article, nous explorerons l’idée d’utiliser un modèle purement basé sur l’attention pour la vision. Nous aborderons également les notions de l’auto-attention globale et locale, ainsi que la manière dont les convolutions locales peuvent être appliquées pour améliorer les performances.

LA NÉCESSITÉ DE L’ATTENTION DANS LA VISION

Les CNN sont couramment utilisés pour construire des réseaux de neurones pour le traitement d’images en raison de leur puissant préalable géométrique d’équivariance à la translation. Ils peuvent gérer efficacement les déplacements relatifs de l’entrée, ce qui les rend robustes.

D’autre part, l’auto-attention n’a pas cette priorité. Elle est plutôt permutativement équivalente, ce qui signifie que si l’entrée est réarrangée, la sortie sera réarrangée de manière équivalente. Bien que la permutativité soit plus générale, elle n’est pas aussi utile pour les images que l’équivariance à la translation.

Heureusement, différentes codifications de position peuvent être utilisées pour contraindre l’opération d’auto-attention et atteindre l’équivariance à la translation. Le codage de position permet d’avoir une architecture plus souple que les CNN tout en étant capable d’incorporer certains préjugés.

LA MISE EN OEUVRE DE BASE DE L’AUTO-ATTENTION

Pour les entrées unidimensionnelles telles que les textes et les paroles, l’opération d’auto-attention à tête unique est définie comme une Attention-Produit-Ponctué escalée telle que celle proposée dans l’article.

Pour les entrées 2D, le bloc mémoire est essentiellement le même que le champ réceptif utilisé dans les CNN, mais au lieu d’utiliser un CNN, nous appliquons l’opération d’auto-attention aux pixels du champ réceptif N.

L’auto-attention pour une sortie spécifique yᵢⱼ peut être définie comme suit dans PyTorch :
“`
import torch
import torch.nn as nn
import torch.nn.functional as F
from einops import rearrange, einsum

device = torch.device(“cuda:0”) if torch.cuda.is_available() else torch.device(“cpu”)

img = torch.randn(1, 3, 28, 28) # placeholder for an RGB image with shapes: batch_size, channels, height, width
k = 3 # spatial extend of the memory block N

q = query(x)
k = key(x)
v = value(x)

scaling_factor = 1/torch.sqrt(torch.tensor(d_k))
scaled_dot_product = F.softmax(einsum(q, k, “b t k, b l k -> b t l”) * scaling_factor, dim=-1 )
self_attention = torch.einsum(‘b i j , b j d -> b i d’, scaled_dot_product, v)
“`

L’AUTO-ATTENTION GLOBALE ET LOCALE

Lorsque nous parlons d’auto-attention globale et locale dans les modèles visuels, nous faisons référence à la quantité d’image sur laquelle le modèle se concentre. L’auto-attention globale prend en compte l’ensemble de l’image à la fois, tandis que l’auto-attention locale ne se concentre que sur certaines parties.

Lorsque nous appliquons l’auto-attention à des images de plus en plus grandes, dont la longueur est approximativement de n²= h*w en raison de leur nature 2D, la complexité d’espace et de temps de l’opération devient de plus en plus importante. C’est une raison pour laquelle les champs réceptifs locaux sont une solution attrayante.

LES CONVOLUTIONS LOCALES

Dans les réseaux de neurones convolutionnels (CNN), nous utilisons des carrés appelés noyaux qui se déplacent sur l’image. Nous choisissons un point central [i, j] sur l’image et une taille de noyau, qui détermine la quantité d’image incluse dans le noyau.

La taille du noyau peut varier entre les couches du réseau. Cela permet au réseau d’apprendre des structures de corrélation locales au sein d’une couche particulière.

Le bloc mémoire comme champ réceptif local en 2D

Pour effectuer l’auto-attention sur une image 2D, les chercheurs de l’article ont inventé un concept de bloc mémoire inspiré du fonctionnement des CNN. Si vous voulez appliquer l’auto-attention de manière globale, vous devez simplement rendre le bloc mémoire aussi grand que toute l’image.

Le bloc mémoire est essentiellement le même que le champ réceptif utilisé dans les CNN, mais au lieu d’utiliser un CNN, nous appliquons l’opération d’auto-attention aux pixels du champ réceptif N.

Pour définir l’opération d’auto-attention à tête unique pour ce cas 2D, nous pouvons utiliser l’équation suivante :
“`
import torch
import torch.nn as nn
import torch.nn.functional as F
from einops import rearrange, einsum

device = torch.device(“cuda:0”) if torch.cuda.is_available() else torch.device(“cpu”)

img = torch.randn(1, 3, 28, 28) # placeholder for an RGB image with shapes: batch_size, channels, height, width
k = 3 # spatial extend of the memory block N

q = query(x)
k = key(x)
v = value(x)

scaling_factor = 1/torch.sqrt(torch.tensor(d_k))
scaled_dot_product = F.softmax(einsum(q, k, “b t k, b l k -> b t l”) * scaling_factor, dim=-1 )
self_attention = torch.einsum(‘b i j , b j d -> b i d’, scaled_dot_product, v)
“`

What do you think?

-1 Points
Upvote Downvote

Written by Barbara

Leave a Reply

Your email address will not be published. Required fields are marked *

PixelPlanner – Découvrez les prochaines sorties de jeux vidéo.

Palantir Skykit | Intelligence and Operations at the Edge